From 33c795fdd5ef4411ac8992eafad7180a0e25e502 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Fri, 23 Aug 2019 17:25:57 -0400 Subject: [PATCH 01/13] The text grammar of Spaceship game --- .../data/text_grammars/Spaceship.twg | 964 ++++++++++++++++++ 1 file changed, 964 insertions(+) create mode 100644 textworld/generator/data/text_grammars/Spaceship.twg diff --git a/textworld/generator/data/text_grammars/Spaceship.twg b/textworld/generator/data/text_grammars/Spaceship.twg new file mode 100644 index 00000000..a059ce67 --- /dev/null +++ b/textworld/generator/data/text_grammars/Spaceship.twg @@ -0,0 +1,964 @@ +#---------------------------------------------------------------------------------------------------------------------------------- +# GAME DESCRIPTOR GRAMMAR # +#---------------------------------------------------------------------------------------------------------------------------------- +# The organization of this file is as follows: +# 1. Expandables : All required combinations, structures, etc of words, letters, and numbers which are used in the +# whole text of the grammars. Collect them here will avoid from redundant repeats. +# 2. Verbs : All verbs which are used as action or simply as verb in the text are collected. +# 3. Types & Variables : Type of objects and variables of the game are defined and coded. +# 4. Objects Garmmar : The grammar of each object of the game is defined in this section. +# 5. Room Description Grammar: All the texts which are used to describe the game inside different rooms are defined and expanded. +# 6. Instructions Grammar : The grammar of instructions for compound commands, etc are described. + + + +################################################ Expandables ####################################################################### + +## Any type of expandables, such as adjectives, the name of different types of food, brans, materials, etc. are named here. +## During the design of the game, this expandables are like a general dictionary of various types of words which can be used +## in different sections of the grammar design. This list does not include verb type of words. +### +# --- General Expandables ------------------------------------------------------- +ordinary_adj:ordinary;normal;typical;standard;usual +adj_stripped:#simpleadj# +simpleadj:good;bad;small;big;heavy;light;great;terrible;expensive;cheap +hot-adj:super;unreasonably;absurdly;alarmingly;upsettingly +supp_stable:stable;wobbly;unstable;balanced;durable;reliable;solid;undependable;solidly built;an unstable piece of #garbage#;shaky +obj_what:unremarkable;clean;dirty;modern;well-used;brand new;expensive looking;cheap looking +out_in_place:out of place;to fit in;well matched to everything else +food_what:appetizing;delicious;tasty;appealing;delectable;heavenly;inviting;savory;tantalizing;tempting +door_what_is:imposing;sturdy;well-built;durable;robust;rugged;hefty;commanding;manageable;solid +shape:rectangular;cuboid;spherical;formless;non-euclidean +colour:red;blue;chartreuse;purple;violet;orange;yellow;green;brown;teal;cyan +smell:vanilla;lavender;cake;fudge;fresh laundry;soap + +number:0;1;2;3;4;5;6;7;8;9 +bignumber:Thirty;Forty;Fifty;Sixty;Seventy;Eighty;Ninety;A hundred;Two hundred;Three hundred +letter:A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z + +material_type:#metal#;#plastic#;#others# +metal:steel;cementite;iron;aluminum;copper;brass +plastic:plastic +others:card + +fruit:watermelon;melon;honeydew;apple;pear;grape;kiwi;cantaloupe;banana;pear;durian;#berry#berry;berry +can:sardine;mixed beans;chicken;soup;tuna +candy:chocolate bar;gummy bear;candy bar;licorice strip;cookie;power bar +berry:straw;blue;rasp;black;elder;boysen;lingon;huckle;logan;cran;goji;goose + +garbage:garbage;trash;junk + +weight:complicated;heavy;light;weighty;surprisingly heavy;heavier than it looks + +brand:#brandname# style;#brandname# limited edition;#brandname# +brandname:Microsoft;American;Canadian;Henderson's;TextWorld +# << ------------------------------------------------------------------------- >> + + +# --- Fix Expandables ----------------------------------------------------------- +here_alt:here;in the room;in the shuttle room;on the dock;nearby;close by;in the corner;right there by you +here_alt_u:Here;In the room;Nearby;Close by;In the corner;Right there by you +how_see:you #you_what#;you can #you_what# +how_see_u:You #you_what#;You can #you_what# +there_what:is;seems to be +you_what:see;make out +smelltype:an #ansmell#;a #asmell# +ansmell:interesting;awful;intriguing +asmell:hideous;pungent;sickening;terrible;wretched;lovely;great;fine; +upsetwith:upset with;angry about;infuriated by;depressed by;done caring about;upset by;furious with +bignumber:Thirty;Forty;Fifty;Sixty;Seventy;Eighty;Ninety;A hundred;Two hundred;Three hundred +Iknow:I know a;I got this;I have a;You know, I know a;You know, I got a;You know what, I've got a +youknow:You know;Do you know;Did you ever meet;You ever meet + +afriend:person, they work out of #friendplace#,;person;friend;person who works for #friendcompany# +myfriend:they work for #friendcompany# +friendplace:the lab;the space shuttle +friendcompany:the #affiliation# team;the International Space Station; +affiliation: Russian;European;Japanese;USA +friendtype:buddy;pal;friend;good friend;mate; + +cooljob:the astronaut;#friendcompany#;the space craft engineer +expensiveplace:some kind of expensive place;some kind of expensive project +intheblank:in the dump;in a fire;into a pit;into the garbage + +key_metal:#plastic#;#others#;brushed;polished;satin;rusty + + + +begood:good;great;fantastic;a great idea +in_the_(r):in the (r);within the (r);inside the (r) +by_the_syn:with the +init_syn:in it;inside;placed inside +into_syn:into;inside +on_it_syn:on it;upon it +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Container Symbols ----------------------------------------- +it:It;Something about it +reminds_you:reminds you of;looks like;floods your mind with memories of;is reminiscent of;is just like +ofyouryouth:of your youth;that you knew in your youth;that you knew so long ago;that you knew so long ago, in your youth +it_is:It is;You can see that it is;Upon examination, you see that it is +name_var:(name);(name-n), which looks (name-adj),;(name-adj) looking (name-n) +listwithis: [is-are a list of things in the (obj)] +lookthere:Look over there;Wow! look at that +ContentsC-:Contents-;Contained within-;Inside are the following-;Inventory is as follows-;Here's what's inside +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Supporter Symbols ----------------------------------------- +on_it:on it;lying on it;resting on it;upon it +ContentsS-:Contents-;Upon it are displayed the following-;Upon it you may see the following-;Upon it lie the following-;Upon the (name-n) are displayed the following-;Upon the (name-n) you may see the following-;Upon the (name-n) lie the following- +trash:trash;garbage;junk +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Group Symbols --------------------------------------------- +this_the:this;the +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Room Symbols ---------------------------------------------- +dec_find-yourself:You #dec_what# +dec_guess-what:#dec_well-guess#, you are in #dec_a_the# place we're calling #dec_a_the# +dec_well-guess:Guess what;Well how about that;Well I'll be +dec_what:are;find yourself;arrive +dec_a_the:a;the +announce_mood:sorry;pleased;excited;stoked;so happy;honoured;required;obligated +signquality:decrepit;laminated;crooked;framed +sign:sign;placard;signboard;board +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Exit Symbols ---------------------------------------------- +yourthing:thing;bag;style;cup of tea +door_what:leading;facing;heading +unblocked:unblocked;unguarded +# << ------------------------------------------------------------------------- >> + + + + +################################################### Verbs ########################################################################## + +# --- Actions & Verbs ----------------------------------------------------------- +## Actions are actually those verbs which are used in the game by the player. Actions should start with a verb (ie:ensure, make +## sure, etc (these could probably just be a tag)). +### The structure for a verb is as follows, (not necessarily contains all the parts): +### a) (verb): action's instructions; +### b) (verb)_syn_v: synonyms of the verb; they are all in lowercase format, +### c) (verb)_syn_u: Uppercase format (Sentence format) of the synonyms, +### d) (verb)_syn_p: past form of the synonyms +### e) (verb)_syn_pp: past participle form of the synonyms +### f) (verb)ing: the ing-form of the verb + + +# --- Action Verbs -------------------------------------------------------------- +look:look around in (r). + +examine:examine (o|k|f|d|c|s|t). + +inventory:examine your inventory. + +take:#take_syn_v# the #obj_types# from the (r).;#take_syn_v# the #obj_types# that's in the (r). +take_syn_v:take;retrieve;grab +take_syn_pp:taken;got;picked +taking:taking;getting;picking +take/s:#take_syn_v# the #obj_types# from the #on_var#. +take/c:#take_syn_v# the #obj_types# from the #on_var#. + +insert:#insert_syn_v# the #obj_types# #into_syn# the #(c)_var#.;you can #insert_syn_v# the #obj_types# #into_syn# the #(c)_var#. +insert_syn_v:insert;put;place;deposit;attach +insert_syn_u:Insert;Put;Place;Deposit;Attach +insert_syn_p:inserted;put;placed;deposited;attached +insert_syn_pp:inserted;put in;placed;deposited;attached +inserting:inserting;putting in;placeing;depositting;attaching + +eat:#eat_syn_v# the #eat_var#. +eat_syn_u:Eat; +eat_syn_v:eat; +eat_syn_pp:eaten;consumed +eat_syn_p:ate +eating:eating + +open:open the #lock_type_var#.;ensure that the #lock_type_var# is open.;make sure that the #lock_type_var# is #open_var#. +open_syn_v:open; +open_syn_pp:opened;pulled open +opening:opening;pulling open + +close:close the #lock_type_var#.;ensure that the #lock_type_var# is #close_syn_pp#. +close_syn_pp:closed;shut +closing:closing;shutting + +go:#go_syn_v# easily into the space;#go_syn_v# towards the #obj_types#;#go_syn_v# smoothly twards the #obj_types#;#go_syn_v# into the (r) +go_syn_v: go;move;dive;fly;float;propel;wobble;head;go to the; +go_syn_p: went;moved;dived;flew;floated;propelled;wobbled;headed;went to the; +go_syn_u: Go;Move;Dive;Fly;Float;Propel;Wobble;Head;Go to the; +go_syn_pp:gone;moved;dived;flown;floated;propelled;wobbled;headed;gone to the;got +going:going;moving;diving;flying;floating;propelling;wobbling;heading;going to the;getting +go/north:#go_syn_v# north.;#tryto# #go_syn_v# north. +go/south:#go_syn_v# south.;#tryto# #go_syn_v# south. +go/east:#go_syn_v# east.;#tryto# #go_syn_v# east. +go/west:#go_syn_v# west.;#tryto# #go_syn_v# west. +go/north/d:#go_syn_v# through the north (d).;#tryto# #go_syn_v# through the north (d). +go/south/d:#go_syn_v# through the south (d).;#tryto# #go_syn_v# through the south (d). +go/east/d:#go_syn_v# through the east (d).;#tryto# #go_syn_v# through the east (d). +go/west/d:#go_syn_v# through the west (d).;#tryto# #go_syn_v# through the west (d). + +tryto:try to;make an effort to;make an attempt to;attempt to + +unlock:#unlock_key#;#unlock_no_key# +unlock_key:unlock the #lock_type_var# #by_the_syn# (k).;check that the #lock_type_var# is unlocked #by_the_syn# (k).;ensure that the #lock_type_var# is unlocked #by_the_syn# (k).;insert the (k) into the #lock_type_var#'s lock to unlock it. +unlock_no_key:unlock the #lock_type_var#.;ensure that the #lock_type_var# is unlocked. +unlock_syn_pp:unlocked +unlocking:unlocking + +lock:#lock_key#;#lock_no_key# +lock_key:lock the #lock_type_var# #by_the_syn# (k).;make sure that the #lock_type_var# is locked #by_the_syn# (k).;#insert_syn_u# the (k) into the #lock_type_var# to lock it. +lock_no_key:lock the #lock_type_var#.;make sure the #lock_type_var# is locked.;ensure that the #lock_type_var# is locked. +lock_syn_pp:locked +locking:locking + +cook:#cook_syn_v# the #eat_var#;#cook_syn_v# your #eat_var#; +cook_syn_v:cook;hydrate;heat up;prepare +cook_syn_p:cooked;hydrated;heated up;prepared +cook_syn_u:Cook;Hydrate;Heat up;Prepare + +release:#release_syn_v# the #obj_types# from #(s)_var#.;#release_syn_v# the #obj_types# from its hook; +release_syn_v:release;let;disentangle;loose;unfasten;unfix;let loose;unhook;leave;unleash +release_syn_u:Let;Disentangle;Release;Loose;Unfasten;Unfix;Let loose;Unhook;Leave;Unleash +release_syn_p:let;disentangled;released;loosed;unfastened;unfixed;let loose;unhooked;left;unleashed +release_syn_pp:let;disentangled;released;loosed;unfastened;unfixed;let loose;unhooked;left;unleashed +releasing:letting;disentangling;releasing;loosing;unfastening;unfixing;unhooking;unleashing + +communicate: #communicate_syn_v# your message with (r) +communicate_syn_v:communicate;talk;call;transmit +communicate_syn_p:communicated;talked;called;transmitted +communicate_syn_u:Communicate;Talk;Call;Transmit +# << ------------------------------------------------------------------------- >> + + +# --- General Verbs ------------------------------------------------------------- +wait:Wait + +do_syn_v:manage;do;accomplish;get around to doing;finish;succeed at;get through with + +exciting:exciting;fast paced;life changing;profound + +force_open_syn_v:break;crack;destroy + +looks_seems_syn_v:looks;seems;appears;appears to be;would seem to be;seems to be;looks;seems;appears + +can_should:can;should;should be able to;may + +enter_syn_p:entered;walked into;fallen into;moved into;stumbled into;come into;fly into;fly over + +walk_into_syn_v:walk into;show up in;saunter into;come round;space-walk;space-walk into +walk_into_syn_p:walked into;shown up in;sauntered into;space-walked;space-walked into + +launched_into_syn_v:launched;blasted off + +contain_syn_v:contains;has;is filled with;reveals inside it;holds;shelters;offers you;reveals to you +contain_syn_p:contained;#hold_syn_p#;had;had in it;revealed;concealed;sheltered;offered you;revealed to you;guarded;protected + +findin_syn_p:in;found in + +hold_syn_p:held;carried;had;presented;held up;was used to support +# << ------------------------------------------------------------------------- >> + + + +############################################## Types & Variables ##################################################################### + +# --- Types, Word Synonyms & Variables -------------------- +## * Types +obj_types:(o|k|f) +obj_types_no_key:(o|f) +on_types:(c|s) +lock_types:(c|d) +eat_types:(f) +close_open_types:(d|c) + +## * Variables +lock_type_var:#lock_types#;#lock_types# #in_the_(r)# +(s)_var:(s);(s) #in_the_(r)# +(c)_var:(c);(c) #in_the_(r)# +on_var:#on_types#;#on_types# #in_the_(r)# +eat_var:#eat_types#;#eat_types# +open_var:opened;open;wide open;ajar +# << ------------------------------------------------------------------------- >> + + +############################################## Objects Garmmar ##################################################################### + +# --- Player -------------------------------------------------------------------- +## These values are typically empty +### +(P):#(P)_adj# | #(P)_noun# +(P)_noun:None +(P)_adj:None +# << ------------------------------------------------------------------------- >> + + +# --- Rooms --------------------------------------------------------------------- +## List each type of room with a ';' between each +## Each roomType must have specific rooms +### Creating a room: first, take the name of the roomtype as listed under #room_type# (which we'll call X for now). create three symbols with this: X_(r), X_(r)_noun, and X_(r)_adj. X_(r) will always be composed of X_(r)_adj | X_(r)_noun. If you want to subdivide a roomtype into two or more variants, you can add _type1, _type2, etc at the end of the noun and adj symbols. make sure that these changes are also accounted for in the X_(r) token, see below for examples + +room_type:clean;cook;rest;work;storage + +(r):#(r)_adj# | #(r)_noun# +(r)_noun:sleep station;crew cabin;washroom;closet;kitchenette;module;lab;lounge +(r)_adj:nondescript;plain + +### > Clean Room +clean_(r):#clean_(r)_adj_type_1# | #clean_(r)_noun_type_1# +### >> Cleaning Self +clean_(r)_noun_type_1:washroom;bathroom;restroom;toilett +clean_(r)_adj_type_1:spotless;clean;cramped;small + +### > Storage Room +storage_(r):#storage_(r)_adj# | #storage_(r)_noun# +storage_(r)_noun:closet;spare room +storage_(r)_adj:spacious;roomy;cramped;stuffed;messy;forgotten;ugly;gloomy + +### > Cook Room +cook_(r):#cook_(r)_adj# | #cook_(r)_noun# +cook_(r)_noun:kitchen;kitchenette +cook_(r)_adj:#hot-adj# hot;steamy;hot;sweaty + +### > Rest Room +### >> Sleep Room +rest_(r):#rest_(r)_adj_type_1# | #rest_(r)_noun_type_1#;#rest_(r)_adj_type_2# | #rest_(r)_noun_type_2# +rest_(r)_noun_type_1:sleep station;sleep station;sleep station;sleeping bag;crew cabin +rest_(r)_adj_type_1:cozy;relaxing;pleasant;sleepy +### >> fun with friends +rest_(r)_noun_type_2:lounge;playroom;recreation zone;crew cabin;crew cabin;crew cabin +rest_(r)_adj_type_2:fun;entertaining;exciting;well lit;silent + +### > Work Room +### >> At spaceshuttle +work_(r):#work_(r)_adj_type_1# | #work_(r)_noun_type_1#;#work_(r)_adj_type_2# | #work_(r)_noun_type_2# +work_(r)_noun_type_1:module;module;lab;lab;lab;control module;service module;maintenance;radars +work_(r)_adj_type_1:silent;austere;serious;still;cramped;stuffed +### >> At Earth +work_(r)_noun_type_2:office;mission control +work_(r)_adj_type_2:silent;huge;serious;still;stressful;noisy +# << ------------------------------------------------------------------------- >> + + +# --- Containers ---------------------------------------------------------------- +## Each roomType must has specific containers +## container descriptions work like room descriptions, except the (r) is replaced by a (c) +(c):#(c)_adj_noun# +(c)_adj_noun:#(c)_adj# | #(c)_noun# +(c)_noun:chest;box;safe;locker +(c)_adj:sturdy;nice;ugly; + +### > Clean Container +clean_(c):#clean_(c)_adj_type_1# | #clean_(c)_noun_type_1#;#clean_(c)_adj_type_2# | #clean_(c)_noun_type_2# +### >> Clean Container Type 1 +clean_(c)_noun_type_1:cabinet;cabinet;cabinet;basket;box;box;box;safe;case +clean_(c)_adj_type_1:stained;spotless;plain;zipped;sturdy +### >> Clean Container Type 2 +clean_(c)_noun_type_2:drawer;cabinet +clean_(c)_adj_type_2:#material_type# case + +### > Storage Container +storage_(c):#storage_(c)_adj# | #storage_(c)_noun# +storage_(c)_noun:toolbox;chest;safe;locker;coffer;cabinet;crate;case;suitcase +storage_(c)_adj:rusty;neglected;brand new,sturdy + +### > Cook Container +cook_(c):#cook_(c)_adj# | #cook_(c)_noun# +cook_(c)_noun:fridge;refrigerator;freezer;cabinet +cook_(c)_adj:fancy;big;small;stuffed + +### > Rest Container +rest_(c):#rest_(c)_adj# | #rest_(c)_noun# +rest_(c)_noun:chest;box;locker;coffer;suitcase +rest_(c)_adj:new;dusty;clean;amazing + +### > Work Container +work_(c):#work_(c)_adj# | #work_(c)_noun# +work_(c)_noun:box;safe;locker;coffer;case;toolbox;display +work_(c)_adj:iron;rusty;high-tech +# << ------------------------------------------------------------------------- >> + + +# --- Doors --------------------------------------------------------------------- +## The (r) is now has a (d), and you shouldn't create room-specific door types +(d):#(d)_adj# | #(d)_noun# +(d)_adj:#material_type#;material +(d)_noun:door;portal;gate;passageway;gateway;hatch +# << ------------------------------------------------------------------------- >> + + +# --- Supporters ---------------------------------------------------------------- +## Each roomType must has specific supporters +## Like containers, but with a (s) +(s):#(s)_adj# | #(s)_noun# +(s)_noun:shelf;table;pedestal;slab +(s)_adj:#(o)_adj# + +### > Clean Supporter +clean_(s):#clean_(s)_adj# | #clean_(s)_noun# +clean_(s)_noun:board;shelf;rack; +clean_(s)_adj:dusty;cramped;messy;shiny + +### > Storage Supporter +storage_(s):#storage_(s)_adj# | #storage_(s)_noun# +storage_(s)_noun:shelf;rack;stand +storage_(s)_adj:rusty;shoddy;splintery;rough + +### > Cook Supporter +cook_(s):#cook_(s)_adj# | #cook_(s)_noun# +cook_(s)_noun:counter;board;shelf;rack;plate;bowl;platter;saucepan +cook_(s)_adj:greasy;soaped down;filthy;messy + +### > Rest Supporter +rest_(s):#rest_(s)_adj# | #rest_(s)_noun# +rest_(s)_noun:sleep bag;sleep bag;sleeping bag;sleeping bag;shelf;laptop hanger;laptop stand +rest_(s)_adj:comfy;warm;worn-out + +### > Work Supporter +work_(s):#work_(s)_adj# | #work_(s)_noun# +work_(s)_noun:stand;table;chair;desk;stand;dashboard;control panel +work_(s)_adj:stern;solid;worn;gross +# << ------------------------------------------------------------------------- >> + + +# --- Objects ------------------------------------------------------------------ +## Each roomType must have specific objects +## (s) --> (o) Very useful to create multiple subtypes to avoid inappropriate or awkward adjective pairing +(o):#(o)_adj# | #(o)_noun# +(o)_noun:pencil;pen +(o)_adj:new;old;used;dusty;clean;large;small;fancy;plain;ornate;contemporary;modern;dirty;simple;hefty;modest;austere + +### > Clean objects +clean_(o):#clean_(o)_adj_type_1# | #clean_(o)_noun_type_1#;#clean_(o)_adj_type_2# | #clean_(o)_noun_type_2#;#clean_(o)_adj_type_3# | #clean_(o)_noun_type_3# +clean_(o)_noun:#clean_(o)_noun_type_1#;#clean_(o)_noun_type_2#;#clean_(o)_noun_type_3# +clean_(o)_adj:#clean_(o)_adj_type_1#;#clean_(o)_adj_type_2#;#clean_(o)_adj_type_3# +### >> appliances +clean_(o)_noun_type_1:vacuum;wet napkins;paper toillet +clean_(o)_adj_type_1:new;old;clean;large;small;plain;ornate;contemporary;dirty;elegant;immaculate;simple;hefty +### >> paperproducts +clean_(o)_noun_type_2:paper towel;paper toillet;sponge +clean_(o)_adj_type_2:new;old;used;dusty;torn;ripped;dirty;clean;large;small;fancy;plain;ornate;elegant;immaculate;simple;hefty;modest;decorated;austere;embroidered +### >> non-disposable +clean_(o)_noun_type_3:napkin;towel;shirt;sock;sponge +clean_(o)_adj_type_3:new;old;used;dusty;clean;large;small;fancy;plain;dirty;elegant;tacky + +### > Storage objects +storage_(o):#storage_(o)_adj_type_1# | #storage_(o)_noun_type_1#;#storage_(o)_adj_type_2# | #storage_(o)_noun_type_2# +storage_(o)_noun:#storage_(o)_noun_type_1#;#storage_(o)_noun_type_2# +storage_(o)_adj:#storage_(o)_adj_type_1#;#storage_(o)_adj_type_2# +### >> clothing +storage_(o)_noun_type_1:shirt;sock;shoe;glove;hat;scarf;cloak;top hat;pair of pants +storage_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;contemporary;modern;dirty;elegant;immaculate;simple;modest;gaudy;fashionable;tacky +### >> appliances +storage_(o)_noun_type_2:lightbulb;pair of headphones;lampshade;frisbee +storage_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;modern;dirty;elegant;immaculate;simple;hefty;modest;off brand;useless;broken + +### > Cook objects +cook_(o):#cook_(o)_adj_type_1# | #cook_(o)_noun_type_1#;#cook_(o)_adj_type_2# | #cook_(o)_noun_type_2#;#cook_(o)_adj_type_3# | #cook_(o)_noun_type_3# +cook_(o)_noun:#cook_(o)_noun_type_1#;#cook_(o)_noun_type_2#;#cook_(o)_noun_type_3# +cook_(o)_adj:#cook_(o)_adj_type_1#;#cook_(o)_adj_type_2#;#cook_(o)_adj_type_3# +### >> utensil +cook_(o)_noun_type_1:fork;knife;spoon;spork;teaspoon +cook_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere;plastic +### >> cooking appliance +cook_(o)_noun_type_2:napkin;whisk;ladle;blender;kettle;teapot;MW +cook_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere;fancy;broken +### >> vessel/plate +cook_(o)_noun_type_3:mug;bowl;teacup;glass;coffee cup +cook_(o)_adj_type_3:new;old;used;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;chipped + +### > Rest objects +rest_(o):#rest_(o)_adj_type_1# | #rest_(o)_noun_type_1#;#rest_(o)_adj_type_2# | #rest_(o)_noun_type_2#;#rest_(o)_adj_type_3# | #rest_(o)_noun_type_3# +rest_(o)_noun:#rest_(o)_noun_type_1#;#rest_(o)_noun_type_2#;#rest_(o)_noun_type_3# +rest_(o)_adj:#rest_(o)_adj_type_1#;#rest_(o)_adj_type_2#;#rest_(o)_adj_type_3# +### >> screen +rest_(o)_noun_type_1:laptop;tablet;monitor +rest_(o)_adj_type_1:shiny;widescreen;shut off;flat-screen +### >> electronic +rest_(o)_noun_type_2:controller;dvd;cd;lamp;laptop +rest_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;fancy +### >> comfortable things +rest_(o)_noun_type_3:pillow;sleep bag +rest_(o)_adj_type_3:cozy;comfy;comfortable;plush;frilly;nice;small;big;heavy;cute + +### > Work objects +work_(o):#work_(o)_adj_type_1# | #work_(o)_noun_type_1#;#work_(o)_adj_type_2# | #work_(o)_noun_type_2# +work_(o)_noun:#work_(o)_noun_type_1#;#work_(o)_noun_type_2# +work_(o)_adj:#work_(o)_adj_type_1#;#work_(o)_adj_type_2# +### >> utensil +work_(o)_noun_type_1:pen;pencil;staple;notebook;cd;book;backup calendar +work_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;ornate;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere +### >> electronic +work_(o)_noun_type_2:printer;laptop;telephone +work_(o)_adj_type_2:fancy;broken;operational;working + +## * Object Descriptor Functions +(P)_desc:It's you. +(c)_desc:The (name) looks strong, and impossible to #force_open_syn_v#. +(s)_desc:The (name) is #supp_stable#. +(o)_desc:The (name) is #obj_what#.;The (name) #looks_seems_syn_v# #out_in_place# here +(f)_desc:The (name) looks #food_what#.;that's a (name-adj) (name-n)!;You couldn't pay me to eat that (name-adj) thing.;You are starving (name), the food is #food_what# yeah?! But you can't eat that, sorry!! +(k)_desc:The (name) is cold to the touch;The (name) is #weight#.;The metal of the (name) is #key_metal#.;The (name) looks useful +(d)_desc:The (name) looks #door_what_is#.;it's a #door_what_is# (name-n);it is what it is, a (name) +# << ------------------------------------------------------------------------- >> + + +# --- Foods --------------------------------------------------------------------- +## Each roomType must have specific food +## The below should work as an expandable food pyramid. This can be made room specific. + +### > Base food +(f):#(f)_adj# | #(f)_noun# +(f)_adj:#(f)_adj_good#;#(f)_adj_bad#;#(f)_adj_neutral# +(f)_adj_good:fresh;soft;chilled;organic +(f)_adj_bad:aging;half-eaten;rotting +(f)_adj_neutral:dehydrated;dehydrated;frozen;large;small;tiny;hefty;sizable;dried;dry;pureed +(f)_noun:#(f)_noun_fresh#;#(f)_noun_preserved#;#(f)_noun_dehydrated#;(f)_noun_snack +(f)_noun_fresh:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein#;#(f)_noun_dairy#;#(f)_noun_nuts# +(f)_noun_preserved:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein#;#(f)_noun_dairy#;#candy#;#can#; +(f)_noun_dehydrated:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein# +(f)_noun_snack:cheetoz;corn sticks;nacho cheese tortilla;donut;fruit chew;cheese puff;#candy# +(f)_noun_fruit:#fruit# +(f)_noun_vegetable:broccoli;carrot;cucumber;onion;garlic clove;potato;cabbage;cauliflower;pizza;salad +(f)_noun_grain:loaf of bread;sandwich +(f)_noun_protein:;legume;cashew;peanut;burger +(f)_noun_dairy:stick of butter;fondue +(f)_noun_nuts:pistachio;walnut;almond;raisin + +### > Clean food +clean_(f):#(f)# + +### > Storage food +storage_(f):#(f)# + +### > Cook food +cook_(f):#(f)# + +### > Rest food +rest_(f):#(f)# + +### > Work food +work_(f):#(f)# +# << ------------------------------------------------------------------------- >> + + +# --- Keys ---------------------------------------------------------------------- +## Each roomType must have specific keys +(k):#(k)_adj# | #(k)_noun# +(k)_adj:digital;magnetic;digital;magnetic;iron;brass;metal;rusty;steel;aluminum;copper +(k)_noun:key;keycard;latchkey;passkey + +## * Unique-use Key Match Adjective +## These adjectives CANNOT be used elsewhere! +clearancelevel:type #number#;type #letter#;#brand#;#brand#;#brand#;#shape#;#shape#;#shape#;#smell# scented; +(k<->d)_match:#(k)_adj# | #clearancelevel# #(k)_noun# <-> #(d)_adj# | #clearancelevel# #(d)_noun#; #colour# | #(k)_noun# <-> #colour# | #(d)_noun# +(k<->c)_match:#(k)_adj# | #clearancelevel# #(k)_noun# <-> #(c)_adj# | #clearancelevel# #(c)_noun#; #colour# | #(k)_noun# <-> #colour# | #(c)_noun# +# << ------------------------------------------------------------------------- >> + + +# --- Keys ---------------------------------------------------------------------- +### +openable_desc:[if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if];[if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if] +on_desc:On the (name), is [a list of things on the (obj)].;You can see [list of things on the (obj)] on the (name);this (name) has the following upon it, [list of things on the (obj)];you gaze in terror at the [list of things on the (obj)] that lie upon this very (name)!; "now why" you think, "am I looking at [list of things on the (obj)] on this (name)?" +# << ------------------------------------------------------------------------- >> + + + +########################################## Room Descriptor Grammar ################################################################# + +# --- Greetings ----------------------------------------------------------------- +## Text for starting the game. ex: "Greetings, you are now in the messy sleep station" +### +dec:#GREETING# #dec_type##suffix_(r)#;#dec_type##suffix_(r)# +GREETING:GREETING!;GREETINGS TREKKIE!;HELLO ASTRONAUT!;ALRIGHT THEN!; HEY TREKKIE +# << ------------------------------------------------------------------------- >> + + +# --- Room Intro ---------------------------------------------------------------- +## Text for introducing the room. +### +## * Room Intro Blocks +dec_type:#reg-0#;#normal-0#;#difficult-0#;#moredifficult-0#;#playful-0# +reg-0:#01#;#02#;#03# +normal-0:#04# +difficult-0:#05# +moredifficult-0:#06# +playful-0:#07#;#08#;#09#;#010#;#011#;#012#;#013#;#014#;#015#;#016#;#017#;#018#;#019#;#020#;#021#;#022# + +## * Room Intro Templates +01:#dec_find-yourself# in a (name);#dec_guess-what# (name) +02:Well, here we are in #dec_a_the# (name) +03:You're now in #dec_a_the# (name) +04:You've entered a (name);You've just #walk_into_syn_p# a (name) +05:#dec_find-yourself# in a (name-n). A (name-adj) one +06:#dec_find-yourself# in a (name-n). A (name-adj) kind of space at the craft +07:I am sorry to announce that you are now in the (name) +08:Ah, the (name-n). This is some kind of (name-n), really great (name-adj) vibes in this place, a wonderful (name-adj) atmosphere. And now, well, you're in it +09:This might come as a shock to you, but you've just #enter_syn_p# a (name) +010:I am #announce_mood# to announce that you are now in the (name) +011:You've #enter_syn_p# a (name-adj) room of the spaceship. Your mind races to think of what kind of room would be (name-adj). And then it hits you. Of course. You're in the (name) +012:Of every (name-n) you could have #walk_into_syn_p#, you had to #walk_into_syn_v# a (name-adj) one +013:You have #enter_syn_p# a (name-n) in the capsule. Not the (name-n) you'd expect. No, this is a (name) +014:You are in a (name-n). It seems to be pretty (name-adj) here +015:You #dec_what# in a (name-adj) kind of place at this spaceship. That is to say, you're in a (name-n) +016:If you're wondering why everything seems so (name-adj) all of a sudden, it's because you've just #walk_into_syn_p# the (name) +017:You make a grand eccentric entrance into a (name);You make another one of your grand eccentric entrances into a (name) +018:Look at you, bigshot, walking into a (name) like it isn't some huge deal +019:Look around you. Take it all in. It's not every day someone gets to be in a (name) +020:A #signquality# #sign# tells you that you are now in the (name);Look at that #sign#! What does it say? It says (name) Module? Well that's cool +021:This just in- You, in the (name);Welcome to the (name) of Discovery space shuttle;Wow! You're on the pad of Discovery, basically in the (name);Here we are in the (name);You've entered a (name);This (name-n) you have just entered is definitely (name-adj) +022:If you're wondering why everything seems so weird all of a sudden, it's because you've just #launched_into_syn_v#, the space with no gravity anymore +# << ------------------------------------------------------------------------- >> + + +# --- Inform7 Snippets ---------------------------------------------------------- +## Shouldn't need to be messed with. These are shortcuts for when you need to use i7 code. Probably a bad idea to include symbols or tokens inside these +### +i7_closed/open:[if (obj) is open]an open[otherwise]a closed[end if] +i7_list_in:[a list of things in the (obj)] +i7_list_on:[a list of things on the (obj)] +i7_empty:[if (obj) contains nothing]an empty[otherwise]a[end if] +inform7:[if (obj) is locked]a locked[else if (obj) is open]an opened[otherwise]a closed[end if] +inform7A:[if (obj) is locked]A locked[else if (obj) is open]An opened[otherwise]A closed[end if] +inform7noa:[if (obj) is locked]a locked[else if (obj) is open]an opened[otherwise]a closed[end if] +inform7noun:[if (obj) is locked]locked[else if (obj) is open]opened[otherwise]closed[end if] +inform7nounnoa:[if (obj) is locked]locked[else if (obj) is open]opened[otherwise]closed[end if] +# << ------------------------------------------------------------------------- >> + + +# --- Prefixes ------------------------------------------------------------------ +## To be affixed before object descriptions. Keep away from doors. Prefixes start with a uppercase letter and end with "a" +### +prefix:You see a gleam over in a corner, where you can see a;What's that over there? It looks like it's a;You scan the room, seeing a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;You smell #smelltype# smell, and follow it to a;Were you looking for a (name-n)? Because look over there, it's a;You scan the room for a (name-n), and you find a;You hear a noise behind you and spin around, but you can't see anything other than a;Look out! It's a- oh, never mind, it's just a;Look over there! a;Oh, great. Here's a;Hey, want to see a (name-n)? Look over there, a;If you haven't noticed it already, there seems to be something there by the wall, it's a;When you freely float, you notice a;Oh wow! Is that what I think it is? It is! It's a;You are pushed against the wall, inadvertently pressing a secret button. The wall opens up to reveal a;You see a;As if things weren't amazing enough already, you can even see a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a +# << ------------------------------------------------------------------------- >> + + +# --- Suffixes ------------------------------------------------------------------ +## To be affixed after object descriptions. Keep away from doors. Keep in mind a suffix is usually (but not always) followed by a prefix. Suffixes start with punctuation and +## end with a period (or exclamation/question mark). +### +suffix_meta:. There's something about an object in a module that's just so... TextWorld.;. You can't really describe the (name-n) besides that it's (name-adj).;. Does this look like anything mentioned in the instructions?;. What a great pairing of adjectives and nouns!;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on. +suffix_fulfillment:. A (name-n)... Is that really what you were looking for?;. Is this it? Is this what you came to TextWorld to see? a (name-n)?;. Hmm. You always thought you'd be more excited to see a (name-n) in a spaceship module.;. Is this what you came to TextWorld for? This... (name-n)?;. You look around you, at all the containers and supporters, doors and objects, and you think to yourself. Why? Why Textworld? +suffix_(r):. Okay, just remember what is your mission here to do, and everything will go great.;. You try to gain information on your surroundings by using a technique you call 'looking.';. You can barely contain your excitement.;. The room seems oddly familiar, as though it were only superficially different from the other rooms in the spacecraft.;. You decide to just list off a complete list of everything you see in the module, because hey, why not?;. I guess you better just go and list everything you see here.;. You start to take note of what's in the module.;. You decide to start listing off everything you see in the module, as if you were in a text adventure.;. The module is well lit.;. You begin to take stock of what's here.;. Let’s list all the required tools here for the mission.;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# + +## * Cut for length +suffix:.;. You shudder, but continue examining the module.;. You wonder idly who left that here.;. Now why would someone leave that there?;. There's something strange about this being here, but you can't put your finger on it.;. There's something strange about this thing being here, but you don't have time to worry about that now.;. Huh, weird.;, so there's that.;!;. Hmmm... what else, what else?;. Wow, isn't TextWorld just the best?;. I mean, just wow! Isn't TextWorld just the best?;. You can't wait to tell the folks at mission control hall about this!;. Something scurries by right in the corner of your eye. Probably nothing.;. You idly wonder how they came up with the name TextWorld for this place. It's pretty fitting.;. Suddenly, you bump your head on the ceiling, but it's not such a bad bump that it's going to prevent you from looking at objects and even things.;. Now that's what I call TextWorld!;. Classic TextWorld.;. The light flickers for a second, but nothing else happens.;.;.;.;#emptymainperiod#;#emptymainperiod#;#emptymainperiod#;#suffix_fulfillment#;#suffix_meta# + +## * Multi suffixes need to be more flexible than normal ones +suffix-multi:.;. You shudder, but continue examining the room.;. You wonder idly who put this stuff here.;. There's something strange about this stuff being here, but you can't put your finger on it.;. There's something strange about this stuff being here, but you don't have time to worry about that now.;. Huh, weird.;, so there's that.;, so why not take a picture, it'll last longer!;. It doesn't get any more TextWorld than this!;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# +suffix_(s)_mid:.;. You shudder, but continue examining the (name-n).;. You wonder idly who left that here.;. Now why would someone leave that there?;#suffix_meta#;. Why don't you take a picture of it, it'll last longer!;!;. Wow, isn't TextWorld just the best?;. I guess it's true what they say, if you're looking for a (name-n), go to TextWorld.;. What a coincidence, weren't you just thinking about a (name-n)?;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# +suffix_(s)_end:.;. Check and see you cannot remove them.;. You shudder, but continue examining the room.;. There's something strange about this being here, but you can't put your finger on it.;. There's something strange about this thing being here, but you don't have time to worry about that now. You have more important mission!;. Huh, weird.;, so there's that.;. Hmmm... what else, what else?;. I mean, just wow! Isn't TextWorld just the best?;. You can't wait to tell the folks at home about this!;. Something scurries by right in the corner of your eye. Probably nothing.;. You idly wonder how they came up with the name TextWorld Spaceship for this place. It's pretty fitting.;. Suddenly, you bump your head on the ceiling, nogravity ha?! but it's not such a bad bump that it's going to prevent you from looking at objects and even things.;. Wow! Just like in the StartWar movies!;. It doesn't get more TextWorld than this!;. Now that's what I call TextWorld!;. Classic TextWorld.;#suffix#;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# +suffix_(s)_end_angry:. You move on, clearly #upsetwith# TextWorld.;. You move on, clearly #upsetwith# your TextWorld experience.;. Sometimes, just sometimes, TextWorld can just be the worst.;. What's the point of an empty (name-n)?;. Hopefully this doesn't make you too upset.;. You make a mental note to not get your hopes up the next time you see a (name-n) in a room.;. ;. Hopefully, this discovery doesn't ruin your TextWorld experience!;. Silly (name-n), silly, empty, good for nothing (name-n).;. You think about smashing the (name-n) to bits, throwing the bits #intheblank#, etc, until you get bored.;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n)! oh well.;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, and here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# +# << ------------------------------------------------------------------------- >> + + +# --- Separators Description ---------------------------------------------------- +## Used to separate the description of different object types + +## * Container Descriptions +### Rules for Container Descriptions +### Good idea to subdivide these into difficulty levels +### room_desc_(c): generates all container descriptions +### containerdescription: contains all physical exterior descriptions of containers +### room_desc_(c)_1_name: describes the container as an adj+noun +### room_dec_(c)_1_noun: describes the container as a noun +### room_desc_(c)_content: decides if we append a description of the container's contents depending on if the container is open or closed +### opencontainer:what is appended if the container is open +### room_desc_(c)_2_adj: adds an adjective and a list of contents (creates doubled adjectives?) +### room_desc_(c)_2: list of contents without an adjective +### +room_desc_(c):#containerdescription##room_desc_(c)_content# + +containerdescription:#room_desc_(c)_1_name#;#room_desc_(c)_1_noun# + +room_desc_(c)_1_name:#reg-a#;#normal-a#;#difficult-a#;#moredifficult-a#;#playful-a# +reg-a:#a1#;#a2# +normal-a:#a3#;#a4#;#a5# +difficult-a:#a6# +moredifficult-a:#reg-a# +playful-a:#reg-a# + +room_desc_(c)_1_noun:#reg-b#;#normal-b#;#difficult-b#;#moredifficult-b#;#playful-b# +reg-b:#b1#;#b2# +normal-b:#b3#;#b4#;#b5# +difficult-b:#reg-b# +moredifficult-b:#reg-b# +playful-b:#reg-b# + +room_desc_(c)_content:[if (obj) is open and there is something in the (obj)] #opencontainer##suffix#[end if][if (obj) is open and the (obj) contains nothing] #emptyreaction#[end if] +emptyreaction:The (name-n) is empty, what a horrible day!;The (name-n) is empty! What a waste of a day!;The (name-n) is empty! This is the worst thing that could possibly happen, ever!;Empty! What kind of nightmare TextWorld is this?;What a letdown! The (name-n) is empty! + +opencontainer:The (name) contains #i7_list_in# + +room_desc_(c)_2_adj:#c1#;#c2#;#c3#;#c4#;#c5#;#c6#;#c7#;#c8#;#c9# + +room_desc_(c)_2:#d0#;#d1#;#d2#;#d3#;#d4# + +room_desc_(c)_multi_noun:#e1# +room_desc_(c)_multi_open_noun:#f1#;#f2#;#f3#;#f4#;#f5#;#f6# + +room_desc_(c)_multi_adj:#g1# +room_desc_(c)_multi_open_adj:#h1#;#h2#;#h3#;#h4# + +## * Container Description Templates +### +### # A # +a1:#how_see# #inform7# (name).;#a6# +a2:#how_see# #inform7# #name_var# #here_alt#.;#a6# +a3:#inform7A# #name_var# is #here_alt#.;#a6# +a4:#a1#;#a6# +a5:#a2#;#a6# +a6:#prefix# (name)#suffix# + +### # B # +b1:#how_see# #inform7# (name-n).;#b5# +b2:#how_see# #inform7# (name-n) #here_alt#.;#b5# +b3:#inform7A# (name-n) is #here_alt#.;#b5# +b4:#b1#;#b5# +b5:#prefix# (name-n)#suffix# + +### # C # +c1:#it_is# (name-adj), and #contain_syn_v# #i7_list_in#. +c2:#it_is# (name-adj). Also, there #listwithis# in it. +c3:#c1# +c4:#ContentsC-# [list of things in the (obj)]. +c5:there [is|are] [a list of things in the (obj)] in this silly (name-adj) thing. +c6:#c9# +c7:#c9# +c8:Let's see what's inside - #i7_list_in#. +c9:#it# #reminds_you# the containers #ofyouryouth#. Oh, how they also #contain_syn_p# #i7_list_in#. + +### # D # +d0:the (name) contains #i7_list_in#. +d1:It #contain_syn_v# #i7_list_in#.;There is #i7_list_in# in it. +d2:There #listwithis# #findin_syn_p# it. +d3:You can see #i7_list_in# in the (name-n). +d4:In it, you can see #i7_list_in#. + +### # E # +e1:[if (obj) is open]#room_desc_(c)_multi_open_noun#.[else if (obj) is locked]The (name-n) is locked.[otherwise]The (name-n) is closed.[end if] + +### # F # +f1:The (name-n) #contain_syn_v# #i7_list_in# +f2:There #listwithis# #findin_syn_p# the (name-n) +f3:You can see #i7_list_in# in the (name-n) +f4:#f5#;#f6# +f5:#f6# +f6:The (name-n) #reminds_you# the containers #ofyouryouth#. Oh, how they also #contain_syn_p# #i7_list_in# + +### # G # +g1:[if (obj) is open]#room_desc_(c)_multi_open_adj#.[else if (obj) is locked]The (name-adj) one is locked.[otherwise]The (name-adj) one is closed.[end if] + +### # H # +h1:The (name-adj) one #contain_syn_v# #i7_list_in# +h2:There #i7_list_in# #findin_syn_p# the (name-adj) one +h3:You can see #i7_list_in# in the (name) +h4:In the (name-adj) one, you can see #i7_list_in# + +## * Supporter Descriptions +### Similar to Container descriptions, but without open/close or lock/unlock +### room_desc_(s): hub +### room_desc_(s)_1_noun : description of supporter without adjective. Paired with--> room_desc_(s)_2_adj +### room_desc_(s)_1_name : same as above, but with an adjective +### room_desc_(s)_2_adj : adjective for supporter plus a list of things on it +### room_desc_(s)_2: +### +room_desc_(s):#room_desc_(s)_1_noun# #room_desc_(s)_2_adj#;#room_desc_(s)_1_name# #room_desc_(s)_2# + +room_desc_(s)_1_noun:#prefix# floating (name-n)#suffix_(s)_mid# + +room_desc_(s)_1_name:#prefix# freefloating (name)#suffix_(s)_mid# + +room_desc_(s)_2_adj:The (name-n) is (name-adj).[if there is something on the (obj)] On the (name) #how_see_u# #i7_list_on# tightly fixed#suffix_(s)_end#[end if][if there is nothing on the (obj)] #emptysupporter##suffix_(s)_end_angry#[end if];The (name-n) is (name-adj) [if name has something on it] on the (name) #i7_list_on# which are screwed to the (name-n)[else if the (name) is empty]#emptysupporter#[end if] + +room_desc_(s)_2:[if there is something on the (obj)]On the (name) #how_see_u# #i7_list_on# tightened to the surface#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter##suffix_(s)_end_angry#[end if];[if there is something on the (obj)]You see #i7_list_on# on the (name-n), see how it is fixed to the surface#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter##suffix_(s)_end_angry#[end if] + +room_desc_(s)_multi_noun:[if there is something on the (obj)]On the (name-n), you see #i7_list_on#, which you cannot remove them#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter_multi##suffix_(s)_end_angry#[end if] + +room_desc_(s)_multi_adj:[if there is something on the (obj)]On the (name-adj) one, you see #i7_list_on##suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter_multi##suffix_(s)_end_angry#[end if] + +emptysupporter:But there isn't a thing on it, weightless is amazing!;Unfortunately, there isn't a thing on it;But the thing is empty;But the thing is empty, unfortunately;But the thing hasn't got anything on it;But oh no! there's nothing on this piece of #trash#;The (name-n) appears to be empty;Looks like someone's already been here and taken everything off it, though;However, the (name-n), like an empty (name-n), has nothing on it; + +emptysupporter_multi:There isn't a thing on the (name-n);The (name-n) is empty;Look at the (name-n). There's nothing on this piece of #trash#;But the (name-n) hasn't got anything on it;What a letdown, there's nothing here; + +## * Group Descriptions +### +room_desc_group:You can see (^) (val), (name), here#suffix-multi#;Your attention is drawn to (^) (val), (name)#suffix-multi# + +## * Exit Descriptions +### room_desc_(d): describes a single door in the room +### room_desc_(dir): describes a single unblocked exit in the room +### room_exit_desc: describes multiple unlocked exits in the room +### room_desc_exits: possible unnecessary +### room_desc_doors_closed: describes a group of closed doors in the room +### room_desc_doors_open: describes a group of open doors in the room +### +room_desc_(d):There is #i7_closed/open# (name) leading (dir). + +room_desc_(dir):There is an #unblocked# exit to the (dir).;There is an exit to the (dir). Don't worry, it is #unblocked#.;You need an #unblocked# exit? You should try going (dir).;You don't like doors? Why not try going (dir), that entranceway is #unblocked#. + +room_exit_desc:#easy1#.;#medium1#.;#hard1#. +easy1:There [is an|are] #unblocked# [exit|exits] to the (dir);There [is an|are] [exit|exits] to the (dir). And hey, don't worry, [they are|it's] #unblocked# +medium1:[An exit|Exits] #unblocked# [lies|lie] to the (dir);You can go (dir) from here without having to deal with any doors +hard1:it looks like you can exit to the (dir), if doors aren't really your #yourthing#;if you want to leave, and doors really aren't your #yourthing# you could try going (dir);If you're not really a door person, you could leave by the (dir);If you're not really a doors fan, you could leave by the (dir);not a fan of the doors? Why not go (dir);Hot tip- if you go (dir), you won't have to deal with any doors + +room_desc_exits:There [is an|are] #unblocked# [exit|exits] to the (dir). + +room_desc_doors_closed:#easy0a#. +easy0a:There are (^) closed doors, (name-indefinite), here;Let's see how many closed doors there are. Looks like (^), (name-indefinite);There are (^) closed doors here, (name-indefinite); + +room_desc_doors_open:#easy0b#. +easy0b:There are (^) open doors, (name-indefinite), here;Let's see how many open doors there are. Looks like (^), (name-indefinite) +# << ------------------------------------------------------------------------- >> + + + +############################################ Instructions Grammar ################################################################## + +# --- Compound Command Description Functions ------------------------------------ +## +### +ig_unlock_open:open the locked #lock_types# using the (k).;unlock and open the #lock_types#.;unlock and open the #lock_types# using the (k).;open the #lock_types# using the (k). +ig_unlock_open_take:open the locked #lock_types# using the (k) and take the #obj_types_no_key#.;unlock the #lock_types# and take the #obj_types_no_key#.;unlock the #lock_types# using the (k), and take the #obj_types_no_key#.;take the #obj_types_no_key# from within the locked #lock_types#. +ig_unlock_open_release:open the locked #lock_types# using the (k) and unhook the #obj_types_no_key#.;unlock the #lock_types# and release the #obj_types_no_key#.;unlock the #lock_types# using the (k), and unhook the #obj_types_no_key#.;release the #obj_types_no_key# from within the locked #lock_types#. +ig_open_take:take the #obj_types# from the (c).;open the (c) and take the #obj_types#.;from in the closed (c), take the #obj_types#. +ig_take/c_unlock:take the (k) and use it to unlock the #lock_types#.;unlock the #lock_types#, with the (k).; +ig_take/s_unlock:take the (k) and use it to unlock the #lock_types#.;unlock the #lock_types#, with the (k).; +ig_take_unlock:#take_syn_v# the (k) and use it to unlock the #lock_types#.;unlock the #lock_types# with the (k).; +ig_open_insert:open the (c) and place the #obj_types# in it.;put the #obj_types# in the closed (c).; +ig_insert_close:place the #obj_types# in the (c) and close it.;close (c) after placing the #obj_types# in it.;attach the #obj_types# to the hook in the (c) and close it. +ig_close_lock:close the #lock_types# and lock it.;close the #lock_types# and lock it with the (k). +# << ------------------------------------------------------------------------- >> + + +# --- Flavour Text --------------------------------------------------------------- +## +### +quest:#prologue# (list_of_actions) #epilogue# +quest_one_action:#prologue_one_action# (action) +prologue:#welcome#! Here is your task for today. #newsentence#;#welcome#! Here is how to play! #newsentence#;#welcome#! #newsentence#;Hey, thanks for coming over to the TextWorld today, there is something I need you to do for me. #newsentence# +prologue_one_action:#welcome#! Your task for today is to;#welcome#!;Your objective is to;Hey, thanks for coming over to TextWorld! Please +newsentence:First off,;First of all,;First stop,;First step,;Your first objective is to;First thing I need you to do is to;First off, if it's not too much trouble, I need you to;First of all, you could, like,;First, it would be #begood# if you could +action_separator: Then, ; Next, ; Following that, ; If you can #do_syn_v# that, ; Once you #do_syn_v# that, ; That done, ; With that over with, ; With that accomplished, ; With that done, ; Okay, and then, ; And then, ;#emptyinstruction# +epilogue:Once that's all handled, you can stop!;And once you've done that, you win!;And if you do that, you're the winner!;That's it!;Got that? Good!;Alright, thanks! +welcome:Welcome to TextWorld;You are now playing a #exciting# #game# of TextWorld Spaceship;Welcome to another #exciting# #game# of TextWorld;It's time to explore the amazing world of TextWorld Galaxy;Get ready to pick stuff up and put it in places, because you've just entered TextWorld shuttle;I hope you're ready to go into rooms and interact with objects, because you've just entered TextWorld shuttle;Who's got a virtual machine and is about to play through an #exciting# round of TextWorld? You do; +game:game;round;session;episode +# << ------------------------------------------------------------------------- >> + + +# --- Separators ----------------------------------------------------------------- +## *--- Action separators +### Need at least 5 for each action type +### +action_separator_take:#afterhave# #take_syn_pp# the #obj_types#, ;#after# #taking# the #obj_types#, ;With the #obj_types#, ;If you can get your hands on the #obj_types#, ;#emptyinstruction#; +action_separator_take/s:#afterhave# #take_syn_pp# the #obj_types# from (s), ;#after# #taking# the #obj_types# from (s), ;With the #obj_types#, ;If you can get your hands on the #obj_types#, ;#emptyinstruction# +action_separator_eat:#afterhave# #eat_syn_pp# the #eat_types#, ;#after# #eating# the #obj_types#, ;#emptyinstruction#; +action_separator_insert:#afterhave# #insert_syn_pp# the #obj_types# into the (c), ;#after# #inserting# the #obj_types# into the (c), ;#emptyinstruction# +action_separator_open: #afterhave# #open_syn_pp# the #close_open_types#, ;#after# #opening# the #close_open_types#, ;#emptyinstruction# +action_separator_unlock: #afterhave# #unlock_syn_pp# the #lock_types#, ;#after# #unlocking# the #lock_types#, ;#emptyinstruction#; +action_separator_lock: #afterhave# #lock_syn_pp# the #lock_types#, ;#after# #locking# the #lock_types#, ;#emptyinstruction#; +action_seperator_go: #afterhave# #go_syn_pp# (dir), ;#after# #going# (dir), ;once you're (dir), ;once you're in the (dir), ;If you can manage to go (dir), ;#afterhave# #go_syn_pp# through the (r), ;#after# #going# through the (r), ;#emptyinstruction# +action_seperator_go/south: #afterhave# #go_syn_pp# south, ;#emptyinstruction# +action_seperator_go/north: #afterhave# #go_syn_pp# north, ;#emptyinstruction# +action_seperator_go/east: #afterhave# #go_syn_pp# east, ;#emptyinstruction# +action_seperator_go/west: #afterhave# #go_syn_pp# west, ;#emptyinstruction# +action_separator_close: #afterhave# #close_syn_pp# the #close_open_types#, ; #after# #closing# the #close_open_types#, ;#emptyinstruction# +action_separator_release: #afterhave# #release_syn_pp# the #obj_types# from the #(s)_var#, ; #after# #releasing# the #obj_types# into the (r);#emptyinstruction# + + +## *--- Separator Symbols +### +afterhave:After you have;Having;Once you have;If you have +after:After; +# << ------------------------------------------------------------------------- >> + + + + +# --- Empty Icon ---------------------------------------------------------------- +### +emptymainperiod:#emptymain# +emptymain:#empty1#;#empty2#;#empty3#;#empty4#;#empty5#;#empty6#;#empty7#;#empty8#;#empty9#;#empty10#;#empty11#;#empty12#;#empty13#;#empty14#;#empty15#;#empty16#;#empty17#;#empty18#;#empty19#;#empty20#;#empty21#;#empty22#;#empty23#;#empty24#;#empty25#;#empty26#;#empty27#;#empty28#;#empty29#;#empty30#;#empty31#;#empty32#;#empty33#;#empty34#;#empty35#;#empty36#;#empty37#;#empty38#;#empty39#;#empty40#;#empty41#;#empty42#;#empty43#;#empty44#;#empty45#;#empty46#;#empty47#;#empty48#;#empty49#;#empty50#;#empty51#;#empty52#;#empty53#;#empty54#;#empty55#;#empty56#;#empty57#;#empty58#;#empty59#;#empty60#;#empty61#;#empty62#;#empty63# +empty1:.; +empty2:.; +empty3:.; +empty4:.; +empty5:.; +empty6:.; +empty7:.; +empty8:.; +empty9:.; +empty10:.; +empty11:.; +empty12:.; +empty13:.; +empty14:.; +empty15:.; +empty16:.; +empty17:.; +empty18:.; +empty19:.; +empty20:.; +empty21:.; +empty22:.; +empty23:.; +empty24:.; +empty25:.; +empty26:.; +empty27:.; +empty28:.; +empty29:.; +empty30:.; +empty31:.; +empty32:.; +empty33:.; +empty34:.; +empty35:.; +empty36:.; +empty37:.; +empty38:.; +empty39:.; +empty40:.; +empty41:.; +empty42:.; +empty43:.; +empty44:.; +empty45:.; +empty46:.; +empty47:.; +empty48:.; +empty49:.; +empty50:.; +empty51:.; +empty52:.; +empty53:.; +empty54:.; +empty55:.; +empty56:.; +empty57:.; +empty58:.; +empty59:.; +empty60:.; +empty61:.; +empty62:.; +empty63:.; + + +emptyinstruction:#emptyinstruction1#;#emptyinstruction2#;#emptyinstruction3#;#emptyinstruction4#;#emptyinstruction5#;#emptyinstruction6#;#emptyinstruction7#,#emptyinstruction8#;#emptyinstruction9#;#emptyinstruction10# +emptyinstruction1: And then, ; +emptyinstruction2: Then, ; +emptyinstruction3: After that, ; +emptyinstruction4: And then, ; +emptyinstruction5: After that, ; +emptyinstruction6: Then, ; +emptyinstruction7: And then, ; +emptyinstruction8: After that, ; +emptyinstruction9: And then, ; +emptyinstruction10: Then, ; From e375e2f0e3d97fdc704de72304daa6e68876fd47 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Tue, 27 Aug 2019 10:08:56 -0400 Subject: [PATCH 02/13] Spaceship making file, some modifications on grammar_maker --- textworld/challenges/spaceship/maker.py | 77 +++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 textworld/challenges/spaceship/maker.py diff --git a/textworld/challenges/spaceship/maker.py b/textworld/challenges/spaceship/maker.py new file mode 100644 index 00000000..5610aa47 --- /dev/null +++ b/textworld/challenges/spaceship/maker.py @@ -0,0 +1,77 @@ +from textworld.challenges.spaceship import GameMaker + + +def spaceship_maker(): + # GameMaker object for handcrafting text-based games. + gm = GameMaker(theme='Spaceship') + # gm = GameMaker() + + # ===== Sleep Station Design ======================================================================================= + sleep_station = gm.new_room("Sleep Station") + + sleep_bag = gm.new(type='c', name="Sleeping Bag") # Provide the type and the name of the object. + sleep_bag.desc = "cool! You can sleep in a comfy bag." # Text to display when issuing command "examine note". + sleep_station.add(sleep_bag) # Sleeping bag is fixed in place in the Sleep Station. + gm.add_fact("open", sleep_bag) + + card_box = gm.new(type='c') # Card box is a container which is fixed in place in the Sleep Station. + card_box.desc = "It is empty." + sleep_station.add(card_box) # The card box contains nothing at this game + gm.add_fact("closed", card_box) + + # ===== US LAB Design ============================================================================================== + us_lab = gm.new_room("US LAB") + key = gm.new(type='k', name="Electronic key") + key.desc = "This key opens the door into the modules area. " \ + "In this space craft, the gravity is not a challenge. Thus, you can find things on the floor." + us_lab.add(key) # When added directly to a room, portable objects are put on the floor. + + corridor1 = gm.connect(sleep_station.south, us_lab.north) + doorA = gm.new_door(corridor1, name="door A") + gm.add_fact("closed", doorA) # Add a fact about the door, e.g. here it is closed. + # gm.render() + + # ===== Russian Module Design ====================================================================================== + russian_module = gm.new_room("Russian Module") + supporter = gm.new(type='s') # When not provided, names are automatically generated. + russian_module.add(supporter) # Supporters are fixed in place. + key_code = gm.new(type='k', name="Electronic key") + key_code.desc = "This key is in fact a digital code which opens the secured box in the control modules area. " \ + "The code, in fact, is written on the supporter." + supporter.add(key_code) + + corridor2 = gm.connect(us_lab.south, russian_module.north) + doorB = gm.new_door(corridor2, name="door B") + gm.add_fact("locked", doorB) + gm.add_fact("match", key, doorB) # Tell the game 'Electronic key' is matching the 'door B''s lock + # gm.render() + + # ===== Control Module Design ====================================================================================== + control_module = gm.new_room("Control Module") + secured_box = gm.new(type='c', name='Secured box') # When not provided, names are automatically generated. + secured_box.desc = "This box is highly secured with a complex code that is in one of the modules in the craft. " \ + "To open the box, you should just find that code key." + gm.add_fact("locked", secured_box) + gm.add_fact("match", key_code, secured_box) + secured_box.desc = "The Secret Codes Handbook is in this box." + control_module.add(secured_box) # Supporters are fixed in place. + book = gm.new(type='o', name='Secret Codes Handbook') # New portable object with a randomly generated name. + secured_box.add(book) + + corridor3 = gm.connect(russian_module.west, control_module.east) + doorC = gm.new_door(corridor3, name='door C') + gm.add_fact("open", doorC) + # gm.render() + + # ===== Player and Inventory Design ================================================================================ + gm.set_player(sleep_station) + + pencil = gm.new(type='o', name='pencil') # New portable object with a randomly generated name. + gm.inventory.add(pencil) # Add the object to the player's inventory. + # gm.render() + + quest = gm.record_quest() + + +if __name__ == "__main__": + spaceship_maker() From 6f1fae7b8a9d72f00c9897c1f4012838028c51d9 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Tue, 27 Aug 2019 16:52:19 -0400 Subject: [PATCH 03/13] The spaceship game maker file --- textworld/challenges/spaceship/maker.py | 33 ++++++++++++++++--------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/textworld/challenges/spaceship/maker.py b/textworld/challenges/spaceship/maker.py index 5610aa47..71cdd908 100644 --- a/textworld/challenges/spaceship/maker.py +++ b/textworld/challenges/spaceship/maker.py @@ -1,15 +1,22 @@ -from textworld.challenges.spaceship import GameMaker +from textworld import GameMaker +from textworld.generator.data import KnowledgeBase +from textworld import g_rng + + +g_rng.set_seed(20190826) + +PATH = r"/home/v-hapurm/Documents/Haki's Git/TextWorld/textworld/challenges/spaceship/textworld_data" def spaceship_maker(): # GameMaker object for handcrafting text-based games. - gm = GameMaker(theme='Spaceship') - # gm = GameMaker() + kb = KnowledgeBase.load(target_dir=PATH) + gm = GameMaker(kb=kb, theme='Spaceship') # ===== Sleep Station Design ======================================================================================= sleep_station = gm.new_room("Sleep Station") - sleep_bag = gm.new(type='c', name="Sleeping Bag") # Provide the type and the name of the object. + sleep_bag = gm.new(type='c', name="sleeping bag") # Provide the type and the name of the object. sleep_bag.desc = "cool! You can sleep in a comfy bag." # Text to display when issuing command "examine note". sleep_station.add(sleep_bag) # Sleeping bag is fixed in place in the Sleep Station. gm.add_fact("open", sleep_bag) @@ -21,7 +28,7 @@ def spaceship_maker(): # ===== US LAB Design ============================================================================================== us_lab = gm.new_room("US LAB") - key = gm.new(type='k', name="Electronic key") + key = gm.new(type='k', name="electronic key") key.desc = "This key opens the door into the modules area. " \ "In this space craft, the gravity is not a challenge. Thus, you can find things on the floor." us_lab.add(key) # When added directly to a room, portable objects are put on the floor. @@ -29,13 +36,12 @@ def spaceship_maker(): corridor1 = gm.connect(sleep_station.south, us_lab.north) doorA = gm.new_door(corridor1, name="door A") gm.add_fact("closed", doorA) # Add a fact about the door, e.g. here it is closed. - # gm.render() # ===== Russian Module Design ====================================================================================== russian_module = gm.new_room("Russian Module") supporter = gm.new(type='s') # When not provided, names are automatically generated. russian_module.add(supporter) # Supporters are fixed in place. - key_code = gm.new(type='k', name="Electronic key") + key_code = gm.new(type='k', name="digital key") key_code.desc = "This key is in fact a digital code which opens the secured box in the control modules area. " \ "The code, in fact, is written on the supporter." supporter.add(key_code) @@ -44,7 +50,6 @@ def spaceship_maker(): doorB = gm.new_door(corridor2, name="door B") gm.add_fact("locked", doorB) gm.add_fact("match", key, doorB) # Tell the game 'Electronic key' is matching the 'door B''s lock - # gm.render() # ===== Control Module Design ====================================================================================== control_module = gm.new_room("Control Module") @@ -61,16 +66,22 @@ def spaceship_maker(): corridor3 = gm.connect(russian_module.west, control_module.east) doorC = gm.new_door(corridor3, name='door C') gm.add_fact("open", doorC) - # gm.render() # ===== Player and Inventory Design ================================================================================ gm.set_player(sleep_station) pencil = gm.new(type='o', name='pencil') # New portable object with a randomly generated name. gm.inventory.add(pencil) # Add the object to the player's inventory. - # gm.render() + gm.render(interactive=True) + + quest = gm.new_quest_using_commands(['open door A', 'go south', 'take electronic key', + 'unlock door B with electronic key', 'open door B', 'go south', + 'take digital key from board', 'go west', + 'unlock Secured box with digital key', 'open Secured box', + 'take Secret Codes Handbook from Secured box']) + print(" > ".join(quest.commands)) - quest = gm.record_quest() + gm.quests.append(quest) if __name__ == "__main__": From 5ed900bba5d41d330ad0e13d6646c363119a905c Mon Sep 17 00:00:00 2001 From: HakiRose Date: Wed, 28 Aug 2019 10:21:23 -0400 Subject: [PATCH 04/13] The customized text grammar and logics of spaceship game --- .../textworld_data/logic/container.twl | 52 + .../spaceship/textworld_data/logic/door.twl | 74 ++ .../spaceship/textworld_data/logic/food.twl | 34 + .../textworld_data/logic/inventory.twl | 50 + .../spaceship/textworld_data/logic/key.twl | 25 + .../spaceship/textworld_data/logic/object.twl | 21 + .../spaceship/textworld_data/logic/player.twl | 12 + .../spaceship/textworld_data/logic/room.twl | 82 ++ .../textworld_data/logic/supporter.twl | 17 + .../spaceship/textworld_data/logic/thing.twl | 16 + .../text_grammars/Spaceship.twg | 964 ++++++++++++++++++ 11 files changed, 1347 insertions(+) create mode 100644 textworld/challenges/spaceship/textworld_data/logic/container.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/door.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/food.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/inventory.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/key.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/object.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/player.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/room.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/supporter.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/thing.twl create mode 100644 textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg diff --git a/textworld/challenges/spaceship/textworld_data/logic/container.twl b/textworld/challenges/spaceship/textworld_data/logic/container.twl new file mode 100644 index 00000000..339ef3bd --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/container.twl @@ -0,0 +1,52 @@ +# container +type c : t { + predicates { + open(c); + closed(c); + locked(c); + + in(o, c); + } + + rules { + lock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & closed(c) -> locked(c); + unlock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & locked(c) -> closed(c); + + open/c :: $at(P, r) & $at(c, r) & closed(c) -> open(c); + close/c :: $at(P, r) & $at(c, r) & open(c) -> closed(c); + } + + reverse_rules { + lock/c :: unlock/c; + open/c :: close/c; + } + + constraints { + c1 :: open(c) & closed(c) -> fail(); + c2 :: open(c) & locked(c) -> fail(); + c3 :: closed(c) & locked(c) -> fail(); + } + + inform7 { + type { + kind :: "container"; + definition :: "containers are openable, lockable and fixed in place. containers are usually closed."; + } + + predicates { + open(c) :: "The {c} is open"; + closed(c) :: "The {c} is closed"; + locked(c) :: "The {c} is locked"; + + in(o, c) :: "The {o} is in the {c}"; + } + + commands { + open/c :: "open {c}" :: "opening the {c}"; + close/c :: "close {c}" :: "closing the {c}"; + + lock/c :: "lock {c} with {k}" :: "locking the {c} with the {k}"; + unlock/c :: "unlock {c} with {k}" :: "unlocking the {c} with the {k}"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/door.twl b/textworld/challenges/spaceship/textworld_data/logic/door.twl new file mode 100644 index 00000000..26bd1730 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/door.twl @@ -0,0 +1,74 @@ +# door +type d : t { + predicates { + open(d); + closed(d); + locked(d); + + link(r, d, r); + } + + rules { + lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d); + unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d); + + open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r); + close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d); + + examine/d :: at(P, r) & $link(r, d, r') -> at(P, r); # Nothing changes. + } + + reverse_rules { + lock/d :: unlock/d; + open/d :: close/d; + } + + constraints { + d1 :: open(d) & closed(d) -> fail(); + d2 :: open(d) & locked(d) -> fail(); + d3 :: closed(d) & locked(d) -> fail(); + + # A door can't be used to link more than two rooms. + link1 :: link(r, d, r') & link(r, d, r'') -> fail(); + link2 :: link(r, d, r') & link(r'', d, r''') -> fail(); + + # There's already a door linking two rooms. + link3 :: link(r, d, r') & link(r, d', r') -> fail(); + + # There cannot be more than four doors in a room. + too_many_doors :: link(r, d1: d, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); + + # There cannot be more than four doors in a room. + dr1 :: free(r, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); + dr2 :: free(r, r1: r) & free(r, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); + dr3 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); + dr4 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & free(r, r4: r) & link(r, d5: d, r5: r) -> fail(); + + free1 :: link(r, d, r') & free(r, r') & closed(d) -> fail(); + free2 :: link(r, d, r') & free(r, r') & locked(d) -> fail(); + } + + inform7 { + type { + kind :: "door"; + definition :: "door is openable and lockable."; + } + + predicates { + open(d) :: "The {d} is open"; + closed(d) :: "The {d} is closed"; + locked(d) :: "The {d} is locked"; + link(r, d, r') :: ""; # No equivalent in Inform7. + } + + commands { + open/d :: "open {d}" :: "opening {d}"; + close/d :: "close {d}" :: "closing {d}"; + + unlock/d :: "unlock {d} with {k}" :: "unlocking {d} with the {k}"; + lock/d :: "lock {d} with {k}" :: "locking {d} with the {k}"; + + examine/d :: "examine {d}" :: "examining {d}"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/food.twl b/textworld/challenges/spaceship/textworld_data/logic/food.twl new file mode 100644 index 00000000..5518c321 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/food.twl @@ -0,0 +1,34 @@ +# food +type f : o { + predicates { + edible(f); + eaten(f); + } + + rules { + eat :: in(f, I) -> eaten(f); + } + + constraints { + eaten1 :: eaten(f) & in(f, I) -> fail(); + eaten2 :: eaten(f) & in(f, c) -> fail(); + eaten3 :: eaten(f) & on(f, s) -> fail(); + eaten4 :: eaten(f) & at(f, r) -> fail(); + } + + inform7 { + type { + kind :: "food"; + definition :: "food is edible."; + } + + predicates { + edible(f) :: "The {f} is edible"; + eaten(f) :: "The {f} is nowhere"; + } + + commands { + eat :: "eat {f}" :: "eating the {f}"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/inventory.twl b/textworld/challenges/spaceship/textworld_data/logic/inventory.twl new file mode 100644 index 00000000..befa775f --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/inventory.twl @@ -0,0 +1,50 @@ +# Inventory +type I { + predicates { + in(o, I); + } + + rules { + inventory :: at(P, r) -> at(P, r); # Nothing changes. + + take :: $at(P, r) & at(o, r) -> in(o, I); + + + take/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, c) -> in(o, I); + insert :: $at(P, r) & $at(c, r) & $open(c) & in(o, I) -> in(o, c); + + take/s :: $at(P, r) & $at(s, r) & on(o, s) -> in(o, I); + hook :: $at(P, r) & $at(s, r) & in(o, I) -> on(o, s); + + examine/I :: in(o, I) -> in(o, I); # Nothing changes. + examine/s :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes. + examine/c :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes. + } + + reverse_rules { + take/c :: insert; + take/s :: hook; + } + + inform7 { + predicates { + in(o, I) :: "The player carries the {o}"; + } + + commands { + take :: "take {o}" :: "taking the {o}"; + + take/c :: "take {o} from {c}" :: "removing the {o} from the {c}"; + insert :: "insert {o} into {c}" :: "inserting the {o} into the {c}"; + + take/s :: "take {o} from {s}" :: "removing the {o} from the {s}"; + hook :: "hook {o} on {s}" :: "hooking the {o} on the {s}"; + + inventory :: "inventory" :: "taking inventory"; + + examine/I :: "examine {o}" :: "examining the {o}"; + examine/s :: "examine {o}" :: "examining the {o}"; + examine/c :: "examine {o}" :: "examining the {o}"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/key.twl b/textworld/challenges/spaceship/textworld_data/logic/key.twl new file mode 100644 index 00000000..ff6d0499 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/key.twl @@ -0,0 +1,25 @@ +# key +type k : o { + predicates { + match(k, c); + match(k, d); + } + + constraints { + k1 :: match(k, c) & match(k', c) -> fail(); + k2 :: match(k, c) & match(k, c') -> fail(); + k3 :: match(k, d) & match(k', d) -> fail(); + k4 :: match(k, d) & match(k, d') -> fail(); + } + + inform7 { + type { + kind :: "key"; + } + + predicates { + match(k, c) :: "The matching key of the {c} is the {k}"; + match(k, d) :: "The matching key of the {d} is the {k}"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/object.twl b/textworld/challenges/spaceship/textworld_data/logic/object.twl new file mode 100644 index 00000000..19a47080 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/object.twl @@ -0,0 +1,21 @@ +# object +type o : t { + constraints { + obj1 :: in(o, I) & in(o, c) -> fail(); + obj2 :: in(o, I) & on(o, s) -> fail(); + obj3 :: in(o, I) & at(o, r) -> fail(); + obj4 :: in(o, c) & on(o, s) -> fail(); + obj5 :: in(o, c) & at(o, r) -> fail(); + obj6 :: on(o, s) & at(o, r) -> fail(); + obj7 :: at(o, r) & at(o, r') -> fail(); + obj8 :: in(o, c) & in(o, c') -> fail(); + obj9 :: on(o, s) & on(o, s') -> fail(); + } + + inform7 { + type { + kind :: "object-like"; + definition :: "object-like is portable."; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/player.twl b/textworld/challenges/spaceship/textworld_data/logic/player.twl new file mode 100644 index 00000000..6783223b --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/player.twl @@ -0,0 +1,12 @@ +# Player +type P { + rules { + look :: at(P, r) -> at(P, r); # Nothing changes. + } + + inform7 { + commands { + look :: "look" :: "looking"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/room.twl b/textworld/challenges/spaceship/textworld_data/logic/room.twl new file mode 100644 index 00000000..58715688 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/room.twl @@ -0,0 +1,82 @@ +# room +type r { + predicates { + at(P, r); + at(t, r); + + north_of(r, r); + west_of(r, r); + + north_of/d(r, d, r); + west_of/d(r, d, r); + + free(r, r); + + south_of(r, r') = north_of(r', r); + east_of(r, r') = west_of(r', r); + + south_of/d(r, d, r') = north_of/d(r', d, r); + east_of/d(r, d, r') = west_of/d(r', d, r); + } + + rules { + go/north :: at(P, r) & $north_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r'); + go/south :: at(P, r) & $south_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r'); + go/east :: at(P, r) & $east_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r'); + go/west :: at(P, r) & $west_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r'); + } + + reverse_rules { + go/north :: go/south; + go/west :: go/east; + } + + constraints { + r1 :: at(P, r) & at(P, r') -> fail(); + r2 :: at(s, r) & at(s, r') -> fail(); + r3 :: at(c, r) & at(c, r') -> fail(); + + # An exit direction can only lead to one room. + nav_rr1 :: north_of(r, r') & north_of(r'', r') -> fail(); + nav_rr2 :: south_of(r, r') & south_of(r'', r') -> fail(); + nav_rr3 :: east_of(r, r') & east_of(r'', r') -> fail(); + nav_rr4 :: west_of(r, r') & west_of(r'', r') -> fail(); + + # Two rooms can only be connected once with each other. + nav_rrA :: north_of(r, r') & south_of(r, r') -> fail(); + nav_rrB :: north_of(r, r') & west_of(r, r') -> fail(); + nav_rrC :: north_of(r, r') & east_of(r, r') -> fail(); + nav_rrD :: south_of(r, r') & west_of(r, r') -> fail(); + nav_rrE :: south_of(r, r') & east_of(r, r') -> fail(); + nav_rrF :: west_of(r, r') & east_of(r, r') -> fail(); + } + + inform7 { + type { + kind :: "room"; + } + + predicates { + at(P, r) :: "The player is in {r}"; + at(t, r) :: "The {t} is in {r}"; + free(r, r') :: ""; # No equivalent in Inform7. + + north_of(r, r') :: "The {r} is mapped north of {r'}"; + south_of(r, r') :: "The {r} is mapped south of {r'}"; + east_of(r, r') :: "The {r} is mapped east of {r'}"; + west_of(r, r') :: "The {r} is mapped west of {r'}"; + + north_of/d(r, d, r') :: "South of {r} and north of {r'} is a door called {d}"; + south_of/d(r, d, r') :: "North of {r} and south of {r'} is a door called {d}"; + east_of/d(r, d, r') :: "West of {r} and east of {r'} is a door called {d}"; + west_of/d(r, d, r') :: "East of {r} and west of {r'} is a door called {d}"; + } + + commands { + go/north :: "go north" :: "going north"; + go/south :: "go south" :: "going south"; + go/east :: "go east" :: "going east"; + go/west :: "go west" :: "going west"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/supporter.twl b/textworld/challenges/spaceship/textworld_data/logic/supporter.twl new file mode 100644 index 00000000..e740dd41 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/supporter.twl @@ -0,0 +1,17 @@ +# supporter +type s : t { + predicates { + on(o, s); + } + + inform7 { + type { + kind :: "supporter"; + definition :: "supporters are fixed in place."; + } + + predicates { + on(o, s) :: "The {o} is on the {s}"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/thing.twl b/textworld/challenges/spaceship/textworld_data/logic/thing.twl new file mode 100644 index 00000000..746e87ce --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/thing.twl @@ -0,0 +1,16 @@ +# thing +type t { + rules { + examine/t :: at(P, r) & $at(t, r) -> at(P, r); + } + + inform7 { + type { + kind :: "thing"; + } + + commands { + examine/t :: "examine {t}" :: "examining the {t}"; + } + } +} diff --git a/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg b/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg new file mode 100644 index 00000000..5cf1c8a5 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg @@ -0,0 +1,964 @@ +#---------------------------------------------------------------------------------------------------------------------------------- +# GAME DESCRIPTOR GRAMMAR # +#---------------------------------------------------------------------------------------------------------------------------------- +# The organization of this file is as follows: +# 1. Expandables : All required combinations, structures, etc of words, letters, and numbers which are used in the +# whole text of the grammars. Collect them here will avoid from redundant repeats. +# 2. Verbs : All verbs which are used as action or simply as verb in the text are collected. +# 3. Types & Variables : Type of objects and variables of the game are defined and coded. +# 4. Objects Garmmar : The grammar of each object of the game is defined in this section. +# 5. Room Description Grammar: All the texts which are used to describe the game inside different rooms are defined and expanded. +# 6. Instructions Grammar : The grammar of instructions for compound commands, etc are described. + + + +################################################ Expandables ####################################################################### + +## Any type of expandables, such as adjectives, the name of different types of food, brans, materials, etc. are named here. +## During the design of the game, this expandables are like a general dictionary of various types of words which can be used +## in different sections of the grammar design. This list does not include verb type of words. +### +# --- General Expandables ------------------------------------------------------- +ordinary_adj:ordinary;normal;typical;standard;usual +adj_stripped:#simpleadj# +simpleadj:good;bad;small;big;heavy;light;great;terrible;expensive;cheap +hot-adj:super;unreasonably;absurdly;alarmingly;upsettingly +supp_stable:stable;wobbly;unstable;balanced;durable;reliable;solid;undependable;solidly built;an unstable piece of #garbage#;shaky +obj_what:unremarkable;clean;dirty;modern;well-used;brand new;expensive looking;cheap looking +out_in_place:out of place;to fit in;well matched to everything else +food_what:appetizing;delicious;tasty;appealing;delectable;heavenly;inviting;savory;tantalizing;tempting +door_what_is:imposing;sturdy;well-built;durable;robust;rugged;hefty;commanding;manageable;solid +shape:rectangular;cuboid;spherical;formless;non-euclidean +colour:red;blue;chartreuse;purple;violet;orange;yellow;green;brown;teal;cyan +smell:vanilla;lavender;cake;fudge;fresh laundry;soap + +number:0;1;2;3;4;5;6;7;8;9 +bignumber:Thirty;Forty;Fifty;Sixty;Seventy;Eighty;Ninety;A hundred;Two hundred;Three hundred +letter:A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z + +material_type:#metal#;#plastic#;#others# +metal:steel;cementite;iron;aluminum;copper;brass +plastic:plastic +others:card + +fruit:watermelon;melon;honeydew;apple;pear;grape;kiwi;cantaloupe;banana;pear;durian;#berry#berry;berry +can:sardine;mixed beans;chicken;soup;tuna +candy:chocolate bar;gummy bear;candy bar;licorice strip;cookie;power bar +berry:straw;blue;rasp;black;elder;boysen;lingon;huckle;logan;cran;goji;goose + +garbage:garbage;trash;junk + +weight:complicated;heavy;light;weighty;surprisingly heavy;heavier than it looks + +brand:#brandname# style;#brandname# limited edition;#brandname# +brandname:Microsoft;American;Canadian;Henderson's;TextWorld +# << ------------------------------------------------------------------------- >> + + +# --- Fix Expandables ----------------------------------------------------------- +here_alt:here;in the room;in the shuttle room;on the dock;nearby;close by;in the corner;right there by you +here_alt_u:Here;In the room;Nearby;Close by;In the corner;Right there by you +how_see:you #you_what#;you can #you_what# +how_see_u:You #you_what#;You can #you_what# +there_what:is;seems to be +you_what:see;make out +smelltype:an #ansmell#;a #asmell# +ansmell:interesting;awful;intriguing +asmell:hideous;pungent;sickening;terrible;wretched;lovely;great;fine; +upsetwith:upset with;angry about;infuriated by;depressed by;done caring about;upset by;furious with +bignumber:Thirty;Forty;Fifty;Sixty;Seventy;Eighty;Ninety;A hundred;Two hundred;Three hundred +Iknow:I know a;I got this;I have a;You know, I know a;You know, I got a;You know what, I've got a +youknow:You know;Do you know;Did you ever meet;You ever meet + +afriend:person, they work out of #friendplace#,;person;friend;person who works for #friendcompany# +myfriend:they work for #friendcompany# +friendplace:the lab;the space shuttle +friendcompany:the #affiliation# team;the International Space Station; +affiliation: Russian;European;Japanese;USA +friendtype:buddy;pal;friend;good friend;mate; + +cooljob:the astronaut;#friendcompany#;the space craft engineer +expensiveplace:some kind of expensive place;some kind of expensive project +intheblank:in the dump;in a fire;into a pit;into the garbage + +key_metal:#plastic#;#others#;brushed;polished;satin;rusty + + + +begood:good;great;fantastic;a great idea +in_the_(r):in the (r);within the (r);inside the (r) +by_the_syn:with the +init_syn:in it;inside;placed inside +into_syn:into;inside +on_it_syn:on it;upon it +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Container Symbols ----------------------------------------- +it:It;Something about it +reminds_you:reminds you of;looks like;floods your mind with memories of;is reminiscent of;is just like +ofyouryouth:of your youth;that you knew in your youth;that you knew so long ago;that you knew so long ago, in your youth +it_is:It is;You can see that it is;Upon examination, you see that it is +name_var:(name);(name-n), which looks (name-adj),;(name-adj) looking (name-n) +listwithis: [is-are a list of things in the (obj)] +lookthere:Look over there;Wow! look at that +ContentsC-:Contents-;Contained within-;Inside are the following-;Inventory is as follows-;Here's what's inside +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Supporter Symbols ----------------------------------------- +on_it:on it;lying on it;resting on it;upon it +ContentsS-:Contents-;Upon it are displayed the following-;Upon it you may see the following-;Upon it lie the following-;Upon the (name-n) are displayed the following-;Upon the (name-n) you may see the following-;Upon the (name-n) lie the following- +trash:trash;garbage;junk +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Group Symbols --------------------------------------------- +this_the:this;the +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Room Symbols ---------------------------------------------- +dec_find-yourself:You #dec_what# +dec_guess-what:#dec_well-guess#, you are in #dec_a_the# place we're calling #dec_a_the# +dec_well-guess:Guess what;Well how about that;Well I'll be +dec_what:are;find yourself;arrive +dec_a_the:a;the +announce_mood:sorry;pleased;excited;stoked;so happy;honoured;required;obligated +signquality:decrepit;laminated;crooked;framed +sign:sign;placard;signboard;board +# << ------------------------------------------------------------------------- >> + + +# --- Expandables for Exit Symbols ---------------------------------------------- +yourthing:thing;bag;style;cup of tea +door_what:leading;facing;heading +unblocked:unblocked;unguarded +# << ------------------------------------------------------------------------- >> + + + + +################################################### Verbs ########################################################################## + +# --- Actions & Verbs ----------------------------------------------------------- +## Actions are actually those verbs which are used in the game by the player. Actions should start with a verb (ie:ensure, make +## sure, etc (these could probably just be a tag)). +### The structure for a verb is as follows, (not necessarily contains all the parts): +### a) (verb): action's instructions; +### b) (verb)_syn_v: synonyms of the verb; they are all in lowercase format, +### c) (verb)_syn_u: Uppercase format (Sentence format) of the synonyms, +### d) (verb)_syn_p: past form of the synonyms +### e) (verb)_syn_pp: past participle form of the synonyms +### f) (verb)ing: the ing-form of the verb + + +# --- Action Verbs -------------------------------------------------------------- +look:look around in (r). + +examine:examine (o|k|f|d|c|s|t). + +inventory:examine your inventory. + +take:#take_syn_v# the #obj_types# from the (r).;#take_syn_v# the #obj_types# that's in the (r). +take_syn_v:take;retrieve;grab +take_syn_pp:taken;got;picked +taking:taking;getting;picking +take/s:#take_syn_v# the #obj_types# from the #on_var#. +take/c:#take_syn_v# the #obj_types# from the #on_var#. + +insert:#insert_syn_v# the #obj_types# #into_syn# the #(c)_var#.;you can #insert_syn_v# the #obj_types# #into_syn# the #(c)_var#. +insert_syn_v:insert;put;place;deposit;attach +insert_syn_u:Insert;Put;Place;Deposit;Attach +insert_syn_p:inserted;put;placed;deposited;attached +insert_syn_pp:inserted;put in;placed;deposited;attached +inserting:inserting;putting in;placeing;depositting;attaching + +eat:#eat_syn_v# the #eat_var#. +eat_syn_u:Eat; +eat_syn_v:eat; +eat_syn_pp:eaten;consumed +eat_syn_p:ate +eating:eating + +open:open the #lock_type_var#.;ensure that the #lock_type_var# is open.;make sure that the #lock_type_var# is #open_var#. +open_syn_v:open; +open_syn_pp:opened;pulled open +opening:opening;pulling open + +close:close the #lock_type_var#.;ensure that the #lock_type_var# is #close_syn_pp#. +close_syn_pp:closed;shut +closing:closing;shutting + +go:#go_syn_v# easily into the space;#go_syn_v# towards the #obj_types#;#go_syn_v# smoothly twards the #obj_types#;#go_syn_v# into the (r) +go_syn_v: go;move;dive;fly;float;propel;wobble;head;go to the; +go_syn_p: went;moved;dived;flew;floated;propelled;wobbled;headed;went to the; +go_syn_u: Go;Move;Dive;Fly;Float;Propel;Wobble;Head;Go to the; +go_syn_pp:gone;moved;dived;flown;floated;propelled;wobbled;headed;gone to the;got +going:going;moving;diving;flying;floating;propelling;wobbling;heading;going to the;getting +go/north:#go_syn_v# north.;#tryto# #go_syn_v# north. +go/south:#go_syn_v# south.;#tryto# #go_syn_v# south. +go/east:#go_syn_v# east.;#tryto# #go_syn_v# east. +go/west:#go_syn_v# west.;#tryto# #go_syn_v# west. +go/north/d:#go_syn_v# through the north (d).;#tryto# #go_syn_v# through the north (d). +go/south/d:#go_syn_v# through the south (d).;#tryto# #go_syn_v# through the south (d). +go/east/d:#go_syn_v# through the east (d).;#tryto# #go_syn_v# through the east (d). +go/west/d:#go_syn_v# through the west (d).;#tryto# #go_syn_v# through the west (d). + +tryto:try to;make an effort to;make an attempt to;attempt to + +unlock:#unlock_key#;#unlock_no_key# +unlock_key:unlock the #lock_type_var# #by_the_syn# (k).;check that the #lock_type_var# is unlocked #by_the_syn# (k).;ensure that the #lock_type_var# is unlocked #by_the_syn# (k).;insert the (k) into the #lock_type_var#'s lock to unlock it. +unlock_no_key:unlock the #lock_type_var#.;ensure that the #lock_type_var# is unlocked. +unlock_syn_pp:unlocked +unlocking:unlocking + +lock:#lock_key#;#lock_no_key# +lock_key:lock the #lock_type_var# #by_the_syn# (k).;make sure that the #lock_type_var# is locked #by_the_syn# (k).;#insert_syn_u# the (k) into the #lock_type_var# to lock it. +lock_no_key:lock the #lock_type_var#.;make sure the #lock_type_var# is locked.;ensure that the #lock_type_var# is locked. +lock_syn_pp:locked +locking:locking + +cook:#cook_syn_v# the #eat_var#;#cook_syn_v# your #eat_var#; +cook_syn_v:cook;hydrate;heat up;prepare +cook_syn_p:cooked;hydrated;heated up;prepared +cook_syn_u:Cook;Hydrate;Heat up;Prepare + +release:#release_syn_v# the #obj_types# from #(s)_var#.;#release_syn_v# the #obj_types# from its hook; +release_syn_v:release;let;disentangle;loose;unfasten;unfix;let loose;unhook;leave;unleash +release_syn_u:Let;Disentangle;Release;Loose;Unfasten;Unfix;Let loose;Unhook;Leave;Unleash +release_syn_p:let;disentangled;released;loosed;unfastened;unfixed;let loose;unhooked;left;unleashed +release_syn_pp:let;disentangled;released;loosed;unfastened;unfixed;let loose;unhooked;left;unleashed +releasing:letting;disentangling;releasing;loosing;unfastening;unfixing;unhooking;unleashing + +communicate: #communicate_syn_v# your message with (r) +communicate_syn_v:communicate;talk;call;transmit +communicate_syn_p:communicated;talked;called;transmitted +communicate_syn_u:Communicate;Talk;Call;Transmit +# << ------------------------------------------------------------------------- >> + + +# --- General Verbs ------------------------------------------------------------- +wait:Wait + +do_syn_v:manage;do;accomplish;get around to doing;finish;succeed at;get through with + +exciting:exciting;fast paced;life changing;profound + +force_open_syn_v:break;crack;destroy + +looks_seems_syn_v:looks;seems;appears;appears to be;would seem to be;seems to be;looks;seems;appears + +can_should:can;should;should be able to;may + +enter_syn_p:entered;walked into;fallen into;moved into;stumbled into;come into;fly into;fly over + +walk_into_syn_v:walk into;show up in;saunter into;come round;space-walk;space-walk into +walk_into_syn_p:walked into;shown up in;sauntered into;space-walked;space-walked into + +launched_into_syn_v:launched;blasted off + +contain_syn_v:contains;has;is filled with;reveals inside it;holds;shelters;offers you;reveals to you +contain_syn_p:contained;#hold_syn_p#;had;had in it;revealed;concealed;sheltered;offered you;revealed to you;guarded;protected + +findin_syn_p:in;found in + +hold_syn_p:held;carried;had;presented;held up;was used to support +# << ------------------------------------------------------------------------- >> + + + +############################################## Types & Variables ##################################################################### + +# --- Types, Word Synonyms & Variables -------------------- +## * Types +obj_types:(o|k|f) +obj_types_no_key:(o|f) +on_types:(c|s) +lock_types:(c|d) +eat_types:(f) +close_open_types:(d|c) + +## * Variables +lock_type_var:#lock_types#;#lock_types# #in_the_(r)# +(s)_var:(s);(s) #in_the_(r)# +(c)_var:(c);(c) #in_the_(r)# +on_var:#on_types#;#on_types# #in_the_(r)# +eat_var:#eat_types#;#eat_types# +open_var:opened;open;wide open;ajar +# << ------------------------------------------------------------------------- >> + + +############################################## Objects Garmmar ##################################################################### + +# --- Player -------------------------------------------------------------------- +## These values are typically empty +### +(P):#(P)_adj# | #(P)_noun# +(P)_noun:None +(P)_adj:None +# << ------------------------------------------------------------------------- >> + + +# --- Rooms --------------------------------------------------------------------- +## List each type of room with a ';' between each +## Each roomType must have specific rooms +### Creating a room: first, take the name of the roomtype as listed under #room_type# (which we'll call X for now). create three symbols with this: X_(r), X_(r)_noun, and X_(r)_adj. X_(r) will always be composed of X_(r)_adj | X_(r)_noun. If you want to subdivide a roomtype into two or more variants, you can add _type1, _type2, etc at the end of the noun and adj symbols. make sure that these changes are also accounted for in the X_(r) token, see below for examples + +room_type:clean;cook;rest;work;storage + +(r):#(r)_adj# | #(r)_noun# +(r)_noun:sleep station;crew cabin;washroom;closet;kitchenette;module;lab;lounge +(r)_adj:nondescript;plain + +### > Clean Room +clean_(r):#clean_(r)_adj_type_1# | #clean_(r)_noun_type_1# +### >> Cleaning Self +clean_(r)_noun_type_1:washroom;bathroom;restroom;toilett +clean_(r)_adj_type_1:spotless;clean;cramped;small + +### > Storage Room +storage_(r):#storage_(r)_adj# | #storage_(r)_noun# +storage_(r)_noun:closet;spare room +storage_(r)_adj:spacious;roomy;cramped;stuffed;messy;forgotten;ugly;gloomy + +### > Cook Room +cook_(r):#cook_(r)_adj# | #cook_(r)_noun# +cook_(r)_noun:kitchen;kitchenette +cook_(r)_adj:#hot-adj# hot;steamy;hot;sweaty + +### > Rest Room +### >> Sleep Room +rest_(r):#rest_(r)_adj_type_1# | #rest_(r)_noun_type_1#;#rest_(r)_adj_type_2# | #rest_(r)_noun_type_2# +rest_(r)_noun_type_1:sleep station;sleep station;sleep station;sleeping bag;crew cabin +rest_(r)_adj_type_1:cozy;relaxing;pleasant;sleepy +### >> fun with friends +rest_(r)_noun_type_2:lounge;playroom;recreation zone;crew cabin;crew cabin;crew cabin +rest_(r)_adj_type_2:fun;entertaining;exciting;well lit;silent + +### > Work Room +### >> At spaceshuttle +work_(r):#work_(r)_adj_type_1# | #work_(r)_noun_type_1#;#work_(r)_adj_type_2# | #work_(r)_noun_type_2# +work_(r)_noun_type_1:module;module;lab;lab;lab;control module;service module;maintenance;radars +work_(r)_adj_type_1:silent;austere;serious;still;cramped;stuffed +### >> At Earth +work_(r)_noun_type_2:office;mission control +work_(r)_adj_type_2:silent;huge;serious;still;stressful;noisy +# << ------------------------------------------------------------------------- >> + + +# --- Containers ---------------------------------------------------------------- +## Each roomType must has specific containers +## container descriptions work like room descriptions, except the (r) is replaced by a (c) +(c):#(c)_adj_noun# +(c)_adj_noun:#(c)_adj# | #(c)_noun# +(c)_noun:chest;box;safe;locker +(c)_adj:sturdy;nice;ugly; + +### > Clean Container +clean_(c):#clean_(c)_adj_type_1# | #clean_(c)_noun_type_1#;#clean_(c)_adj_type_2# | #clean_(c)_noun_type_2# +### >> Clean Container Type 1 +clean_(c)_noun_type_1:cabinet;cabinet;cabinet;basket;box;box;box;safe;case +clean_(c)_adj_type_1:stained;spotless;plain;zipped;sturdy +### >> Clean Container Type 2 +clean_(c)_noun_type_2:drawer;cabinet +clean_(c)_adj_type_2:#material_type# case + +### > Storage Container +storage_(c):#storage_(c)_adj# | #storage_(c)_noun# +storage_(c)_noun:toolbox;chest;safe;locker;coffer;cabinet;crate;case;suitcase +storage_(c)_adj:rusty;neglected;brand new,sturdy + +### > Cook Container +cook_(c):#cook_(c)_adj# | #cook_(c)_noun# +cook_(c)_noun:fridge;refrigerator;freezer;cabinet +cook_(c)_adj:fancy;big;small;stuffed + +### > Rest Container +rest_(c):#rest_(c)_adj# | #rest_(c)_noun# +rest_(c)_noun:chest;box;locker;coffer;suitcase +rest_(c)_adj:new;dusty;clean;amazing + +### > Work Container +work_(c):#work_(c)_adj# | #work_(c)_noun# +work_(c)_noun:box;safe;locker;coffer;case;toolbox;display +work_(c)_adj:iron;rusty;high-tech +# << ------------------------------------------------------------------------- >> + + +# --- Doors --------------------------------------------------------------------- +## The (r) is now has a (d), and you shouldn't create room-specific door types +(d):#(d)_adj# | #(d)_noun# +(d)_adj:#material_type#;material +(d)_noun:door;portal;gate;passageway;gateway;hatch +# << ------------------------------------------------------------------------- >> + + +# --- Supporters ---------------------------------------------------------------- +## Each roomType must has specific supporters +## Like containers, but with a (s) +(s):#(s)_adj# | #(s)_noun# +(s)_noun:shelf;table;pedestal;slab +(s)_adj:#(o)_adj# + +### > Clean Supporter +clean_(s):#clean_(s)_adj# | #clean_(s)_noun# +clean_(s)_noun:board;shelf;rack; +clean_(s)_adj:dusty;cramped;messy;shiny + +### > Storage Supporter +storage_(s):#storage_(s)_adj# | #storage_(s)_noun# +storage_(s)_noun:shelf;rack;stand +storage_(s)_adj:rusty;shoddy;splintery;rough + +### > Cook Supporter +cook_(s):#cook_(s)_adj# | #cook_(s)_noun# +cook_(s)_noun:counter;board;shelf;rack;plate;bowl;platter;saucepan +cook_(s)_adj:greasy;soaped down;filthy;messy + +### > Rest Supporter +rest_(s):#rest_(s)_adj# | #rest_(s)_noun# +rest_(s)_noun:sleep bag;sleep bag;sleeping bag;sleeping bag;shelf;laptop hanger;laptop stand +rest_(s)_adj:comfy;warm;worn-out + +### > Work Supporter +work_(s):#work_(s)_adj# | #work_(s)_noun# +work_(s)_noun:stand;table;chair;desk;stand;dashboard;control panel +work_(s)_adj:stern;solid;worn;gross +# << ------------------------------------------------------------------------- >> + + +# --- Objects ------------------------------------------------------------------ +## Each roomType must have specific objects +## (s) --> (o) Very useful to create multiple subtypes to avoid inappropriate or awkward adjective pairing +(o):#(o)_adj# | #(o)_noun# +(o)_noun:pencil;pen +(o)_adj:new;old;used;dusty;clean;large;small;fancy;plain;ornate;contemporary;modern;dirty;simple;hefty;modest;austere + +### > Clean objects +clean_(o):#clean_(o)_adj_type_1# | #clean_(o)_noun_type_1#;#clean_(o)_adj_type_2# | #clean_(o)_noun_type_2#;#clean_(o)_adj_type_3# | #clean_(o)_noun_type_3# +clean_(o)_noun:#clean_(o)_noun_type_1#;#clean_(o)_noun_type_2#;#clean_(o)_noun_type_3# +clean_(o)_adj:#clean_(o)_adj_type_1#;#clean_(o)_adj_type_2#;#clean_(o)_adj_type_3# +### >> appliances +clean_(o)_noun_type_1:vacuum;wet napkins;paper toillet +clean_(o)_adj_type_1:new;old;clean;large;small;plain;ornate;contemporary;dirty;elegant;immaculate;simple;hefty +### >> paperproducts +clean_(o)_noun_type_2:paper towel;paper toillet;sponge +clean_(o)_adj_type_2:new;old;used;dusty;torn;ripped;dirty;clean;large;small;fancy;plain;ornate;elegant;immaculate;simple;hefty;modest;decorated;austere;embroidered +### >> non-disposable +clean_(o)_noun_type_3:napkin;towel;shirt;sock;sponge +clean_(o)_adj_type_3:new;old;used;dusty;clean;large;small;fancy;plain;dirty;elegant;tacky + +### > Storage objects +storage_(o):#storage_(o)_adj_type_1# | #storage_(o)_noun_type_1#;#storage_(o)_adj_type_2# | #storage_(o)_noun_type_2# +storage_(o)_noun:#storage_(o)_noun_type_1#;#storage_(o)_noun_type_2# +storage_(o)_adj:#storage_(o)_adj_type_1#;#storage_(o)_adj_type_2# +### >> clothing +storage_(o)_noun_type_1:shirt;sock;shoe;glove;hat;scarf;cloak;top hat;pair of pants +storage_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;contemporary;modern;dirty;elegant;immaculate;simple;modest;gaudy;fashionable;tacky +### >> appliances +storage_(o)_noun_type_2:lightbulb;pair of headphones;lampshade;frisbee +storage_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;modern;dirty;elegant;immaculate;simple;hefty;modest;off brand;useless;broken + +### > Cook objects +cook_(o):#cook_(o)_adj_type_1# | #cook_(o)_noun_type_1#;#cook_(o)_adj_type_2# | #cook_(o)_noun_type_2#;#cook_(o)_adj_type_3# | #cook_(o)_noun_type_3# +cook_(o)_noun:#cook_(o)_noun_type_1#;#cook_(o)_noun_type_2#;#cook_(o)_noun_type_3# +cook_(o)_adj:#cook_(o)_adj_type_1#;#cook_(o)_adj_type_2#;#cook_(o)_adj_type_3# +### >> utensil +cook_(o)_noun_type_1:fork;knife;spoon;spork;teaspoon +cook_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere;plastic +### >> cooking appliance +cook_(o)_noun_type_2:napkin;whisk;ladle;blender;kettle;teapot;MW +cook_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere;fancy;broken +### >> vessel/plate +cook_(o)_noun_type_3:mug;bowl;teacup;glass;coffee cup +cook_(o)_adj_type_3:new;old;used;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;chipped + +### > Rest objects +rest_(o):#rest_(o)_adj_type_1# | #rest_(o)_noun_type_1#;#rest_(o)_adj_type_2# | #rest_(o)_noun_type_2#;#rest_(o)_adj_type_3# | #rest_(o)_noun_type_3# +rest_(o)_noun:#rest_(o)_noun_type_1#;#rest_(o)_noun_type_2#;#rest_(o)_noun_type_3# +rest_(o)_adj:#rest_(o)_adj_type_1#;#rest_(o)_adj_type_2#;#rest_(o)_adj_type_3# +### >> screen +rest_(o)_noun_type_1:laptop;tablet;monitor +rest_(o)_adj_type_1:shiny;widescreen;shut off;flat-screen +### >> electronic +rest_(o)_noun_type_2:controller;dvd;cd;lamp;laptop +rest_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;fancy +### >> comfortable things +rest_(o)_noun_type_3:pillow;sleep bag +rest_(o)_adj_type_3:cozy;comfy;comfortable;plush;frilly;nice;small;big;heavy;cute + +### > Work objects +work_(o):#work_(o)_adj_type_1# | #work_(o)_noun_type_1#;#work_(o)_adj_type_2# | #work_(o)_noun_type_2# +work_(o)_noun:#work_(o)_noun_type_1#;#work_(o)_noun_type_2# +work_(o)_adj:#work_(o)_adj_type_1#;#work_(o)_adj_type_2# +### >> utensil +work_(o)_noun_type_1:pen;pencil;staple;notebook;cd;book;backup calendar +work_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;ornate;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere +### >> electronic +work_(o)_noun_type_2:printer;laptop;telephone +work_(o)_adj_type_2:fancy;broken;operational;working + +## * Object Descriptor Functions +(P)_desc:It's you. +(c)_desc:The (name) looks strong, and impossible to #force_open_syn_v#. +(s)_desc:The (name) is #supp_stable#. +(o)_desc:The (name) is #obj_what#.;The (name) #looks_seems_syn_v# #out_in_place# here +(f)_desc:The (name) looks #food_what#.;that's a (name-adj) (name-n)!;You couldn't pay me to eat that (name-adj) thing.;You are starving (name), the food is #food_what# yeah?! But you can't eat that, sorry!! +(k)_desc:The (name) is cold to the touch;The (name) is #weight#.;The metal of the (name) is #key_metal#.;The (name) looks useful +(d)_desc:The (name) looks #door_what_is#.;it's a #door_what_is# (name-n);it is what it is, a (name) +# << ------------------------------------------------------------------------- >> + + +# --- Foods --------------------------------------------------------------------- +## Each roomType must have specific food +## The below should work as an expandable food pyramid. This can be made room specific. + +### > Base food +(f):#(f)_adj# | #(f)_noun# +(f)_adj:#(f)_adj_good#;#(f)_adj_bad#;#(f)_adj_neutral# +(f)_adj_good:fresh;soft;chilled;organic +(f)_adj_bad:aging;half-eaten;rotting +(f)_adj_neutral:dehydrated;dehydrated;frozen;large;small;tiny;hefty;sizable;dried;dry;pureed +(f)_noun:#(f)_noun_fresh#;#(f)_noun_preserved#;#(f)_noun_dehydrated#;(f)_noun_snack +(f)_noun_fresh:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein#;#(f)_noun_dairy#;#(f)_noun_nuts# +(f)_noun_preserved:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein#;#(f)_noun_dairy#;#candy#;#can#; +(f)_noun_dehydrated:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein# +(f)_noun_snack:cheetoz;corn sticks;nacho cheese tortilla;donut;fruit chew;cheese puff;#candy# +(f)_noun_fruit:#fruit# +(f)_noun_vegetable:broccoli;carrot;cucumber;onion;garlic clove;potato;cabbage;cauliflower;pizza;salad +(f)_noun_grain:loaf of bread;sandwich +(f)_noun_protein:;legume;cashew;peanut;burger +(f)_noun_dairy:stick of butter;fondue +(f)_noun_nuts:pistachio;walnut;almond;raisin + +### > Clean food +clean_(f):#(f)# + +### > Storage food +storage_(f):#(f)# + +### > Cook food +cook_(f):#(f)# + +### > Rest food +rest_(f):#(f)# + +### > Work food +work_(f):#(f)# +# << ------------------------------------------------------------------------- >> + + +# --- Keys ---------------------------------------------------------------------- +## Each roomType must have specific keys +(k):#(k)_adj# | #(k)_noun# +(k)_adj:digital;magnetic;digital;magnetic;iron;brass;metal;rusty;steel;aluminum;copper +(k)_noun:key;keycard;latchkey;passkey + +## * Unique-use Key Match Adjective +## These adjectives CANNOT be used elsewhere! +clearancelevel:type #number#;type #letter#;#brand#;#brand#;#brand#;#shape#;#shape#;#shape#;#smell# scented; +(k<->d)_match:#(k)_adj# | #clearancelevel# #(k)_noun# <-> #(d)_adj# | #clearancelevel# #(d)_noun#; #colour# | #(k)_noun# <-> #colour# | #(d)_noun# +(k<->c)_match:#(k)_adj# | #clearancelevel# #(k)_noun# <-> #(c)_adj# | #clearancelevel# #(c)_noun#; #colour# | #(k)_noun# <-> #colour# | #(c)_noun# +# << ------------------------------------------------------------------------- >> + + +# --- Keys ---------------------------------------------------------------------- +### +openable_desc:[if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if];[if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if] +on_desc:On the (name), is [a list of things on the (obj)].;You can see [list of things on the (obj)] on the (name);this (name) has the following upon it, [list of things on the (obj)];you gaze in terror at the [list of things on the (obj)] that lie upon this very (name)!; "now why" you think, "am I looking at [list of things on the (obj)] on this (name)?" +# << ------------------------------------------------------------------------- >> + + + +########################################## Room Descriptor Grammar ################################################################# + +# --- Greetings ----------------------------------------------------------------- +## Text for starting the game. ex: "Greetings, you are now in the messy sleep station" +### +dec:#GREETING# #dec_type##suffix_(r)#;#dec_type##suffix_(r)# +GREETING:GREETING!;GREETINGS TREKKIE!;HELLO ASTRONAUT!;ALRIGHT THEN!; HEY TREKKIE +# << ------------------------------------------------------------------------- >> + + +# --- Room Intro ---------------------------------------------------------------- +## Text for introducing the room. +### +## * Room Intro Blocks +dec_type:#reg-0#;#normal-0#;#difficult-0#;#moredifficult-0#;#playful-0# +reg-0:#01#;#02#;#03# +normal-0:#04# +difficult-0:#05# +moredifficult-0:#06# +playful-0:#07#;#08#;#09#;#010#;#011#;#012#;#013#;#014#;#015#;#016#;#017#;#018#;#019#;#020#;#021#;#022# + +## * Room Intro Templates +01:#dec_find-yourself# in a (name);#dec_guess-what# (name) +02:Well, here we are in #dec_a_the# (name) +03:You're now in #dec_a_the# (name) +04:You've entered a (name);You've just #walk_into_syn_p# a (name) +05:#dec_find-yourself# in a (name-n). A (name-adj) one +06:#dec_find-yourself# in a (name-n). A (name-adj) kind of space at the craft +07:I am sorry to announce that you are now in the (name) +08:Ah, the (name-n). This is some kind of (name-n), really great (name-adj) vibes in this place, a wonderful (name-adj) atmosphere. And now, well, you're in it +09:This might come as a shock to you, but you've just #enter_syn_p# a (name) +010:I am #announce_mood# to announce that you are now in the (name) +011:You've #enter_syn_p# a (name-adj) room of the spaceship. Your mind races to think of what kind of room would be (name-adj). And then it hits you. Of course. You're in the (name) +012:Of every (name-n) you could have #walk_into_syn_p#, you had to #walk_into_syn_v# a (name-adj) one +013:You have #enter_syn_p# a (name-n) in the capsule. Not the (name-n) you'd expect. No, this is a (name) +014:You are in a (name-n). It seems to be pretty (name-adj) here +015:You #dec_what# in a (name-adj) kind of place at this spaceship. That is to say, you're in a (name-n) +016:If you're wondering why everything seems so (name-adj) all of a sudden, it's because you've just #walk_into_syn_p# the (name) +017:You make a grand eccentric entrance into a (name);You make another one of your grand eccentric entrances into a (name) +018:Look at you, bigshot, walking into a (name) like it isn't some huge deal +019:Look around you. Take it all in. It's not every day someone gets to be in a (name) +020:A #signquality# #sign# tells you that you are now in the (name);Look at that #sign#! What does it say? It says (name) Module? Well that's cool +021:This just in- You, in the (name);Welcome to the (name) of Discovery space shuttle;Wow! You're on the pad of Discovery, basically in the (name);Here we are in the (name);You've entered a (name);This (name-n) you have just entered is definitely (name-adj) +022:If you're wondering why everything seems so weird all of a sudden, it's because you've just #launched_into_syn_v#, the space with no gravity anymore +# << ------------------------------------------------------------------------- >> + + +# --- Inform7 Snippets ---------------------------------------------------------- +## Shouldn't need to be messed with. These are shortcuts for when you need to use i7 code. Probably a bad idea to include symbols or tokens inside these +### +i7_closed/open:[if (obj) is open]an open[otherwise]a closed[end if] +i7_list_in:[a list of things in the (obj)] +i7_list_on:[a list of things on the (obj)] +i7_empty:[if (obj) contains nothing]an empty[otherwise]a[end if] +inform7:[if (obj) is locked]a locked[else if (obj) is open]an opened[otherwise]a closed[end if] +inform7A:[if (obj) is locked]A locked[else if (obj) is open]An opened[otherwise]A closed[end if] +inform7noa:[if (obj) is locked]a locked[else if (obj) is open]an opened[otherwise]a closed[end if] +inform7noun:[if (obj) is locked]locked[else if (obj) is open]opened[otherwise]closed[end if] +inform7nounnoa:[if (obj) is locked]locked[else if (obj) is open]opened[otherwise]closed[end if] +# << ------------------------------------------------------------------------- >> + + +# --- Prefixes ------------------------------------------------------------------ +## To be affixed before object descriptions. Keep away from doors. Prefixes start with a uppercase letter and end with "a" +### +prefix:You see a gleam over in a corner, where you can see a;What's that over there? It looks like it's a;You scan the room, seeing a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;You smell #smelltype# smell, and follow it to a;Were you looking for a (name-n)? Because look over there, it's a;You scan the room for a (name-n), and you find a;You hear a noise behind you and spin around, but you can't see anything other than a;Look out! It's a- oh, never mind, it's just a;Look over there! a;Oh, great. Here's a;Hey, want to see a (name-n)? Look over there, a;If you haven't noticed it already, there seems to be something there by the wall, it's a;When you freely float, you notice a;Oh wow! Is that what I think it is? It is! It's a;You are pushed against the wall, inadvertently pressing a secret button. The wall opens up to reveal a;You see a;As if things weren't amazing enough already, you can even see a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a +# << ------------------------------------------------------------------------- >> + + +# --- Suffixes ------------------------------------------------------------------ +## To be affixed after object descriptions. Keep away from doors. Keep in mind a suffix is usually (but not always) followed by a prefix. Suffixes start with punctuation and +## end with a period (or exclamation/question mark). +### +suffix_meta:. There's something about an object in a module that's just so... TextWorld.;. You can't really describe the (name-n) besides that it's (name-adj).;. Does this look like anything mentioned in the instructions?;. What a great pairing of adjectives and nouns!;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on. +suffix_fulfillment:. A (name-n)... Is that really what you were looking for?;. Is this it? Is this what you came to TextWorld to see? a (name-n)?;. Hmm. You always thought you'd be more excited to see a (name-n) in a spaceship module.;. Is this what you came to TextWorld for? This... (name-n)?;. You look around you, at all the containers and supporters, doors and objects, and you think to yourself. Why? Why Textworld? +suffix_(r):. Okay, just remember what is your mission here to do, and everything will go great.;. You try to gain information on your surroundings by using a technique you call 'looking.';. You can barely contain your excitement.;. The room seems oddly familiar, as though it were only superficially different from the other rooms in the spacecraft.;. You decide to just list off a complete list of everything you see in the module, because hey, why not?;. I guess you better just go and list everything you see here.;. You start to take note of what's in the module.;. You decide to start listing off everything you see in the module, as if you were in a text adventure.;. The module is well lit.;. You begin to take stock of what's here.;. Let’s list all the required tools here for the mission.;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# + +## * Cut for length +suffix:.;. You shudder, but continue examining the module.;. You wonder idly who left that here.;. Now why would someone leave that there?;. There's something strange about this being here, but you can't put your finger on it.;. There's something strange about this thing being here, but you don't have time to worry about that now.;. Huh, weird.;, so there's that.;!;. Hmmm... what else, what else?;. Wow, isn't TextWorld just the best?;. I mean, just wow! Isn't TextWorld just the best?;. You can't wait to tell the folks at mission control hall about this!;. Something scurries by right in the corner of your eye. Probably nothing.;. You idly wonder how they came up with the name TextWorld for this place. It's pretty fitting.;. Suddenly, you bump your head on the ceiling, but it's not such a bad bump that it's going to prevent you from looking at objects and even things.;. Now that's what I call TextWorld!;. Classic TextWorld.;. The light flickers for a second, but nothing else happens.;.;.;.;#emptymainperiod#;#emptymainperiod#;#emptymainperiod#;#suffix_fulfillment#;#suffix_meta# + +## * Multi suffixes need to be more flexible than normal ones +suffix-multi:.;. You shudder, but continue examining the room.;. You wonder idly who put this stuff here.;. There's something strange about this stuff being here, but you can't put your finger on it.;. There's something strange about this stuff being here, but you don't have time to worry about that now.;. Huh, weird.;, so there's that.;, so why not take a picture, it'll last longer!;. It doesn't get any more TextWorld than this!;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# +suffix_(s)_mid:.;. You shudder, but continue examining the (name-n).;. You wonder idly who left that here.;. Now why would someone leave that there?;#suffix_meta#;. Why don't you take a picture of it, it'll last longer!;!;. Wow, isn't TextWorld just the best?;. I guess it's true what they say, if you're looking for a (name-n), go to TextWorld.;. What a coincidence, weren't you just thinking about a (name-n)?;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# +suffix_(s)_end:.;. Check and see you cannot remove them.;. You shudder, but continue examining the room.;. There's something strange about this being here, but you can't put your finger on it.;. There's something strange about this thing being here, but you don't have time to worry about that now. You have more important mission!;. Huh, weird.;, so there's that.;. Hmmm... what else, what else?;. I mean, just wow! Isn't TextWorld just the best?;. You can't wait to tell the folks at home about this!;. Something scurries by right in the corner of your eye. Probably nothing.;. You idly wonder how they came up with the name TextWorld Spaceship for this place. It's pretty fitting.;. Suddenly, you bump your head on the ceiling, nogravity ha?! but it's not such a bad bump that it's going to prevent you from looking at objects and even things.;. Wow! Just like in the StartWar movies!;. It doesn't get more TextWorld than this!;. Now that's what I call TextWorld!;. Classic TextWorld.;#suffix#;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# +suffix_(s)_end_angry:. You move on, clearly #upsetwith# TextWorld.;. You move on, clearly #upsetwith# your TextWorld experience.;. Sometimes, just sometimes, TextWorld can just be the worst.;. What's the point of an empty (name-n)?;. Hopefully this doesn't make you too upset.;. You make a mental note to not get your hopes up the next time you see a (name-n) in a room.;. ;. Hopefully, this discovery doesn't ruin your TextWorld experience!;. Silly (name-n), silly, empty, good for nothing (name-n).;. You think about smashing the (name-n) to bits, throwing the bits #intheblank#, etc, until you get bored.;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n)! oh well.;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, and here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# +# << ------------------------------------------------------------------------- >> + + +# --- Separators Description ---------------------------------------------------- +## Used to separate the description of different object types + +## * Container Descriptions +### Rules for Container Descriptions +### Good idea to subdivide these into difficulty levels +### room_desc_(c): generates all container descriptions +### containerdescription: contains all physical exterior descriptions of containers +### room_desc_(c)_1_name: describes the container as an adj+noun +### room_dec_(c)_1_noun: describes the container as a noun +### room_desc_(c)_content: decides if we append a description of the container's contents depending on if the container is open or closed +### opencontainer:what is appended if the container is open +### room_desc_(c)_2_adj: adds an adjective and a list of contents (creates doubled adjectives?) +### room_desc_(c)_2: list of contents without an adjective +### +room_desc_(c):#containerdescription##room_desc_(c)_content# + +containerdescription:#room_desc_(c)_1_name#;#room_desc_(c)_1_noun# + +room_desc_(c)_1_name:#reg-a#;#normal-a#;#difficult-a#;#moredifficult-a#;#playful-a# +reg-a:#a1#;#a2# +normal-a:#a3#;#a4#;#a5# +difficult-a:#a6# +moredifficult-a:#reg-a# +playful-a:#reg-a# + +room_desc_(c)_1_noun:#reg-b#;#normal-b#;#difficult-b#;#moredifficult-b#;#playful-b# +reg-b:#b1#;#b2# +normal-b:#b3#;#b4#;#b5# +difficult-b:#reg-b# +moredifficult-b:#reg-b# +playful-b:#reg-b# + +room_desc_(c)_content:[if (obj) is open and there is something in the (obj)] #opencontainer##suffix#[end if][if (obj) is open and the (obj) contains nothing] #emptyreaction#[end if] +emptyreaction:The (name-n) is empty, what a horrible day!;The (name-n) is empty! What a waste of a day!;The (name-n) is empty! This is the worst thing that could possibly happen, ever!;Empty! What kind of nightmare TextWorld is this?;What a letdown! The (name-n) is empty! + +opencontainer:The (name) contains #i7_list_in# + +room_desc_(c)_2_adj:#c1#;#c2#;#c3#;#c4#;#c5#;#c6#;#c7#;#c8#;#c9# + +room_desc_(c)_2:#d0#;#d1#;#d2#;#d3#;#d4# + +room_desc_(c)_multi_noun:#e1# +room_desc_(c)_multi_open_noun:#f1#;#f2#;#f3#;#f4#;#f5#;#f6# + +room_desc_(c)_multi_adj:#g1# +room_desc_(c)_multi_open_adj:#h1#;#h2#;#h3#;#h4# + +## * Container Description Templates +### +### # A # +a1:#how_see# #inform7# (name).;#a6# +a2:#how_see# #inform7# #name_var# #here_alt#.;#a6# +a3:#inform7A# #name_var# is #here_alt#.;#a6# +a4:#a1#;#a6# +a5:#a2#;#a6# +a6:#prefix# (name)#suffix# + +### # B # +b1:#how_see# #inform7# (name-n).;#b5# +b2:#how_see# #inform7# (name-n) #here_alt#.;#b5# +b3:#inform7A# (name-n) is #here_alt#.;#b5# +b4:#b1#;#b5# +b5:#prefix# (name-n)#suffix# + +### # C # +c1:#it_is# (name-adj), and #contain_syn_v# #i7_list_in#. +c2:#it_is# (name-adj). Also, there #listwithis# in it. +c3:#c1# +c4:#ContentsC-# [list of things in the (obj)]. +c5:there [is|are] [a list of things in the (obj)] in this silly (name-adj) thing. +c6:#c9# +c7:#c9# +c8:Let's see what's inside - #i7_list_in#. +c9:#it# #reminds_you# the containers #ofyouryouth#. Oh, how they also #contain_syn_p# #i7_list_in#. + +### # D # +d0:the (name) contains #i7_list_in#. +d1:It #contain_syn_v# #i7_list_in#.;There is #i7_list_in# in it. +d2:There #listwithis# #findin_syn_p# it. +d3:You can see #i7_list_in# in the (name-n). +d4:In it, you can see #i7_list_in#. + +### # E # +e1:[if (obj) is open]#room_desc_(c)_multi_open_noun#.[else if (obj) is locked]The (name-n) is locked.[otherwise]The (name-n) is closed.[end if] + +### # F # +f1:The (name-n) #contain_syn_v# #i7_list_in# +f2:There #listwithis# #findin_syn_p# the (name-n) +f3:You can see #i7_list_in# in the (name-n) +f4:#f5#;#f6# +f5:#f6# +f6:The (name-n) #reminds_you# the containers #ofyouryouth#. Oh, how they also #contain_syn_p# #i7_list_in# + +### # G # +g1:[if (obj) is open]#room_desc_(c)_multi_open_adj#.[else if (obj) is locked]The (name-adj) one is locked.[otherwise]The (name-adj) one is closed.[end if] + +### # H # +h1:The (name-adj) one #contain_syn_v# #i7_list_in# +h2:There #i7_list_in# #findin_syn_p# the (name-adj) one +h3:You can see #i7_list_in# in the (name) +h4:In the (name-adj) one, you can see #i7_list_in# + +## * Supporter Descriptions +### Similar to Container descriptions, but without open/close or lock/unlock +### room_desc_(s): hub +### room_desc_(s)_1_noun : description of supporter without adjective. Paired with--> room_desc_(s)_2_adj +### room_desc_(s)_1_name : same as above, but with an adjective +### room_desc_(s)_2_adj : adjective for supporter plus a list of things on it +### room_desc_(s)_2: +### +room_desc_(s):#room_desc_(s)_1_noun# #room_desc_(s)_2_adj#;#room_desc_(s)_1_name# #room_desc_(s)_2# + +room_desc_(s)_1_noun:#prefix# floating (name-n)#suffix_(s)_mid# + +room_desc_(s)_1_name:#prefix# freefloating (name)#suffix_(s)_mid# + +room_desc_(s)_2_adj:The (name-n) is (name-adj).[if there is something on the (obj)] On the (name) #how_see_u# #i7_list_on# tightly fixed#suffix_(s)_end#[end if][if there is nothing on the (obj)] #emptysupporter##suffix_(s)_end_angry#[end if];The (name-n) is (name-adj) [if there is nothing on the (obj)] on the (name) #i7_list_on# which are screwed to the (name-n)[otherwise]#emptysupporter#[end if] + +room_desc_(s)_2:[if there is something on the (obj)]On the (name) #how_see_u# #i7_list_on# tightened to the surface#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter##suffix_(s)_end_angry#[end if];[if there is something on the (obj)]You see #i7_list_on# on the (name-n), see how it is fixed to the surface#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter##suffix_(s)_end_angry#[end if] + +room_desc_(s)_multi_noun:[if there is something on the (obj)]On the (name-n), you see #i7_list_on#, which you cannot remove them#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter_multi##suffix_(s)_end_angry#[end if] + +room_desc_(s)_multi_adj:[if there is something on the (obj)]On the (name-adj) one, you see #i7_list_on##suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter_multi##suffix_(s)_end_angry#[end if] + +emptysupporter:But there isn't a thing on it, weightless is amazing!;Unfortunately, there isn't a thing on it;But the thing is empty;But the thing is empty, unfortunately;But the thing hasn't got anything on it;But oh no! there's nothing on this piece of #trash#;The (name-n) appears to be empty;Looks like someone's already been here and taken everything off it, though;However, the (name-n), like an empty (name-n), has nothing on it; + +emptysupporter_multi:There isn't a thing on the (name-n);The (name-n) is empty;Look at the (name-n). There's nothing on this piece of #trash#;But the (name-n) hasn't got anything on it;What a letdown, there's nothing here; + +## * Group Descriptions +### +room_desc_group:You can see (^) (val), (name), here#suffix-multi#;Your attention is drawn to (^) (val), (name)#suffix-multi# + +## * Exit Descriptions +### room_desc_(d): describes a single door in the room +### room_desc_(dir): describes a single unblocked exit in the room +### room_exit_desc: describes multiple unlocked exits in the room +### room_desc_exits: possible unnecessary +### room_desc_doors_closed: describes a group of closed doors in the room +### room_desc_doors_open: describes a group of open doors in the room +### +room_desc_(d):There is #i7_closed/open# (name) leading (dir). + +room_desc_(dir):There is an #unblocked# exit to the (dir).;There is an exit to the (dir). Don't worry, it is #unblocked#.;You need an #unblocked# exit? You should try going (dir).;You don't like doors? Why not try going (dir), that entranceway is #unblocked#. + +room_exit_desc:#easy1#.;#medium1#.;#hard1#. +easy1:There [is an|are] #unblocked# [exit|exits] to the (dir);There [is an|are] [exit|exits] to the (dir). And hey, don't worry, [they are|it's] #unblocked# +medium1:[An exit|Exits] #unblocked# [lies|lie] to the (dir);You can go (dir) from here without having to deal with any doors +hard1:it looks like you can exit to the (dir), if doors aren't really your #yourthing#;if you want to leave, and doors really aren't your #yourthing# you could try going (dir);If you're not really a door person, you could leave by the (dir);If you're not really a doors fan, you could leave by the (dir);not a fan of the doors? Why not go (dir);Hot tip- if you go (dir), you won't have to deal with any doors + +room_desc_exits:There [is an|are] #unblocked# [exit|exits] to the (dir). + +room_desc_doors_closed:#easy0a#. +easy0a:There are (^) closed doors, (name-indefinite), here;Let's see how many closed doors there are. Looks like (^), (name-indefinite);There are (^) closed doors here, (name-indefinite); + +room_desc_doors_open:#easy0b#. +easy0b:There are (^) open doors, (name-indefinite), here;Let's see how many open doors there are. Looks like (^), (name-indefinite) +# << ------------------------------------------------------------------------- >> + + + +############################################ Instructions Grammar ################################################################## + +# --- Compound Command Description Functions ------------------------------------ +## +### +ig_unlock_open:open the locked #lock_types# using the (k).;unlock and open the #lock_types#.;unlock and open the #lock_types# using the (k).;open the #lock_types# using the (k). +ig_unlock_open_take:open the locked #lock_types# using the (k) and take the #obj_types_no_key#.;unlock the #lock_types# and take the #obj_types_no_key#.;unlock the #lock_types# using the (k), and take the #obj_types_no_key#.;take the #obj_types_no_key# from within the locked #lock_types#. +ig_unlock_open_release:open the locked #lock_types# using the (k) and unhook the #obj_types_no_key#.;unlock the #lock_types# and release the #obj_types_no_key#.;unlock the #lock_types# using the (k), and unhook the #obj_types_no_key#.;release the #obj_types_no_key# from within the locked #lock_types#. +ig_open_take:take the #obj_types# from the (c).;open the (c) and take the #obj_types#.;from in the closed (c), take the #obj_types#. +ig_take/c_unlock:take the (k) and use it to unlock the #lock_types#.;unlock the #lock_types#, with the (k).; +ig_take/s_unlock:take the (k) and use it to unlock the #lock_types#.;unlock the #lock_types#, with the (k).; +ig_take_unlock:#take_syn_v# the (k) and use it to unlock the #lock_types#.;unlock the #lock_types# with the (k).; +ig_open_insert:open the (c) and place the #obj_types# in it.;put the #obj_types# in the closed (c).; +ig_insert_close:place the #obj_types# in the (c) and close it.;close (c) after placing the #obj_types# in it.;attach the #obj_types# to the hook in the (c) and close it. +ig_close_lock:close the #lock_types# and lock it.;close the #lock_types# and lock it with the (k). +# << ------------------------------------------------------------------------- >> + + +# --- Flavour Text --------------------------------------------------------------- +## +### +quest:#prologue# (list_of_actions) #epilogue# +quest_one_action:#prologue_one_action# (action) +prologue:#welcome#! Here is your task for today. #newsentence#;#welcome#! Here is how to play! #newsentence#;#welcome#! #newsentence#;Hey, thanks for coming over to the TextWorld today, there is something I need you to do for me. #newsentence# +prologue_one_action:#welcome#! Your task for today is to;#welcome#!;Your objective is to;Hey, thanks for coming over to TextWorld! Please +newsentence:First off,;First of all,;First stop,;First step,;Your first objective is to;First thing I need you to do is to;First off, if it's not too much trouble, I need you to;First of all, you could, like,;First, it would be #begood# if you could +action_separator: Then, ; Next, ; Following that, ; If you can #do_syn_v# that, ; Once you #do_syn_v# that, ; That done, ; With that over with, ; With that accomplished, ; With that done, ; Okay, and then, ; And then, ;#emptyinstruction# +epilogue:Once that's all handled, you can stop!;And once you've done that, you win!;And if you do that, you're the winner!;That's it!;Got that? Good!;Alright, thanks! +welcome:Welcome to TextWorld;You are now playing a #exciting# #game# of TextWorld Spaceship;Welcome to another #exciting# #game# of TextWorld;It's time to explore the amazing world of TextWorld Galaxy;Get ready to pick stuff up and put it in places, because you've just entered TextWorld shuttle;I hope you're ready to go into rooms and interact with objects, because you've just entered TextWorld shuttle;Who's got a virtual machine and is about to play through an #exciting# round of TextWorld? You do; +game:game;round;session;episode +# << ------------------------------------------------------------------------- >> + + +# --- Separators ----------------------------------------------------------------- +## *--- Action separators +### Need at least 5 for each action type +### +action_separator_take:#afterhave# #take_syn_pp# the #obj_types#, ;#after# #taking# the #obj_types#, ;With the #obj_types#, ;If you can get your hands on the #obj_types#, ;#emptyinstruction#; +action_separator_take/s:#afterhave# #take_syn_pp# the #obj_types# from (s), ;#after# #taking# the #obj_types# from (s), ;With the #obj_types#, ;If you can get your hands on the #obj_types#, ;#emptyinstruction# +action_separator_eat:#afterhave# #eat_syn_pp# the #eat_types#, ;#after# #eating# the #obj_types#, ;#emptyinstruction#; +action_separator_insert:#afterhave# #insert_syn_pp# the #obj_types# into the (c), ;#after# #inserting# the #obj_types# into the (c), ;#emptyinstruction# +action_separator_open: #afterhave# #open_syn_pp# the #close_open_types#, ;#after# #opening# the #close_open_types#, ;#emptyinstruction# +action_separator_unlock: #afterhave# #unlock_syn_pp# the #lock_types#, ;#after# #unlocking# the #lock_types#, ;#emptyinstruction#; +action_separator_lock: #afterhave# #lock_syn_pp# the #lock_types#, ;#after# #locking# the #lock_types#, ;#emptyinstruction#; +action_seperator_go: #afterhave# #go_syn_pp# (dir), ;#after# #going# (dir), ;once you're (dir), ;once you're in the (dir), ;If you can manage to go (dir), ;#afterhave# #go_syn_pp# through the (r), ;#after# #going# through the (r), ;#emptyinstruction# +action_seperator_go/south: #afterhave# #go_syn_pp# south, ;#emptyinstruction# +action_seperator_go/north: #afterhave# #go_syn_pp# north, ;#emptyinstruction# +action_seperator_go/east: #afterhave# #go_syn_pp# east, ;#emptyinstruction# +action_seperator_go/west: #afterhave# #go_syn_pp# west, ;#emptyinstruction# +action_separator_close: #afterhave# #close_syn_pp# the #close_open_types#, ; #after# #closing# the #close_open_types#, ;#emptyinstruction# +action_separator_release: #afterhave# #release_syn_pp# the #obj_types# from the #(s)_var#, ; #after# #releasing# the #obj_types# into the (r);#emptyinstruction# + + +## *--- Separator Symbols +### +afterhave:After you have;Having;Once you have;If you have +after:After; +# << ------------------------------------------------------------------------- >> + + + + +# --- Empty Icon ---------------------------------------------------------------- +### +emptymainperiod:#emptymain# +emptymain:#empty1#;#empty2#;#empty3#;#empty4#;#empty5#;#empty6#;#empty7#;#empty8#;#empty9#;#empty10#;#empty11#;#empty12#;#empty13#;#empty14#;#empty15#;#empty16#;#empty17#;#empty18#;#empty19#;#empty20#;#empty21#;#empty22#;#empty23#;#empty24#;#empty25#;#empty26#;#empty27#;#empty28#;#empty29#;#empty30#;#empty31#;#empty32#;#empty33#;#empty34#;#empty35#;#empty36#;#empty37#;#empty38#;#empty39#;#empty40#;#empty41#;#empty42#;#empty43#;#empty44#;#empty45#;#empty46#;#empty47#;#empty48#;#empty49#;#empty50#;#empty51#;#empty52#;#empty53#;#empty54#;#empty55#;#empty56#;#empty57#;#empty58#;#empty59#;#empty60#;#empty61#;#empty62#;#empty63# +empty1:.; +empty2:.; +empty3:.; +empty4:.; +empty5:.; +empty6:.; +empty7:.; +empty8:.; +empty9:.; +empty10:.; +empty11:.; +empty12:.; +empty13:.; +empty14:.; +empty15:.; +empty16:.; +empty17:.; +empty18:.; +empty19:.; +empty20:.; +empty21:.; +empty22:.; +empty23:.; +empty24:.; +empty25:.; +empty26:.; +empty27:.; +empty28:.; +empty29:.; +empty30:.; +empty31:.; +empty32:.; +empty33:.; +empty34:.; +empty35:.; +empty36:.; +empty37:.; +empty38:.; +empty39:.; +empty40:.; +empty41:.; +empty42:.; +empty43:.; +empty44:.; +empty45:.; +empty46:.; +empty47:.; +empty48:.; +empty49:.; +empty50:.; +empty51:.; +empty52:.; +empty53:.; +empty54:.; +empty55:.; +empty56:.; +empty57:.; +empty58:.; +empty59:.; +empty60:.; +empty61:.; +empty62:.; +empty63:.; + + +emptyinstruction:#emptyinstruction1#;#emptyinstruction2#;#emptyinstruction3#;#emptyinstruction4#;#emptyinstruction5#;#emptyinstruction6#;#emptyinstruction7#,#emptyinstruction8#;#emptyinstruction9#;#emptyinstruction10# +emptyinstruction1: And then, ; +emptyinstruction2: Then, ; +emptyinstruction3: After that, ; +emptyinstruction4: And then, ; +emptyinstruction5: After that, ; +emptyinstruction6: Then, ; +emptyinstruction7: And then, ; +emptyinstruction8: After that, ; +emptyinstruction9: And then, ; +emptyinstruction10: Then, ; From 47757f1354b413b6ff9fabf1b45d3917ef6e3d93 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Thu, 29 Aug 2019 16:37:02 -0400 Subject: [PATCH 05/13] This is the design of the infrastructure of medium level of the game - Push_button and Cloth are assumed simply as key and object, respectively. --- textworld/challenges/spaceship/maker.py | 237 +++++++++++++++++++++++- 1 file changed, 235 insertions(+), 2 deletions(-) diff --git a/textworld/challenges/spaceship/maker.py b/textworld/challenges/spaceship/maker.py index 71cdd908..8207a3b2 100644 --- a/textworld/challenges/spaceship/maker.py +++ b/textworld/challenges/spaceship/maker.py @@ -8,7 +8,7 @@ PATH = r"/home/v-hapurm/Documents/Haki's Git/TextWorld/textworld/challenges/spaceship/textworld_data" -def spaceship_maker(): +def spaceship_maker_level_easy(): # GameMaker object for handcrafting text-based games. kb = KnowledgeBase.load(target_dir=PATH) gm = GameMaker(kb=kb, theme='Spaceship') @@ -84,5 +84,238 @@ def spaceship_maker(): gm.quests.append(quest) +def spaceship_maker_level_medium(): + # GameMaker object for handcrafting text-based games. + kb = KnowledgeBase.load(target_dir=PATH) + gm = GameMaker(kb=kb, theme='Spaceship') + + # ===== Sleep Station Design ======================================================================================= + sleep_station = gm.new_room("Sleep Station") + sleep_station.desc = "This is a typical bedroom in spaceship; here, it is called sleep station. It is small " \ + "but comfortable to take a good rest after a day full of missions. However, today your " \ + "mission will start from here. Wait to be notified by a message. So, you should find " \ + "that message first." \ + " " \ + "BTW, don't forget that when the Hatch door is open, you should already have worn your " \ + "specially-designed outfit to be able to enter and stay at Hatch area; otherwise you'll die!" \ + " Yes! Living in space is tough." # Text to display when issuing command "examine note". + + sleep_bag = gm.new(type='c', name="sleeping bag") + sleep_bag.desc = "cool! You can sleep in a comfy bag." + sleep_station.add(sleep_bag) # Sleeping bag is fixed in place in the Sleep Station. + gm.add_fact("open", sleep_bag) + + surf_1 = gm.new(type='s', name='vertical desk') # surf_1 is a table (supporter) in the Sleep Station. + surf_1.desc = "This is not a regular table. The surface is installed vertically and your objects are attached " \ + "or hooked to it, why? Come on! we are in space, there is no gravity here." + sleep_station.add(surf_1) # The card box contains nothing at this game + + laptop = gm.new(type='o', name="laptop") + laptop.desc = "This is your personal laptop which is attached to the surface of the table. " \ + "You can do regular things with this, like check your emails, watch YouTube, Skype with family,etc." \ + "Since you are here, we recommend you to check your emails. New missions are posted through emails. " + surf_1.add(laptop) + + # ===== US LAB Design ============================================================================================== + us_lab = gm.new_room("US LAB") + us_lab.desc = "This is where Americans do their research on Space. In addition to all computers and lab gadgets, " \ + "you can find a couple of objects here which are useful during our game. Let's explore the room." + + box_a = gm.new(type='c', name="box A") + box_a.desc = "This a regular box, keeps the electronic key to open door C. But it is locked. " \ + "The lock looks like a keypad, means that the key is in fact just a code! So, ... let's " \ + "search around to find its key." + us_lab.add(box_a) + gm.add_fact("locked", box_a) + + key_1 = gm.new(type='k', name="electronic key 1") + key_1.desc = "This key is a card key which opens door C." + box_a.add(key_1) + + corridor_1 = gm.connect(sleep_station.south, us_lab.north) + door_a = gm.new_door(corridor_1, name="door A") + gm.add_fact("closed", door_a) + + # ===== European Module Design ===================================================================================== + european_module = gm.new_room("European Module") + european_module.desc = "This room belongs to European scientists. Isn't it cool? what do they research? well, " \ + "we can explore it later... For now, there is a key code here. This code opens the box " \ + "in the next room and consequently takes you to the next stage. So, explore the table to " \ + "find the key." + + surf_2 = gm.new(type='s', name='table') + surf_2.desc = "This is a simple table located in the middle of the room. Let's take a look at it..." + european_module.add(surf_2) + + box_b = gm.new(type='c', name="box B") + box_b.desc = "This a regular box, keeps the key to open box A." + surf_2.add(box_b) + gm.add_fact("closed", box_b) + + key_2 = gm.new(type='k', name="code key 1") + key_2.desc = "This key is in fact a digital code which opens the box in the US Lab area. " \ + "The code, in fact, is written on a piece of paper." + box_b.add(key_2) + gm.add_fact("match", key_2, box_a) + + chair_1 = gm.new(type='s', name='chair') + chair_1.desc = "this is a dark-gray chair which is developed to be used in space." + european_module.add(chair_1) + + corridor2 = gm.connect(us_lab.east, european_module.west) + + # ===== Russian Module Design ====================================================================================== + russian_module = gm.new_room("Russian Module") + russian_module.desc = "The Russian module is a typical space lab that you can expect, filled with a lot of " \ + "processing machines, test equipments and space drive cars. Since it is located at the " \ + "center of International Space Station, it is also important room for everyone. there are " \ + "many other objects here and there belongs to other astronauts, probably that's why here " \ + "looks a bit messy. There are some stuffs here you should pick, obviously if you can find " \ + "them among all this mess." + + surf_3 = gm.new(type='s', name='metal table') + surf_3.desc = "This is a big metal table, a messy one, there are many things on it, it is difficult to find " \ + "what you want. However, there is just one item which is important for you. Try to find that item." + russian_module.add(surf_3) + + papers = gm.new(type='o', name='bunch of sticked papers') + surf_3.add(papers) + + notebooks = gm.new(type='o', name='lots of hanged notebooks') + surf_3.add(notebooks) + + tools = gm.new(type='o', name='attached bags for mechanical tools') + surf_3.add(tools) + + box_c = gm.new(type='c', name="box C") + box_c.desc = "This box is locked! sounds it carries important item... So, let's find its key to open it. Wait... " \ + "strange! the lock looks like a heart!! Wait we've seen something similar to this somewhere before." + surf_3.add(box_c) + gm.add_fact("locked", box_c) + + key_3 = gm.new(type='k', name="digital key 1") + key_3.desc = "This key is an important key in this craft. If you want to leave the spaceship, you definitely " \ + "need this key " + box_c.add(key_3) + + surf_4 = gm.new(type='s', name='wall-mounted surface') + surf_4.desc = "This is a wall-mounted surface which different instruments are installed on this. " \ + "These instruments are basically control various modules and doors in the shuttle." + russian_module.add(surf_4) + + box_d = gm.new(type='c', name="exit box (box D)") + box_d.desc = "The most important box here, which is in fact locked! sounds it carries important item... " \ + "So, let's find its key to open it." + surf_4.add(box_d) + gm.add_fact("locked", box_d) + + """ + Push button should be defined here + """ + push_button = gm.new(type='k', name="exit push button") + russian_module.add(push_button) + + corridor3 = gm.connect(us_lab.south, russian_module.north) + door_b = gm.new_door(corridor3, name="door B") + gm.add_fact("locked", door_b) + gm.add_fact("match", key_1, door_b) # Tell the game 'Electronic key' is matching the 'door B''s lock + + # ===== Lounge Design ============================================================================================== + lounge = gm.new_room("Lounge Module") + lounge.desc = "This lounge is very quiet room with a big round window to the space. Wow, you can look to our " \ + "beloved Earth from this window. This room is the place that you can stay here for hours and just " \ + "get relax. This room also contains some other stuff, let's explore what they are ..." + + box_e = gm.new(type='c', name="box E") + box_e.desc = "This box is actually a wall-mounted bag and you can put an object into it. Since we have no " \ + "gravity in the space, you can't just simply leave the object in the room. The object should be " \ + "hooked or inserted into a container like this bag. Well, know we know what it is!" + lounge.add(box_e) + gm.add_fact("closed", box_e) + + key_4 = gm.new(type='k', name="electronic key 2") + key_4.desc = "This key is the key opens the door to the control room. Although it looks like a regular iron key, " \ + "it is very special metal key! Not any other key can be like it. Make sure to keep it in safe place." + box_e.add(key_4) + + corridor4 = gm.connect(russian_module.east, lounge.west) + + # ===== Control Module Design ====================================================================================== + control_module = gm.new_room("Control Module") + control_module.desc = "This is the heart of this spaceship! Wow ... look around, all the monitors and panels. " \ + "It is like you can control everything from here; more interestingly, you can communicate " \ + "with people on the Earth. There are also super important objects kept in this room. Let's " \ + "find them." + + box_f = gm.new(type='c', name="secured box (box F)") + box_f.desc = "This box is secured very much, simple box with a complex, strange keypad to enter the code! " \ + "so ... it should contain extremely important items in it. Isn't it the thing you are looking for?!" + control_module.add(box_f) + gm.add_fact("locked", box_f) + gm.add_fact("match", key_3, box_f) + + book = gm.new(type='o', name='Secret Codes Handbook') + book.desc = "If you open and check this book, here it is the description: 'This is a book of all secret codes " \ + "to manage different actions and functions inside the International Space Station. These codes are " \ + "pre-authorized by the main control room at Earth unless it is mentioned.'" \ + " " \ + "On the second page of the book, you can find this: 'To open the hatch door you should have both " \ + "two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening the hatch. " \ + "Otherwise, your life is in fatal danger.'" + box_f.add(book) + + key_5 = gm.new(type='k', name="digital key 2") + box_f.add(key_5) + gm.add_fact("match", key_5, box_d) + key_6 = gm.new(type='k', name="code key 2") + box_f.add(key_6) + + corridor5 = gm.connect(control_module.east, russian_module.west) + door_c = gm.new_door(corridor5, name="door C") + gm.add_fact("locked", door_c) + gm.add_fact("match", key_4, door_c) # Tell the game 'Electronic key' is matching the 'door B''s lock + + # ===== Hatch Design =============================================================================================== + hatch = gm.new_room("Hatch") + hatch.desc = "This area is like the entrance to the spaceship, so like home entrance with outer and inner doors " \ + "and a place that outfits are hooked. There are only two important differences: first, if the outer " \ + "door is open and you don't have outfit on you, you are dead!! No joke here! So make sure that you " \ + "open the door after wearing those cloths. Second, the door nob to open the door is not neither on " \ + "the door nor in this room. You should open the external door from Russian Module! woooh so much of " \ + "safety concerns, yeah?!" + + """ + Cloths + """ + cloth = gm.new(type='o', name="outfit") + hatch.add(cloth) + + corridor6 = gm.connect(hatch.north, lounge.south) + door_d = gm.new_door(corridor6, name="door D") + gm.add_fact("locked", door_d) + gm.add_fact("match", key_6, door_d) + + # ===== Outside Spaceship (Space) Design =========================================================================== + outside = gm.new_room("Outside") + outside.desc = "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means that " \ + "you have the special outfit on you and you passed the medium level of the game! Congrats!" + + corridor7 = gm.connect(outside.north, hatch.south) + door_e = gm.new_door(corridor7, name="door E") + gm.add_fact("locked", door_e) + gm.add_fact("match", push_button, door_e) + + # ===== Player and Inventory Design ================================================================================ + gm.set_player(sleep_station) + + key_7 = gm.new(type='k', name="hearty key") + key_7.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." + gm.add_fact("match", key_7, box_c) + gm.inventory.add(key_7) # Add the object to the player's inventory. + + gm.render(interactive=True) + + if __name__ == "__main__": - spaceship_maker() + # spaceship_maker_level_easy() + spaceship_maker_level_medium() From dbcd1b12b7866f8662243863788b577d40704c19 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Fri, 6 Sep 2019 09:46:15 -0400 Subject: [PATCH 06/13] parent 47757f1354b413b6ff9fabf1b45d3917ef6e3d93 author HakiRose 1567777575 -0400 committer HakiRose 1582743626 -0500 Medium-level Spaceship game -- cloth(finished), Push button (in progress) --- textworld/challenges/spaceship/maker.py | 402 +++++++++++++----- .../spaceship/textworld_data/logic/cloth.twl | 55 +++ .../textworld_data/logic/container.twl | 36 +- .../spaceship/textworld_data/logic/door.twl | 55 ++- .../textworld_data/logic/inventory.twl | 72 +++- .../spaceship/textworld_data/logic/player.twl | 2 + .../textworld_data/logic/push_button.twl | 67 +++ .../textworld_data/logic/supporter.twl | 2 + .../spaceship/textworld_data/logic/thing.twl | 4 + .../text_grammars/Spaceship.twg | 7 +- 10 files changed, 557 insertions(+), 145 deletions(-) create mode 100644 textworld/challenges/spaceship/textworld_data/logic/cloth.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/push_button.twl diff --git a/textworld/challenges/spaceship/maker.py b/textworld/challenges/spaceship/maker.py index 8207a3b2..b423dbda 100644 --- a/textworld/challenges/spaceship/maker.py +++ b/textworld/challenges/spaceship/maker.py @@ -2,10 +2,16 @@ from textworld.generator.data import KnowledgeBase from textworld import g_rng +import os +from os.path import join as pjoin +from textworld.helpers import start +from textworld.utils import make_temp_directory +import textworld +from textworld.envs.wrappers import Recorder -g_rng.set_seed(20190826) -PATH = r"/home/v-hapurm/Documents/Haki's Git/TextWorld/textworld/challenges/spaceship/textworld_data" +g_rng.set_seed(20190826) +PATH = pjoin(os.path.dirname(__file__), 'textworld_data') def spaceship_maker_level_easy(): @@ -17,20 +23,20 @@ def spaceship_maker_level_easy(): sleep_station = gm.new_room("Sleep Station") sleep_bag = gm.new(type='c', name="sleeping bag") # Provide the type and the name of the object. - sleep_bag.desc = "cool! You can sleep in a comfy bag." # Text to display when issuing command "examine note". + sleep_bag.infos.desc = "cool! You can sleep in a comfy bag." # Text to display when issuing command "examine note". sleep_station.add(sleep_bag) # Sleeping bag is fixed in place in the Sleep Station. gm.add_fact("open", sleep_bag) card_box = gm.new(type='c') # Card box is a container which is fixed in place in the Sleep Station. - card_box.desc = "It is empty." + card_box.infos.desc = "It is empty." sleep_station.add(card_box) # The card box contains nothing at this game gm.add_fact("closed", card_box) # ===== US LAB Design ============================================================================================== us_lab = gm.new_room("US LAB") key = gm.new(type='k', name="electronic key") - key.desc = "This key opens the door into the modules area. " \ - "In this space craft, the gravity is not a challenge. Thus, you can find things on the floor." + key.infos.desc = "This key opens the door into the modules area. In this space craft, the gravity is not a " \ + "challenge. Thus, you can find things on the floor." us_lab.add(key) # When added directly to a room, portable objects are put on the floor. corridor1 = gm.connect(sleep_station.south, us_lab.north) @@ -42,8 +48,8 @@ def spaceship_maker_level_easy(): supporter = gm.new(type='s') # When not provided, names are automatically generated. russian_module.add(supporter) # Supporters are fixed in place. key_code = gm.new(type='k', name="digital key") - key_code.desc = "This key is in fact a digital code which opens the secured box in the control modules area. " \ - "The code, in fact, is written on the supporter." + key_code.infos.desc = "This key is in fact a digital code which opens the secured box in the control modules " \ + "area. The code, in fact, is written on the supporter." supporter.add(key_code) corridor2 = gm.connect(us_lab.south, russian_module.north) @@ -54,11 +60,11 @@ def spaceship_maker_level_easy(): # ===== Control Module Design ====================================================================================== control_module = gm.new_room("Control Module") secured_box = gm.new(type='c', name='Secured box') # When not provided, names are automatically generated. - secured_box.desc = "This box is highly secured with a complex code that is in one of the modules in the craft. " \ - "To open the box, you should just find that code key." + secured_box.infos.desc = "This box is highly secured with a complex code that is in one of the modules in the " \ + "craft. To open the box, you should just find that code key." gm.add_fact("locked", secured_box) gm.add_fact("match", key_code, secured_box) - secured_box.desc = "The Secret Codes Handbook is in this box." + secured_box.infos.desc = "The Secret Codes Handbook is in this box." control_module.add(secured_box) # Supporters are fixed in place. book = gm.new(type='o', name='Secret Codes Handbook') # New portable object with a randomly generated name. secured_box.add(book) @@ -91,45 +97,47 @@ def spaceship_maker_level_medium(): # ===== Sleep Station Design ======================================================================================= sleep_station = gm.new_room("Sleep Station") - sleep_station.desc = "This is a typical bedroom in spaceship; here, it is called sleep station. It is small " \ - "but comfortable to take a good rest after a day full of missions. However, today your " \ - "mission will start from here. Wait to be notified by a message. So, you should find " \ - "that message first." \ - " " \ - "BTW, don't forget that when the Hatch door is open, you should already have worn your " \ - "specially-designed outfit to be able to enter and stay at Hatch area; otherwise you'll die!" \ - " Yes! Living in space is tough." # Text to display when issuing command "examine note". + sleep_station.infos.desc = "This is a typical bedroom in spaceship; here, it is called sleep station. It is " \ + "small but comfortable to take a good rest after a day full of missions. However, " \ + "today your mission will start from here. Wait to be notified by a message. So, you " \ + "should find that message first." \ + " " \ + "BTW, don't forget that when the Hatch door is open, you should already have worn " \ + "your specially-designed outfit to be able to enter and stay at Hatch area; otherwise " \ + "you'll die! Yes! Living in space is tough." sleep_bag = gm.new(type='c', name="sleeping bag") - sleep_bag.desc = "cool! You can sleep in a comfy bag." + sleep_bag.infos.desc = "cool! You can sleep in a comfy bag." sleep_station.add(sleep_bag) # Sleeping bag is fixed in place in the Sleep Station. gm.add_fact("open", sleep_bag) - surf_1 = gm.new(type='s', name='vertical desk') # surf_1 is a table (supporter) in the Sleep Station. - surf_1.desc = "This is not a regular table. The surface is installed vertically and your objects are attached " \ - "or hooked to it, why? Come on! we are in space, there is no gravity here." + surf_1 = gm.new(type='s', name='vertical desk') # surf_1 is a table (supporter) in the Sleep Station. + surf_1.infos.desc = "This is not a regular table. The surface is installed vertically and your objects are " \ + "attached or hooked to it, why? Come on! we are in space, there is no gravity here." sleep_station.add(surf_1) # The card box contains nothing at this game laptop = gm.new(type='o', name="laptop") - laptop.desc = "This is your personal laptop which is attached to the surface of the table. " \ - "You can do regular things with this, like check your emails, watch YouTube, Skype with family,etc." \ - "Since you are here, we recommend you to check your emails. New missions are posted through emails. " + laptop.infos.desc = "This is your personal laptop which is attached to the surface of the table. You can do " \ + "regular things with this, like check your emails, watch YouTube, Skype with family,etc." \ + "Since you are here, we recommend you to check your emails. New missions are posted through " \ + "emails. " surf_1.add(laptop) # ===== US LAB Design ============================================================================================== us_lab = gm.new_room("US LAB") - us_lab.desc = "This is where Americans do their research on Space. In addition to all computers and lab gadgets, " \ - "you can find a couple of objects here which are useful during our game. Let's explore the room." + us_lab.infos.desc = "This is where Americans do their research on Space. In addition to all computers and " \ + "lab gadgets, you can find a couple of objects here which are useful during our game. Let's " \ + "explore the room." box_a = gm.new(type='c', name="box A") - box_a.desc = "This a regular box, keeps the electronic key to open door C. But it is locked. " \ - "The lock looks like a keypad, means that the key is in fact just a code! So, ... let's " \ - "search around to find its key." + box_a.infos.desc = "This a regular box, keeps the electronic key to open door C. But it is locked. The lock " \ + "looks like a keypad, means that the key is in fact just a code! So, ... let's search around " \ + "to find its key." us_lab.add(box_a) gm.add_fact("locked", box_a) key_1 = gm.new(type='k', name="electronic key 1") - key_1.desc = "This key is a card key which opens door C." + key_1.infos.desc = "This key is a card key which opens door C." box_a.add(key_1) corridor_1 = gm.connect(sleep_station.south, us_lab.north) @@ -138,44 +146,46 @@ def spaceship_maker_level_medium(): # ===== European Module Design ===================================================================================== european_module = gm.new_room("European Module") - european_module.desc = "This room belongs to European scientists. Isn't it cool? what do they research? well, " \ - "we can explore it later... For now, there is a key code here. This code opens the box " \ - "in the next room and consequently takes you to the next stage. So, explore the table to " \ - "find the key." + european_module.infos.desc = "This room belongs to European scientists. Isn't it cool? what do they research? " \ + "well, we can explore it later... For now, there is a key code here. This code " \ + "opens the box in the next room and consequently takes you to the next stage. So, " \ + "explore the table to find the key." surf_2 = gm.new(type='s', name='table') - surf_2.desc = "This is a simple table located in the middle of the room. Let's take a look at it..." + surf_2.infos.desc = "This is a simple table located in the middle of the room. Let's take a look at it..." european_module.add(surf_2) box_b = gm.new(type='c', name="box B") - box_b.desc = "This a regular box, keeps the key to open box A." + box_b.infos.desc = "This a regular box, keeps the key to open box A." surf_2.add(box_b) gm.add_fact("closed", box_b) key_2 = gm.new(type='k', name="code key 1") - key_2.desc = "This key is in fact a digital code which opens the box in the US Lab area. " \ - "The code, in fact, is written on a piece of paper." + key_2.infos.desc = "This key is in fact a digital code which opens the box in the US Lab area. The code, " \ + "in fact, is written on a piece of paper." box_b.add(key_2) gm.add_fact("match", key_2, box_a) chair_1 = gm.new(type='s', name='chair') - chair_1.desc = "this is a dark-gray chair which is developed to be used in space." + chair_1.infos.desc = "this is a dark-gray chair which is developed to be used in space." european_module.add(chair_1) corridor2 = gm.connect(us_lab.east, european_module.west) # ===== Russian Module Design ====================================================================================== russian_module = gm.new_room("Russian Module") - russian_module.desc = "The Russian module is a typical space lab that you can expect, filled with a lot of " \ - "processing machines, test equipments and space drive cars. Since it is located at the " \ - "center of International Space Station, it is also important room for everyone. there are " \ - "many other objects here and there belongs to other astronauts, probably that's why here " \ - "looks a bit messy. There are some stuffs here you should pick, obviously if you can find " \ - "them among all this mess." + russian_module.infos.desc = "The Russian module is a typical space lab that you can expect, filled with a " \ + "lot of processing machines, test equipments and space drive cars, in fact for " \ + "repair and test. Since it is located at the center of International Space Station, " \ + "it is also important room for everyone. There are many other objects here and " \ + "there belongs to other astronauts, probably that's why here looks a bit messy. " \ + "There are some stuffs here you should pick, obviously if you can find them among " \ + "all this mess." surf_3 = gm.new(type='s', name='metal table') - surf_3.desc = "This is a big metal table, a messy one, there are many things on it, it is difficult to find " \ - "what you want. However, there is just one item which is important for you. Try to find that item." + surf_3.infos.desc = "This is a big metal table, a messy one, there are many things on it, it is difficult to " \ + "find what you want. However, there is just one item which is important for you. Try to " \ + "find that item." russian_module.add(surf_3) papers = gm.new(type='o', name='bunch of sticked papers') @@ -188,32 +198,32 @@ def spaceship_maker_level_medium(): surf_3.add(tools) box_c = gm.new(type='c', name="box C") - box_c.desc = "This box is locked! sounds it carries important item... So, let's find its key to open it. Wait... " \ - "strange! the lock looks like a heart!! Wait we've seen something similar to this somewhere before." + box_c.infos.desc = "This box is locked! sounds it carries important item... So, let's find its key to open it. " \ + "Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this " \ + "somewhere before." surf_3.add(box_c) gm.add_fact("locked", box_c) key_3 = gm.new(type='k', name="digital key 1") - key_3.desc = "This key is an important key in this craft. If you want to leave the spaceship, you definitely " \ - "need this key " + key_3.infos.desc = "This key is an important key in this craft. If you want to leave the spaceship, you " \ + "definitely need this key." box_c.add(key_3) surf_4 = gm.new(type='s', name='wall-mounted surface') - surf_4.desc = "This is a wall-mounted surface which different instruments are installed on this. " \ - "These instruments are basically control various modules and doors in the shuttle." + surf_4.infos.desc = "This is a wall-mounted surface which different instruments are installed on this. These " \ + "instruments are basically control various modules and doors in the shuttle." russian_module.add(surf_4) - box_d = gm.new(type='c', name="exit box (box D)") - box_d.desc = "The most important box here, which is in fact locked! sounds it carries important item... " \ - "So, let's find its key to open it." + box_d = gm.new(type='c', name="exit box") + box_d.infos.desc = "The most important box here, which is in fact locked! sounds it carries important item... " \ + "So, let's find its key to open it." surf_4.add(box_d) gm.add_fact("locked", box_d) - """ - Push button should be defined here - """ - push_button = gm.new(type='k', name="exit push button") - russian_module.add(push_button) + push_button = gm.new(type='b', name="exit push button") + push_button.infos.desc = "This push button is a key-like object which opens door A." + gm.add_fact("unpushed", push_button) + box_d.add(push_button) corridor3 = gm.connect(us_lab.south, russian_module.north) door_b = gm.new_door(corridor3, name="door B") @@ -222,46 +232,49 @@ def spaceship_maker_level_medium(): # ===== Lounge Design ============================================================================================== lounge = gm.new_room("Lounge Module") - lounge.desc = "This lounge is very quiet room with a big round window to the space. Wow, you can look to our " \ - "beloved Earth from this window. This room is the place that you can stay here for hours and just " \ - "get relax. This room also contains some other stuff, let's explore what they are ..." + lounge.infos.desc = "This lounge is very quiet room with a big round window to the space. Wow, you can look " \ + "to our beloved Earth from this window. This room is the place that you can stay here for " \ + "hours and just get relax. This room also contains some other stuff, let's explore what " \ + "they are ..." box_e = gm.new(type='c', name="box E") - box_e.desc = "This box is actually a wall-mounted bag and you can put an object into it. Since we have no " \ - "gravity in the space, you can't just simply leave the object in the room. The object should be " \ - "hooked or inserted into a container like this bag. Well, know we know what it is!" + box_e.infos.desc = "This box is actually a wall-mounted bag and you can put an object into it. Since we have no " \ + "gravity in the space, you can't just simply leave the object in the room. The object should " \ + "be hooked or inserted into a container like this bag. Well, know we know what it is!" lounge.add(box_e) gm.add_fact("closed", box_e) key_4 = gm.new(type='k', name="electronic key 2") - key_4.desc = "This key is the key opens the door to the control room. Although it looks like a regular iron key, " \ - "it is very special metal key! Not any other key can be like it. Make sure to keep it in safe place." + key_4.infos.desc = "This key is the key opens the door to the control room. Although it looks like a regular " \ + "iron key, it is very special metal key! Not any other key can be like it. Make sure to keep " \ + "it in safe place." box_e.add(key_4) corridor4 = gm.connect(russian_module.east, lounge.west) # ===== Control Module Design ====================================================================================== control_module = gm.new_room("Control Module") - control_module.desc = "This is the heart of this spaceship! Wow ... look around, all the monitors and panels. " \ - "It is like you can control everything from here; more interestingly, you can communicate " \ - "with people on the Earth. There are also super important objects kept in this room. Let's " \ - "find them." - - box_f = gm.new(type='c', name="secured box (box F)") - box_f.desc = "This box is secured very much, simple box with a complex, strange keypad to enter the code! " \ - "so ... it should contain extremely important items in it. Isn't it the thing you are looking for?!" + control_module.infos.desc = "This is the heart of this spaceship! Wow ... look around, all the monitors and " \ + "panels. It is like you can control everything from here; more interestingly, you " \ + "can communicate with people on the Earth. There are also super important objects " \ + "kept in this room. Let's find them." + + box_f = gm.new(type='c', name="secured box") + box_f.infos.desc = "This box is secured very much, simple box with a complex, strange keypad to enter the code! " \ + "So ... it should contain extremely important items in it. Isn't it the thing you are " \ + "looking for?!" control_module.add(box_f) gm.add_fact("locked", box_f) gm.add_fact("match", key_3, box_f) book = gm.new(type='o', name='Secret Codes Handbook') - book.desc = "If you open and check this book, here it is the description: 'This is a book of all secret codes " \ - "to manage different actions and functions inside the International Space Station. These codes are " \ - "pre-authorized by the main control room at Earth unless it is mentioned.'" \ - " " \ - "On the second page of the book, you can find this: 'To open the hatch door you should have both " \ - "two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening the hatch. " \ - "Otherwise, your life is in fatal danger.'" + book.infos.desc = "If you open and check this book, here it is the description: 'This is a book of all secret " \ + "codes to manage different actions and functions inside the International Space Station. " \ + "These codes are pre-authorized by the main control room at Earth unless it is mentioned.'" \ + " " \ + "On the second page of the book, you can find this: 'To open the hatch door you should have " \ + "both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening " \ + "the hatch. Otherwise, your life is in fatal danger.'" box_f.add(book) key_5 = gm.new(type='k', name="digital key 2") @@ -277,17 +290,14 @@ def spaceship_maker_level_medium(): # ===== Hatch Design =============================================================================================== hatch = gm.new_room("Hatch") - hatch.desc = "This area is like the entrance to the spaceship, so like home entrance with outer and inner doors " \ - "and a place that outfits are hooked. There are only two important differences: first, if the outer " \ - "door is open and you don't have outfit on you, you are dead!! No joke here! So make sure that you " \ - "open the door after wearing those cloths. Second, the door nob to open the door is not neither on " \ - "the door nor in this room. You should open the external door from Russian Module! woooh so much of " \ - "safety concerns, yeah?!" - - """ - Cloths - """ - cloth = gm.new(type='o', name="outfit") + hatch.infos.desc = "This area is like the entrance to the spaceship, so like home entrance with outer and " \ + "inner doors and a place that outfits are hooked. There are only two important differences: " \ + "first, if the outer door is open and you don't have outfit on you, you are dead!! No joke " \ + "here! So make sure that you open the door after wearing those cloths. Second, the door nob " \ + "to open the door is not neither on the door nor in this room. You should open the external " \ + "door from Russian Module! woooh so much of safety concerns, yeah?!" + + cloth = gm.new(type='l', name="outfit") hatch.add(cloth) corridor6 = gm.connect(hatch.north, lounge.south) @@ -297,25 +307,213 @@ def spaceship_maker_level_medium(): # ===== Outside Spaceship (Space) Design =========================================================================== outside = gm.new_room("Outside") - outside.desc = "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means that " \ - "you have the special outfit on you and you passed the medium level of the game! Congrats!" + outside.infos.desc = "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means " \ + "that you have the special outfit on you and you passed the medium level of the game! " \ + "Congrats!" corridor7 = gm.connect(outside.north, hatch.south) door_e = gm.new_door(corridor7, name="door E") gm.add_fact("locked", door_e) - gm.add_fact("match", push_button, door_e) + gm.add_fact("pair", push_button, door_e) # ===== Player and Inventory Design ================================================================================ gm.set_player(sleep_station) key_7 = gm.new(type='k', name="hearty key") - key_7.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." + key_7.infos.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." gm.add_fact("match", key_7, box_c) gm.inventory.add(key_7) # Add the object to the player's inventory. gm.render(interactive=True) + # quest = gm.new_quest_using_commands(['examine laptop', + # 'open door A', + # 'go south', + # 'go east', + # 'open box B', + # 'take code key 1 from box B', + # 'go west', + # 'unlock box A with code key 1', + # 'open box A', + # 'take electronic key 1 from box A', + # 'unlock door B with electronic key 1', + # 'open door B', + # 'go south', + # 'examine box C', + # 'unlock box C with hearty key', + # 'open box C', + # 'take digital key 1 from box C', + # 'go east', + # 'open box E', + # 'take electronic key 2 from box E', + # 'go west', + # 'unlock door C with electronic key 2', + # 'open door C', + # 'go west', + # 'unlock secured box with digital key 1', + # 'open secured box', + # 'take Secret Codes Handbook from secured box', + # 'examine Secret Codes Handbook', + # 'take code key 2 from secured box', + # 'take digital key 2 from secured box', + # 'go east', + # 'go east', + # 'unlock door D with code key 2', + # 'open door D', + # 'go south', + # 'take outfit', + # 'wear the outfit', + # 'go north', + # 'go west', + # 'unlock exit box with digital key 2', + # 'open exit box', + # 'push exit push button', + # 'go east', + # 'go south', + # 'go south']) + + arr = ['examine laptop', + 'open door A', + 'go south', + 'go east', + 'open box B', + 'take code key 1 from box B', + 'go west', + 'unlock box A with code key 1', + 'open box A', + 'take electronic key 1 from box A', + 'unlock door B with electronic key 1', + 'open door B', + 'go south', + 'examine box C', + 'unlock box C with hearty key', + 'open box C', + 'take digital key 1 from box C', + 'go east', + 'open box E', + 'take electronic key 2 from box E', + 'go west', + 'unlock door C with electronic key 2', + 'open door C', + 'go west', + 'unlock secured box with digital key 1', + 'open secured box', + 'take Secret Codes Handbook from secured box', + 'examine Secret Codes Handbook', + 'take code key 2 from secured box', + 'take digital key 2 from secured box', + 'go east', + 'go east', + 'unlock door D with code key 2', + 'open door D', + 'go south', + 'take outfit', + 'wear the outfit', + 'go north', + 'go west', + 'unlock exit box with digital key 2', + 'open exit box', + 'push exit push button', + 'go east', + 'go south', + # 'examine door E' + # 'go south' + ] + test_commands(gm, arr) + + +def test(): + # GameMaker object for handcrafting text-based games. + kb = KnowledgeBase.load(target_dir=PATH) + gm = GameMaker(kb=kb, theme='Spaceship') + + # ===== Sleep Station Design ======================================================================================= + sleep_station = gm.new_room("Sleep Station") + sleep_station.infos.desc = "This is a typical bedroom in spaceship; here, it is called sleep station. It is " \ + "small but comfortable to take a good rest after a day full of missions. However, " \ + "today your mission will start from here. Wait to be notified by a message. So, you " \ + "should find that message first." \ + " " \ + "BTW, don't forget that when the Hatch door is open, you should already have worn " \ + "your specially-designed outfit to be able to enter and stay at Hatch area; otherwise " \ + "you'll die! Yes! Living in space is tough." + + surf_1 = gm.new(type='s', name='wall-mounted surface') + surf_1.infos.desc = "This is a wall-mounted surface which different instruments are installed on this. These " \ + "instruments are basically control various modules and doors in the shuttle." + sleep_station.add(surf_1) + + box_d = gm.new(type='c', name="exit box") + box_d.infos.desc = "The most important box here, which is in fact locked! sounds it carries important item... " \ + "So, let's find its key to open it." + surf_1.add(box_d) + gm.add_fact("closed", box_d) + + push_button = gm.new(type='b', name="exit push button") + push_button.infos.desc = "This push button is a key-like object which opens door A." + gm.add_fact("unpushed", push_button) + box_d.add(push_button) + + # ===== Hatch Design =============================================================================================== + hatch = gm.new_room("Hatch") + hatch.infos.desc = "This area is like the entrance to the spaceship, so like home entrance with outer and " \ + "inner doors and a place that outfits are hooked. There are only two important differences: " \ + "first, if the outer door is open and you don't have outfit on you, you are dead!! No joke " \ + "here! So make sure that you open the door after wearing those cloths. Second, the door nob " \ + "to open the door is not neither on the door nor in this room. You should open the external " \ + "door from Russian Module! woooh so much of safety concerns, yeah?!" + + corridor = gm.connect(sleep_station.south, hatch.north) + door_a = gm.new_door(corridor, name="door A") + gm.add_fact("locked", door_a) + gm.add_fact("pair", push_button, door_a) + + gm.render(interactive=True) + + # ===== Player and Inventory Design ================================================================================ + gm.set_player(sleep_station) + + # key = gm.new(type='k', name="hearty key") + # key.infos.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." + # gm.add_fact("match", key, door_a) + # gm.inventory.add(key) # Add the object to the player's inventory. + + # arr = ['open exit box', + # 'push exit push button'] + # test_commands(gm, arr) + gm.record_quest() + + +def test_commands(game, arr): + with make_temp_directory() as tmpdir: + silent = False + game_file = game.compile(pjoin(tmpdir, "test_game.ulx")) + env = start(game_file) + env.activate_state_tracking() + game_state = env.reset() + + agent = textworld.agents.HumanAgent(autocompletion=True) + agent.reset(env) + + if not silent: + env.render(mode="human") + + try: + for command in arr: + game_state, reward, done = env.step(command) + + if not silent: + env.render() + + print("Available actions: {}\n".format(game_state.admissible_commands)) + + except KeyboardInterrupt: + pass # Stop the game. + finally: + env.close() + if __name__ == "__main__": # spaceship_maker_level_easy() - spaceship_maker_level_medium() + # spaceship_maker_level_medium() + test() diff --git a/textworld/challenges/spaceship/textworld_data/logic/cloth.twl b/textworld/challenges/spaceship/textworld_data/logic/cloth.twl new file mode 100644 index 00000000..3af39c7f --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/cloth.twl @@ -0,0 +1,55 @@ +# cloth +type l : o { + predicates { + worn(l); + takenoff(l); + clean(l); + dirty(l); + } + + rules { + wear/l :: in(l, I) -> worn(l); + takeoff/l :: worn(l) -> in(l, I); + + wash/l :: $at(l,r) & dirty(l) -> clean(l); + dirty/l :: $worn(l,P) & clean(l) -> dirty(l); + } + + reverse_rules { + wear/l :: takeoff/l; + wash/l :: dirty/l; + } + + constraints { + l1 :: clean(l) & dirty(l) -> fail(); + l2 :: worn(l) & takenoff(l) -> fail(); + } + + inform7 { + type { + kind :: "cloth-like"; + definition :: "cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean."; + } + + predicates { + worn(l) :: "The {P} wears the {l}."; + takenoff(l) :: "The {P} does not wear the {l}."; + clean(l) :: "The {l} is clean."; + dirty(l) :: "The {l} is dirty."; + } + + commands { + wear/l :: "wear {l}" :: "wearing the {l}"; + takeoff/l :: "take off {l}" :: "taking off the {l}"; + + clean/l :: "clean {l}" :: "cleaning the {l}"; + dirty/l :: "dirty {l}" :: "dirtying the {l}"; + } + + code :: """ + Understand the command "wear" as something new. + Understand "wear [something]" as wearing a thing. + wearing a thing is an action applying to one thing. + """; + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/container.twl b/textworld/challenges/spaceship/textworld_data/logic/container.twl index 339ef3bd..11212489 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/container.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/container.twl @@ -5,20 +5,28 @@ type c : t { closed(c); locked(c); - in(o, c); + in(o, c); } rules { - lock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & closed(c) -> locked(c); - unlock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & locked(c) -> closed(c); + lock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & closed(c) -> locked(c); + unlock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & locked(c) -> closed(c); - open/c :: $at(P, r) & $at(c, r) & closed(c) -> open(c); - close/c :: $at(P, r) & $at(c, r) & open(c) -> closed(c); + open/c :: $at(P, r) & $at(c, r) & closed(c) -> open(c); + close/c :: $at(P, r) & $at(c, r) & open(c) -> closed(c); + + lock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & closed(c) -> locked(c); + unlock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & locked(c) -> closed(c); + + open/bx :: $at(P, r) & $at(s, r) & $on(c, s) & closed(c) -> open(c); + close/bx :: $at(P, r) & $at(s, r) & $on(c, s) & open(c) -> closed(c); } reverse_rules { - lock/c :: unlock/c; - open/c :: close/c; + lock/c :: unlock/c; + open/c :: close/c; + lock/bx :: unlock/bx; + open/bx :: close/bx; } constraints { @@ -42,11 +50,17 @@ type c : t { } commands { - open/c :: "open {c}" :: "opening the {c}"; - close/c :: "close {c}" :: "closing the {c}"; + open/c :: "open {c}" :: "opening the {c}"; + close/c :: "close {c}" :: "closing the {c}"; + + lock/c :: "lock {c} with {k}" :: "locking the {c} with the {k}"; + unlock/c :: "unlock {c} with {k}" :: "unlocking the {c} with the {k}"; + + open/bx :: "open {c}" :: "opening the {c}"; + close/bx :: "close {c}" :: "closing the {c}"; - lock/c :: "lock {c} with {k}" :: "locking the {c} with the {k}"; - unlock/c :: "unlock {c} with {k}" :: "unlocking the {c} with the {k}"; + lock/bx :: "lock {c} with {k}" :: "locking the {c} with the {k}"; + unlock/bx :: "unlock {c} with {k}" :: "unlocking the {c} with the {k}"; } } } diff --git a/textworld/challenges/spaceship/textworld_data/logic/door.twl b/textworld/challenges/spaceship/textworld_data/logic/door.twl index 26bd1730..f3a6b01a 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/door.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/door.twl @@ -9,11 +9,36 @@ type d : t { } rules { - lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d); - unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d); + lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d); + unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d); - open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r); - close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d); + open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r); + close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d); + + #lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & pushed(b) & open(d) -> unpushed(b) & locked(d); + #unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d); + + + + + lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r, d, r') & $link(r', d, r) & pushed(b) & closed(d) -> unpushed(b) & locked(d); + unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r, d, r') & $link(r', d, r) & unpushed(b) & locked(d) -> pushed(b) & closed(d); + + + + + + #lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r', d, r'') & $link(r'', d, r') & $pair(b, d) & pushed(b) & open(d) & free(r', r'') & free(r'', r') -> unpushed(b) & locked(d); + #unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r', d, r'') & $link(r'', d, r') & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r', r'') & free(r'', r'); + + #lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r, d, r') & $link(r', d, r) & $pair(b, d) & pushed(b) & open(d) & free(r, r') & free(r', r) -> unpushed(b) & locked(d); + #unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r, d, r') & $link(r', d, r) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r, r') & free(r', r); + + #lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r, d, r') & $link(r', d, r) & $pair(b, d) & pushed(b) & closed(d) -> unpushed(b) & locked(d); + #unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r, d, r') & $link(r', d, r) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & closed(d); + + #open/dr :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r); + #close/dr :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d); examine/d :: at(P, r) & $link(r, d, r') -> at(P, r); # Nothing changes. } @@ -21,6 +46,9 @@ type d : t { reverse_rules { lock/d :: unlock/d; open/d :: close/d; + lock/close/d/b :: unlock/open/d/b; + #open/dr :: close/dr; + } constraints { @@ -55,20 +83,27 @@ type d : t { } predicates { - open(d) :: "The {d} is open"; + open(d) :: "The {d} is open"; closed(d) :: "The {d} is closed"; locked(d) :: "The {d} is locked"; + link(r, d, r') :: ""; # No equivalent in Inform7. } commands { - open/d :: "open {d}" :: "opening {d}"; - close/d :: "close {d}" :: "closing {d}"; + open/d :: "open {d}" :: "opening {d}"; + close/d :: "close {d}" :: "closing {d}"; + + unlock/d :: "unlock {d} with {k}" :: "unlocking {d} with the {k}"; + lock/d :: "lock {d} with {k}" :: "locking {d} with the {k}"; + + lock/close/d/b :: "unpush {b}" :: "unpushing the {b}"; + unlock/open/d/b :: "push {b}" :: "pushing the {b}"; - unlock/d :: "unlock {d} with {k}" :: "unlocking {d} with the {k}"; - lock/d :: "lock {d} with {k}" :: "locking {d} with the {k}"; + #open/dr :: "open {d}" :: "opening {d}"; + #close/dr :: "close {d}" :: "closing {d}"; - examine/d :: "examine {d}" :: "examining {d}"; + examine/d :: "examine {d}" :: "examining the {d}"; } } } diff --git a/textworld/challenges/spaceship/textworld_data/logic/inventory.twl b/textworld/challenges/spaceship/textworld_data/logic/inventory.twl index befa775f..91c7f3b4 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/inventory.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/inventory.twl @@ -5,25 +5,45 @@ type I { } rules { - inventory :: at(P, r) -> at(P, r); # Nothing changes. + inventory :: at(P, r) -> at(P, r); # Nothing changes. - take :: $at(P, r) & at(o, r) -> in(o, I); + take :: $at(P, r) & at(o, r) -> in(o, I); + take/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, c) -> in(o, I); + insert/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, I) -> in(o, c); - take/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, c) -> in(o, I); - insert :: $at(P, r) & $at(c, r) & $open(c) & in(o, I) -> in(o, c); + take/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, c) -> in(o, I); + insert/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, I) -> in(o, c); - take/s :: $at(P, r) & $at(s, r) & on(o, s) -> in(o, I); - hook :: $at(P, r) & $at(s, r) & in(o, I) -> on(o, s); + take/s :: $at(P, r) & $at(s, r) & on(o, s) -> in(o, I); + hook :: $at(P, r) & $at(s, r) & in(o, I) -> on(o, s); - examine/I :: in(o, I) -> in(o, I); # Nothing changes. - examine/s :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes. - examine/c :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes. + #wear/I :: in(l, I) -> worn(l); + #takeoff/I :: worn(l) -> takenoff(l); + + examine/I :: in(o, I) -> in(o, I); # Nothing changes. + examine/s :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes. + examine/c :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes. + examine/or :: at(P, r) & $in(o, r) -> at(P, r); # Nothing changes. + examine/oc :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes. + examine/os :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes. } - reverse_rules { - take/c :: insert; - take/s :: hook; + reverse_rules { + inventory :: inventory; + + take/c :: insert/c; + take/s :: hook; + take/cs :: insert/cs; + + #wear/I :: takeoff/I; + + examine/I :: examine/I; + examine/s :: examine/s; + examine/c :: examine/c; + examine/or :: examine/or; + examine/oc :: examine/oc; + examine/os :: examine/os; } inform7 { @@ -32,19 +52,29 @@ type I { } commands { - take :: "take {o}" :: "taking the {o}"; - take/c :: "take {o} from {c}" :: "removing the {o} from the {c}"; - insert :: "insert {o} into {c}" :: "inserting the {o} into the {c}"; + inventory :: "inventory" :: "taking inventory"; + + take :: "take {o}" :: "taking the {o}"; + + take/c :: "take {o} from {c}" :: "removing the {o} from the {c}"; + insert/c :: "insert {o} into {c}" :: "inserting the {o} into the {c}"; + + take/cs :: "take {o} from {c}" :: "removing the {o} from the {c}"; + insert/cs :: "insert {o} into {c}" :: "inserting the {o} into the {c}"; - take/s :: "take {o} from {s}" :: "removing the {o} from the {s}"; - hook :: "hook {o} on {s}" :: "hooking the {o} on the {s}"; + take/s :: "take {o} from {s}" :: "removing the {o} from the {s}"; + hook :: "hook {o} on {s}" :: "hooking the {o} on the {s}"; - inventory :: "inventory" :: "taking inventory"; + #wear/I :: "wear the {l}" :: "wearing the {l}"; + #takeoff/I :: "take off the {l}" :: "taking off the {l}"; - examine/I :: "examine {o}" :: "examining the {o}"; - examine/s :: "examine {o}" :: "examining the {o}"; - examine/c :: "examine {o}" :: "examining the {o}"; + examine/I :: "examine {o}" :: "examining the {o}"; + examine/s :: "examine {o}" :: "examining the {o}"; + examine/c :: "examine {o}" :: "examining the {o}"; + examine/or :: "examine {o}" :: "examining the {o}"; + examine/oc :: "examine {o}" :: "examining the {o}"; + examine/os :: "examine {o}" :: "examining the {o}"; } } } diff --git a/textworld/challenges/spaceship/textworld_data/logic/player.twl b/textworld/challenges/spaceship/textworld_data/logic/player.twl index 6783223b..e89a2d0a 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/player.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/player.twl @@ -2,11 +2,13 @@ type P { rules { look :: at(P, r) -> at(P, r); # Nothing changes. + wear/cloth :: $at(P,r) & at(l,r) -> on(l,P); } inform7 { commands { look :: "look" :: "looking"; + wear/cloth :: "wear cloth" :: "wearing the cloth"; } } } diff --git a/textworld/challenges/spaceship/textworld_data/logic/push_button.twl b/textworld/challenges/spaceship/textworld_data/logic/push_button.twl new file mode 100644 index 00000000..74537a39 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/push_button.twl @@ -0,0 +1,67 @@ +# push button +type b : t { + predicates { + pushed(b); + unpushed(b); + + pair(b, d); + + in(b, c); + } + + rules { + #push/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & unpushed(b) -> pushed(b); + #unpush/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & pushed(b) -> unpushed(b); + } + + reverse_rules { + push/b :: unpush/b; + } + + inform7 { + type { + kind :: "button_like"; + definition :: "A button_like can be either pushed or unpushed. A button_like is usually unpushed. A button_like is fixed in place."; + } + + predicates { + pushed(b) :: "The {b} is pushed"; + unpushed(b) :: "The {b} is unpushed"; + + pair(b, d) :: "The {b} pairs to {d}"; + + in(b, c) :: "The {b} is in the {c}"; + } + + commands { + #push/b :: "push {b}" :: "pushing the {b}"; + #unpush/b :: "push {b}" :: "pushing the {b}"; + } + + code :: """ + connectivity relates a button_like to a door. The verb to pair to means the connectivity relation. + + Understand the command "push" as something new. + Understand "push [something]" as pushing a button_like. + pushing a button_like is an action applying to a thing. + + Carry out pushing a button_like (called pb): + if a button_like pairs to door (called dr): + if dr is locked: + Now the pb is pushed; + Now dr is unlocked; + [Now dr is open;] + otherwise: + Now the pb is unpushed; + Now dr is locked. + + Report pushing a button_like (called pb): + if a button_like pairs to door (called dr): + if dr is unlocked: + say "You push the [pb], and [dr] is now open."; + otherwise: + say "You push the [pb] again, and [dr] is now locked." + + """; + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/supporter.twl b/textworld/challenges/spaceship/textworld_data/logic/supporter.twl index e740dd41..3c8279a3 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/supporter.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/supporter.twl @@ -2,6 +2,7 @@ type s : t { predicates { on(o, s); + on(c, s); } inform7 { @@ -12,6 +13,7 @@ type s : t { predicates { on(o, s) :: "The {o} is on the {s}"; + on(c, s) :: "The {c} is on the {s}"; } } } diff --git a/textworld/challenges/spaceship/textworld_data/logic/thing.twl b/textworld/challenges/spaceship/textworld_data/logic/thing.twl index 746e87ce..bc6dd593 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/thing.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/thing.twl @@ -4,6 +4,10 @@ type t { examine/t :: at(P, r) & $at(t, r) -> at(P, r); } + reverse_rules { + examine/t :: examine/t; + } + inform7 { type { kind :: "thing"; diff --git a/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg b/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg index 5cf1c8a5..da68d24b 100644 --- a/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg +++ b/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg @@ -156,7 +156,7 @@ unblocked:unblocked;unguarded # --- Action Verbs -------------------------------------------------------------- look:look around in (r). -examine:examine (o|k|f|d|c|s|t). +examine:examine (o|k|f|d|c|s|t|b). inventory:examine your inventory. @@ -235,6 +235,11 @@ communicate: #communicate_syn_v# your message with (r) communicate_syn_v:communicate;talk;call;transmit communicate_syn_p:communicated;talked;called;transmitted communicate_syn_u:Communicate;Talk;Call;Transmit + +push: push (b) +push_syn_v:push;press +push_syn_u:Push;Press +push_syn_p:pushed;pressed # << ------------------------------------------------------------------------- >> From 5bcaed7145ded72cec97fa0062b10571ddb4c495 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Mon, 16 Sep 2019 16:43:19 -0400 Subject: [PATCH 07/13] push button updated logic and files --- textworld/challenges/spaceship/maker.py | 132 ++++++++---------- .../spaceship/textworld_data/logic/door.twl | 82 ++++------- .../textworld_data/logic/inventory.twl | 12 +- .../textworld_data/logic/push_button.twl | 37 ++--- 4 files changed, 100 insertions(+), 163 deletions(-) diff --git a/textworld/challenges/spaceship/maker.py b/textworld/challenges/spaceship/maker.py index b423dbda..99580892 100644 --- a/textworld/challenges/spaceship/maker.py +++ b/textworld/challenges/spaceship/maker.py @@ -116,7 +116,8 @@ def spaceship_maker_level_medium(): "attached or hooked to it, why? Come on! we are in space, there is no gravity here." sleep_station.add(surf_1) # The card box contains nothing at this game - laptop = gm.new(type='o', name="laptop") + # laptop = gm.new(type='o', name="laptop") + laptop = gm.new(type='cpu', name='laptop') laptop.infos.desc = "This is your personal laptop which is attached to the surface of the table. You can do " \ "regular things with this, like check your emails, watch YouTube, Skype with family,etc." \ "Since you are here, we recommend you to check your emails. New missions are posted through " \ @@ -373,50 +374,50 @@ def spaceship_maker_level_medium(): # 'go south']) arr = ['examine laptop', - 'open door A', - 'go south', - 'go east', - 'open box B', - 'take code key 1 from box B', - 'go west', - 'unlock box A with code key 1', - 'open box A', - 'take electronic key 1 from box A', - 'unlock door B with electronic key 1', - 'open door B', - 'go south', - 'examine box C', - 'unlock box C with hearty key', - 'open box C', - 'take digital key 1 from box C', - 'go east', - 'open box E', - 'take electronic key 2 from box E', - 'go west', - 'unlock door C with electronic key 2', - 'open door C', - 'go west', - 'unlock secured box with digital key 1', - 'open secured box', - 'take Secret Codes Handbook from secured box', - 'examine Secret Codes Handbook', - 'take code key 2 from secured box', - 'take digital key 2 from secured box', - 'go east', - 'go east', - 'unlock door D with code key 2', - 'open door D', - 'go south', - 'take outfit', - 'wear the outfit', - 'go north', - 'go west', - 'unlock exit box with digital key 2', - 'open exit box', - 'push exit push button', - 'go east', - 'go south', - # 'examine door E' + # 'check email', + # 'open door A', + # 'go south', + # 'go east', + # 'open box B', + # 'take code key 1 from box B', + # 'go west', + # 'unlock box A with code key 1', + # 'open box A', + # 'take electronic key 1 from box A', + # 'unlock door B with electronic key 1', + # 'open door B', + # 'go south', + # 'examine box C', + # 'unlock box C with hearty key', + # 'open box C', + # 'take digital key 1 from box C', + # 'go east', + # 'open box E', + # 'take electronic key 2 from box E', + # 'go west', + # 'unlock door C with electronic key 2', + # 'open door C', + # 'go west', + # 'unlock secured box with digital key 1', + # 'open secured box', + # 'take Secret Codes Handbook from secured box', + # 'examine Secret Codes Handbook', + # 'take code key 2 from secured box', + # 'take digital key 2 from secured box', + # 'go east', + # 'go east', + # 'unlock door D with code key 2', + # 'open door D', + # 'go south', + # 'take outfit', + # 'wear the outfit', + # 'go north', + # 'go west', + # 'unlock exit box with digital key 2', + # 'open exit box', + # 'push exit push button', + # 'go east', + # 'go south', # 'go south' ] test_commands(gm, arr) @@ -443,42 +444,21 @@ def test(): "instruments are basically control various modules and doors in the shuttle." sleep_station.add(surf_1) - box_d = gm.new(type='c', name="exit box") - box_d.infos.desc = "The most important box here, which is in fact locked! sounds it carries important item... " \ - "So, let's find its key to open it." - surf_1.add(box_d) - gm.add_fact("closed", box_d) - - push_button = gm.new(type='b', name="exit push button") - push_button.infos.desc = "This push button is a key-like object which opens door A." - gm.add_fact("unpushed", push_button) - box_d.add(push_button) - - # ===== Hatch Design =============================================================================================== - hatch = gm.new_room("Hatch") - hatch.infos.desc = "This area is like the entrance to the spaceship, so like home entrance with outer and " \ - "inner doors and a place that outfits are hooked. There are only two important differences: " \ - "first, if the outer door is open and you don't have outfit on you, you are dead!! No joke " \ - "here! So make sure that you open the door after wearing those cloths. Second, the door nob " \ - "to open the door is not neither on the door nor in this room. You should open the external " \ - "door from Russian Module! woooh so much of safety concerns, yeah?!" - - corridor = gm.connect(sleep_station.south, hatch.north) - door_a = gm.new_door(corridor, name="door A") - gm.add_fact("locked", door_a) - gm.add_fact("pair", push_button, door_a) - - gm.render(interactive=True) + laptop = gm.new(type='cpu', name='laptop') + laptop.infos.desc = "This is your personal laptop which is attached to the surface of the table. You can do " \ + "regular things with this, like check your emails, watch YouTube, Skype with family,etc." \ + "Since you are here, we recommend you to check your emails. New missions are posted through " \ + "emails. " + surf_1.add(laptop) + gm.add_fact("turned_off", laptop) # ===== Player and Inventory Design ================================================================================ gm.set_player(sleep_station) - # key = gm.new(type='k', name="hearty key") - # key.infos.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." - # gm.add_fact("match", key, door_a) - # gm.inventory.add(key) # Add the object to the player's inventory. + gm.render(interactive=True) - # arr = ['open exit box', + # arr = ['examine laptop', + # 'take laptop from wall-mounted surface', # 'push exit push button'] # test_commands(gm, arr) gm.record_quest() diff --git a/textworld/challenges/spaceship/textworld_data/logic/door.twl b/textworld/challenges/spaceship/textworld_data/logic/door.twl index f3a6b01a..44330748 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/door.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/door.twl @@ -9,46 +9,26 @@ type d : t { } rules { - lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d); - unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d); + lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d); + unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d); - open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r); - close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d); + open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r); + close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d); - #lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & pushed(b) & open(d) -> unpushed(b) & locked(d); - #unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d); + lock/close/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & pushed(b) & open(d) & free(r, r') & free(r', r) -> unpushed(b) & locked(d); + unlock/open/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r, r') & free(r', r); + lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & pushed(b) & open(d) & free(r', r'') & free(r'', r') -> unpushed(b) & locked(d); + unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r', r'') & free(r'', r'); - - - lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r, d, r') & $link(r', d, r) & pushed(b) & closed(d) -> unpushed(b) & locked(d); - unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r, d, r') & $link(r', d, r) & unpushed(b) & locked(d) -> pushed(b) & closed(d); - - - - - - #lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r', d, r'') & $link(r'', d, r') & $pair(b, d) & pushed(b) & open(d) & free(r', r'') & free(r'', r') -> unpushed(b) & locked(d); - #unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r', d, r'') & $link(r'', d, r') & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r', r'') & free(r'', r'); - - #lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r, d, r') & $link(r', d, r) & $pair(b, d) & pushed(b) & open(d) & free(r, r') & free(r', r) -> unpushed(b) & locked(d); - #unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r, d, r') & $link(r', d, r) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r, r') & free(r', r); - - #lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r, d, r') & $link(r', d, r) & $pair(b, d) & pushed(b) & closed(d) -> unpushed(b) & locked(d); - #unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $link(r, d, r') & $link(r', d, r) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & closed(d); - - #open/dr :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r); - #close/dr :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d); - - examine/d :: at(P, r) & $link(r, d, r') -> at(P, r); # Nothing changes. + examine/d :: at(P, r) & $link(r, d, r') -> at(P, r); # Nothing changes. } reverse_rules { lock/d :: unlock/d; open/d :: close/d; lock/close/d/b :: unlock/open/d/b; - #open/dr :: close/dr; - + lock/close/db :: unlock/open/db; } constraints { @@ -57,20 +37,20 @@ type d : t { d3 :: closed(d) & locked(d) -> fail(); # A door can't be used to link more than two rooms. - link1 :: link(r, d, r') & link(r, d, r'') -> fail(); - link2 :: link(r, d, r') & link(r'', d, r''') -> fail(); + link1 :: link(r, d, r') & link(r, d, r'') -> fail(); + link2 :: link(r, d, r') & link(r'', d, r''') -> fail(); # There's already a door linking two rooms. - link3 :: link(r, d, r') & link(r, d', r') -> fail(); + link3 :: link(r, d, r') & link(r, d', r') -> fail(); # There cannot be more than four doors in a room. too_many_doors :: link(r, d1: d, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); # There cannot be more than four doors in a room. - dr1 :: free(r, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); - dr2 :: free(r, r1: r) & free(r, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); - dr3 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); - dr4 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & free(r, r4: r) & link(r, d5: d, r5: r) -> fail(); + dr1 :: free(r, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); + dr2 :: free(r, r1: r) & free(r, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); + dr3 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail(); + dr4 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & free(r, r4: r) & link(r, d5: d, r5: r) -> fail(); free1 :: link(r, d, r') & free(r, r') & closed(d) -> fail(); free2 :: link(r, d, r') & free(r, r') & locked(d) -> fail(); @@ -78,32 +58,32 @@ type d : t { inform7 { type { - kind :: "door"; + kind :: "door"; definition :: "door is openable and lockable."; } predicates { - open(d) :: "The {d} is open"; - closed(d) :: "The {d} is closed"; - locked(d) :: "The {d} is locked"; + open(d) :: "The {d} is open"; + closed(d) :: "The {d} is closed"; + locked(d) :: "The {d} is locked"; - link(r, d, r') :: ""; # No equivalent in Inform7. + link(r, d, r') :: ""; # No equivalent in Inform7. } commands { - open/d :: "open {d}" :: "opening {d}"; - close/d :: "close {d}" :: "closing {d}"; + open/d :: "open {d}" :: "opening {d}"; + close/d :: "close {d}" :: "closing {d}"; - unlock/d :: "unlock {d} with {k}" :: "unlocking {d} with the {k}"; - lock/d :: "lock {d} with {k}" :: "locking {d} with the {k}"; + unlock/d :: "unlock {d} with {k}" :: "unlocking {d} with the {k}"; + lock/d :: "lock {d} with {k}" :: "locking {d} with the {k}"; - lock/close/d/b :: "unpush {b}" :: "unpushing the {b}"; - unlock/open/d/b :: "push {b}" :: "pushing the {b}"; + lock/close/d/b :: "push {b}" :: "_pushing the {b}"; + unlock/open/d/b :: "push {b}" :: "_pushing the {b}"; - #open/dr :: "open {d}" :: "opening {d}"; - #close/dr :: "close {d}" :: "closing {d}"; + lock/close/db :: "push {b}" :: "_pushing the {b}"; + unlock/open/db :: "push {b}" :: "_pushing the {b}"; - examine/d :: "examine {d}" :: "examining the {d}"; + examine/d :: "examine {d}" :: "examining the {d}"; } } } diff --git a/textworld/challenges/spaceship/textworld_data/logic/inventory.twl b/textworld/challenges/spaceship/textworld_data/logic/inventory.twl index 91c7f3b4..696f0f7f 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/inventory.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/inventory.twl @@ -8,7 +8,7 @@ type I { inventory :: at(P, r) -> at(P, r); # Nothing changes. take :: $at(P, r) & at(o, r) -> in(o, I); - + take/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, c) -> in(o, I); insert/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, I) -> in(o, c); @@ -18,9 +18,6 @@ type I { take/s :: $at(P, r) & $at(s, r) & on(o, s) -> in(o, I); hook :: $at(P, r) & $at(s, r) & in(o, I) -> on(o, s); - #wear/I :: in(l, I) -> worn(l); - #takeoff/I :: worn(l) -> takenoff(l); - examine/I :: in(o, I) -> in(o, I); # Nothing changes. examine/s :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes. examine/c :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes. @@ -36,8 +33,6 @@ type I { take/s :: hook; take/cs :: insert/cs; - #wear/I :: takeoff/I; - examine/I :: examine/I; examine/s :: examine/s; examine/c :: examine/c; @@ -55,7 +50,7 @@ type I { inventory :: "inventory" :: "taking inventory"; - take :: "take {o}" :: "taking the {o}"; + take :: "take {o}" :: "taking the {o}"; take/c :: "take {o} from {c}" :: "removing the {o} from the {c}"; insert/c :: "insert {o} into {c}" :: "inserting the {o} into the {c}"; @@ -66,9 +61,6 @@ type I { take/s :: "take {o} from {s}" :: "removing the {o} from the {s}"; hook :: "hook {o} on {s}" :: "hooking the {o} on the {s}"; - #wear/I :: "wear the {l}" :: "wearing the {l}"; - #takeoff/I :: "take off the {l}" :: "taking off the {l}"; - examine/I :: "examine {o}" :: "examining the {o}"; examine/s :: "examine {o}" :: "examining the {o}"; examine/c :: "examine {o}" :: "examining the {o}"; diff --git a/textworld/challenges/spaceship/textworld_data/logic/push_button.twl b/textworld/challenges/spaceship/textworld_data/logic/push_button.twl index 74537a39..e9ff7ccb 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/push_button.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/push_button.twl @@ -9,19 +9,10 @@ type b : t { in(b, c); } - rules { - #push/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & unpushed(b) -> pushed(b); - #unpush/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & pushed(b) -> unpushed(b); - } - - reverse_rules { - push/b :: unpush/b; - } - inform7 { type { - kind :: "button_like"; - definition :: "A button_like can be either pushed or unpushed. A button_like is usually unpushed. A button_like is fixed in place."; + kind :: "button-like"; + definition :: "A button-like can be either pushed or unpushed. A button-like is usually unpushed. A button-like is fixed in place."; } predicates { @@ -33,35 +24,29 @@ type b : t { in(b, c) :: "The {b} is in the {c}"; } - commands { - #push/b :: "push {b}" :: "pushing the {b}"; - #unpush/b :: "push {b}" :: "pushing the {b}"; - } - code :: """ - connectivity relates a button_like to a door. The verb to pair to means the connectivity relation. + connectivity relates a button-like to a door. The verb to pair to means the connectivity relation. Understand the command "push" as something new. - Understand "push [something]" as pushing a button_like. - pushing a button_like is an action applying to a thing. + Understand "push [something]" as _pushing. + _pushing is an action applying to a thing. - Carry out pushing a button_like (called pb): - if a button_like pairs to door (called dr): + Carry out _pushing: + if a button-like (called pb) pairs to door (called dr): if dr is locked: Now the pb is pushed; Now dr is unlocked; - [Now dr is open;] + Now dr is open; otherwise: Now the pb is unpushed; Now dr is locked. - Report pushing a button_like (called pb): - if a button_like pairs to door (called dr): + Report _pushing: + if a button-like (called pb) pairs to door (called dr): if dr is unlocked: say "You push the [pb], and [dr] is now open."; otherwise: - say "You push the [pb] again, and [dr] is now locked." - + say "You push the [pb] again, and [dr] is now locked." """; } } From 2ddb67e639b39f08cf03e41301445a6a00170412 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Fri, 11 Oct 2019 16:15:38 -0400 Subject: [PATCH 08/13] A new update to midium level game: Add conditions to change th erewarding system --- textworld/challenges/spaceship/maker.py | 459 +++++++++++++++++- .../spaceship/textworld_data/logic/cloth.twl | 22 +- .../spaceship/textworld_data/logic/player.twl | 4 +- 3 files changed, 466 insertions(+), 19 deletions(-) diff --git a/textworld/challenges/spaceship/maker.py b/textworld/challenges/spaceship/maker.py index 99580892..4e80023b 100644 --- a/textworld/challenges/spaceship/maker.py +++ b/textworld/challenges/spaceship/maker.py @@ -1,13 +1,14 @@ +import os +from os.path import join as pjoin +import numpy as np + from textworld import GameMaker from textworld.generator.data import KnowledgeBase from textworld import g_rng - -import os -from os.path import join as pjoin from textworld.helpers import start from textworld.utils import make_temp_directory import textworld -from textworld.envs.wrappers import Recorder +from textworld.generator.game import Event, Quest g_rng.set_seed(20190826) @@ -374,7 +375,7 @@ def spaceship_maker_level_medium(): # 'go south']) arr = ['examine laptop', - # 'check email', + 'check email', # 'open door A', # 'go south', # 'go east', @@ -457,10 +458,6 @@ def test(): gm.render(interactive=True) - # arr = ['examine laptop', - # 'take laptop from wall-mounted surface', - # 'push exit push button'] - # test_commands(gm, arr) gm.record_quest() @@ -493,7 +490,449 @@ def test_commands(game, arr): env.close() +def spaceship_maker_level_medium_v1(): + # GameMaker object for handcrafting text-based games. + kb = KnowledgeBase.load(target_dir=PATH) + gm = GameMaker(kb=kb, theme='Spaceship') + + # ===== Sleep Station Design ======================================================================================= + sleep_station = gm.new_room("Sleep Station") + sleep_station.infos.desc = "This is a typical bedroom in spaceship; here, it is called sleep station. It is " \ + "small but comfortable to take a good rest after a day full of missions. However, " \ + "today your mission will start from here. Wait to be notified by a message. So, you " \ + "should find that message first." \ + " " \ + "BTW, don't forget that when the Hatch door is open, you should already have worn " \ + "your specially-designed outfit to be able to enter and stay at Hatch area; otherwise " \ + "you'll die! Yes! Living in space is tough." + + sleep_bag = gm.new(type='c', name="sleeping bag") + sleep_bag.infos.desc = "cool! You can sleep in a comfy bag." + sleep_station.add(sleep_bag) # Sleeping bag is fixed in place in the Sleep Station. + gm.add_fact("open", sleep_bag) + + surf_1 = gm.new(type='s', name='vertical desk') # surf_1 is a table (supporter) in the Sleep Station. + surf_1.infos.desc = "This is not a regular table. The surface is installed vertically and your objects are " \ + "attached or hooked to it, why? Come on! we are in space, there is no gravity here." + sleep_station.add(surf_1) # The card box contains nothing at this game + + # laptop = gm.new(type='o', name="laptop") + laptop = gm.new(type='cpu', name='laptop') + laptop.infos.desc = "This is your personal laptop which is attached to the surface of the table. You can do " \ + "regular things with this, like check your emails, watch YouTube, Skype with family,etc." \ + "Since you are here, we recommend you to check your emails. New missions are posted through " \ + "emails." + surf_1.add(laptop) + # gm.add_fact('turned_off', laptop) + gm.add_fact('unread/e', laptop) + + # ===== US LAB Design ============================================================================================== + us_lab = gm.new_room("US LAB") + us_lab.infos.desc = "This is where Americans do their research on Space. In addition to all computers and " \ + "lab gadgets, you can find a couple of objects here which are useful during our game. Let's " \ + "explore the room." + + box_a = gm.new(type='c', name="box A") + box_a.infos.desc = "This a regular box, keeps the electronic key to open door C. But it is locked. The lock " \ + "looks like a keypad, means that the key is in fact just a code! So, ... let's search around " \ + "to find its key." + us_lab.add(box_a) + gm.add_fact("locked", box_a) + + key_1 = gm.new(type='k', name="electronic key 1") + key_1.infos.desc = "This key is a card key which opens door C." + box_a.add(key_1) + + corridor_1 = gm.connect(sleep_station.south, us_lab.north) + door_a = gm.new_door(corridor_1, name="door A") + gm.add_fact("closed", door_a) + + # ===== European Module Design ===================================================================================== + european_module = gm.new_room("European Module") + european_module.infos.desc = "This room belongs to European scientists. Isn't it cool? what do they research? " \ + "well, we can explore it later... For now, there is a key code here. This code " \ + "opens the box in the next room and consequently takes you to the next stage. So, " \ + "explore the table to find the key." + + surf_2 = gm.new(type='s', name='table') + surf_2.infos.desc = "This is a simple table located in the middle of the room. Let's take a look at it..." + european_module.add(surf_2) + + box_b = gm.new(type='c', name="box B") + box_b.infos.desc = "This a regular box, keeps the key to open box A." + surf_2.add(box_b) + gm.add_fact("closed", box_b) + + key_2 = gm.new(type='k', name="code key 1") + key_2.infos.desc = "This key is in fact a digital code which opens the box in the US Lab area. The code, " \ + "in fact, is written on a piece of paper." + box_b.add(key_2) + gm.add_fact("match", key_2, box_a) + + chair_1 = gm.new(type='s', name='chair') + chair_1.infos.desc = "this is a dark-gray chair which is developed to be used in space." + european_module.add(chair_1) + + corridor2 = gm.connect(us_lab.east, european_module.west) + + # ===== Russian Module Design ====================================================================================== + russian_module = gm.new_room("Russian Module") + russian_module.infos.desc = "The Russian module is a typical space lab that you can expect, filled with a " \ + "lot of processing machines, test equipments and space drive cars, in fact for " \ + "repair and test. Since it is located at the center of International Space Station, " \ + "it is also important room for everyone. There are many other objects here and " \ + "there belongs to other astronauts, probably that's why here looks a bit messy. " \ + "There are some stuffs here you should pick, obviously if you can find them among " \ + "all this mess." + + surf_3 = gm.new(type='s', name='metal table') + surf_3.infos.desc = "This is a big metal table, a messy one, there are many things on it, it is difficult to " \ + "find what you want. However, there is just one item which is important for you. Try to " \ + "find that item." + russian_module.add(surf_3) + + papers = gm.new(type='o', name='bunch of sticked papers') + surf_3.add(papers) + + notebooks = gm.new(type='o', name='lots of hanged notebooks') + surf_3.add(notebooks) + + tools = gm.new(type='o', name='attached bags for mechanical tools') + surf_3.add(tools) + + box_c = gm.new(type='c', name="box C") + box_c.infos.desc = "This box is locked! sounds it carries important item... So, let's find its key to open it. " \ + "Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this " \ + "somewhere before." + surf_3.add(box_c) + gm.add_fact("locked", box_c) + + key_3 = gm.new(type='k', name="digital key 1") + key_3.infos.desc = "This key is an important key in this craft. If you want to leave the spaceship, you " \ + "definitely need this key." + box_c.add(key_3) + + surf_4 = gm.new(type='s', name='wall-mounted surface') + surf_4.infos.desc = "This is a wall-mounted surface which different instruments are installed on this. These " \ + "instruments are basically control various modules and doors in the shuttle." + russian_module.add(surf_4) + + box_d = gm.new(type='c', name="exit box") + box_d.infos.desc = "The most important box here, which is in fact locked! sounds it carries important item... " \ + "So, let's find its key to open it." + surf_4.add(box_d) + gm.add_fact("locked", box_d) + + push_button = gm.new(type='b', name="exit push button") + push_button.infos.desc = "This push button is a key-like object which opens door A." + gm.add_fact("unpushed", push_button) + box_d.add(push_button) + + corridor3 = gm.connect(us_lab.south, russian_module.north) + door_b = gm.new_door(corridor3, name="door B") + gm.add_fact("locked", door_b) + gm.add_fact("match", key_1, door_b) # Tell the game 'Electronic key' is matching the 'door B''s lock + + # ===== Lounge Design ============================================================================================== + lounge = gm.new_room("Lounge Module") + lounge.infos.desc = "This lounge is very quiet room with a big round window to the space. Wow, you can look " \ + "to our beloved Earth from this window. This room is the place that you can stay here for " \ + "hours and just get relax. This room also contains some other stuff, let's explore what " \ + "they are ..." + + box_e = gm.new(type='c', name="box E") + box_e.infos.desc = "This box is actually a wall-mounted bag and you can put an object into it. Since we have no " \ + "gravity in the space, you can't just simply leave the object in the room. The object should " \ + "be hooked or inserted into a container like this bag. Well, know we know what it is!" + lounge.add(box_e) + gm.add_fact("closed", box_e) + + key_4 = gm.new(type='k', name="electronic key 2") + key_4.infos.desc = "This key is the key opens the door to the control room. Although it looks like a regular " \ + "iron key, it is very special metal key! Not any other key can be like it. Make sure to keep " \ + "it in safe place." + box_e.add(key_4) + + corridor4 = gm.connect(russian_module.east, lounge.west) + + # ===== Control Module Design ====================================================================================== + control_module = gm.new_room("Control Module") + control_module.infos.desc = "This is the heart of this spaceship! Wow ... look around, all the monitors and " \ + "panels. It is like you can control everything from here; more interestingly, you " \ + "can communicate with people on the Earth. There are also super important objects " \ + "kept in this room. Let's find them." + + box_f = gm.new(type='c', name="secured box") + box_f.infos.desc = "This box is secured very much, simple box with a complex, strange keypad to enter the code! " \ + "So ... it should contain extremely important items in it. Isn't it the thing you are " \ + "looking for?!" + control_module.add(box_f) + gm.add_fact("locked", box_f) + gm.add_fact("match", key_3, box_f) + + book = gm.new(type='txt', name='Secret Codes Handbook') + book.infos.desc = "If you open and check this book, here it is the description: 'This is a book of all secret " \ + "codes to manage different actions and functions inside the International Space Station. " \ + "These codes are pre-authorized by the main control room at Earth unless it is mentioned.'" \ + " " \ + "On the second page of the book, you can find this: 'To open the hatch door you should have " \ + "both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening " \ + "the hatch. Otherwise, your life is in fatal danger.'" + box_f.add(book) + gm.add_fact("unread/t", book) + + key_5 = gm.new(type='k', name="digital key 2") + box_f.add(key_5) + gm.add_fact("match", key_5, box_d) + key_6 = gm.new(type='k', name="code key 2") + box_f.add(key_6) + + corridor5 = gm.connect(control_module.east, russian_module.west) + door_c = gm.new_door(corridor5, name="door C") + gm.add_fact("locked", door_c) + gm.add_fact("match", key_4, door_c) # Tell the game 'Electronic key' is matching the 'door B''s lock + + # ===== Hatch Design =============================================================================================== + hatch = gm.new_room("Hatch") + hatch.infos.desc = "This area is like the entrance to the spaceship, so like home entrance with outer and " \ + "inner doors and a place that outfits are hooked. There are only two important differences: " \ + "first, if the outer door is open and you don't have outfit on you, you are dead!! No joke " \ + "here! So make sure that you open the door after wearing those cloths. Second, the door nob " \ + "to open the door is not neither on the door nor in this room. You should open the external " \ + "door from Russian Module! woooh so much of safety concerns, yeah?!" + + cloth = gm.new(type='l', name="outfit") + hatch.add(cloth) + gm.add_fact("takenoff", cloth) + gm.add_fact("clean", cloth) + + + corridor6 = gm.connect(hatch.north, lounge.south) + door_d = gm.new_door(corridor6, name="door D") + gm.add_fact("locked", door_d) + gm.add_fact("match", key_6, door_d) + + # ===== Outside Spaceship (Space) Design =========================================================================== + outside = gm.new_room("Outside") + outside.infos.desc = "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means " \ + "that you have the special outfit on you and you passed the medium level of the game! " \ + "Congrats!" + + corridor7 = gm.connect(outside.north, hatch.south) + door_e = gm.new_door(corridor7, name="door E") + gm.add_fact("locked", door_e) + gm.add_fact("pair", push_button, door_e) + + # ===== Player and Inventory Design ================================================================================ + gm.set_player(sleep_station) + + key_7 = gm.new(type='k', name="hearty key") + key_7.infos.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." + gm.add_fact("match", key_7, box_c) + gm.inventory.add(key_7) # Add the object to the player's inventory. + + gm.render(interactive=True) + + # array_of_all_required_actions_to_win = ['examine laptop', + # 'check email', + # 'open door A', + # 'go south', + # 'go east', + # 'open box B', + # 'take code key 1 from box B', + # 'go west', + # 'unlock box A with code key 1', + # 'open box A', + # 'take electronic key 1 from box A', + # 'unlock door B with electronic key 1', + # 'open door B', + # 'go south', + # 'examine box C', + # 'unlock box C with hearty key', + # 'open box C', + # 'take digital key 1 from box C', + # 'go east', + # 'open box E', + # 'take electronic key 2 from box E', + # 'go west', + # 'unlock door C with electronic key 2', + # 'open door C', + # 'go west', + # 'unlock secured box with digital key 1', + # 'open secured box', + # 'take Secret Codes Handbook from secured box', + # 'read Secret Codes Handbook', + # 'take code key 2 from secured box', + # 'take digital key 2 from secured box', + # 'go east', + # 'go east', + # 'unlock door D with code key 2', + # 'open door D', + # 'go south', + # 'take outfit', + # 'wear the outfit', + # 'go north', + # 'go west', + # 'unlock exit box with digital key 2', + # 'open exit box', + # 'push exit push button', + # 'go east', + # 'go south', + # 'go south'] + # + # array_of_actions_for_a_fail_example1 = ['examine laptop', + # 'check email', + # 'open door A', + # 'go south', + # 'go east', + # 'open box B', + # 'take code key 1 from box B', + # 'go west', + # 'unlock box A with code key 1', + # 'open box A', + # 'take electronic key 1 from box A', + # 'unlock door B with electronic key 1', + # 'open door B', + # 'go south', + # 'examine box C', + # 'unlock box C with hearty key', + # 'open box C', + # 'take digital key 1 from box C', + # 'go east', + # 'open box E', + # 'take electronic key 2 from box E', + # 'go west', + # 'unlock door C with electronic key 2', + # 'open door C', + # 'go west', + # 'unlock secured box with digital key 1', + # 'open secured box', + # 'take digital key 2 from secured box', + # 'go east', + # 'unlock exit box with digital key 2', + # 'open exit box', + # 'push exit push button', + # 'go east', + # 'go south', + # 'go south'] + # + # array_of_actions_for_a_fail_example2 = ['examine laptop', + # 'check email', + # 'open door A'] + + quest_design(gm) + + +def quest_design(game): + quests = [] + + # 1. Player is in the Sleeping Station + win_quest = Event(conditions={game.new_fact("read/e", game._named_entities['laptop'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + fail_quest = Event(conditions={game.new_fact("unread/e", game._named_entities['laptop']), + game.new_fact("open", game._named_entities['door A'])}) + quests.append(Quest(win_events=[], fail_events=[fail_quest])) + + # 2. Player is in US LAB to find Electronic Key 1 + win_quest = Event(conditions={game.new_fact("in", game._named_entities['electronic key 1'], game._entities['I'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 3. Player is in Russian Module and take digital Key 1 and/or push the button + win_quest = Event(conditions={game.new_fact("in", game._named_entities['digital key 1'], game._entities['I'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + win_quest = Event(conditions={game.new_fact("pushed", game._named_entities['exit push button']), + game.new_fact("worn", game._named_entities['outfit'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + fail_quest = Event(conditions={game.new_fact("pushed", game._named_entities['exit push button']), + game.new_fact("takenoff", game._named_entities['outfit'])}) + quests.append(Quest(win_events=[], fail_events=[fail_quest])) + + # 4. Player is the Control Module and take Electronic Key 2 + win_quest = Event(conditions={game.new_fact("in", game._named_entities['digital key 2'], game._entities['I'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 5. Player reads the Secret Code book at Control Module + win_quest = Event(conditions={game.new_fact("read/t", game._named_entities['Secret Codes Handbook'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 6. Player is in Hatch room and wears the cloth + win_quest = Event(conditions={game.new_fact("worn", game._named_entities['outfit'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 7. Player goes outside + win_quest = Event(conditions={game.new_fact("at", game._entities['P'], game._named_entities['Outside'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + game.quests = quests + + game.test() + + +def testFW_easyGame(): + # GameMaker object for handcrafting text-based games. + kb = KnowledgeBase.load(target_dir=PATH) + gm = GameMaker(kb=kb, theme='Spaceship') + + # ===== Sleep Station Design ======================================================================================= + sleep_station = gm.new_room("Sleep Station") + + surf_1 = gm.new(type='s', name='vertical desk') # surf_1 is a table (supporter) in the Sleep Station. + sleep_station.add(surf_1) # The card box contains nothing at this game + laptop = gm.new(type='cpu', name='laptop') + surf_1.add(laptop) + # gm.add_fact('turned_off', laptop) + gm.add_fact('unread/e', laptop) + + # ===== US LAB Design ============================================================================================== + us_lab = gm.new_room("US LAB") + + # ===== European Module Design ===================================================================================== + # european_module = gm.new_room("European Module") + + corridor_1 = gm.connect(sleep_station.south, us_lab.north) + door_a = gm.new_door(corridor_1, name="door A") + gm.add_fact("closed", door_a) + # corridor_2 = gm.connect(sleep_station.east, european_module.west) + # door_b = gm.new_door(corridor_2, name="door B") + # gm.add_fact("closed", door_b) + # gm.add_fact("closed", door_a, door_b) + + gm.set_player(sleep_station) + gm.render(interactive=True) + + quests = [] + + # # A. The EVENT solution + # # ------------------------------------------ + # # 1. Player is in the Sleeping Station + # win_quest = Event(conditions={gm.new_fact("read/e", gm._named_entities['laptop'])}) + # fail_quest = Event(conditions={gm.new_fact("unread/e", gm._named_entities['laptop']), + # gm.new_fact("open", gm._named_entities['door A'])}) + # quests.append(Quest(win_events=[win_quest], fail_events=[fail_quest])) + # gm.quests = quests + + # # B. The NEW_EVENT_USING_COMMANDS solution + # # ------------------------------------------ + # win_quest = gm.new_event_using_commands(['open door A']) + # quests.append(Quest(win_events=[win_quest], fail_events=[])) + # gm.quests = quests + + # # C. The NEW_QUEST_USING_COMMANDS solution + # # ------------------------------------------ + # quest = gm.new_quest_using_commands(['open door A']) + # gm.quests = [quest] + + # B. The RECORD_QUEST solution + # ------------------------------------------ + a = gm.record_quest() + + gm.test() + + if __name__ == "__main__": # spaceship_maker_level_easy() # spaceship_maker_level_medium() - test() + # test() + # testFW_easyGame() + spaceship_maker_level_medium_v1() + diff --git a/textworld/challenges/spaceship/textworld_data/logic/cloth.twl b/textworld/challenges/spaceship/textworld_data/logic/cloth.twl index 3af39c7f..f61c636f 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/cloth.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/cloth.twl @@ -28,14 +28,16 @@ type l : o { inform7 { type { kind :: "cloth-like"; - definition :: "cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean."; + definition :: "cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean. cloth-like can be either worn in or worn out. cloth-like are usually worn out."; } predicates { - worn(l) :: "The {P} wears the {l}."; - takenoff(l) :: "The {P} does not wear the {l}."; - clean(l) :: "The {l} is clean."; - dirty(l) :: "The {l} is dirty."; + #worn(l) :: "The {P} wears the {l}."; + #takenoff(l) :: "The {P} does not wear the {l}."; + worn(l) :: "The {l} is worn in"; + takenoff(l) :: "The {l} is worn out"; + clean(l) :: "The {l} is clean"; + dirty(l) :: "The {l} is dirty"; } commands { @@ -48,8 +50,14 @@ type l : o { code :: """ Understand the command "wear" as something new. - Understand "wear [something]" as wearing a thing. - wearing a thing is an action applying to one thing. + Understand "wear [something]" as _wearing. + _wearing is an action applying to a thing. + + Carry out _wearing: + if a cloth-like (called cl) is worn out: + Now the cl is worn in; + otherwise: + Say "You have this cloth on.". """; } } diff --git a/textworld/challenges/spaceship/textworld_data/logic/player.twl b/textworld/challenges/spaceship/textworld_data/logic/player.twl index e89a2d0a..3f2b4ed6 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/player.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/player.twl @@ -2,13 +2,13 @@ type P { rules { look :: at(P, r) -> at(P, r); # Nothing changes. - wear/cloth :: $at(P,r) & at(l,r) -> on(l,P); + #wear/cloth :: $at(P,r) & at(l,r) -> on(l,P); } inform7 { commands { look :: "look" :: "looking"; - wear/cloth :: "wear cloth" :: "wearing the cloth"; + #wear/cloth :: "wear cloth" :: "wearing the cloth"; } } } From 7029059d4e740c8725217749eaa34bea315d4cd2 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Thu, 24 Oct 2019 17:04:20 -0400 Subject: [PATCH 09/13] The original Spaceship game file is the spaceship_game.py --- .../challenges/spaceship/spaceship_game.py | 411 ++++++++++++++++++ 1 file changed, 411 insertions(+) create mode 100644 textworld/challenges/spaceship/spaceship_game.py diff --git a/textworld/challenges/spaceship/spaceship_game.py b/textworld/challenges/spaceship/spaceship_game.py new file mode 100644 index 00000000..13ccad62 --- /dev/null +++ b/textworld/challenges/spaceship/spaceship_game.py @@ -0,0 +1,411 @@ +import argparse +import os + +from os.path import join as pjoin +from typing import Mapping, Optional + +import textworld +from textworld import g_rng +from textworld import GameMaker +from textworld.challenges import register +from textworld.generator.data import KnowledgeBase +from textworld.generator.game import GameOptions, Event, Quest + + +g_rng.set_seed(20190826) +PATH = pjoin(os.path.dirname(__file__), 'textworld_data') + + +def build_argparser(parser=None): + parser = parser or argparse.ArgumentParser() + + group = parser.add_argument_group('Spaceship game settings') + group.add_argument("--level", required=True, choices=["easy", "balanced", "sparse"], + help="The difficulty level. Must be between: easy, medium, or difficult.") + + return parser + + +def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None) -> textworld.Game: + """ Make a Spaceship game of the desired difficulty settings. + + Arguments: + settings: Difficulty settings (see notes). + options: + For customizing the game generation (see + :py:class:`textworld.GameOptions ` + for the list of available options). + + Returns: + Generated game. + + Notes: + Difficulty levels are defined as follows: + * Level easy. + * Level medium. + * Level difficult. + + """ + kb = KnowledgeBase.load(target_dir=PATH) + options = options or GameOptions() + options.grammar.theme = 'Spaceship' + options.kb = kb + options.seeds = g_rng.seed + + rngs = options.rngs + rng_map = rngs['map'] + rng_objects = rngs['objects'] + rng_grammar = rngs['grammar'] + rng_quest = rngs['quest'] + + if settings["level"] is 'easy': + mode = "easy" + options.nb_rooms = 4 + + elif settings["level"] is 'medium': + mode = "medium" + options.nb_rooms = 8 + + elif settings["level"] is 'difficult': + mode = "difficult" + options.nb_rooms = 8 + + metadata = {"desc": "Spaceship", # Collect information for reproduction. + "mode": mode, + "seeds": options.seeds, + "world_size": options.nb_rooms} + + # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + # Create the Game Environment + # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + gm = GameMaker(kb=kb, theme='Spaceship') + + # ===== Sleep Station Design ======================================================================================= + sleep_station = gm.new_room("Sleep Station") + sleep_station.infos.desc = "This is a typical bedroom in spaceship; here, it is called sleep station. It is " \ + "small but comfortable to take a good rest after a day full of missions. However, " \ + "today your mission will start from here. Wait to be notified by a message. So, you " \ + "should find that message first." \ + " " \ + "BTW, don't forget that when the Hatch door is open, you should already have worn " \ + "your specially-designed outfit to be able to enter and stay at Hatch area; otherwise " \ + "you'll die! Yes! Living in space is tough." + + sleep_bag = gm.new(type='c', name="sleeping bag") + sleep_bag.infos.desc = "cool! You can sleep in a comfy bag." + sleep_station.add(sleep_bag) # Sleeping bag is fixed in place in the Sleep Station. + gm.add_fact("open", sleep_bag) + + surf_1 = gm.new(type='s', name='vertical desk') # surf_1 is a table (supporter) in the Sleep Station. + surf_1.infos.desc = "This is not a regular table. The surface is installed vertically and your objects are " \ + "attached or hooked to it, why? Come on! we are in space, there is no gravity here." + sleep_station.add(surf_1) # The card box contains nothing at this game + + laptop = gm.new(type='cpu', name='laptop') + laptop.infos.desc = "This is your personal laptop which is attached to the surface of the table. You can do " \ + "regular things with this, like check your emails, watch YouTube, Skype with family,etc." \ + "Since you are here, we recommend you to check your emails. New missions are posted through " \ + "emails." + surf_1.add(laptop) + gm.add_fact('unread/e', laptop) + + # ===== US LAB Design ============================================================================================== + us_lab = gm.new_room("US LAB") + us_lab.infos.desc = "This is where Americans do their research on Space. In addition to all computers and " \ + "lab gadgets, you can find a couple of objects here which are useful during our game. Let's " \ + "explore the room." + + box_a = gm.new(type='c', name="box A") + box_a.infos.desc = "This a regular box, keeps the electronic key to open door C. But it is locked. The lock " \ + "looks like a keypad, means that the key is in fact just a code! So, ... let's search around " \ + "to find its key." + us_lab.add(box_a) + gm.add_fact("locked", box_a) + + key_1 = gm.new(type='k', name="electronic key 1") + key_1.infos.desc = "This key is a card key which opens door C." + box_a.add(key_1) + + corridor_1 = gm.connect(sleep_station.south, us_lab.north) + door_a = gm.new_door(corridor_1, name="door A") + gm.add_fact("closed", door_a) + + # ===== European Module Design ===================================================================================== + european_module = gm.new_room("European Module") + european_module.infos.desc = "This room belongs to European scientists. Isn't it cool? what do they research? " \ + "well, we can explore it later... For now, there is a key code here. This code " \ + "opens the box in the next room and consequently takes you to the next stage. So, " \ + "explore the table to find the key." + + surf_2 = gm.new(type='s', name='table') + surf_2.infos.desc = "This is a simple table located in the middle of the room. Let's take a look at it..." + european_module.add(surf_2) + + box_b = gm.new(type='c', name="box B") + box_b.infos.desc = "This a regular box, keeps the key to open box A." + surf_2.add(box_b) + gm.add_fact("closed", box_b) + + key_2 = gm.new(type='k', name="code key 1") + key_2.infos.desc = "This key is in fact a digital code which opens the box in the US Lab area. The code, " \ + "in fact, is written on a piece of paper." + box_b.add(key_2) + gm.add_fact("match", key_2, box_a) + + chair_1 = gm.new(type='s', name='chair') + chair_1.infos.desc = "this is a dark-gray chair which is developed to be used in space." + european_module.add(chair_1) + + corridor2 = gm.connect(us_lab.east, european_module.west) + + # ===== Russian Module Design ====================================================================================== + russian_module = gm.new_room("Russian Module") + russian_module.infos.desc = "The Russian module is a typical space lab that you can expect, filled with a " \ + "lot of processing machines, test equipments and space drive cars, in fact for " \ + "repair and test. Since it is located at the center of International Space Station, " \ + "it is also important room for everyone. There are many other objects here and " \ + "there belongs to other astronauts, probably that's why here looks a bit messy. " \ + "There are some stuffs here you should pick, obviously if you can find them among " \ + "all this mess." + + surf_3 = gm.new(type='s', name='metal table') + surf_3.infos.desc = "This is a big metal table, a messy one, there are many things on it, it is difficult to " \ + "find what you want. However, there is just one item which is important for you. Try to " \ + "find that item." + russian_module.add(surf_3) + + papers = gm.new(type='o', name='bunch of sticked papers') + surf_3.add(papers) + + notebooks = gm.new(type='o', name='lots of hanged notebooks') + surf_3.add(notebooks) + + tools = gm.new(type='o', name='attached bags for mechanical tools') + surf_3.add(tools) + + box_c = gm.new(type='c', name="box C") + box_c.infos.desc = "This box is locked! sounds it carries important item... So, let's find its key to open it. " \ + "Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this " \ + "somewhere before." + surf_3.add(box_c) + gm.add_fact("locked", box_c) + + key_3 = gm.new(type='k', name="digital key 1") + key_3.infos.desc = "This key is an important key in this craft. If you want to leave the spaceship, you " \ + "definitely need this key." + box_c.add(key_3) + + surf_4 = gm.new(type='s', name='wall-mounted surface') + surf_4.infos.desc = "This is a wall-mounted surface which different instruments are installed on this. These " \ + "instruments are basically control various modules and doors in the shuttle." + russian_module.add(surf_4) + + box_d = gm.new(type='c', name="exit box") + box_d.infos.desc = "The most important box here, which is in fact locked! sounds it carries important item... " \ + "So, let's find its key to open it." + surf_4.add(box_d) + gm.add_fact("locked", box_d) + + push_button = gm.new(type='b', name="exit push button") + push_button.infos.desc = "This push button is a key-like object which opens door A." + gm.add_fact("unpushed", push_button) + box_d.add(push_button) + + corridor3 = gm.connect(us_lab.south, russian_module.north) + door_b = gm.new_door(corridor3, name="door B") + gm.add_fact("match", key_1, door_b) # Tell the game 'Electronic key' is matching the 'door B''s lock + if settings["level"] is 'difficult': + gm.add_fact("closed", door_b) + else: + gm.add_fact("locked", door_b) + + # ===== Lounge Design ============================================================================================== + lounge = gm.new_room("Lounge Module") + lounge.infos.desc = "This lounge is very quiet room with a big round window to the space. Wow, you can look " \ + "to our beloved Earth from this window. This room is the place that you can stay here for " \ + "hours and just get relax. This room also contains some other stuff, let's explore what " \ + "they are ..." + + box_e = gm.new(type='c', name="box E") + box_e.infos.desc = "This box is actually a wall-mounted bag and you can put an object into it. Since we have no " \ + "gravity in the space, you can't just simply leave the object in the room. The object should " \ + "be hooked or inserted into a container like this bag. Well, know we know what it is!" + lounge.add(box_e) + gm.add_fact("closed", box_e) + + key_4 = gm.new(type='k', name="electronic key 2") + key_4.infos.desc = "This key is the key opens the door to the control room. Although it looks like a regular " \ + "iron key, it is very special metal key! Not any other key can be like it. Make sure to keep " \ + "it in safe place." + box_e.add(key_4) + + corridor4 = gm.connect(russian_module.east, lounge.west) + + # ===== Control Module Design ====================================================================================== + control_module = gm.new_room("Control Module") + control_module.infos.desc = "This is the heart of this spaceship! Wow ... look around, all the monitors and " \ + "panels. It is like you can control everything from here; more interestingly, you " \ + "can communicate with people on the Earth. There are also super important objects " \ + "kept in this room. Let's find them." + + box_f = gm.new(type='c', name="secured box") + box_f.infos.desc = "This box is secured very much, simple box with a complex, strange keypad to enter the code! " \ + "So ... it should contain extremely important items in it. Isn't it the thing you are " \ + "looking for?!" + control_module.add(box_f) + gm.add_fact("locked", box_f) + gm.add_fact("match", key_3, box_f) + + book = gm.new(type='txt', name='Secret Codes Handbook') + book.infos.desc = "If you open and check this book, here it is the description: 'This is a book of all secret " \ + "codes to manage different actions and functions inside the International Space Station. " \ + "These codes are pre-authorized by the main control room at Earth unless it is mentioned.'" \ + " " \ + "On the second page of the book, you can find this: 'To open the hatch door you should have " \ + "both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening " \ + "the hatch. Otherwise, your life is in fatal danger.'" + box_f.add(book) + gm.add_fact("unread/t", book) + + key_5 = gm.new(type='k', name="digital key 2") + box_f.add(key_5) + gm.add_fact("match", key_5, box_d) + key_6 = gm.new(type='k', name="code key 2") + box_f.add(key_6) + + corridor5 = gm.connect(control_module.east, russian_module.west) + door_c = gm.new_door(corridor5, name="door C") + gm.add_fact("locked", door_c) + gm.add_fact("match", key_4, door_c) # Tell the game 'Electronic key' is matching the 'door B''s lock + + # ===== Hatch Design =============================================================================================== + hatch = gm.new_room("Hatch") + hatch.infos.desc = "This area is like the entrance to the spaceship, so like home entrance with outer and " \ + "inner doors and a place that outfits are hooked. There are only two important differences: " \ + "first, if the outer door is open and you don't have outfit on you, you are dead!! No joke " \ + "here! So make sure that you open the door after wearing those cloths. Second, the door nob " \ + "to open the door is not neither on the door nor in this room. You should open the external " \ + "door from Russian Module! woooh so much of safety concerns, yeah?!" + + cloth = gm.new(type='l', name="outfit") + hatch.add(cloth) + gm.add_fact("takenoff", cloth) + gm.add_fact("clean", cloth) + + corridor6 = gm.connect(hatch.north, lounge.south) + door_d = gm.new_door(corridor6, name="door D") + gm.add_fact("match", key_6, door_d) + if settings["level"] is 'difficult': + gm.add_fact("closed", door_d) + else: + gm.add_fact("locked", door_d) + + # ===== Outside Spaceship (Space) Design =========================================================================== + outside = gm.new_room("Outside") + outside.infos.desc = "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means " \ + "that you have the special outfit on you and you passed the medium level of the game! " \ + "Congrats!" + + corridor7 = gm.connect(outside.north, hatch.south) + door_e = gm.new_door(corridor7, name="door E") + gm.add_fact("locked", door_e) + gm.add_fact("pair", push_button, door_e) + + # ===== Player and Inventory Design ================================================================================ + if settings["level"] is 'difficult': + # Randomly place the player in a subset of rooms. + # The player can be randomly start from any room but two of them: Control Module and Outside + available_rooms = [] + for rum in gm.rooms: + if (rum is not gm._named_entities['Outside']) and (rum is not gm._named_entities['Control Module']): + available_rooms.append(rum) + + starting_room = None + if len(available_rooms) > 1: + starting_room = rng_map.choice(available_rooms) + + gm.set_player(starting_room) + + else: + gm.set_player(sleep_station) + + key_7 = gm.new(type='k', name="hearty key") + key_7.infos.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." + gm.add_fact("match", key_7, box_c) + gm.inventory.add(key_7) # Add the object to the player's inventory. + + gm.render(interactive=True) + + if settings["level"] is 'easy': + game = quest_design_easy(gm) + + elif settings["level"] is 'medium': + game = quest_design_medium(gm) + + elif settings["level"] is 'difficult': + game = quest_design_difficult(gm) + + game.metadata = metadata + uuid = "tw-spaceship-{level}".format(level=str.title(settings["level"])) + game.metadata["uuid"] = uuid + + return game + + +def quest_design_easy(game): + return None + + +def quest_design_medium(game): + quests = [] + + # 1. Player is in the Sleeping Station + win_quest = Event(conditions={game.new_fact("read/e", game._named_entities['laptop'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + fail_quest = Event(conditions={game.new_fact("unread/e", game._named_entities['laptop']), + game.new_fact("open", game._named_entities['door A'])}) + quests.append(Quest(win_events=[], fail_events=[fail_quest])) + + # 2. Player is in US LAB to find Electronic Key 1 + win_quest = Event(conditions={game.new_fact("in", game._named_entities['electronic key 1'], game._entities['I'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 3. Player is in Russian Module and take digital Key 1 and/or push the button + win_quest = Event(conditions={game.new_fact("in", game._named_entities['digital key 1'], game._entities['I'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + win_quest = Event(conditions={game.new_fact("pushed", game._named_entities['exit push button']), + game.new_fact("worn", game._named_entities['outfit'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + fail_quest = Event(conditions={game.new_fact("pushed", game._named_entities['exit push button']), + game.new_fact("takenoff", game._named_entities['outfit'])}) + quests.append(Quest(win_events=[], fail_events=[fail_quest])) + + # 4. Player is the Control Module and take Electronic Key 2 + win_quest = Event(conditions={game.new_fact("in", game._named_entities['digital key 2'], game._entities['I'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 5. Player reads the Secret Code book at Control Module + win_quest = Event(conditions={game.new_fact("read/t", game._named_entities['Secret Codes Handbook'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 6. Player is in Hatch room and wears the cloth + win_quest = Event(conditions={game.new_fact("worn", game._named_entities['outfit'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 7. Player goes outside + win_quest = Event(conditions={game.new_fact("at", game._entities['P'], game._named_entities['Outside'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + game.quests = quests + + return game.build() + + +def quest_design_difficult(game): + return None + + +register(name="tw-spaceship", + desc="Generate a Spaceship challenge game", + make=make_game, + add_arguments=build_argparser) From db7fda32f4ae88d0aa067979185d9fc657e5472f Mon Sep 17 00:00:00 2001 From: HakiRose Date: Fri, 8 Nov 2019 10:09:16 -0500 Subject: [PATCH 10/13] Registered game samples, Simple RL agent (already designed in tutorial) is implemented, revisions on FW for stochastic commands, some minor changes on a few other files. --- .../challenges/spaceship/agent_design_a2c.py | 337 ++++++ .../spaceship/build_agent_TW_tutorial.py | 298 ++++++ .../spaceship/games/levelMedium.json | 1 + .../challenges/spaceship/games/levelMedium.ni | 904 ++++++++++++++++ .../spaceship/games/levelMedium.ulx | Bin 0 -> 639488 bytes textworld/challenges/spaceship/maker.py | 48 +- .../challenges/spaceship/spaceship_game.py | 108 +- .../spaceship/textworld_data/logic/CPU.twl | 60 ++ .../spaceship/textworld_data/logic/text.twl | 47 + .../spaceship/textworld_data/logic/thing.twl | 16 +- .../data/text_grammars/Spaceship.twg | 964 ------------------ textworld/generator/inform7/world2inform7.py | 11 +- 12 files changed, 1760 insertions(+), 1034 deletions(-) create mode 100644 textworld/challenges/spaceship/agent_design_a2c.py create mode 100644 textworld/challenges/spaceship/build_agent_TW_tutorial.py create mode 100644 textworld/challenges/spaceship/games/levelMedium.json create mode 100644 textworld/challenges/spaceship/games/levelMedium.ni create mode 100644 textworld/challenges/spaceship/games/levelMedium.ulx create mode 100644 textworld/challenges/spaceship/textworld_data/logic/CPU.twl create mode 100644 textworld/challenges/spaceship/textworld_data/logic/text.twl delete mode 100644 textworld/generator/data/text_grammars/Spaceship.twg diff --git a/textworld/challenges/spaceship/agent_design_a2c.py b/textworld/challenges/spaceship/agent_design_a2c.py new file mode 100644 index 00000000..0764365f --- /dev/null +++ b/textworld/challenges/spaceship/agent_design_a2c.py @@ -0,0 +1,337 @@ +from collections import defaultdict +from os.path import join as pjoin +from time import time +from glob import glob +from typing import Mapping, Any, Optional +import re +import numpy as np + +import os +import gym + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch import optim + +from textworld import EnvInfos +import textworld.gym + + +PATH = pjoin(os.path.dirname(__file__), 'textworld_data') +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + +class ActorzCritic(nn.Module): + + eps = 0.01 + + def __init__(self, input_size, hidden_size): + super(ActorzCritic, self).__init__() + torch.manual_seed(42) # For reproducibility + self.embedding = nn.Embedding(input_size, hidden_size) + self.encoder_gru = nn.GRU(hidden_size, hidden_size) + self.cmd_encoder_gru = nn.GRU(hidden_size, hidden_size) + self.state_gru = nn.GRU(hidden_size, hidden_size) + + self.linear_1 = nn.Linear(2 * hidden_size, 2 * hidden_size) + self.critic = nn.Linear(hidden_size, 1) + self.actor = nn.Linear(hidden_size * 2, 1) + + # Parameters + self.state_hidden = torch.zeros(1, 1, hidden_size, device=device) + self.hidden_size = hidden_size + + def forward(self, obs, commands, mode, method): + input_length, batch_size = obs.size(0), obs.size(1) + nb_cmds = commands.size(1) + + embedded = self.embedding(obs) + encoder_output, encoder_hidden = self.encoder_gru(embedded) + + state_output, state_hidden = self.state_gru(encoder_hidden, self.state_hidden) + self.state_hidden = state_hidden + state_value = self.critic(state_output) + + # Attention network over the commands. + cmds_embedding = self.embedding.forward(commands) + _, cmds_encoding_last_states = self.cmd_encoder_gru.forward(cmds_embedding) # 1*cmds*hidden + + # Same observed state for all commands. + cmd_selector_input = torch.stack([state_hidden] * nb_cmds, 2) # 1*batch*cmds*hidden + + # Same command choices for the whole batch. + cmds_encoding_last_states = torch.stack([cmds_encoding_last_states] * batch_size, 1) # 1*batch*cmds*hidden + + # Concatenate the observed state and command encodings. + input_ = torch.cat([cmd_selector_input, cmds_encoding_last_states], dim=-1) + + # One FC layer + x = F.relu(self.linear_1(input_)) + + # Compute state-action value (score) per command. + action_state = F.relu(self.actor(x)).squeeze(-1) # 1 x Batch x cmds + # action_state = F.relu(self.actor(input_)).squeeze(-1) # 1 x Batch x cmds + + probs = F.softmax(action_state, dim=2) # 1 x Batch x cmds + + if mode == "train": + action_index = probs[0].multinomial(num_samples=1).unsqueeze(0) # 1 x batch x indx + elif mode == "test": + if method == 'random': + action_index = probs[0].multinomial(num_samples=1).unsqueeze(0) # 1 x batch x indx + elif method == 'arg-max': + action_index = probs[0].max(1).indices.unsqueeze(-1).unsqueeze(-1) # 1 x batch x indx + elif method == 'eps-soft': + index = probs[0].max(1).indices.unsqueeze(-1).unsqueeze(-1) + p = np.random.random() + if p < (1 - self.eps + self.eps / nb_cmds): + action_index = index + else: + while True: + tp = np.random.choice(probs[0][0].detach().numpy()) + if (probs[0][0] == tp).nonzero().unsqueeze(-1) != index: + action_index = (probs[0][0] == tp).nonzero().unsqueeze(-1) + break + + return action_state, action_index, state_value + + def reset_hidden(self, batch_size): + self.state_hidden = torch.zeros(1, batch_size, self.hidden_size, device=device) + + +class NeuralAgent: + """ Simple Neural Agent for playing TextWorld games. """ + + MAX_VOCAB_SIZE = 1000 + UPDATE_FREQUENCY = 10 + LOG_FREQUENCY = 1000 + GAMMA = 0.9 + + def __init__(self) -> None: + self.id2word = ["", ""] + self.word2id = {w: i for i, w in enumerate(self.id2word)} + + self.model = ActorzCritic(input_size=self.MAX_VOCAB_SIZE, hidden_size=128) + self.optimizer = optim.Adam(self.model.parameters(), 0.00003) + + def train(self): + self.mode = "train" + self.method = "random" + self.transitions = [] + self.last_score = 0 + self.no_train_step = 0 + self.stats = {"max": defaultdict(list), "mean": defaultdict(list)} + self.memo = {"max": defaultdict(list), "mean": defaultdict(list), "mem": defaultdict(list)} + self.model.reset_hidden(1) + + def test(self, method): + self.mode = "test" + self.method = method + self.model.reset_hidden(1) + + @property + def infos_to_request(self) -> EnvInfos: + return EnvInfos(description=True, inventory=True, admissible_commands=True, has_won=True, has_lost=True) + + def act(self, obs: str, score: int, done: bool, infos: Mapping[str, Any]) -> Optional[str]: + # Build agent's observation: feedback + look + inventory. + input_ = "{}\n{}\n{}".format(obs, infos["description"], infos["inventory"]) + + # Tokenize and pad the input and the commands to chose from. + input_tensor = self._process([input_]) + commands_tensor = self._process(infos["admissible_commands"]) + + # Get our next action and value prediction. + outputs, indexes, values = self.model(input_tensor, commands_tensor, mode=self.mode, method=self.method) + action = infos["admissible_commands"][indexes[0]] + + if self.mode == "test": + if done: + self.model.reset_hidden(1) + return action + + self.no_train_step += 1 + + if self.transitions: + reward = score - self.last_score # Reward is the gain/loss in score. + self.last_score = score + if infos["has_won"]: + reward += 100 + if infos["has_lost"]: + reward -= 100 + + self.transitions[-1][0] = reward # Update reward information. + + self.stats["max"]["score"].append(score) + self.memo["max"]["score"].append(score) + + if self.no_train_step % self.UPDATE_FREQUENCY == 0: + # Update model + returns, advantages = self._discount_rewards(values) + + loss = 0 + for transition, ret, advantage in zip(self.transitions, returns, advantages): + reward, indexes_, outputs_, values_ = transition + + advantage = advantage.detach() # Block gradients flow here. + probs = F.softmax(outputs_, dim=2) + log_probs = torch.log(probs) + log_action_probs = log_probs.gather(2, indexes_) + policy_loss = (log_action_probs * advantage).sum() + value_loss = ((values_ - ret) ** 2.).sum() + entropy = (-probs * log_probs).sum() + loss += 0.5 * value_loss - policy_loss - 0.001 * entropy + + self.memo["mem"]["selected_action_index"].append(indexes_.item()) + self.memo["mem"]["state_val_func"].append(values_.item()) + self.memo["mem"]["advantage"].append(advantage.item()) + self.memo["mem"]["return"].append(ret.item()) + self.memo["mean"]["reward"].append(reward) + self.memo["mean"]["policy_loss"].append(policy_loss.item()) + self.memo["mean"]["value_loss"].append(value_loss.item()) + + self.stats["mean"]["reward"].append(reward) + self.stats["mean"]["policy_loss"].append(policy_loss.item()) + self.stats["mean"]["value_loss"].append(value_loss.item()) + self.stats["mean"]["entropy"].append(entropy.item()) + self.stats["mean"]["confidence"].append(torch.exp(log_action_probs).item()) + + if self.no_train_step % self.LOG_FREQUENCY == 0: + msg = "{}. ".format(self.no_train_step) + msg += " ".join("{}: {:.3f}".format(k, np.mean(v)) for k, v in self.stats["mean"].items()) + msg += " " + " ".join("{}: {}".format(k, np.max(v)) for k, v in self.stats["max"].items()) + msg += " vocab: {}".format(len(self.id2word)) + print(msg) + self.stats = {"max": defaultdict(list), "mean": defaultdict(list)} + + self.optimizer.zero_grad() + loss.backward() + nn.utils.clip_grad_norm(self.model.parameters(), 40) + self.optimizer.step() + self.optimizer.zero_grad() + + self.transitions = [] + self.model.reset_hidden(1) + else: + # Keep information about transitions for Truncated Backpropagation Through Time. + self.transitions.append([None, indexes, outputs, values]) # Reward will be set on the next call + + if done: + self.last_score = 0 # Will be starting a new episode. Reset the last score. + + return action + + def _process(self, texts): + texts = list(map(self._tokenize, texts)) + max_len = max(len(l) for l in texts) + padded = np.ones((len(texts), max_len)) * self.word2id[""] + + for i, text in enumerate(texts): + padded[i, :len(text)] = text + + padded_tensor = torch.from_numpy(padded).type(torch.long).to(device) + padded_tensor = padded_tensor.permute(1, 0) # Batch x Seq => Seq x Batch + return padded_tensor + + def _tokenize(self, text): + # Simple tokenizer: strip out all non-alphabetic characters. + text = re.sub("[^a-zA-Z0-9\- ]", " ", text) + word_ids = list(map(self._get_word_id, text.split())) + return word_ids + + def _get_word_id(self, word): + if word not in self.word2id: + if len(self.word2id) >= self.MAX_VOCAB_SIZE: + return self.word2id[""] + + self.id2word.append(word) + self.word2id[word] = len(self.word2id) + + return self.word2id[word] + + def _discount_rewards(self, last_values): + returns, advantages = [], [] + R = last_values.data + for t in reversed(range(len(self.transitions))): + rewards, _, _, values = self.transitions[t] + R = rewards + self.GAMMA * R + adv = R - values + returns.append(R) + advantages.append(adv) + + return returns[::-1], advantages[::-1] + + +def play(agent, path, max_step=50, nb_episodes=1, verbose=True): + """ + This code uses the cooking agent design in the spaceship game. + + :param agent: the obj of NeuralAgent, a sample object for the agent + :param path: The path to the game (envo model) + """ + + infos_to_request = agent.infos_to_request + infos_to_request.max_score = True # Needed to normalize the scores. + + gamefiles = [path] + if os.path.isdir(path): + gamefiles = glob(os.path.join(path, "*.ulx")) + + env_id = textworld.gym.register_games(gamefiles, + request_infos=infos_to_request, + max_episode_steps=max_step) + env = gym.make(env_id) # Create a Gym environment to play the text game. + + if verbose: + if os.path.isdir(path): + print(os.path.dirname(path), end="") + else: + print(os.path.basename(path), end="") + + # Collect some statistics: nb_steps, final reward. + avg_moves, avg_scores, avg_norm_scores, seed_h = [], [], [], 4567 + for no_episode in range(nb_episodes): + obs, infos = env.reset() # Start new episode. + + env.env.textworld_env._wrapped_env.seed(seed=seed_h) + seed_h += 1 + + score = 0 + done = False + nb_moves = 0 + while not done: + command = agent.act(obs, score, done, infos) + obs, score, done, infos = env.step(command) + nb_moves += 1 + + agent.act(obs, score, done, infos) # Let the agent know the game is done. + + if verbose: + print(".", end="") + avg_moves.append(nb_moves) + avg_scores.append(score) + avg_norm_scores.append(score / infos["max_score"]) + + env.close() + msg = " \tavg. steps: {:5.1f}; avg. score: {:4.1f} / {}." + if verbose: + if os.path.isdir(path): + print(msg.format(np.mean(avg_moves), np.mean(avg_norm_scores), 1)) + else: + print(msg.format(np.mean(avg_moves), np.mean(avg_scores), infos["max_score"])) + + +agent = NeuralAgent() + +print(" ===== Training ===================================================== ") +agent.train() # Tell the agent it should update its parameters. +start_time = time() +play(agent, "./games/levelMedium.ulx", nb_episodes=25, verbose=False) +print("Trained in {:.2f} secs".format(time() - start_time)) + +print(' ===== Test ========================================================= ') +# agent.test() +agent.test(method='eps-soft') +play(agent, "./games/levelMedium.ulx") # Medium level game. + diff --git a/textworld/challenges/spaceship/build_agent_TW_tutorial.py b/textworld/challenges/spaceship/build_agent_TW_tutorial.py new file mode 100644 index 00000000..1fc03fae --- /dev/null +++ b/textworld/challenges/spaceship/build_agent_TW_tutorial.py @@ -0,0 +1,298 @@ +import os +import gym +import re +import argparse +import numpy as np +from typing import Mapping, Any, Optional +from glob import glob +from os.path import join as pjoin +from time import time +from collections import defaultdict + +import textworld.gym +from textworld.generator.data import KnowledgeBase +from textworld.challenges import register +from textworld.challenges.spaceship.maker import spaceship_maker_level_medium_v1 +from textworld import EnvInfos + +import torch +import torch.nn as nn +from torch import optim +import torch.nn.functional as F + +PATH = pjoin(os.path.dirname(__file__), 'textworld_data') + + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + +class CommandScorer(nn.Module): + def __init__(self, input_size, hidden_size): + super(CommandScorer, self).__init__() + torch.manual_seed(42) # For reproducibility + self.embedding = nn.Embedding(input_size, hidden_size) + self.encoder_gru = nn.GRU(hidden_size, hidden_size) + self.cmd_encoder_gru = nn.GRU(hidden_size, hidden_size) + self.state_gru = nn.GRU(hidden_size, hidden_size) + self.hidden_size = hidden_size + self.state_hidden = torch.zeros(1, 1, hidden_size, device=device) + self.critic = nn.Linear(hidden_size, 1) + self.att_cmd = nn.Linear(hidden_size * 2, 1) + + def reset_hidden(self, batch_size): + self.state_hidden = torch.zeros(1, batch_size, self.hidden_size, device=device) + + def forward(self, obs, commands, **kwargs): + input_length = obs.size(0) + batch_size = obs.size(1) + nb_cmds = commands.size(1) + + embedded = self.embedding(obs) + encoder_output, encoder_hidden = self.encoder_gru(embedded) + state_output, state_hidden = self.state_gru(encoder_hidden, self.state_hidden) + self.state_hidden = state_hidden + value = self.critic(state_output) + + # Attention network over the commands. + cmds_embedding = self.embedding.forward(commands) + _, cmds_encoding_last_states = self.cmd_encoder_gru.forward(cmds_embedding) # 1 x cmds x hidden + + # Same observed state for all commands. + cmd_selector_input = torch.stack([state_hidden] * nb_cmds, 2) # 1 x batch x cmds x hidden + + # Same command choices for the whole batch. + cmds_encoding_last_states = torch.stack([cmds_encoding_last_states] * batch_size, 1) # 1 x batch x cmds x hidden + + # Concatenate the observed state and command encodings. + cmd_selector_input = torch.cat([cmd_selector_input, cmds_encoding_last_states], dim=-1) + + # Compute one score per command. + scores = F.relu(self.att_cmd(cmd_selector_input)).squeeze(-1) # 1 x Batch x cmds + + probs = F.softmax(scores, dim=2) # 1 x Batch x cmds + index = probs[0].multinomial(num_samples=1).unsqueeze(0) # 1 x batch x indx + return scores, index, value + + +class NeuralAgent: + """ Simple Neural Agent for playing TextWorld games. """ + MAX_VOCAB_SIZE = 1000 + UPDATE_FREQUENCY = 10 + LOG_FREQUENCY = 1000 + GAMMA = 0.9 + + def __init__(self) -> None: + self._initialized = False + self._epsiode_has_started = False + self.id2word = ["", ""] + self.word2id = {w: i for i, w in enumerate(self.id2word)} + + self.model = CommandScorer(input_size=self.MAX_VOCAB_SIZE, hidden_size=128) + self.optimizer = optim.Adam(self.model.parameters(), 0.00003) + + self.mode = "test" + + def train(self): + self.mode = "train" + self.stats = {"max": defaultdict(list), "mean": defaultdict(list)} + self.transitions = [] + self.model.reset_hidden(1) + self.last_score = 0 + self.no_train_step = 0 + + def test(self): + self.mode = "test" + self.model.reset_hidden(1) + + @property + def infos_to_request(self) -> EnvInfos: + return EnvInfos(description=True, inventory=True, admissible_commands=True, has_won=True, has_lost=True) + + def act(self, obs: str, score: int, done: bool, infos: Mapping[str, Any]) -> Optional[str]: + # Build agent's observation: feedback + look + inventory. + input_ = "{}\n{}\n{}".format(obs, infos["description"], infos["inventory"]) + + # Tokenize and pad the input and the commands to chose from. + input_tensor = self._process([input_]) + commands_tensor = self._process(infos["admissible_commands"]) + + # Get our next action and value prediction. + outputs, indexes, values = self.model(input_tensor, commands_tensor) + action = infos["admissible_commands"][indexes[0]] + + if self.mode == "test": + if done: + self.model.reset_hidden(1) + return action + + self.no_train_step += 1 + + if self.transitions: + reward = score - self.last_score # Reward is the gain/loss in score. + self.last_score = score + if infos["has_won"]: + reward += 100 + if infos["has_lost"]: + reward -= 100 + + self.transitions[-1][0] = reward # Update reward information. + + self.stats["max"]["score"].append(score) + if self.no_train_step % self.UPDATE_FREQUENCY == 0: + # Update model + returns, advantages = self._discount_rewards(values) + + loss = 0 + for transition, ret, advantage in zip(self.transitions, returns, advantages): + reward, indexes_, outputs_, values_ = transition + + advantage = advantage.detach() # Block gradients flow here. + probs = F.softmax(outputs_, dim=2) + log_probs = torch.log(probs) + log_action_probs = log_probs.gather(2, indexes_) + policy_loss = (-log_action_probs * advantage).sum() + value_loss = (.5 * (values_ - ret) ** 2.).sum() + entropy = (-probs * log_probs).sum() + loss += policy_loss + 0.5 * value_loss - 0.1 * entropy + + self.stats["mean"]["reward"].append(reward) + self.stats["mean"]["policy"].append(policy_loss.item()) + self.stats["mean"]["value"].append(value_loss.item()) + self.stats["mean"]["entropy"].append(entropy.item()) + self.stats["mean"]["confidence"].append(torch.exp(log_action_probs).item()) + + if self.no_train_step % self.LOG_FREQUENCY == 0: + msg = "{}. ".format(self.no_train_step) + msg += " ".join("{}: {:.3f}".format(k, np.mean(v)) for k, v in self.stats["mean"].items()) + msg += " " + " ".join("{}: {}".format(k, np.max(v)) for k, v in self.stats["max"].items()) + msg += " vocab: {}".format(len(self.id2word)) + print(msg) + self.stats = {"max": defaultdict(list), "mean": defaultdict(list)} + + loss.backward() + nn.utils.clip_grad_norm_(self.model.parameters(), 40) + self.optimizer.step() + self.optimizer.zero_grad() + + self.transitions = [] + self.model.reset_hidden(1) + else: + # Keep information about transitions for Truncated Backpropagation Through Time. + self.transitions.append([None, indexes, outputs, values]) # Reward will be set on the next call + + if done: + self.last_score = 0 # Will be starting a new episode. Reset the last score. + + return action + + def _process(self, texts): + texts = list(map(self._tokenize, texts)) + max_len = max(len(l) for l in texts) + padded = np.ones((len(texts), max_len)) * self.word2id[""] + + for i, text in enumerate(texts): + padded[i, :len(text)] = text + + padded_tensor = torch.from_numpy(padded).type(torch.long).to(device) + padded_tensor = padded_tensor.permute(1, 0) # Batch x Seq => Seq x Batch + return padded_tensor + + def _tokenize(self, text): + # Simple tokenizer: strip out all non-alphabetic characters. + text = re.sub("[^a-zA-Z0-9\- ]", " ", text) + word_ids = list(map(self._get_word_id, text.split())) + return word_ids + + def _get_word_id(self, word): + if word not in self.word2id: + if len(self.word2id) >= self.MAX_VOCAB_SIZE: + return self.word2id[""] + + self.id2word.append(word) + self.word2id[word] = len(self.word2id) + + return self.word2id[word] + + def _discount_rewards(self, last_values): + returns, advantages = [], [] + R = last_values.data + for t in reversed(range(len(self.transitions))): + rewards, _, _, values = self.transitions[t] + R = rewards + self.GAMMA * R + adv = R - values + returns.append(R) + advantages.append(adv) + + return returns[::-1], advantages[::-1] + + +def play(agent, path, max_step=50, nb_episodes=10, verbose=True): + """ + This code uses the cooking agent design in the spaceship game. + + :param agent: the obj of NeuralAgent, a sample object for the agent + :param path: The path to the game (envo model) + """ + infos_to_request = agent.infos_to_request + infos_to_request.max_score = True # Needed to normalize the scores. + + gamefiles = [path] + if os.path.isdir(path): + gamefiles = glob(os.path.join(path, "*.ulx")) + + env_id = textworld.gym.register_games(gamefiles, + request_infos=infos_to_request, + max_episode_steps=max_step) + env = gym.make(env_id) # Create a Gym environment to play the text game. + + if verbose: + if os.path.isdir(path): + print(os.path.dirname(path), end="") + else: + print(os.path.basename(path), end="") + + # Collect some statistics: nb_steps, final reward. + avg_moves, avg_scores, avg_norm_scores, seed_h = [], [], [], None + for no_episode in range(nb_episodes): + obs, infos = env.reset() # Start new episode. + seed_h = env.env.textworld_env._wrapped_env.seed(init_seed=seed_h) + + score = 0 + done = False + nb_moves = 0 + while not done: + command = agent.act(obs, score, done, infos) + obs, score, done, infos = env.step(command) + nb_moves += 1 + + agent.act(obs, score, done, infos) # Let the agent know the game is done. + + if verbose: + print(".", end="") + avg_moves.append(nb_moves) + avg_scores.append(score) + avg_norm_scores.append(score / infos["max_score"]) + + env.close() + msg = " \tavg. steps: {:5.1f}; avg. score: {:4.1f} / {}." + if verbose: + if os.path.isdir(path): + print(msg.format(np.mean(avg_moves), np.mean(avg_norm_scores), 1)) + else: + print(msg.format(np.mean(avg_moves), np.mean(avg_scores), infos["max_score"])) + + +agent = NeuralAgent() + +print("Training") +agent.train() # Tell the agent it should update its parameters. + +starttime = time() +play(agent, "./games/levelMedium.ulx", nb_episodes=500, verbose=False) # Medium level game. +print("Trained in {:.2f} secs".format(time() - starttime)) + +print('============== Time To Test ============== ') + +print("Testing") +agent.test() +play(agent, "./games/levelMedium.ulx") # Medium level game. diff --git a/textworld/challenges/spaceship/games/levelMedium.json b/textworld/challenges/spaceship/games/levelMedium.json new file mode 100644 index 00000000..4e1919bf --- /dev/null +++ b/textworld/challenges/spaceship/games/levelMedium.json @@ -0,0 +1 @@ +{"version": 1, "world": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_0", "type": "c"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_1", "type": "c"}, {"name": "r_1", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_5", "type": "c"}, {"name": "r_4", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_6", "type": "c"}, {"name": "r_5", "type": "r"}]}, {"name": "at", "arguments": [{"name": "l_0", "type": "l"}, {"name": "r_6", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_0", "type": "s"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_1", "type": "s"}, {"name": "r_2", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_2", "type": "s"}, {"name": "r_2", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_3", "type": "s"}, {"name": "r_3", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_4", "type": "s"}, {"name": "r_3", "type": "r"}]}, {"name": "clean", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "closed", "arguments": [{"name": "c_2", "type": "c"}]}, {"name": "closed", "arguments": [{"name": "c_5", "type": "c"}]}, {"name": "closed", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "east_of", "arguments": [{"name": "r_2", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "east_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_5", "type": "r"}]}, {"name": "east_of", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_2", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_2", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "in", "arguments": [{"name": "b_0", "type": "b"}, {"name": "c_4", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "c_1", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_1", "type": "k"}, {"name": "c_2", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "c_3", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_3", "type": "k"}, {"name": "c_5", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_4", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_6", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "in", "arguments": [{"name": "txt_0", "type": "txt"}, {"name": "c_6", "type": "c"}]}, {"name": "link", "arguments": [{"name": "r_0", "type": "r"}, {"name": "d_0", "type": "d"}, {"name": "r_1", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_1", "type": "r"}, {"name": "d_0", "type": "d"}, {"name": "r_0", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_1", "type": "r"}, {"name": "d_1", "type": "d"}, {"name": "r_3", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_3", "type": "r"}, {"name": "d_1", "type": "d"}, {"name": "r_1", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_3", "type": "r"}, {"name": "d_2", "type": "d"}, {"name": "r_5", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_4", "type": "r"}, {"name": "d_3", "type": "d"}, {"name": "r_6", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_5", "type": "r"}, {"name": "d_2", "type": "d"}, {"name": "r_3", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_6", "type": "r"}, {"name": "d_3", "type": "d"}, {"name": "r_4", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_6", "type": "r"}, {"name": "d_4", "type": "d"}, {"name": "r_7", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_7", "type": "r"}, {"name": "d_4", "type": "d"}, {"name": "r_6", "type": "r"}]}, {"name": "locked", "arguments": [{"name": "c_1", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_3", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_4", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_6", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "d_1", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_2", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_3", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_4", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_0", "type": "k"}, {"name": "d_1", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_1", "type": "k"}, {"name": "c_1", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_2", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_3", "type": "k"}, {"name": "d_2", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_4", "type": "k"}, {"name": "c_4", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_5", "type": "k"}, {"name": "d_3", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_6", "type": "k"}, {"name": "c_3", "type": "c"}]}, {"name": "north_of", "arguments": [{"name": "r_0", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_6", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_6", "type": "r"}, {"name": "r_7", "type": "r"}]}, {"name": "on", "arguments": [{"name": "c_2", "type": "c"}, {"name": "s_1", "type": "s"}]}, {"name": "on", "arguments": [{"name": "c_3", "type": "c"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "c_4", "type": "c"}, {"name": "s_4", "type": "s"}]}, {"name": "on", "arguments": [{"name": "cpu_0", "type": "cpu"}, {"name": "s_0", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_0", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_1", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_2", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "open", "arguments": [{"name": "c_0", "type": "c"}]}, {"name": "pair", "arguments": [{"name": "b_0", "type": "b"}, {"name": "d_4", "type": "d"}]}, {"name": "south_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_0", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_6", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_7", "type": "r"}, {"name": "r_6", "type": "r"}]}, {"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "unpushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "unread/t", "arguments": [{"name": "txt_0", "type": "txt"}]}, {"name": "west_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_2", "type": "r"}]}, {"name": "west_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "west_of", "arguments": [{"name": "r_5", "type": "r"}, {"name": "r_3", "type": "r"}]}], "grammar": {"theme": "Spaceship", "names_to_exclude": [], "include_adj": false, "blend_descriptions": false, "ambiguous_instructions": false, "only_last_action": false, "blend_instructions": false, "allowed_variables_numbering": false, "unique_expansion": false}, "quests": [{"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "read/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}], "postconditions": [{"name": "read/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "event", "arguments": [{"name": "cpu_0", "type": "cpu"}]}]}}], "fail_events": []}, {"desc": "", "reward": 0, "commands": [], "win_events": [], "fail_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}], "postconditions": [{"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "cpu_0", "type": "cpu"}, {"name": "d_0", "type": "d"}]}]}}]}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_0", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_2", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}], "postconditions": [{"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "event", "arguments": [{"name": "b_0", "type": "b"}, {"name": "l_0", "type": "l"}]}]}}], "fail_events": []}, {"desc": "", "reward": 0, "commands": [], "win_events": [], "fail_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}], "postconditions": [{"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "event", "arguments": [{"name": "b_0", "type": "b"}, {"name": "l_0", "type": "l"}]}]}}]}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_5", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "read/t", "arguments": [{"name": "txt_0", "type": "txt"}]}], "postconditions": [{"name": "read/t", "arguments": [{"name": "txt_0", "type": "txt"}]}, {"name": "event", "arguments": [{"name": "txt_0", "type": "txt"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}], "postconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "event", "arguments": [{"name": "l_0", "type": "l"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}], "postconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}]}}], "fail_events": []}], "infos": [["P", {"id": "P", "type": "P", "name": null, "noun": null, "adj": null, "desc": null, "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["I", {"id": "I", "type": "I", "name": null, "noun": null, "adj": null, "desc": null, "room_type": null, "definite": null, "indefinite": null, "synonyms": null}], ["r_2", {"id": "r_2", "type": "r", "name": "European Module", "noun": null, "adj": null, "desc": "This room belongs to European scientists. Isn't it cool? what do they research? well, we can explore it later... For now, there is a key code here. This code opens the box in the next room and consequently takes you to the next stage. So, explore the table to find the key.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["r_1", {"id": "r_1", "type": "r", "name": "US LAB", "noun": null, "adj": null, "desc": "This is where Americans do their research on Space. In addition to all computers and lab gadgets, you can find a couple of objects here which are useful during our game. Let's explore the room.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_3", {"id": "r_3", "type": "r", "name": "Russian Module", "noun": null, "adj": null, "desc": "The Russian module is a typical space lab that you can expect, filled with a lot of processing machines, test equipments and space drive cars, in fact for repair and test. Since it is located at the center of International Space Station, it is also important room for everyone. There are many other objects here and there belongs to other astronauts, probably that's why here looks a bit messy. There are some stuffs here you should pick, obviously if you can find them among all this mess.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["r_5", {"id": "r_5", "type": "r", "name": "Control Module", "noun": null, "adj": null, "desc": "This is the heart of this spaceship! Wow ... look around, all the monitors and panels. It is like you can control everything from here; more interestingly, you can communicate with people on the Earth. There are also super important objects kept in this room. Let's find them.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_4", {"id": "r_4", "type": "r", "name": "Lounge Module", "noun": null, "adj": null, "desc": "This lounge is very quiet room with a big round window to the space. Wow, you can look to our beloved Earth from this window. This room is the place that you can stay here for hours and just get relax. This room also contains some other stuff, let's explore what they are ...", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["r_0", {"id": "r_0", "type": "r", "name": "Sleep Station", "noun": null, "adj": null, "desc": "This is a typical bedroom in spaceship; here, it is called sleep station. It is small but comfortable to take a good rest after a day full of missions. However, today your mission will start from here. Wait to be notified by a message. So, you should find that message first. BTW, don't forget that when the Hatch door is open, you should already have worn your specially-designed outfit to be able to enter and stay at Hatch area; otherwise you'll die! Yes! Living in space is tough.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["r_6", {"id": "r_6", "type": "r", "name": "Hatch", "noun": null, "adj": null, "desc": "This area is like the entrance to the spaceship, so like home entrance with outer and inner doors and a place that outfits are hooked. There are only two important differences: first, if the outer door is open and you don't have outfit on you, you are dead!! No joke here! So make sure that you open the door after wearing those cloths. Second, the door nob to open the door is not neither on the door nor in this room. You should open the external door from Russian Module! woooh so much of safety concerns, yeah?!", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_7", {"id": "r_7", "type": "r", "name": "Outside", "noun": null, "adj": null, "desc": "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means that you have the special outfit on you and you passed the medium level of the game! Congrats!", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["d_0", {"id": "d_0", "type": "d", "name": "door A", "noun": null, "adj": null, "desc": "it's a commanding door A [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["d_1", {"id": "d_1", "type": "d", "name": "door B", "noun": null, "adj": null, "desc": "it's a manageable door B [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["d_2", {"id": "d_2", "type": "d", "name": "door C", "noun": null, "adj": null, "desc": "The door C looks imposing. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["d_3", {"id": "d_3", "type": "d", "name": "door D", "noun": null, "adj": null, "desc": "it is what it is, a door D [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["d_4", {"id": "d_4", "type": "d", "name": "door E", "noun": null, "adj": null, "desc": "The door E looks rugged. [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["c_0", {"id": "c_0", "type": "c", "name": "sleeping bag", "noun": null, "adj": null, "desc": "cool! You can sleep in a comfy bag.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["c_1", {"id": "c_1", "type": "c", "name": "box A", "noun": null, "adj": null, "desc": "This a regular box, keeps the electronic key to open door C. But it is locked. The lock looks like a keypad, means that the key is in fact just a code! So, ... let's search around to find its key.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["c_5", {"id": "c_5", "type": "c", "name": "box E", "noun": null, "adj": null, "desc": "This box is actually a wall-mounted bag and you can put an object into it. Since we have no gravity in the space, you can't just simply leave the object in the room. The object should be hooked or inserted into a container like this bag. Well, know we know what it is!", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["c_6", {"id": "c_6", "type": "c", "name": "secured box", "noun": null, "adj": null, "desc": "This box is secured very much, simple box with a complex, strange keypad to enter the code! So ... it should contain extremely important items in it. Isn't it the thing you are looking for?!", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["l_0", {"id": "l_0", "type": "l", "name": "outfit", "noun": null, "adj": null, "desc": "", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["s_0", {"id": "s_0", "type": "s", "name": "vertical desk", "noun": null, "adj": null, "desc": "This is not a regular table. The surface is installed vertically and your objects are attached or hooked to it, why? Come on! we are in space, there is no gravity here.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["s_1", {"id": "s_1", "type": "s", "name": "table", "noun": null, "adj": null, "desc": "This is a simple table located in the middle of the room. Let's take a look at it...", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["s_2", {"id": "s_2", "type": "s", "name": "chair", "noun": null, "adj": null, "desc": "this is a dark-gray chair which is developed to be used in space.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["s_3", {"id": "s_3", "type": "s", "name": "metal table", "noun": null, "adj": null, "desc": "This is a big metal table, a messy one, there are many things on it, it is difficult to find what you want. However, there is just one item which is important for you. Try to find that item.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["s_4", {"id": "s_4", "type": "s", "name": "wall-mounted surface", "noun": null, "adj": null, "desc": "This is a wall-mounted surface which different instruments are installed on this. These instruments are basically control various modules and doors in the shuttle.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["c_2", {"id": "c_2", "type": "c", "name": "box B", "noun": null, "adj": null, "desc": "This a regular box, keeps the key to open box A.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["b_0", {"id": "b_0", "type": "b", "name": "exit push button", "noun": null, "adj": null, "desc": "This push button is a key-like object which opens door A.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["c_4", {"id": "c_4", "type": "c", "name": "exit box", "noun": null, "adj": null, "desc": "The most important box here, which is in fact locked! sounds it carries important item... So, let's find its key to open it.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["k_0", {"id": "k_0", "type": "k", "name": "electronic key 1", "noun": null, "adj": null, "desc": "This key is a card key which opens door C.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["k_1", {"id": "k_1", "type": "k", "name": "code key 1", "noun": null, "adj": null, "desc": "This key is in fact a digital code which opens the box in the US Lab area. The code, in fact, is written on a piece of paper.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_2", {"id": "k_2", "type": "k", "name": "digital key 1", "noun": null, "adj": null, "desc": "This key is an important key in this craft. If you want to leave the spaceship, you definitely need this key.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["c_3", {"id": "c_3", "type": "c", "name": "box C", "noun": null, "adj": null, "desc": "This box is locked! sounds it carries important item... So, let's find its key to open it. Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this somewhere before.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["k_3", {"id": "k_3", "type": "k", "name": "electronic key 2", "noun": null, "adj": null, "desc": "This key is the key opens the door to the control room. Although it looks like a regular iron key, it is very special metal key! Not any other key can be like it. Make sure to keep it in safe place.", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["k_4", {"id": "k_4", "type": "k", "name": "digital key 2", "noun": null, "adj": null, "desc": "The digital key 2 is cold to the touch", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["k_5", {"id": "k_5", "type": "k", "name": "code key 2", "noun": null, "adj": null, "desc": "The code key 2 is cold to the touch", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["k_6", {"id": "k_6", "type": "k", "name": "hearty key", "noun": null, "adj": null, "desc": "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha...", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["txt_0", {"id": "txt_0", "type": "txt", "name": "Secret Codes Handbook", "noun": null, "adj": null, "desc": "If you open and check this book, here it is the description: 'This is a book of all secret codes to manage different actions and functions inside the International Space Station. These codes are pre-authorized by the main control room at Earth unless it is mentioned.' On the second page of the book, you can find this: 'To open the hatch door you should have both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening the hatch. Otherwise, your life is in fatal danger.'", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["cpu_0", {"id": "cpu_0", "type": "cpu", "name": "laptop", "noun": null, "adj": null, "desc": "This is your personal laptop which is attached to the surface of the table. You can do regular things with this, like check your emails, watch YouTube, Skype with family,etc.Since you are here, we recommend you to check your emails. New missions are posted through emails.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["o_0", {"id": "o_0", "type": "o", "name": "bunch of sticked papers", "noun": null, "adj": null, "desc": "The bunch of sticked papers is dirty.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["o_1", {"id": "o_1", "type": "o", "name": "lots of hanged notebooks", "noun": null, "adj": null, "desc": "The lots of hanged notebooks is modern.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["o_2", {"id": "o_2", "type": "o", "name": "attached bags for mechanical tools", "noun": null, "adj": null, "desc": "The attached bags for mechanical tools is dirty.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}]], "KB": {"logic": "# room\ntype r {\n predicates {\n at(P, r);\n at(t, r);\n\n north_of(r, r);\n west_of(r, r);\n\n north_of/d(r, d, r);\n west_of/d(r, d, r);\n\n free(r, r);\n\n south_of(r, r') = north_of(r', r);\n east_of(r, r') = west_of(r', r);\n\n south_of/d(r, d, r') = north_of/d(r', d, r);\n east_of/d(r, d, r') = west_of/d(r', d, r);\n }\n\n rules {\n go/north :: at(P, r) & $north_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/south :: at(P, r) & $south_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/east :: at(P, r) & $east_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/west :: at(P, r) & $west_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n }\n\n reverse_rules {\n go/north :: go/south;\n go/west :: go/east;\n }\n\n constraints {\n r1 :: at(P, r) & at(P, r') -> fail();\n r2 :: at(s, r) & at(s, r') -> fail();\n r3 :: at(c, r) & at(c, r') -> fail();\n\n # An exit direction can only lead to one room.\n nav_rr1 :: north_of(r, r') & north_of(r'', r') -> fail();\n nav_rr2 :: south_of(r, r') & south_of(r'', r') -> fail();\n nav_rr3 :: east_of(r, r') & east_of(r'', r') -> fail();\n nav_rr4 :: west_of(r, r') & west_of(r'', r') -> fail();\n\n # Two rooms can only be connected once with each other.\n nav_rrA :: north_of(r, r') & south_of(r, r') -> fail();\n nav_rrB :: north_of(r, r') & west_of(r, r') -> fail();\n nav_rrC :: north_of(r, r') & east_of(r, r') -> fail();\n nav_rrD :: south_of(r, r') & west_of(r, r') -> fail();\n nav_rrE :: south_of(r, r') & east_of(r, r') -> fail();\n nav_rrF :: west_of(r, r') & east_of(r, r') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"room\";\n }\n\n predicates {\n at(P, r) :: \"The player is in {r}\";\n at(t, r) :: \"The {t} is in {r}\";\n free(r, r') :: \"\"; # No equivalent in Inform7.\n\n north_of(r, r') :: \"The {r} is mapped north of {r'}\";\n south_of(r, r') :: \"The {r} is mapped south of {r'}\";\n east_of(r, r') :: \"The {r} is mapped east of {r'}\";\n west_of(r, r') :: \"The {r} is mapped west of {r'}\";\n\n north_of/d(r, d, r') :: \"South of {r} and north of {r'} is a door called {d}\";\n south_of/d(r, d, r') :: \"North of {r} and south of {r'} is a door called {d}\";\n east_of/d(r, d, r') :: \"West of {r} and east of {r'} is a door called {d}\";\n west_of/d(r, d, r') :: \"East of {r} and west of {r'} is a door called {d}\";\n }\n\n commands {\n go/north :: \"go north\" :: \"going north\";\n go/south :: \"go south\" :: \"going south\";\n go/east :: \"go east\" :: \"going east\";\n go/west :: \"go west\" :: \"going west\";\n }\n }\n}\n\n# CPU-Like\ntype cpu : o {\n predicates {\n #turned_on(cpu);\n #turned_off(cpu);\n\n read/e(cpu);\n unread/e(cpu);\n }\n\n rules {\n check/e :: $at(P, r) & $at(s, r) & $on(cpu, s) & unread/e(cpu) -> read/e(cpu);\n examine/cpu :: at(P, r) & $at(s, r) & $on(cpu, s) -> at(P, r); # Nothing changes.\n }\n\n reverse_rules {\n check/e :: check/e;\n examine/cpu :: examine/cpu;\n }\n\n constraints {\n #cpu1 :: turned_on(cpu) & turned_off(cpu) -> fail();\n cpu2 :: read/e(cpu) & unread/e(cpu) -> fail(); \n }\n\n inform7 {\n type {\n kind :: \"CPU-like\";\n definition :: \"A CPU-like can be either read or unread. A CPU-like is usually unread.\";\n #definition :: \"A CPU-like can be either turned on or turned off. A CPU-like is usually turned off. A CPU-like can be either read or unread. A CPU-like is usually unread.\";\n }\n\n predicates {\n #turned_on(cpu) :: \"The {cpu} is turned on\";\n #turned_off(cpu) :: \"The {cpu} is turned off\";\n\n read/e(cpu) :: \"The {cpu} is read\";\n unread/e(cpu) :: \"The {cpu} is unread\";\n }\n\n commands { \n check/e :: \"check email\" :: \"checking email\";\n examine/cpu :: \"examine {cpu}\" :: \"examining the {cpu}\";\n }\n\n code :: \"\"\"\n Understand the command \"check\" as something new. \n Understand \"check email\" as checking email. \n checking email is an action applying to nothing. \n\n Carry out checking email: \n if a CPU-like (called pc) is unread: \n if a random chance of 1 in 4 succeeds: \n Now the pc is read; \n Say \"Email: Your mission is started.\"; \n otherwise:\n Say \"No emails yet! Wait.\". \n \"\"\";\n }\n}\n\n# door\ntype d : t {\n predicates {\n open(d);\n closed(d);\n locked(d);\n\n link(r, d, r);\n }\n\n rules {\n lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d);\n unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d);\n\n open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r);\n close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d);\n \n lock/close/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & pushed(b) & open(d) & free(r, r') & free(r', r) -> unpushed(b) & locked(d);\n unlock/open/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r, r') & free(r', r);\n\n lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & pushed(b) & open(d) & free(r', r'') & free(r'', r') -> unpushed(b) & locked(d);\n unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r', r'') & free(r'', r');\n\n examine/d :: at(P, r) & $link(r, d, r') -> at(P, r); # Nothing changes.\n }\n\n reverse_rules {\n lock/d :: unlock/d;\n open/d :: close/d;\n lock/close/d/b :: unlock/open/d/b;\n lock/close/db :: unlock/open/db;\n }\n\n constraints {\n d1 :: open(d) & closed(d) -> fail();\n d2 :: open(d) & locked(d) -> fail();\n d3 :: closed(d) & locked(d) -> fail();\n\n # A door can't be used to link more than two rooms.\n link1 :: link(r, d, r') & link(r, d, r'') -> fail();\n link2 :: link(r, d, r') & link(r'', d, r''') -> fail();\n\n # There's already a door linking two rooms.\n link3 :: link(r, d, r') & link(r, d', r') -> fail();\n\n # There cannot be more than four doors in a room.\n too_many_doors :: link(r, d1: d, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n\n # There cannot be more than four doors in a room.\n dr1 :: free(r, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr2 :: free(r, r1: r) & free(r, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr3 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr4 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & free(r, r4: r) & link(r, d5: d, r5: r) -> fail();\n\n free1 :: link(r, d, r') & free(r, r') & closed(d) -> fail();\n free2 :: link(r, d, r') & free(r, r') & locked(d) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"door\";\n definition :: \"door is openable and lockable.\";\n }\n\n predicates {\n open(d) :: \"The {d} is open\";\n closed(d) :: \"The {d} is closed\";\n locked(d) :: \"The {d} is locked\";\n \n link(r, d, r') :: \"\"; # No equivalent in Inform7.\n }\n\n commands {\n open/d :: \"open {d}\" :: \"opening {d}\";\n close/d :: \"close {d}\" :: \"closing {d}\";\n\n unlock/d :: \"unlock {d} with {k}\" :: \"unlocking {d} with the {k}\";\n lock/d :: \"lock {d} with {k}\" :: \"locking {d} with the {k}\";\n\n lock/close/d/b :: \"push {b}\" :: \"_pushing the {b}\";\n unlock/open/d/b :: \"push {b}\" :: \"_pushing the {b}\";\n\n lock/close/db :: \"push {b}\" :: \"_pushing the {b}\";\n unlock/open/db :: \"push {b}\" :: \"_pushing the {b}\";\n\n examine/d :: \"examine {d}\" :: \"examining the {d}\";\n }\n }\n}\n\n# Inventory\ntype I {\n predicates {\n in(o, I);\n }\n\n rules {\n inventory :: at(P, r) -> at(P, r); # Nothing changes.\n\n take :: $at(P, r) & at(o, r) -> in(o, I);\n \n take/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, c) -> in(o, I);\n insert/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, I) -> in(o, c);\n\n take/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, c) -> in(o, I);\n insert/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, I) -> in(o, c);\n\n take/s :: $at(P, r) & $at(s, r) & on(o, s) -> in(o, I);\n hook :: $at(P, r) & $at(s, r) & in(o, I) -> on(o, s);\n\n examine/I :: in(o, I) -> in(o, I); # Nothing changes.\n examine/s :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes.\n examine/c :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes.\n examine/or :: at(P, r) & $in(o, r) -> at(P, r); # Nothing changes.\n examine/oc :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes.\n examine/os :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes.\n }\n\n reverse_rules { \n inventory :: inventory;\n\n take/c :: insert/c;\n take/s :: hook;\n take/cs :: insert/cs;\n\n examine/I :: examine/I;\n examine/s :: examine/s;\n examine/c :: examine/c;\n examine/or :: examine/or;\n examine/oc :: examine/oc;\n examine/os :: examine/os;\n }\n\n inform7 {\n predicates {\n in(o, I) :: \"The player carries the {o}\";\n }\n\n commands {\n\n inventory :: \"inventory\" :: \"taking inventory\";\n\n take :: \"take {o}\" :: \"taking the {o}\"; \n\n take/c :: \"take {o} from {c}\" :: \"removing the {o} from the {c}\";\n insert/c :: \"insert {o} into {c}\" :: \"inserting the {o} into the {c}\";\n\n take/cs :: \"take {o} from {c}\" :: \"removing the {o} from the {c}\";\n insert/cs :: \"insert {o} into {c}\" :: \"inserting the {o} into the {c}\";\n\n take/s :: \"take {o} from {s}\" :: \"removing the {o} from the {s}\";\n hook :: \"hook {o} on {s}\" :: \"hooking the {o} on the {s}\";\n\n examine/I :: \"examine {o}\" :: \"examining the {o}\";\n examine/s :: \"examine {o}\" :: \"examining the {o}\";\n examine/c :: \"examine {o}\" :: \"examining the {o}\";\n examine/or :: \"examine {o}\" :: \"examining the {o}\";\n examine/oc :: \"examine {o}\" :: \"examining the {o}\";\n examine/os :: \"examine {o}\" :: \"examining the {o}\";\n }\n }\n}\n\n# food\ntype f : o {\n predicates {\n edible(f);\n eaten(f);\n }\n\n rules {\n eat :: in(f, I) -> eaten(f);\n }\n\n constraints {\n eaten1 :: eaten(f) & in(f, I) -> fail();\n eaten2 :: eaten(f) & in(f, c) -> fail();\n eaten3 :: eaten(f) & on(f, s) -> fail();\n eaten4 :: eaten(f) & at(f, r) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"food\";\n definition :: \"food is edible.\";\n }\n\n predicates {\n edible(f) :: \"The {f} is edible\";\n eaten(f) :: \"The {f} is nowhere\";\n }\n\n commands {\n eat :: \"eat {f}\" :: \"eating the {f}\";\n }\n }\n}\n\n# supporter\ntype s : t {\n predicates {\n on(o, s);\n on(c, s);\n }\n\n inform7 {\n type {\n kind :: \"supporter\";\n definition :: \"supporters are fixed in place.\";\n }\n\n predicates {\n on(o, s) :: \"The {o} is on the {s}\";\n on(c, s) :: \"The {c} is on the {s}\"; \n }\n }\n}\n\n# push button\ntype b : t {\n predicates {\n pushed(b);\n unpushed(b);\n\n pair(b, d);\n\n in(b, c);\n }\n\n inform7 {\n type {\n kind :: \"button-like\";\n definition :: \"A button-like can be either pushed or unpushed. A button-like is usually unpushed. A button-like is fixed in place.\";\n }\n\n predicates {\n pushed(b) :: \"The {b} is pushed\";\n unpushed(b) :: \"The {b} is unpushed\";\n\n pair(b, d) :: \"The {b} pairs to {d}\";\n\n in(b, c) :: \"The {b} is in the {c}\";\n }\n\n code :: \"\"\"\n connectivity relates a button-like to a door. The verb to pair to means the connectivity relation. \n\n Understand the command \"push\" as something new. \n Understand \"push [something]\" as _pushing. \n _pushing is an action applying to a thing. \n\n Carry out _pushing: \n if a button-like (called pb) pairs to door (called dr): \n if dr is locked:\n Now the pb is pushed; \n Now dr is unlocked; \n Now dr is open; \n otherwise:\n Now the pb is unpushed; \n Now dr is locked.\n\n Report _pushing: \n if a button-like (called pb) pairs to door (called dr): \n if dr is unlocked:\n say \"You push the [pb], and [dr] is now open.\";\n otherwise:\n say \"You push the [pb] again, and [dr] is now locked.\" \n \"\"\";\n }\n}\n\n# container\ntype c : t {\n predicates {\n open(c);\n closed(c);\n locked(c);\n\n in(o, c); \n }\n\n rules {\n lock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & closed(c) -> locked(c);\n unlock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & locked(c) -> closed(c);\n\n open/c :: $at(P, r) & $at(c, r) & closed(c) -> open(c); \n close/c :: $at(P, r) & $at(c, r) & open(c) -> closed(c);\n\n lock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & closed(c) -> locked(c);\n unlock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & locked(c) -> closed(c);\n\n open/bx :: $at(P, r) & $at(s, r) & $on(c, s) & closed(c) -> open(c);\n close/bx :: $at(P, r) & $at(s, r) & $on(c, s) & open(c) -> closed(c);\n }\n\n reverse_rules {\n lock/c :: unlock/c;\n open/c :: close/c;\n lock/bx :: unlock/bx;\n open/bx :: close/bx;\n }\n\n constraints {\n c1 :: open(c) & closed(c) -> fail();\n c2 :: open(c) & locked(c) -> fail();\n c3 :: closed(c) & locked(c) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"container\";\n definition :: \"containers are openable, lockable and fixed in place. containers are usually closed.\";\n }\n\n predicates {\n open(c) :: \"The {c} is open\";\n closed(c) :: \"The {c} is closed\";\n locked(c) :: \"The {c} is locked\";\n\n in(o, c) :: \"The {o} is in the {c}\";\n }\n\n commands {\n open/c :: \"open {c}\" :: \"opening the {c}\";\n close/c :: \"close {c}\" :: \"closing the {c}\";\n\n lock/c :: \"lock {c} with {k}\" :: \"locking the {c} with the {k}\";\n unlock/c :: \"unlock {c} with {k}\" :: \"unlocking the {c} with the {k}\";\n\n open/bx :: \"open {c}\" :: \"opening the {c}\";\n close/bx :: \"close {c}\" :: \"closing the {c}\";\n\n lock/bx :: \"lock {c} with {k}\" :: \"locking the {c} with the {k}\";\n unlock/bx :: \"unlock {c} with {k}\" :: \"unlocking the {c} with the {k}\";\n }\n }\n}\n\n# key\ntype k : o {\n predicates {\n match(k, c);\n match(k, d);\n }\n\n constraints {\n k1 :: match(k, c) & match(k', c) -> fail();\n k2 :: match(k, c) & match(k, c') -> fail();\n k3 :: match(k, d) & match(k', d) -> fail();\n k4 :: match(k, d) & match(k, d') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"key\";\n }\n\n predicates {\n match(k, c) :: \"The matching key of the {c} is the {k}\";\n match(k, d) :: \"The matching key of the {d} is the {k}\";\n }\n }\n}\n\n# cloth\ntype l : o {\n predicates { \n worn(l);\n\t takenoff(l);\n clean(l);\n\t dirty(l);\n \t}\n\n rules {\n wear/l :: in(l, I) -> worn(l);\n takeoff/l :: worn(l) -> in(l, I);\n\n wash/l :: $at(l,r) & dirty(l) -> clean(l);\n dirty/l :: $worn(l,P) & clean(l) -> dirty(l);\n \t}\n\n reverse_rules {\n wear/l :: takeoff/l;\n wash/l :: dirty/l;\n \t}\n\n constraints {\n l1 :: clean(l) & dirty(l) -> fail();\n l2 :: worn(l) & takenoff(l) -> fail();\n \t}\n\n inform7 {\n type {\n kind :: \"cloth-like\";\n definition :: \"cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean. cloth-like can be either worn in or worn out. cloth-like are usually worn out.\"; \n }\n\n predicates { \n\t #worn(l) :: \"The {P} wears the {l}.\";\n\t #takenoff(l) :: \"The {P} does not wear the {l}.\";\n worn(l) :: \"The {l} is worn in\";\n\t takenoff(l) :: \"The {l} is worn out\"; \n clean(l) :: \"The {l} is clean\";\n\t dirty(l) :: \"The {l} is dirty\"; \n }\n\n commands {\n wear/l :: \"wear {l}\" :: \"wearing the {l}\";\n takeoff/l :: \"take off {l}\" :: \"taking off the {l}\";\n\n clean/l :: \"clean {l}\" :: \"cleaning the {l}\";\n\t dirty/l :: \"dirty {l}\" :: \"dirtying the {l}\";\n }\n\n code :: \"\"\"\n Understand the command \"wear\" as something new. \n Understand \"wear [something]\" as _wearing. \n _wearing is an action applying to a thing. \n\n Carry out _wearing: \n if a cloth-like (called cl) is worn out: \n Now the cl is worn in; \n otherwise:\n Say \"You have this cloth on.\". \n \"\"\";\n }\n}\n\n# text-Like\ntype txt : o {\n predicates {\n read/t(txt);\n unread/t(txt);\n }\n\n rules {\n read/book :: $at(P, r) & $in(txt, I) & unread/t(txt) -> read/t(txt);\n examine/book :: at(P, r) & $in(txt, I) -> at(P, r); # Nothing changes.\n }\n \n reverse_rules {\n examine/book :: examine/book;\n }\n \n constraints {\n txt1 :: read/t(txt) & unread/t(txt) -> fail(); \n }\n\n inform7 {\n type {\n kind :: \"text-like\";\n definition :: \"A text-like can be either read or unread. A text-like is usually unread.\";\n }\n\n predicates {\n read/t(txt) :: \"The {txt} is read\";\n unread/t(txt) :: \"The {txt} is unread\";\n }\n\n commands { \n read/book :: \"read the book\" :: \"reading the book\";\n examine/book :: \"examine {txt}\" :: \"examining the {txt}\";\n }\n \n code :: \"\"\"\n Understand the command \"read\" as something new. \n Understand \"read [something]\" as _reading. \n _reading is an action applying to a thing. \n \n Carry out _reading: \n if a text-like (called tx) is unread: \n Now the tx is read; \n \"\"\";\n }\n}\n\n# object\ntype o : t {\n constraints {\n obj1 :: in(o, I) & in(o, c) -> fail();\n obj2 :: in(o, I) & on(o, s) -> fail();\n obj3 :: in(o, I) & at(o, r) -> fail();\n obj4 :: in(o, c) & on(o, s) -> fail();\n obj5 :: in(o, c) & at(o, r) -> fail();\n obj6 :: on(o, s) & at(o, r) -> fail();\n obj7 :: at(o, r) & at(o, r') -> fail();\n obj8 :: in(o, c) & in(o, c') -> fail();\n obj9 :: on(o, s) & on(o, s') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"object-like\";\n definition :: \"object-like is portable.\";\n }\n }\n}\n\n# Player\ntype P {\n rules {\n look :: at(P, r) -> at(P, r); # Nothing changes.\n\t #wear/cloth :: $at(P,r) & at(l,r) -> on(l,P);\n }\n\n inform7 {\n commands {\n look :: \"look\" :: \"looking\";\n\t #wear/cloth :: \"wear cloth\" :: \"wearing the cloth\";\n }\n }\n}\n\n# thing\ntype t {\n rules {\n examine/t :: at(P, r) & $at(t, r) -> at(P, r);\n }\n\n reverse_rules {\n examine/t :: examine/t;\n }\n\n inform7 { \n type {\n kind :: \"thing\";\n }\n\n commands {\n examine/t :: \"examine {t}\" :: \"examining the {t}\";\n }\n\n code :: \"\"\"\n Understand \"tw-set seed [a number]\" as updating the new seed. \n Updating the new seed is an action applying to a number.\n Carry out updating the new seed:\n seed the random-number generator with the number understood.\n \"\"\";\n }\n}\n\n", "text_grammars_path": "/home/v-hapurm/Documents/Haki_Git/TextWorld/textworld/challenges/spaceship/textworld_data/text_grammars"}, "metadata": {"desc": "Spaceship", "mode": "medium", "seeds": {"map": 59225, "objects": 31964, "quest": 43730, "grammar": 657, "agent": 44415}, "world_size": 8, "uuid": "tw-spaceship-Medium"}, "objective": "", "extras": {}} \ No newline at end of file diff --git a/textworld/challenges/spaceship/games/levelMedium.ni b/textworld/challenges/spaceship/games/levelMedium.ni new file mode 100644 index 00000000..043f94ad --- /dev/null +++ b/textworld/challenges/spaceship/games/levelMedium.ni @@ -0,0 +1,904 @@ +Use MAX_STATIC_DATA of 500000. +When play begins, seed the random-number generator with 1234. + +button-like is a kind of thing. +container is a kind of thing. +door is a kind of thing. +object-like is a kind of thing. +supporter is a kind of thing. +CPU-like is a kind of object-like. +food is a kind of object-like. +key is a kind of object-like. +cloth-like is a kind of object-like. +text-like is a kind of object-like. +A button-like can be either pushed or unpushed. A button-like is usually unpushed. A button-like is fixed in place. +containers are openable, lockable and fixed in place. containers are usually closed. +door is openable and lockable. +object-like is portable. +supporters are fixed in place. +A CPU-like can be either read or unread. A CPU-like is usually unread. +food is edible. +cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean. cloth-like can be either worn in or worn out. cloth-like are usually worn out. +A text-like can be either read or unread. A text-like is usually unread. +A room has a text called internal name. + + +Understand the command "check" as something new. +Understand "check email" as checking email. +checking email is an action applying to nothing. + +Carry out checking email: + if a CPU-like (called pc) is unread: + if a random chance of 1 in 4 succeeds: + Now the pc is read; + Say "Email: Your mission is started."; + otherwise: + Say "No emails yet! Wait.". + + +connectivity relates a button-like to a door. The verb to pair to means the connectivity relation. + +Understand the command "push" as something new. +Understand "push [something]" as _pushing. +_pushing is an action applying to a thing. + +Carry out _pushing: + if a button-like (called pb) pairs to door (called dr): + if dr is locked: + Now the pb is pushed; + Now dr is unlocked; + Now dr is open; + otherwise: + Now the pb is unpushed; + Now dr is locked. + +Report _pushing: + if a button-like (called pb) pairs to door (called dr): + if dr is unlocked: + say "You push the [pb], and [dr] is now open."; + otherwise: + say "You push the [pb] again, and [dr] is now locked." + + +Understand the command "wear" as something new. +Understand "wear [something]" as _wearing. +_wearing is an action applying to a thing. + +Carry out _wearing: + if a cloth-like (called cl) is worn out: + Now the cl is worn in; + otherwise: + Say "You have this cloth on.". + + +Understand the command "read" as something new. +Understand "read [something]" as _reading. +_reading is an action applying to a thing. + +Carry out _reading: + if a text-like (called tx) is unread: + Now the tx is read; + + +Understand "tw-set seed [a number]" as updating the new seed. +Updating the new seed is an action applying to a number. +Carry out updating the new seed: + seed the random-number generator with the number understood. + + +The r_2 and the r_1 and the r_3 and the r_5 and the r_4 and the r_0 and the r_6 and the r_7 are rooms. + +The internal name of r_2 is "European Module". +The printed name of r_2 is "-= European Module =-". +The European Module part 0 is some text that varies. The European Module part 0 is "This room belongs to European scientists. Isn't it cool? what do they research? well, we can explore it later... For now, there is a key code here. This code opens the box in the next room and consequently takes you to the next stage. So, explore the table to find the key.". +The description of r_2 is "[European Module part 0]". + +The r_1 is mapped west of r_2. +The internal name of r_1 is "US LAB". +The printed name of r_1 is "-= Us Lab =-". +The US LAB part 0 is some text that varies. The US LAB part 0 is "This is where Americans do their research on Space. In addition to all computers and lab gadgets, you can find a couple of objects here which are useful during our game. Let's explore the room.". +The description of r_1 is "[US LAB part 0]". + +south of r_1 and north of r_3 is a door called d_1. +north of r_1 and south of r_0 is a door called d_0. +The r_2 is mapped east of r_1. +The internal name of r_3 is "Russian Module". +The printed name of r_3 is "-= Russian Module =-". +The Russian Module part 0 is some text that varies. The Russian Module part 0 is "The Russian module is a typical space lab that you can expect, filled with a lot of processing machines, test equipments and space drive cars, in fact for repair and test. Since it is located at the center of International Space Station, it is also important room for everyone. There are many other objects here and there belongs to other astronauts, probably that's why here looks a bit messy. There are some stuffs here you should pick, obviously if you can find them among all this mess.". +The description of r_3 is "[Russian Module part 0]". + +west of r_3 and east of r_5 is a door called d_2. +north of r_3 and south of r_1 is a door called d_1. +The r_4 is mapped east of r_3. +The internal name of r_5 is "Control Module". +The printed name of r_5 is "-= Control Module =-". +The Control Module part 0 is some text that varies. The Control Module part 0 is "This is the heart of this spaceship! Wow ... look around, all the monitors and panels. It is like you can control everything from here; more interestingly, you can communicate with people on the Earth. There are also super important objects kept in this room. Let's find them.". +The description of r_5 is "[Control Module part 0]". + +east of r_5 and west of r_3 is a door called d_2. +The internal name of r_4 is "Lounge Module". +The printed name of r_4 is "-= Lounge Module =-". +The Lounge Module part 0 is some text that varies. The Lounge Module part 0 is "This lounge is very quiet room with a big round window to the space. Wow, you can look to our beloved Earth from this window. This room is the place that you can stay here for hours and just get relax. This room also contains some other stuff, let's explore what they are ...". +The description of r_4 is "[Lounge Module part 0]". + +The r_3 is mapped west of r_4. +south of r_4 and north of r_6 is a door called d_3. +The internal name of r_0 is "Sleep Station". +The printed name of r_0 is "-= Sleep Station =-". +The Sleep Station part 0 is some text that varies. The Sleep Station part 0 is "This is a typical bedroom in spaceship; here, it is called sleep station. It is small but comfortable to take a good rest after a day full of missions. However, today your mission will start from here. Wait to be notified by a message. So, you should find that message first. BTW, don't forget that when the Hatch door is open, you should already have worn your specially-designed outfit to be able to enter and stay at Hatch area; otherwise you'll die! Yes! Living in space is tough.". +The description of r_0 is "[Sleep Station part 0]". + +south of r_0 and north of r_1 is a door called d_0. +The internal name of r_6 is "Hatch". +The printed name of r_6 is "-= Hatch =-". +The Hatch part 0 is some text that varies. The Hatch part 0 is "This area is like the entrance to the spaceship, so like home entrance with outer and inner doors and a place that outfits are hooked. There are only two important differences: first, if the outer door is open and you don't have outfit on you, you are dead!! No joke here! So make sure that you open the door after wearing those cloths. Second, the door nob to open the door is not neither on the door nor in this room. You should open the external door from Russian Module! woooh so much of safety concerns, yeah?!". +The description of r_6 is "[Hatch part 0]". + +south of r_6 and north of r_7 is a door called d_4. +north of r_6 and south of r_4 is a door called d_3. +The internal name of r_7 is "Outside". +The printed name of r_7 is "-= Outside =-". +The Outside part 0 is some text that varies. The Outside part 0 is "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means that you have the special outfit on you and you passed the medium level of the game! Congrats!". +The description of r_7 is "[Outside part 0]". + +north of r_7 and south of r_6 is a door called d_4. + +The b_0 are button-likes. +The b_0 are privately-named. +The c_0 and the c_1 and the c_5 and the c_6 and the c_2 and the c_4 and the c_3 are containers. +The c_0 and the c_1 and the c_5 and the c_6 and the c_2 and the c_4 and the c_3 are privately-named. +The cpu_0 are CPU-likes. +The cpu_0 are privately-named. +The d_0 and the d_1 and the d_2 and the d_3 and the d_4 are doors. +The d_0 and the d_1 and the d_2 and the d_3 and the d_4 are privately-named. +The k_0 and the k_1 and the k_2 and the k_3 and the k_4 and the k_5 and the k_6 are keys. +The k_0 and the k_1 and the k_2 and the k_3 and the k_4 and the k_5 and the k_6 are privately-named. +The l_0 are cloth-likes. +The l_0 are privately-named. +The o_0 and the o_1 and the o_2 are object-likes. +The o_0 and the o_1 and the o_2 are privately-named. +The r_2 and the r_1 and the r_3 and the r_5 and the r_4 and the r_0 and the r_6 and the r_7 are rooms. +The r_2 and the r_1 and the r_3 and the r_5 and the r_4 and the r_0 and the r_6 and the r_7 are privately-named. +The s_0 and the s_1 and the s_2 and the s_3 and the s_4 are supporters. +The s_0 and the s_1 and the s_2 and the s_3 and the s_4 are privately-named. +The txt_0 are text-likes. +The txt_0 are privately-named. + +The description of d_0 is "it's a commanding door A [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". +The printed name of d_0 is "door A". +Understand "door A" as d_0. +Understand "door" as d_0. +Understand "A" as d_0. +The d_0 is closed. +The description of d_1 is "it's a manageable door B [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". +The printed name of d_1 is "door B". +Understand "door B" as d_1. +Understand "door" as d_1. +Understand "B" as d_1. +The d_1 is locked. +The description of d_2 is "The door C looks imposing. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". +The printed name of d_2 is "door C". +Understand "door C" as d_2. +Understand "door" as d_2. +Understand "C" as d_2. +The d_2 is locked. +The description of d_3 is "it is what it is, a door D [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". +The printed name of d_3 is "door D". +Understand "door D" as d_3. +Understand "door" as d_3. +Understand "D" as d_3. +The d_3 is locked. +The description of d_4 is "The door E looks rugged. [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]". +The printed name of d_4 is "door E". +Understand "door E" as d_4. +Understand "door" as d_4. +Understand "E" as d_4. +The d_4 is locked. +The description of c_0 is "cool! You can sleep in a comfy bag.". +The printed name of c_0 is "sleeping bag". +Understand "sleeping bag" as c_0. +Understand "sleeping" as c_0. +Understand "bag" as c_0. +The c_0 is in r_0. +The c_0 is open. +The description of c_1 is "This a regular box, keeps the electronic key to open door C. But it is locked. The lock looks like a keypad, means that the key is in fact just a code! So, ... let's search around to find its key.". +The printed name of c_1 is "box A". +Understand "box A" as c_1. +Understand "box" as c_1. +Understand "A" as c_1. +The c_1 is in r_1. +The c_1 is locked. +The description of c_5 is "This box is actually a wall-mounted bag and you can put an object into it. Since we have no gravity in the space, you can't just simply leave the object in the room. The object should be hooked or inserted into a container like this bag. Well, know we know what it is!". +The printed name of c_5 is "box E". +Understand "box E" as c_5. +Understand "box" as c_5. +Understand "E" as c_5. +The c_5 is in r_4. +The c_5 is closed. +The description of c_6 is "This box is secured very much, simple box with a complex, strange keypad to enter the code! So ... it should contain extremely important items in it. Isn't it the thing you are looking for?!". +The printed name of c_6 is "secured box". +Understand "secured box" as c_6. +Understand "secured" as c_6. +Understand "box" as c_6. +The c_6 is in r_5. +The c_6 is locked. +The description of l_0 is "". +The printed name of l_0 is "outfit". +Understand "outfit" as l_0. +The l_0 is in r_6. +The l_0 is clean. +The l_0 is worn out. +The description of s_0 is "This is not a regular table. The surface is installed vertically and your objects are attached or hooked to it, why? Come on! we are in space, there is no gravity here.". +The printed name of s_0 is "vertical desk". +Understand "vertical desk" as s_0. +Understand "vertical" as s_0. +Understand "desk" as s_0. +The s_0 is in r_0. +The description of s_1 is "This is a simple table located in the middle of the room. Let's take a look at it...". +The printed name of s_1 is "table". +Understand "table" as s_1. +The s_1 is in r_2. +The description of s_2 is "this is a dark-gray chair which is developed to be used in space.". +The printed name of s_2 is "chair". +Understand "chair" as s_2. +The s_2 is in r_2. +The description of s_3 is "This is a big metal table, a messy one, there are many things on it, it is difficult to find what you want. However, there is just one item which is important for you. Try to find that item.". +The printed name of s_3 is "metal table". +Understand "metal table" as s_3. +Understand "metal" as s_3. +Understand "table" as s_3. +The s_3 is in r_3. +The description of s_4 is "This is a wall-mounted surface which different instruments are installed on this. These instruments are basically control various modules and doors in the shuttle.". +The printed name of s_4 is "wall-mounted surface". +Understand "wall-mounted surface" as s_4. +Understand "wall-mounted" as s_4. +Understand "surface" as s_4. +The s_4 is in r_3. +The description of c_2 is "This a regular box, keeps the key to open box A.". +The printed name of c_2 is "box B". +Understand "box B" as c_2. +Understand "box" as c_2. +Understand "B" as c_2. +The c_2 is closed. +The c_2 is on the s_1. +The description of b_0 is "This push button is a key-like object which opens door A.". +The printed name of b_0 is "exit push button". +Understand "exit push button" as b_0. +Understand "exit" as b_0. +Understand "push" as b_0. +Understand "button" as b_0. +The b_0 is in the c_4. +The b_0 pairs to d_4. +The b_0 is unpushed. +The description of c_4 is "The most important box here, which is in fact locked! sounds it carries important item... So, let's find its key to open it.". +The printed name of c_4 is "exit box". +Understand "exit box" as c_4. +Understand "exit" as c_4. +Understand "box" as c_4. +The c_4 is locked. +The c_4 is on the s_4. +The description of k_0 is "This key is a card key which opens door C.". +The printed name of k_0 is "electronic key 1". +Understand "electronic key 1" as k_0. +Understand "electronic" as k_0. +Understand "key" as k_0. +Understand "1" as k_0. +The k_0 is in the c_1. +The matching key of the d_1 is the k_0. +The description of k_1 is "This key is in fact a digital code which opens the box in the US Lab area. The code, in fact, is written on a piece of paper.". +The printed name of k_1 is "code key 1". +Understand "code key 1" as k_1. +Understand "code" as k_1. +Understand "key" as k_1. +Understand "1" as k_1. +The k_1 is in the c_2. +The matching key of the c_1 is the k_1. +The description of k_2 is "This key is an important key in this craft. If you want to leave the spaceship, you definitely need this key.". +The printed name of k_2 is "digital key 1". +Understand "digital key 1" as k_2. +Understand "digital" as k_2. +Understand "key" as k_2. +Understand "1" as k_2. +The k_2 is in the c_3. +The matching key of the c_6 is the k_2. +The description of c_3 is "This box is locked! sounds it carries important item... So, let's find its key to open it. Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this somewhere before.". +The printed name of c_3 is "box C". +Understand "box C" as c_3. +Understand "box" as c_3. +Understand "C" as c_3. +The c_3 is locked. +The c_3 is on the s_3. +The description of k_3 is "This key is the key opens the door to the control room. Although it looks like a regular iron key, it is very special metal key! Not any other key can be like it. Make sure to keep it in safe place.". +The printed name of k_3 is "electronic key 2". +Understand "electronic key 2" as k_3. +Understand "electronic" as k_3. +Understand "key" as k_3. +Understand "2" as k_3. +The k_3 is in the c_5. +The matching key of the d_2 is the k_3. +The description of k_4 is "The digital key 2 is cold to the touch". +The printed name of k_4 is "digital key 2". +Understand "digital key 2" as k_4. +Understand "digital" as k_4. +Understand "key" as k_4. +Understand "2" as k_4. +The k_4 is in the c_6. +The matching key of the c_4 is the k_4. +The description of k_5 is "The code key 2 is cold to the touch". +The printed name of k_5 is "code key 2". +Understand "code key 2" as k_5. +Understand "code" as k_5. +Understand "key" as k_5. +Understand "2" as k_5. +The k_5 is in the c_6. +The matching key of the d_3 is the k_5. +The description of k_6 is "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha...". +The printed name of k_6 is "hearty key". +Understand "hearty key" as k_6. +Understand "hearty" as k_6. +Understand "key" as k_6. +The player carries the k_6. +The matching key of the c_3 is the k_6. +The description of txt_0 is "If you open and check this book, here it is the description: 'This is a book of all secret codes to manage different actions and functions inside the International Space Station. These codes are pre-authorized by the main control room at Earth unless it is mentioned.' On the second page of the book, you can find this: 'To open the hatch door you should have both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening the hatch. Otherwise, your life is in fatal danger.'". +The printed name of txt_0 is "Secret Codes Handbook". +Understand "Secret Codes Handbook" as txt_0. +Understand "Secret" as txt_0. +Understand "Codes" as txt_0. +Understand "Handbook" as txt_0. +The txt_0 is in the c_6. +The txt_0 is unread. +The description of cpu_0 is "This is your personal laptop which is attached to the surface of the table. You can do regular things with this, like check your emails, watch YouTube, Skype with family,etc.Since you are here, we recommend you to check your emails. New missions are posted through emails.". +The printed name of cpu_0 is "laptop". +Understand "laptop" as cpu_0. +The cpu_0 is on the s_0. +The cpu_0 is unread. +The description of o_0 is "The bunch of sticked papers is dirty.". +The printed name of o_0 is "bunch of sticked papers". +Understand "bunch of sticked papers" as o_0. +Understand "bunch" as o_0. +Understand "sticked" as o_0. +Understand "papers" as o_0. +The o_0 is on the s_3. +The description of o_1 is "The lots of hanged notebooks is modern.". +The printed name of o_1 is "lots of hanged notebooks". +Understand "lots of hanged notebooks" as o_1. +Understand "lots" as o_1. +Understand "hanged" as o_1. +Understand "notebooks" as o_1. +The o_1 is on the s_3. +The description of o_2 is "The attached bags for mechanical tools is dirty.". +The printed name of o_2 is "attached bags for mechanical tools". +Understand "attached bags for mechanical tools" as o_2. +Understand "attached" as o_2. +Understand "bags" as o_2. +Understand "for" as o_2. +Understand "mechanical" as o_2. +Understand "tools" as o_2. +The o_2 is on the s_3. + + +The player is in r_0. + +The quest0 completed is a truth state that varies. +The quest0 completed is usually false. + +Test quest0_0 with "" + +Every turn: + if quest0 completed is true: + do nothing; + else if The cpu_0 is read: + increase the score by 1; [Quest completed] + Now the quest0 completed is true; + +The quest1 completed is a truth state that varies. +The quest1 completed is usually false. +Every turn: + if quest1 completed is true: + do nothing; + else if The cpu_0 is unread and The d_0 is open: + end the story; [Lost] + +The quest2 completed is a truth state that varies. +The quest2 completed is usually false. + +Test quest2_0 with "" + +Every turn: + if quest2 completed is true: + do nothing; + else if The player carries the k_0: + increase the score by 1; [Quest completed] + Now the quest2 completed is true; + +The quest3 completed is a truth state that varies. +The quest3 completed is usually false. + +Test quest3_0 with "" + +Every turn: + if quest3 completed is true: + do nothing; + else if The player carries the k_2: + increase the score by 1; [Quest completed] + Now the quest3 completed is true; + +The quest4 completed is a truth state that varies. +The quest4 completed is usually false. + +Test quest4_0 with "" + +Every turn: + if quest4 completed is true: + do nothing; + else if The b_0 is pushed and The l_0 is worn in: + increase the score by 1; [Quest completed] + Now the quest4 completed is true; + +The quest5 completed is a truth state that varies. +The quest5 completed is usually false. +Every turn: + if quest5 completed is true: + do nothing; + else if The b_0 is pushed and The l_0 is worn out: + end the story; [Lost] + +The quest6 completed is a truth state that varies. +The quest6 completed is usually false. + +Test quest6_0 with "" + +Every turn: + if quest6 completed is true: + do nothing; + else if The player carries the k_5: + increase the score by 1; [Quest completed] + Now the quest6 completed is true; + +The quest7 completed is a truth state that varies. +The quest7 completed is usually false. + +Test quest7_0 with "" + +Every turn: + if quest7 completed is true: + do nothing; + else if The txt_0 is read: + increase the score by 1; [Quest completed] + Now the quest7 completed is true; + +The quest8 completed is a truth state that varies. +The quest8 completed is usually false. + +Test quest8_0 with "" + +Every turn: + if quest8 completed is true: + do nothing; + else if The l_0 is worn in: + increase the score by 1; [Quest completed] + Now the quest8 completed is true; + +The quest9 completed is a truth state that varies. +The quest9 completed is usually false. + +Test quest9_0 with "" + +Every turn: + if quest9 completed is true: + do nothing; + else if The player is in r_7: + increase the score by 1; [Quest completed] + Now the quest9 completed is true; + +Use scoring. The maximum score is 8. +This is the simpler notify score changes rule: + If the score is not the last notified score: + let V be the score - the last notified score; + say "Your score has just gone up by [V in words] "; + if V > 1: + say "points."; + else: + say "point."; + Now the last notified score is the score; + if score is maximum score: + end the story finally; [Win] + +The simpler notify score changes rule substitutes for the notify score changes rule. + +Rule for listing nondescript items: + stop. + +Rule for printing the banner text: + say "[fixed letter spacing]"; + say " ________ ________ __ __ ________ [line break]"; + say " | \| \| \ | \| \ [line break]"; + say " \$$$$$$$$| $$$$$$$$| $$ | $$ \$$$$$$$$ [line break]"; + say " | $$ | $$__ \$$\/ $$ | $$ [line break]"; + say " | $$ | $$ \ >$$ $$ | $$ [line break]"; + say " | $$ | $$$$$ / $$$$\ | $$ [line break]"; + say " | $$ | $$_____ | $$ \$$\ | $$ [line break]"; + say " | $$ | $$ \| $$ | $$ | $$ [line break]"; + say " \$$ \$$$$$$$$ \$$ \$$ \$$ [line break]"; + say " __ __ ______ _______ __ _______ [line break]"; + say " | \ _ | \ / \ | \ | \ | \ [line break]"; + say " | $$ / \ | $$| $$$$$$\| $$$$$$$\| $$ | $$$$$$$\[line break]"; + say " | $$/ $\| $$| $$ | $$| $$__| $$| $$ | $$ | $$[line break]"; + say " | $$ $$$\ $$| $$ | $$| $$ $$| $$ | $$ | $$[line break]"; + say " | $$ $$\$$\$$| $$ | $$| $$$$$$$\| $$ | $$ | $$[line break]"; + say " | $$$$ \$$$$| $$__/ $$| $$ | $$| $$_____ | $$__/ $$[line break]"; + say " | $$$ \$$$ \$$ $$| $$ | $$| $$ \| $$ $$[line break]"; + say " \$$ \$$ \$$$$$$ \$$ \$$ \$$$$$$$$ \$$$$$$$ [line break]"; + say "[variable letter spacing][line break]"; + say "[objective][line break]". + +Include Basic Screen Effects by Emily Short. + +Rule for printing the player's obituary: + if story has ended finally: + center "*** The End ***"; + else: + center "*** You lost! ***"; + say paragraph break; + say "You scored [score] out of a possible [maximum score], in [turn count] turn(s)."; + [wait for any key; + stop game abruptly;] + rule succeeds. + +Rule for implicitly taking something (called target): + if target is fixed in place: + say "The [target] is fixed in place."; + otherwise: + say "You need to take the [target] first."; + set pronouns from target; + stop. + +Does the player mean doing something: + if the noun is not nothing and the second noun is nothing and the player's command matches the text printed name of the noun: + it is likely; + if the noun is nothing and the second noun is not nothing and the player's command matches the text printed name of the second noun: + it is likely; + if the noun is not nothing and the second noun is not nothing and the player's command matches the text printed name of the noun and the player's command matches the text printed name of the second noun: + it is very likely. [Handle action with two arguments.] + +Printing the content of the room is an activity. +Rule for printing the content of the room: + let R be the location of the player; + say "Room contents:[line break]"; + list the contents of R, with newlines, indented, including all contents, with extra indentation. + +Printing the content of the world is an activity. +Rule for printing the content of the world: + let L be the list of the rooms; + say "World: [line break]"; + repeat with R running through L: + say " [the internal name of R][line break]"; + repeat with R running through L: + say "[the internal name of R]:[line break]"; + if the list of things in R is empty: + say " nothing[line break]"; + otherwise: + list the contents of R, with newlines, indented, including all contents, with extra indentation. + +Printing the content of the inventory is an activity. +Rule for printing the content of the inventory: + say "Inventory:[line break]"; + list the contents of the player, with newlines, indented, giving inventory information, including all contents, with extra indentation. + +Printing the content of nowhere is an activity. +Rule for printing the content of nowhere: + say "Nowhere:[line break]"; + let L be the list of the off-stage things; + repeat with thing running through L: + say " [thing][line break]"; + +Printing the things on the floor is an activity. +Rule for printing the things on the floor: + let R be the location of the player; + let L be the list of things in R; + remove yourself from L; + remove the list of containers from L; + remove the list of supporters from L; + remove the list of doors from L; + if the number of entries in L is greater than 0: + say "There is [L with indefinite articles] on the floor."; + +After printing the name of something (called target) while +printing the content of the room +or printing the content of the world +or printing the content of the inventory +or printing the content of nowhere: + follow the property-aggregation rules for the target. + +The property-aggregation rules are an object-based rulebook. +The property-aggregation rulebook has a list of text called the tagline. + +[At the moment, we only support "open/unlocked", "closed/unlocked" and "closed/locked" for doors and containers.] +[A first property-aggregation rule for an openable open thing (this is the mention open openables rule): + add "open" to the tagline. + +A property-aggregation rule for an openable closed thing (this is the mention closed openables rule): + add "closed" to the tagline. + +A property-aggregation rule for an lockable unlocked thing (this is the mention unlocked lockable rule): + add "unlocked" to the tagline. + +A property-aggregation rule for an lockable locked thing (this is the mention locked lockable rule): + add "locked" to the tagline.] + +A first property-aggregation rule for an openable lockable open unlocked thing (this is the mention open openables rule): + add "open" to the tagline. + +A property-aggregation rule for an openable lockable closed unlocked thing (this is the mention closed openables rule): + add "closed" to the tagline. + +A property-aggregation rule for an openable lockable closed locked thing (this is the mention locked openables rule): + add "locked" to the tagline. + +A property-aggregation rule for a lockable thing (called the lockable thing) (this is the mention matching key of lockable rule): + let X be the matching key of the lockable thing; + if X is not nothing: + add "match [X]" to the tagline. + +A property-aggregation rule for an edible off-stage thing (this is the mention eaten edible rule): + add "eaten" to the tagline. + +The last property-aggregation rule (this is the print aggregated properties rule): + if the number of entries in the tagline is greater than 0: + say " ([tagline])"; + rule succeeds; + rule fails; + + +An objective is some text that varies. The objective is "". +Printing the objective is an action applying to nothing. +Carry out printing the objective: + say "[objective]". + +Understand "goal" as printing the objective. + +The taking action has an object called previous locale (matched as "from"). + +Setting action variables for taking: + now previous locale is the holder of the noun. + +Report taking something from the location: + say "You pick up [the noun] from the ground." instead. + +Report taking something: + say "You take [the noun] from [the previous locale]." instead. + +Report dropping something: + say "You drop [the noun] on the ground." instead. + +The print state option is a truth state that varies. +The print state option is usually false. + +Turning on the print state option is an action applying to nothing. +Carry out turning on the print state option: + Now the print state option is true. + +Turning off the print state option is an action applying to nothing. +Carry out turning off the print state option: + Now the print state option is false. + +Printing the state is an activity. +Rule for printing the state: + let R be the location of the player; + say "Room: [line break] [the internal name of R][line break]"; + [say "[line break]"; + carry out the printing the content of the room activity;] + say "[line break]"; + carry out the printing the content of the world activity; + say "[line break]"; + carry out the printing the content of the inventory activity; + say "[line break]"; + carry out the printing the content of nowhere activity; + say "[line break]". + +Printing the entire state is an action applying to nothing. +Carry out printing the entire state: + say "-=STATE START=-[line break]"; + carry out the printing the state activity; + say "[line break]Score:[line break] [score]/[maximum score][line break]"; + say "[line break]Objective:[line break] [objective][line break]"; + say "[line break]Inventory description:[line break]"; + say " You are carrying: [a list of things carried by the player].[line break]"; + say "[line break]Room description:[line break]"; + try looking; + say "[line break]-=STATE STOP=-"; + +Every turn: + if extra description command option is true: + say ""; + try looking; + say ""; + if extra inventory command option is true: + say ""; + try taking inventory; + say ""; + if extra score command option is true: + say "[line break][score][line break]"; + if print state option is true: + try printing the entire state; + +When play ends: + if print state option is true: + try printing the entire state; + +After looking: + carry out the printing the things on the floor activity. + +Understand "print_state" as printing the entire state. +Understand "enable print state option" as turning on the print state option. +Understand "disable print state option" as turning off the print state option. + +Before going through a closed door (called the blocking door): + say "You have to open the [blocking door] first."; + stop. + +Before opening a locked door (called the locked door): + let X be the matching key of the locked door; + if X is nothing: + say "The [locked door] is welded shut."; + otherwise: + say "You have to unlock the [locked door] with the [X] first."; + stop. + +Before opening a locked container (called the locked container): + let X be the matching key of the locked container; + if X is nothing: + say "The [locked container] is welded shut."; + otherwise: + say "You have to unlock the [locked container] with the [X] first."; + stop. + +Displaying help message is an action applying to nothing. +Carry out displaying help message: + say "[fixed letter spacing]Available commands:[line break]"; + say " look: describe the current room[line break]"; + say " goal: print the goal of this game[line break]"; + say " inventory: print player's inventory[line break]"; + say " go : move the player north, east, south or west[line break]"; + say " examine ...: examine something more closely[line break]"; + say " eat ...: eat edible food[line break]"; + say " open ...: open a door or a container[line break]"; + say " close ...: close a door or a container[line break]"; + say " drop ...: drop an object on the floor[line break]"; + say " take ...: take an object that is on the floor[line break]"; + say " put ... on ...: place an object on a supporter[line break]"; + say " take ... from ...: take an object from a container or a supporter[line break]"; + say " insert ... into ...: place an object into a container[line break]"; + say " lock ... with ...: lock a door or a container with a key[line break]"; + say " unlock ... with ...: unlock a door or a container with a key[line break]"; + +Understand "help" as displaying help message. + +Taking all is an action applying to nothing. +Check taking all: + say "You have to be more specific!"; + rule fails. + +Understand "take all" as taking all. +Understand "get all" as taking all. +Understand "pick up all" as taking all. + +Understand "take each" as taking all. +Understand "get each" as taking all. +Understand "pick up each" as taking all. + +Understand "take everything" as taking all. +Understand "get everything" as taking all. +Understand "pick up everything" as taking all. + +The extra description command option is a truth state that varies. +The extra description command option is usually false. + +Turning on the extra description command option is an action applying to nothing. +Carry out turning on the extra description command option: + Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] + Now the extra description command option is true. + +Understand "tw-extra-infos description" as turning on the extra description command option. + +The extra inventory command option is a truth state that varies. +The extra inventory command option is usually false. + +Turning on the extra inventory command option is an action applying to nothing. +Carry out turning on the extra inventory command option: + Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] + Now the extra inventory command option is true. + +Understand "tw-extra-infos inventory" as turning on the extra inventory command option. + +The extra score command option is a truth state that varies. +The extra score command option is usually false. + +Turning on the extra score command option is an action applying to nothing. +Carry out turning on the extra score command option: + Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] + Now the extra score command option is true. + +Understand "tw-extra-infos score" as turning on the extra score command option. + +To trace the actions: + (- trace_actions = 1; -). + +Tracing the actions is an action applying to nothing. +Carry out tracing the actions: + Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] + trace the actions; + +Understand "tw-trace-actions" as tracing the actions. + +The restrict commands option is a truth state that varies. +The restrict commands option is usually false. + +Turning on the restrict commands option is an action applying to nothing. +Carry out turning on the restrict commands option: + Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] + Now the restrict commands option is true. + +Understand "restrict commands" as turning on the restrict commands option. + +The taking allowed flag is a truth state that varies. +The taking allowed flag is usually false. + +Before removing something from something: + now the taking allowed flag is true. + +After removing something from something: + now the taking allowed flag is false. + +Before taking a thing (called the object) when the object is on a supporter (called the supporter): + if the restrict commands option is true and taking allowed flag is false: + say "Can't see any [object] on the floor! Try taking the [object] from the [supporter] instead."; + rule fails. + +Before of taking a thing (called the object) when the object is in a container (called the container): + if the restrict commands option is true and taking allowed flag is false: + say "Can't see any [object] on the floor! Try taking the [object] from the [container] instead."; + rule fails. + +Understand "take [something]" as removing it from. + +Rule for supplying a missing second noun while removing: + if restrict commands option is false and noun is on a supporter (called the supporter): + now the second noun is the supporter; + else if restrict commands option is false and noun is in a container (called the container): + now the second noun is the container; + else: + try taking the noun; + say ""; [Needed to avoid printing a default message.] + +The version number is always 1. + +Reporting the version number is an action applying to nothing. +Carry out reporting the version number: + Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] + say "[version number]". + +Understand "tw-print version" as reporting the version number. + +Reporting max score is an action applying to nothing. +Carry out reporting max score: + say "[maximum score]". + +Understand "tw-print max_score" as reporting max score. + +To print id of (something - thing): + (- print {something}, "^"; -). + +Printing the id of player is an action applying to nothing. +Carry out printing the id of player: + print id of player. + +Printing the id of EndOfObject is an action applying to nothing. +Carry out printing the id of EndOfObject: + print id of EndOfObject. + +Understand "tw-print player id" as printing the id of player. +Understand "tw-print EndOfObject id" as printing the id of EndOfObject. + +There is a EndOfObject. + diff --git a/textworld/challenges/spaceship/games/levelMedium.ulx b/textworld/challenges/spaceship/games/levelMedium.ulx new file mode 100644 index 0000000000000000000000000000000000000000..c5286a2e185dac19a2ee661882f9e6c56ca1a709 GIT binary patch literal 639488 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

lA;xd7 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

s|fQ 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

I)?5S=scAkHy&7+%3Mb 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 1: + starting_room = rng_map.choice(world.rooms) + + world.set_player_room(starting_room) + + if __name__ == "__main__": # spaceship_maker_level_easy() # spaceship_maker_level_medium() # test() # testFW_easyGame() spaceship_maker_level_medium_v1() - diff --git a/textworld/challenges/spaceship/spaceship_game.py b/textworld/challenges/spaceship/spaceship_game.py index 13ccad62..e04ae980 100644 --- a/textworld/challenges/spaceship/spaceship_game.py +++ b/textworld/challenges/spaceship/spaceship_game.py @@ -5,24 +5,28 @@ from typing import Mapping, Optional import textworld + from textworld import g_rng from textworld import GameMaker from textworld.challenges import register from textworld.generator.data import KnowledgeBase -from textworld.generator.game import GameOptions, Event, Quest +from textworld.generator.game import GameOptions, Event, Quest, GameProgression +from textworld.logic import Action g_rng.set_seed(20190826) -PATH = pjoin(os.path.dirname(__file__), 'textworld_data') +PATH = os.path.dirname(__file__) def build_argparser(parser=None): parser = parser or argparse.ArgumentParser() group = parser.add_argument_group('Spaceship game settings') - group.add_argument("--level", required=True, choices=["easy", "balanced", "sparse"], + group.add_argument("--level", required=True, choices=["easy", "medium", "difficult"], help="The difficulty level. Must be between: easy, medium, or difficult.") - + general_group = argparse.ArgumentParser(add_help=False) + general_group.add_argument("--third-party", metavar="PATH", + help="Load third-party module. Useful to register new custom challenges on-the-fly.") return parser @@ -46,9 +50,9 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None * Level difficult. """ - kb = KnowledgeBase.load(target_dir=PATH) + kb = KnowledgeBase.load(target_dir=pjoin(os.path.dirname(__file__), 'textworld_data')) options = options or GameOptions() - options.grammar.theme = 'Spaceship' + options.grammar.theme = 'spaceship' options.kb = kb options.seeds = g_rng.seed @@ -58,15 +62,15 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None rng_grammar = rngs['grammar'] rng_quest = rngs['quest'] - if settings["level"] is 'easy': + if settings["level"] == 'easy': mode = "easy" options.nb_rooms = 4 - elif settings["level"] is 'medium': + elif settings["level"] == 'medium': mode = "medium" options.nb_rooms = 8 - elif settings["level"] is 'difficult': + elif settings["level"] == 'difficult': mode = "difficult" options.nb_rooms = 8 @@ -78,7 +82,7 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Create the Game Environment # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - gm = GameMaker(kb=kb, theme='Spaceship') + gm = GameMaker(kb=kb, theme='spaceship') # ===== Sleep Station Design ======================================================================================= sleep_station = gm.new_room("Sleep Station") @@ -214,7 +218,7 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None corridor3 = gm.connect(us_lab.south, russian_module.north) door_b = gm.new_door(corridor3, name="door B") gm.add_fact("match", key_1, door_b) # Tell the game 'Electronic key' is matching the 'door B''s lock - if settings["level"] is 'difficult': + if settings["level"] == 'difficult': gm.add_fact("closed", door_b) else: gm.add_fact("locked", door_b) @@ -270,6 +274,7 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None key_5 = gm.new(type='k', name="digital key 2") box_f.add(key_5) gm.add_fact("match", key_5, box_d) + key_6 = gm.new(type='k', name="code key 2") box_f.add(key_6) @@ -295,7 +300,7 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None corridor6 = gm.connect(hatch.north, lounge.south) door_d = gm.new_door(corridor6, name="door D") gm.add_fact("match", key_6, door_d) - if settings["level"] is 'difficult': + if settings["level"] == 'difficult': gm.add_fact("closed", door_d) else: gm.add_fact("locked", door_d) @@ -312,7 +317,7 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None gm.add_fact("pair", push_button, door_e) # ===== Player and Inventory Design ================================================================================ - if settings["level"] is 'difficult': + if settings["level"] == 'difficult': # Randomly place the player in a subset of rooms. # The player can be randomly start from any room but two of them: Control Module and Outside available_rooms = [] @@ -327,28 +332,36 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None gm.set_player(starting_room) else: - gm.set_player(sleep_station) + gm.set_player(us_lab) + # gm.set_player(sleep_station) key_7 = gm.new(type='k', name="hearty key") key_7.infos.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." gm.add_fact("match", key_7, box_c) gm.inventory.add(key_7) # Add the object to the player's inventory. - gm.render(interactive=True) - - if settings["level"] is 'easy': + if settings["level"] == 'easy': game = quest_design_easy(gm) - elif settings["level"] is 'medium': + elif settings["level"] == 'medium': game = quest_design_medium(gm) - elif settings["level"] is 'difficult': + elif settings["level"] == 'difficult': game = quest_design_difficult(gm) game.metadata = metadata uuid = "tw-spaceship-{level}".format(level=str.title(settings["level"])) game.metadata["uuid"] = uuid + from maker import test_commands + test_commands(gm, [ + # 'look', + 'open door A', + 'go north', + # 'check laptop for email', + 'go south' + ]) + return game @@ -359,43 +372,19 @@ def quest_design_easy(game): def quest_design_medium(game): quests = [] - # 1. Player is in the Sleeping Station - win_quest = Event(conditions={game.new_fact("read/e", game._named_entities['laptop'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - fail_quest = Event(conditions={game.new_fact("unread/e", game._named_entities['laptop']), - game.new_fact("open", game._named_entities['door A'])}) - quests.append(Quest(win_events=[], fail_events=[fail_quest])) - - # 2. Player is in US LAB to find Electronic Key 1 - win_quest = Event(conditions={game.new_fact("in", game._named_entities['electronic key 1'], game._entities['I'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - - # 3. Player is in Russian Module and take digital Key 1 and/or push the button - win_quest = Event(conditions={game.new_fact("in", game._named_entities['digital key 1'], game._entities['I'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - win_quest = Event(conditions={game.new_fact("pushed", game._named_entities['exit push button']), - game.new_fact("worn", game._named_entities['outfit'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - fail_quest = Event(conditions={game.new_fact("pushed", game._named_entities['exit push button']), - game.new_fact("takenoff", game._named_entities['outfit'])}) + # 1. Is the Player in the Sleeping Station + win_quest = Event(conditions={ + game.new_fact("at", game._entities['P'], game._entities['r_0']) + }) + quests.append(Quest(win_events=[win_quest], fail_events=[], reward=0)) + + fail_quest = Event(conditions={ + game.new_fact("event", game._entities['P'], game._entities['r_0']), + game.new_fact("at", game._entities['P'], game._entities['r_1']), + game.new_fact("open", game._entities['d_0']), + }) quests.append(Quest(win_events=[], fail_events=[fail_quest])) - # 4. Player is the Control Module and take Electronic Key 2 - win_quest = Event(conditions={game.new_fact("in", game._named_entities['digital key 2'], game._entities['I'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - - # 5. Player reads the Secret Code book at Control Module - win_quest = Event(conditions={game.new_fact("read/t", game._named_entities['Secret Codes Handbook'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - - # 6. Player is in Hatch room and wears the cloth - win_quest = Event(conditions={game.new_fact("worn", game._named_entities['outfit'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - - # 7. Player goes outside - win_quest = Event(conditions={game.new_fact("at", game._entities['P'], game._named_entities['Outside'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - game.quests = quests return game.build() @@ -405,7 +394,10 @@ def quest_design_difficult(game): return None -register(name="tw-spaceship", - desc="Generate a Spaceship challenge game", - make=make_game, - add_arguments=build_argparser) +g = make_game({'level': 'medium'}) + + +# register(name="tw-spaceship", +# desc="Generate a Spaceship challenge game", +# make=make_game, +# add_arguments=build_argparser) diff --git a/textworld/challenges/spaceship/textworld_data/logic/CPU.twl b/textworld/challenges/spaceship/textworld_data/logic/CPU.twl new file mode 100644 index 00000000..76cefcc8 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/CPU.twl @@ -0,0 +1,60 @@ +# CPU-Like +type cpu : o { + predicates { + #turned_on(cpu); + #turned_off(cpu); + + read/e(cpu); + unread/e(cpu); + } + + rules { + check/e :: $at(P, r) & $at(s, r) & $on(cpu, s) & unread/e(cpu) -> read/e(cpu); + examine/cpu :: at(P, r) & $at(s, r) & $on(cpu, s) -> at(P, r); # Nothing changes. + } + + reverse_rules { + check/e :: check/e; + examine/cpu :: examine/cpu; + } + + constraints { + #cpu1 :: turned_on(cpu) & turned_off(cpu) -> fail(); + cpu2 :: read/e(cpu) & unread/e(cpu) -> fail(); + } + + inform7 { + type { + kind :: "CPU-like"; + definition :: "A CPU-like can be either read or unread. A CPU-like is usually unread."; + #definition :: "A CPU-like can be either turned on or turned off. A CPU-like is usually turned off. A CPU-like can be either read or unread. A CPU-like is usually unread."; + } + + predicates { + #turned_on(cpu) :: "The {cpu} is turned on"; + #turned_off(cpu) :: "The {cpu} is turned off"; + + read/e(cpu) :: "The {cpu} is read"; + unread/e(cpu) :: "The {cpu} is unread"; + } + + commands { + check/e :: "check email" :: "checking email"; + examine/cpu :: "examine {cpu}" :: "examining the {cpu}"; + } + + code :: """ + Understand the command "check" as something new. + Understand "check email" as checking email. + checking email is an action applying to nothing. + + Carry out checking email: + if a CPU-like (called pc) is unread: + if a random chance of 1 in 4 succeeds: + Now the pc is read; + Say "Email: Your mission is started."; + otherwise: + Say "No emails yet! Wait.". + """; + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/text.twl b/textworld/challenges/spaceship/textworld_data/logic/text.twl new file mode 100644 index 00000000..83511d71 --- /dev/null +++ b/textworld/challenges/spaceship/textworld_data/logic/text.twl @@ -0,0 +1,47 @@ +# text-Like +type txt : o { + predicates { + read/t(txt); + unread/t(txt); + } + + rules { + read/book :: $at(P, r) & $in(txt, I) & unread/t(txt) -> read/t(txt); + examine/book :: at(P, r) & $in(txt, I) -> at(P, r); # Nothing changes. + } + + reverse_rules { + examine/book :: examine/book; + } + + constraints { + txt1 :: read/t(txt) & unread/t(txt) -> fail(); + } + + inform7 { + type { + kind :: "text-like"; + definition :: "A text-like can be either read or unread. A text-like is usually unread."; + } + + predicates { + read/t(txt) :: "The {txt} is read"; + unread/t(txt) :: "The {txt} is unread"; + } + + commands { + read/book :: "read the book" :: "reading the book"; + examine/book :: "examine {txt}" :: "examining the {txt}"; + } + + code :: """ + Understand the command "read" as something new. + Understand "read [something]" as _reading. + _reading is an action applying to a thing. + + Carry out _reading: + if a text-like (called tx) is unread: + Now the tx is read; + """; + } +} diff --git a/textworld/challenges/spaceship/textworld_data/logic/thing.twl b/textworld/challenges/spaceship/textworld_data/logic/thing.twl index bc6dd593..042d167a 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/thing.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/thing.twl @@ -1,5 +1,9 @@ # thing type t { + predicates { + event(P, r); + } + rules { examine/t :: at(P, r) & $at(t, r) -> at(P, r); } @@ -8,13 +12,23 @@ type t { examine/t :: examine/t; } - inform7 { + inform7 { type { kind :: "thing"; } + predicates { + event(P, r) :: "the player was in {r}"; + } commands { examine/t :: "examine {t}" :: "examining the {t}"; } + + code :: """ + Understand "tw-set seed [a number]" as updating the new seed. + Updating the new seed is an action applying to a number. + Carry out updating the new seed: + seed the random-number generator with the number understood. + """; } } diff --git a/textworld/generator/data/text_grammars/Spaceship.twg b/textworld/generator/data/text_grammars/Spaceship.twg deleted file mode 100644 index a059ce67..00000000 --- a/textworld/generator/data/text_grammars/Spaceship.twg +++ /dev/null @@ -1,964 +0,0 @@ -#---------------------------------------------------------------------------------------------------------------------------------- -# GAME DESCRIPTOR GRAMMAR # -#---------------------------------------------------------------------------------------------------------------------------------- -# The organization of this file is as follows: -# 1. Expandables : All required combinations, structures, etc of words, letters, and numbers which are used in the -# whole text of the grammars. Collect them here will avoid from redundant repeats. -# 2. Verbs : All verbs which are used as action or simply as verb in the text are collected. -# 3. Types & Variables : Type of objects and variables of the game are defined and coded. -# 4. Objects Garmmar : The grammar of each object of the game is defined in this section. -# 5. Room Description Grammar: All the texts which are used to describe the game inside different rooms are defined and expanded. -# 6. Instructions Grammar : The grammar of instructions for compound commands, etc are described. - - - -################################################ Expandables ####################################################################### - -## Any type of expandables, such as adjectives, the name of different types of food, brans, materials, etc. are named here. -## During the design of the game, this expandables are like a general dictionary of various types of words which can be used -## in different sections of the grammar design. This list does not include verb type of words. -### -# --- General Expandables ------------------------------------------------------- -ordinary_adj:ordinary;normal;typical;standard;usual -adj_stripped:#simpleadj# -simpleadj:good;bad;small;big;heavy;light;great;terrible;expensive;cheap -hot-adj:super;unreasonably;absurdly;alarmingly;upsettingly -supp_stable:stable;wobbly;unstable;balanced;durable;reliable;solid;undependable;solidly built;an unstable piece of #garbage#;shaky -obj_what:unremarkable;clean;dirty;modern;well-used;brand new;expensive looking;cheap looking -out_in_place:out of place;to fit in;well matched to everything else -food_what:appetizing;delicious;tasty;appealing;delectable;heavenly;inviting;savory;tantalizing;tempting -door_what_is:imposing;sturdy;well-built;durable;robust;rugged;hefty;commanding;manageable;solid -shape:rectangular;cuboid;spherical;formless;non-euclidean -colour:red;blue;chartreuse;purple;violet;orange;yellow;green;brown;teal;cyan -smell:vanilla;lavender;cake;fudge;fresh laundry;soap - -number:0;1;2;3;4;5;6;7;8;9 -bignumber:Thirty;Forty;Fifty;Sixty;Seventy;Eighty;Ninety;A hundred;Two hundred;Three hundred -letter:A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z - -material_type:#metal#;#plastic#;#others# -metal:steel;cementite;iron;aluminum;copper;brass -plastic:plastic -others:card - -fruit:watermelon;melon;honeydew;apple;pear;grape;kiwi;cantaloupe;banana;pear;durian;#berry#berry;berry -can:sardine;mixed beans;chicken;soup;tuna -candy:chocolate bar;gummy bear;candy bar;licorice strip;cookie;power bar -berry:straw;blue;rasp;black;elder;boysen;lingon;huckle;logan;cran;goji;goose - -garbage:garbage;trash;junk - -weight:complicated;heavy;light;weighty;surprisingly heavy;heavier than it looks - -brand:#brandname# style;#brandname# limited edition;#brandname# -brandname:Microsoft;American;Canadian;Henderson's;TextWorld -# << ------------------------------------------------------------------------- >> - - -# --- Fix Expandables ----------------------------------------------------------- -here_alt:here;in the room;in the shuttle room;on the dock;nearby;close by;in the corner;right there by you -here_alt_u:Here;In the room;Nearby;Close by;In the corner;Right there by you -how_see:you #you_what#;you can #you_what# -how_see_u:You #you_what#;You can #you_what# -there_what:is;seems to be -you_what:see;make out -smelltype:an #ansmell#;a #asmell# -ansmell:interesting;awful;intriguing -asmell:hideous;pungent;sickening;terrible;wretched;lovely;great;fine; -upsetwith:upset with;angry about;infuriated by;depressed by;done caring about;upset by;furious with -bignumber:Thirty;Forty;Fifty;Sixty;Seventy;Eighty;Ninety;A hundred;Two hundred;Three hundred -Iknow:I know a;I got this;I have a;You know, I know a;You know, I got a;You know what, I've got a -youknow:You know;Do you know;Did you ever meet;You ever meet - -afriend:person, they work out of #friendplace#,;person;friend;person who works for #friendcompany# -myfriend:they work for #friendcompany# -friendplace:the lab;the space shuttle -friendcompany:the #affiliation# team;the International Space Station; -affiliation: Russian;European;Japanese;USA -friendtype:buddy;pal;friend;good friend;mate; - -cooljob:the astronaut;#friendcompany#;the space craft engineer -expensiveplace:some kind of expensive place;some kind of expensive project -intheblank:in the dump;in a fire;into a pit;into the garbage - -key_metal:#plastic#;#others#;brushed;polished;satin;rusty - - - -begood:good;great;fantastic;a great idea -in_the_(r):in the (r);within the (r);inside the (r) -by_the_syn:with the -init_syn:in it;inside;placed inside -into_syn:into;inside -on_it_syn:on it;upon it -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Container Symbols ----------------------------------------- -it:It;Something about it -reminds_you:reminds you of;looks like;floods your mind with memories of;is reminiscent of;is just like -ofyouryouth:of your youth;that you knew in your youth;that you knew so long ago;that you knew so long ago, in your youth -it_is:It is;You can see that it is;Upon examination, you see that it is -name_var:(name);(name-n), which looks (name-adj),;(name-adj) looking (name-n) -listwithis: [is-are a list of things in the (obj)] -lookthere:Look over there;Wow! look at that -ContentsC-:Contents-;Contained within-;Inside are the following-;Inventory is as follows-;Here's what's inside -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Supporter Symbols ----------------------------------------- -on_it:on it;lying on it;resting on it;upon it -ContentsS-:Contents-;Upon it are displayed the following-;Upon it you may see the following-;Upon it lie the following-;Upon the (name-n) are displayed the following-;Upon the (name-n) you may see the following-;Upon the (name-n) lie the following- -trash:trash;garbage;junk -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Group Symbols --------------------------------------------- -this_the:this;the -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Room Symbols ---------------------------------------------- -dec_find-yourself:You #dec_what# -dec_guess-what:#dec_well-guess#, you are in #dec_a_the# place we're calling #dec_a_the# -dec_well-guess:Guess what;Well how about that;Well I'll be -dec_what:are;find yourself;arrive -dec_a_the:a;the -announce_mood:sorry;pleased;excited;stoked;so happy;honoured;required;obligated -signquality:decrepit;laminated;crooked;framed -sign:sign;placard;signboard;board -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Exit Symbols ---------------------------------------------- -yourthing:thing;bag;style;cup of tea -door_what:leading;facing;heading -unblocked:unblocked;unguarded -# << ------------------------------------------------------------------------- >> - - - - -################################################### Verbs ########################################################################## - -# --- Actions & Verbs ----------------------------------------------------------- -## Actions are actually those verbs which are used in the game by the player. Actions should start with a verb (ie:ensure, make -## sure, etc (these could probably just be a tag)). -### The structure for a verb is as follows, (not necessarily contains all the parts): -### a) (verb): action's instructions; -### b) (verb)_syn_v: synonyms of the verb; they are all in lowercase format, -### c) (verb)_syn_u: Uppercase format (Sentence format) of the synonyms, -### d) (verb)_syn_p: past form of the synonyms -### e) (verb)_syn_pp: past participle form of the synonyms -### f) (verb)ing: the ing-form of the verb - - -# --- Action Verbs -------------------------------------------------------------- -look:look around in (r). - -examine:examine (o|k|f|d|c|s|t). - -inventory:examine your inventory. - -take:#take_syn_v# the #obj_types# from the (r).;#take_syn_v# the #obj_types# that's in the (r). -take_syn_v:take;retrieve;grab -take_syn_pp:taken;got;picked -taking:taking;getting;picking -take/s:#take_syn_v# the #obj_types# from the #on_var#. -take/c:#take_syn_v# the #obj_types# from the #on_var#. - -insert:#insert_syn_v# the #obj_types# #into_syn# the #(c)_var#.;you can #insert_syn_v# the #obj_types# #into_syn# the #(c)_var#. -insert_syn_v:insert;put;place;deposit;attach -insert_syn_u:Insert;Put;Place;Deposit;Attach -insert_syn_p:inserted;put;placed;deposited;attached -insert_syn_pp:inserted;put in;placed;deposited;attached -inserting:inserting;putting in;placeing;depositting;attaching - -eat:#eat_syn_v# the #eat_var#. -eat_syn_u:Eat; -eat_syn_v:eat; -eat_syn_pp:eaten;consumed -eat_syn_p:ate -eating:eating - -open:open the #lock_type_var#.;ensure that the #lock_type_var# is open.;make sure that the #lock_type_var# is #open_var#. -open_syn_v:open; -open_syn_pp:opened;pulled open -opening:opening;pulling open - -close:close the #lock_type_var#.;ensure that the #lock_type_var# is #close_syn_pp#. -close_syn_pp:closed;shut -closing:closing;shutting - -go:#go_syn_v# easily into the space;#go_syn_v# towards the #obj_types#;#go_syn_v# smoothly twards the #obj_types#;#go_syn_v# into the (r) -go_syn_v: go;move;dive;fly;float;propel;wobble;head;go to the; -go_syn_p: went;moved;dived;flew;floated;propelled;wobbled;headed;went to the; -go_syn_u: Go;Move;Dive;Fly;Float;Propel;Wobble;Head;Go to the; -go_syn_pp:gone;moved;dived;flown;floated;propelled;wobbled;headed;gone to the;got -going:going;moving;diving;flying;floating;propelling;wobbling;heading;going to the;getting -go/north:#go_syn_v# north.;#tryto# #go_syn_v# north. -go/south:#go_syn_v# south.;#tryto# #go_syn_v# south. -go/east:#go_syn_v# east.;#tryto# #go_syn_v# east. -go/west:#go_syn_v# west.;#tryto# #go_syn_v# west. -go/north/d:#go_syn_v# through the north (d).;#tryto# #go_syn_v# through the north (d). -go/south/d:#go_syn_v# through the south (d).;#tryto# #go_syn_v# through the south (d). -go/east/d:#go_syn_v# through the east (d).;#tryto# #go_syn_v# through the east (d). -go/west/d:#go_syn_v# through the west (d).;#tryto# #go_syn_v# through the west (d). - -tryto:try to;make an effort to;make an attempt to;attempt to - -unlock:#unlock_key#;#unlock_no_key# -unlock_key:unlock the #lock_type_var# #by_the_syn# (k).;check that the #lock_type_var# is unlocked #by_the_syn# (k).;ensure that the #lock_type_var# is unlocked #by_the_syn# (k).;insert the (k) into the #lock_type_var#'s lock to unlock it. -unlock_no_key:unlock the #lock_type_var#.;ensure that the #lock_type_var# is unlocked. -unlock_syn_pp:unlocked -unlocking:unlocking - -lock:#lock_key#;#lock_no_key# -lock_key:lock the #lock_type_var# #by_the_syn# (k).;make sure that the #lock_type_var# is locked #by_the_syn# (k).;#insert_syn_u# the (k) into the #lock_type_var# to lock it. -lock_no_key:lock the #lock_type_var#.;make sure the #lock_type_var# is locked.;ensure that the #lock_type_var# is locked. -lock_syn_pp:locked -locking:locking - -cook:#cook_syn_v# the #eat_var#;#cook_syn_v# your #eat_var#; -cook_syn_v:cook;hydrate;heat up;prepare -cook_syn_p:cooked;hydrated;heated up;prepared -cook_syn_u:Cook;Hydrate;Heat up;Prepare - -release:#release_syn_v# the #obj_types# from #(s)_var#.;#release_syn_v# the #obj_types# from its hook; -release_syn_v:release;let;disentangle;loose;unfasten;unfix;let loose;unhook;leave;unleash -release_syn_u:Let;Disentangle;Release;Loose;Unfasten;Unfix;Let loose;Unhook;Leave;Unleash -release_syn_p:let;disentangled;released;loosed;unfastened;unfixed;let loose;unhooked;left;unleashed -release_syn_pp:let;disentangled;released;loosed;unfastened;unfixed;let loose;unhooked;left;unleashed -releasing:letting;disentangling;releasing;loosing;unfastening;unfixing;unhooking;unleashing - -communicate: #communicate_syn_v# your message with (r) -communicate_syn_v:communicate;talk;call;transmit -communicate_syn_p:communicated;talked;called;transmitted -communicate_syn_u:Communicate;Talk;Call;Transmit -# << ------------------------------------------------------------------------- >> - - -# --- General Verbs ------------------------------------------------------------- -wait:Wait - -do_syn_v:manage;do;accomplish;get around to doing;finish;succeed at;get through with - -exciting:exciting;fast paced;life changing;profound - -force_open_syn_v:break;crack;destroy - -looks_seems_syn_v:looks;seems;appears;appears to be;would seem to be;seems to be;looks;seems;appears - -can_should:can;should;should be able to;may - -enter_syn_p:entered;walked into;fallen into;moved into;stumbled into;come into;fly into;fly over - -walk_into_syn_v:walk into;show up in;saunter into;come round;space-walk;space-walk into -walk_into_syn_p:walked into;shown up in;sauntered into;space-walked;space-walked into - -launched_into_syn_v:launched;blasted off - -contain_syn_v:contains;has;is filled with;reveals inside it;holds;shelters;offers you;reveals to you -contain_syn_p:contained;#hold_syn_p#;had;had in it;revealed;concealed;sheltered;offered you;revealed to you;guarded;protected - -findin_syn_p:in;found in - -hold_syn_p:held;carried;had;presented;held up;was used to support -# << ------------------------------------------------------------------------- >> - - - -############################################## Types & Variables ##################################################################### - -# --- Types, Word Synonyms & Variables -------------------- -## * Types -obj_types:(o|k|f) -obj_types_no_key:(o|f) -on_types:(c|s) -lock_types:(c|d) -eat_types:(f) -close_open_types:(d|c) - -## * Variables -lock_type_var:#lock_types#;#lock_types# #in_the_(r)# -(s)_var:(s);(s) #in_the_(r)# -(c)_var:(c);(c) #in_the_(r)# -on_var:#on_types#;#on_types# #in_the_(r)# -eat_var:#eat_types#;#eat_types# -open_var:opened;open;wide open;ajar -# << ------------------------------------------------------------------------- >> - - -############################################## Objects Garmmar ##################################################################### - -# --- Player -------------------------------------------------------------------- -## These values are typically empty -### -(P):#(P)_adj# | #(P)_noun# -(P)_noun:None -(P)_adj:None -# << ------------------------------------------------------------------------- >> - - -# --- Rooms --------------------------------------------------------------------- -## List each type of room with a ';' between each -## Each roomType must have specific rooms -### Creating a room: first, take the name of the roomtype as listed under #room_type# (which we'll call X for now). create three symbols with this: X_(r), X_(r)_noun, and X_(r)_adj. X_(r) will always be composed of X_(r)_adj | X_(r)_noun. If you want to subdivide a roomtype into two or more variants, you can add _type1, _type2, etc at the end of the noun and adj symbols. make sure that these changes are also accounted for in the X_(r) token, see below for examples - -room_type:clean;cook;rest;work;storage - -(r):#(r)_adj# | #(r)_noun# -(r)_noun:sleep station;crew cabin;washroom;closet;kitchenette;module;lab;lounge -(r)_adj:nondescript;plain - -### > Clean Room -clean_(r):#clean_(r)_adj_type_1# | #clean_(r)_noun_type_1# -### >> Cleaning Self -clean_(r)_noun_type_1:washroom;bathroom;restroom;toilett -clean_(r)_adj_type_1:spotless;clean;cramped;small - -### > Storage Room -storage_(r):#storage_(r)_adj# | #storage_(r)_noun# -storage_(r)_noun:closet;spare room -storage_(r)_adj:spacious;roomy;cramped;stuffed;messy;forgotten;ugly;gloomy - -### > Cook Room -cook_(r):#cook_(r)_adj# | #cook_(r)_noun# -cook_(r)_noun:kitchen;kitchenette -cook_(r)_adj:#hot-adj# hot;steamy;hot;sweaty - -### > Rest Room -### >> Sleep Room -rest_(r):#rest_(r)_adj_type_1# | #rest_(r)_noun_type_1#;#rest_(r)_adj_type_2# | #rest_(r)_noun_type_2# -rest_(r)_noun_type_1:sleep station;sleep station;sleep station;sleeping bag;crew cabin -rest_(r)_adj_type_1:cozy;relaxing;pleasant;sleepy -### >> fun with friends -rest_(r)_noun_type_2:lounge;playroom;recreation zone;crew cabin;crew cabin;crew cabin -rest_(r)_adj_type_2:fun;entertaining;exciting;well lit;silent - -### > Work Room -### >> At spaceshuttle -work_(r):#work_(r)_adj_type_1# | #work_(r)_noun_type_1#;#work_(r)_adj_type_2# | #work_(r)_noun_type_2# -work_(r)_noun_type_1:module;module;lab;lab;lab;control module;service module;maintenance;radars -work_(r)_adj_type_1:silent;austere;serious;still;cramped;stuffed -### >> At Earth -work_(r)_noun_type_2:office;mission control -work_(r)_adj_type_2:silent;huge;serious;still;stressful;noisy -# << ------------------------------------------------------------------------- >> - - -# --- Containers ---------------------------------------------------------------- -## Each roomType must has specific containers -## container descriptions work like room descriptions, except the (r) is replaced by a (c) -(c):#(c)_adj_noun# -(c)_adj_noun:#(c)_adj# | #(c)_noun# -(c)_noun:chest;box;safe;locker -(c)_adj:sturdy;nice;ugly; - -### > Clean Container -clean_(c):#clean_(c)_adj_type_1# | #clean_(c)_noun_type_1#;#clean_(c)_adj_type_2# | #clean_(c)_noun_type_2# -### >> Clean Container Type 1 -clean_(c)_noun_type_1:cabinet;cabinet;cabinet;basket;box;box;box;safe;case -clean_(c)_adj_type_1:stained;spotless;plain;zipped;sturdy -### >> Clean Container Type 2 -clean_(c)_noun_type_2:drawer;cabinet -clean_(c)_adj_type_2:#material_type# case - -### > Storage Container -storage_(c):#storage_(c)_adj# | #storage_(c)_noun# -storage_(c)_noun:toolbox;chest;safe;locker;coffer;cabinet;crate;case;suitcase -storage_(c)_adj:rusty;neglected;brand new,sturdy - -### > Cook Container -cook_(c):#cook_(c)_adj# | #cook_(c)_noun# -cook_(c)_noun:fridge;refrigerator;freezer;cabinet -cook_(c)_adj:fancy;big;small;stuffed - -### > Rest Container -rest_(c):#rest_(c)_adj# | #rest_(c)_noun# -rest_(c)_noun:chest;box;locker;coffer;suitcase -rest_(c)_adj:new;dusty;clean;amazing - -### > Work Container -work_(c):#work_(c)_adj# | #work_(c)_noun# -work_(c)_noun:box;safe;locker;coffer;case;toolbox;display -work_(c)_adj:iron;rusty;high-tech -# << ------------------------------------------------------------------------- >> - - -# --- Doors --------------------------------------------------------------------- -## The (r) is now has a (d), and you shouldn't create room-specific door types -(d):#(d)_adj# | #(d)_noun# -(d)_adj:#material_type#;material -(d)_noun:door;portal;gate;passageway;gateway;hatch -# << ------------------------------------------------------------------------- >> - - -# --- Supporters ---------------------------------------------------------------- -## Each roomType must has specific supporters -## Like containers, but with a (s) -(s):#(s)_adj# | #(s)_noun# -(s)_noun:shelf;table;pedestal;slab -(s)_adj:#(o)_adj# - -### > Clean Supporter -clean_(s):#clean_(s)_adj# | #clean_(s)_noun# -clean_(s)_noun:board;shelf;rack; -clean_(s)_adj:dusty;cramped;messy;shiny - -### > Storage Supporter -storage_(s):#storage_(s)_adj# | #storage_(s)_noun# -storage_(s)_noun:shelf;rack;stand -storage_(s)_adj:rusty;shoddy;splintery;rough - -### > Cook Supporter -cook_(s):#cook_(s)_adj# | #cook_(s)_noun# -cook_(s)_noun:counter;board;shelf;rack;plate;bowl;platter;saucepan -cook_(s)_adj:greasy;soaped down;filthy;messy - -### > Rest Supporter -rest_(s):#rest_(s)_adj# | #rest_(s)_noun# -rest_(s)_noun:sleep bag;sleep bag;sleeping bag;sleeping bag;shelf;laptop hanger;laptop stand -rest_(s)_adj:comfy;warm;worn-out - -### > Work Supporter -work_(s):#work_(s)_adj# | #work_(s)_noun# -work_(s)_noun:stand;table;chair;desk;stand;dashboard;control panel -work_(s)_adj:stern;solid;worn;gross -# << ------------------------------------------------------------------------- >> - - -# --- Objects ------------------------------------------------------------------ -## Each roomType must have specific objects -## (s) --> (o) Very useful to create multiple subtypes to avoid inappropriate or awkward adjective pairing -(o):#(o)_adj# | #(o)_noun# -(o)_noun:pencil;pen -(o)_adj:new;old;used;dusty;clean;large;small;fancy;plain;ornate;contemporary;modern;dirty;simple;hefty;modest;austere - -### > Clean objects -clean_(o):#clean_(o)_adj_type_1# | #clean_(o)_noun_type_1#;#clean_(o)_adj_type_2# | #clean_(o)_noun_type_2#;#clean_(o)_adj_type_3# | #clean_(o)_noun_type_3# -clean_(o)_noun:#clean_(o)_noun_type_1#;#clean_(o)_noun_type_2#;#clean_(o)_noun_type_3# -clean_(o)_adj:#clean_(o)_adj_type_1#;#clean_(o)_adj_type_2#;#clean_(o)_adj_type_3# -### >> appliances -clean_(o)_noun_type_1:vacuum;wet napkins;paper toillet -clean_(o)_adj_type_1:new;old;clean;large;small;plain;ornate;contemporary;dirty;elegant;immaculate;simple;hefty -### >> paperproducts -clean_(o)_noun_type_2:paper towel;paper toillet;sponge -clean_(o)_adj_type_2:new;old;used;dusty;torn;ripped;dirty;clean;large;small;fancy;plain;ornate;elegant;immaculate;simple;hefty;modest;decorated;austere;embroidered -### >> non-disposable -clean_(o)_noun_type_3:napkin;towel;shirt;sock;sponge -clean_(o)_adj_type_3:new;old;used;dusty;clean;large;small;fancy;plain;dirty;elegant;tacky - -### > Storage objects -storage_(o):#storage_(o)_adj_type_1# | #storage_(o)_noun_type_1#;#storage_(o)_adj_type_2# | #storage_(o)_noun_type_2# -storage_(o)_noun:#storage_(o)_noun_type_1#;#storage_(o)_noun_type_2# -storage_(o)_adj:#storage_(o)_adj_type_1#;#storage_(o)_adj_type_2# -### >> clothing -storage_(o)_noun_type_1:shirt;sock;shoe;glove;hat;scarf;cloak;top hat;pair of pants -storage_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;contemporary;modern;dirty;elegant;immaculate;simple;modest;gaudy;fashionable;tacky -### >> appliances -storage_(o)_noun_type_2:lightbulb;pair of headphones;lampshade;frisbee -storage_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;modern;dirty;elegant;immaculate;simple;hefty;modest;off brand;useless;broken - -### > Cook objects -cook_(o):#cook_(o)_adj_type_1# | #cook_(o)_noun_type_1#;#cook_(o)_adj_type_2# | #cook_(o)_noun_type_2#;#cook_(o)_adj_type_3# | #cook_(o)_noun_type_3# -cook_(o)_noun:#cook_(o)_noun_type_1#;#cook_(o)_noun_type_2#;#cook_(o)_noun_type_3# -cook_(o)_adj:#cook_(o)_adj_type_1#;#cook_(o)_adj_type_2#;#cook_(o)_adj_type_3# -### >> utensil -cook_(o)_noun_type_1:fork;knife;spoon;spork;teaspoon -cook_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere;plastic -### >> cooking appliance -cook_(o)_noun_type_2:napkin;whisk;ladle;blender;kettle;teapot;MW -cook_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere;fancy;broken -### >> vessel/plate -cook_(o)_noun_type_3:mug;bowl;teacup;glass;coffee cup -cook_(o)_adj_type_3:new;old;used;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;chipped - -### > Rest objects -rest_(o):#rest_(o)_adj_type_1# | #rest_(o)_noun_type_1#;#rest_(o)_adj_type_2# | #rest_(o)_noun_type_2#;#rest_(o)_adj_type_3# | #rest_(o)_noun_type_3# -rest_(o)_noun:#rest_(o)_noun_type_1#;#rest_(o)_noun_type_2#;#rest_(o)_noun_type_3# -rest_(o)_adj:#rest_(o)_adj_type_1#;#rest_(o)_adj_type_2#;#rest_(o)_adj_type_3# -### >> screen -rest_(o)_noun_type_1:laptop;tablet;monitor -rest_(o)_adj_type_1:shiny;widescreen;shut off;flat-screen -### >> electronic -rest_(o)_noun_type_2:controller;dvd;cd;lamp;laptop -rest_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;fancy -### >> comfortable things -rest_(o)_noun_type_3:pillow;sleep bag -rest_(o)_adj_type_3:cozy;comfy;comfortable;plush;frilly;nice;small;big;heavy;cute - -### > Work objects -work_(o):#work_(o)_adj_type_1# | #work_(o)_noun_type_1#;#work_(o)_adj_type_2# | #work_(o)_noun_type_2# -work_(o)_noun:#work_(o)_noun_type_1#;#work_(o)_noun_type_2# -work_(o)_adj:#work_(o)_adj_type_1#;#work_(o)_adj_type_2# -### >> utensil -work_(o)_noun_type_1:pen;pencil;staple;notebook;cd;book;backup calendar -work_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;ornate;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere -### >> electronic -work_(o)_noun_type_2:printer;laptop;telephone -work_(o)_adj_type_2:fancy;broken;operational;working - -## * Object Descriptor Functions -(P)_desc:It's you. -(c)_desc:The (name) looks strong, and impossible to #force_open_syn_v#. -(s)_desc:The (name) is #supp_stable#. -(o)_desc:The (name) is #obj_what#.;The (name) #looks_seems_syn_v# #out_in_place# here -(f)_desc:The (name) looks #food_what#.;that's a (name-adj) (name-n)!;You couldn't pay me to eat that (name-adj) thing.;You are starving (name), the food is #food_what# yeah?! But you can't eat that, sorry!! -(k)_desc:The (name) is cold to the touch;The (name) is #weight#.;The metal of the (name) is #key_metal#.;The (name) looks useful -(d)_desc:The (name) looks #door_what_is#.;it's a #door_what_is# (name-n);it is what it is, a (name) -# << ------------------------------------------------------------------------- >> - - -# --- Foods --------------------------------------------------------------------- -## Each roomType must have specific food -## The below should work as an expandable food pyramid. This can be made room specific. - -### > Base food -(f):#(f)_adj# | #(f)_noun# -(f)_adj:#(f)_adj_good#;#(f)_adj_bad#;#(f)_adj_neutral# -(f)_adj_good:fresh;soft;chilled;organic -(f)_adj_bad:aging;half-eaten;rotting -(f)_adj_neutral:dehydrated;dehydrated;frozen;large;small;tiny;hefty;sizable;dried;dry;pureed -(f)_noun:#(f)_noun_fresh#;#(f)_noun_preserved#;#(f)_noun_dehydrated#;(f)_noun_snack -(f)_noun_fresh:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein#;#(f)_noun_dairy#;#(f)_noun_nuts# -(f)_noun_preserved:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein#;#(f)_noun_dairy#;#candy#;#can#; -(f)_noun_dehydrated:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein# -(f)_noun_snack:cheetoz;corn sticks;nacho cheese tortilla;donut;fruit chew;cheese puff;#candy# -(f)_noun_fruit:#fruit# -(f)_noun_vegetable:broccoli;carrot;cucumber;onion;garlic clove;potato;cabbage;cauliflower;pizza;salad -(f)_noun_grain:loaf of bread;sandwich -(f)_noun_protein:;legume;cashew;peanut;burger -(f)_noun_dairy:stick of butter;fondue -(f)_noun_nuts:pistachio;walnut;almond;raisin - -### > Clean food -clean_(f):#(f)# - -### > Storage food -storage_(f):#(f)# - -### > Cook food -cook_(f):#(f)# - -### > Rest food -rest_(f):#(f)# - -### > Work food -work_(f):#(f)# -# << ------------------------------------------------------------------------- >> - - -# --- Keys ---------------------------------------------------------------------- -## Each roomType must have specific keys -(k):#(k)_adj# | #(k)_noun# -(k)_adj:digital;magnetic;digital;magnetic;iron;brass;metal;rusty;steel;aluminum;copper -(k)_noun:key;keycard;latchkey;passkey - -## * Unique-use Key Match Adjective -## These adjectives CANNOT be used elsewhere! -clearancelevel:type #number#;type #letter#;#brand#;#brand#;#brand#;#shape#;#shape#;#shape#;#smell# scented; -(k<->d)_match:#(k)_adj# | #clearancelevel# #(k)_noun# <-> #(d)_adj# | #clearancelevel# #(d)_noun#; #colour# | #(k)_noun# <-> #colour# | #(d)_noun# -(k<->c)_match:#(k)_adj# | #clearancelevel# #(k)_noun# <-> #(c)_adj# | #clearancelevel# #(c)_noun#; #colour# | #(k)_noun# <-> #colour# | #(c)_noun# -# << ------------------------------------------------------------------------- >> - - -# --- Keys ---------------------------------------------------------------------- -### -openable_desc:[if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if];[if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if] -on_desc:On the (name), is [a list of things on the (obj)].;You can see [list of things on the (obj)] on the (name);this (name) has the following upon it, [list of things on the (obj)];you gaze in terror at the [list of things on the (obj)] that lie upon this very (name)!; "now why" you think, "am I looking at [list of things on the (obj)] on this (name)?" -# << ------------------------------------------------------------------------- >> - - - -########################################## Room Descriptor Grammar ################################################################# - -# --- Greetings ----------------------------------------------------------------- -## Text for starting the game. ex: "Greetings, you are now in the messy sleep station" -### -dec:#GREETING# #dec_type##suffix_(r)#;#dec_type##suffix_(r)# -GREETING:GREETING!;GREETINGS TREKKIE!;HELLO ASTRONAUT!;ALRIGHT THEN!; HEY TREKKIE -# << ------------------------------------------------------------------------- >> - - -# --- Room Intro ---------------------------------------------------------------- -## Text for introducing the room. -### -## * Room Intro Blocks -dec_type:#reg-0#;#normal-0#;#difficult-0#;#moredifficult-0#;#playful-0# -reg-0:#01#;#02#;#03# -normal-0:#04# -difficult-0:#05# -moredifficult-0:#06# -playful-0:#07#;#08#;#09#;#010#;#011#;#012#;#013#;#014#;#015#;#016#;#017#;#018#;#019#;#020#;#021#;#022# - -## * Room Intro Templates -01:#dec_find-yourself# in a (name);#dec_guess-what# (name) -02:Well, here we are in #dec_a_the# (name) -03:You're now in #dec_a_the# (name) -04:You've entered a (name);You've just #walk_into_syn_p# a (name) -05:#dec_find-yourself# in a (name-n). A (name-adj) one -06:#dec_find-yourself# in a (name-n). A (name-adj) kind of space at the craft -07:I am sorry to announce that you are now in the (name) -08:Ah, the (name-n). This is some kind of (name-n), really great (name-adj) vibes in this place, a wonderful (name-adj) atmosphere. And now, well, you're in it -09:This might come as a shock to you, but you've just #enter_syn_p# a (name) -010:I am #announce_mood# to announce that you are now in the (name) -011:You've #enter_syn_p# a (name-adj) room of the spaceship. Your mind races to think of what kind of room would be (name-adj). And then it hits you. Of course. You're in the (name) -012:Of every (name-n) you could have #walk_into_syn_p#, you had to #walk_into_syn_v# a (name-adj) one -013:You have #enter_syn_p# a (name-n) in the capsule. Not the (name-n) you'd expect. No, this is a (name) -014:You are in a (name-n). It seems to be pretty (name-adj) here -015:You #dec_what# in a (name-adj) kind of place at this spaceship. That is to say, you're in a (name-n) -016:If you're wondering why everything seems so (name-adj) all of a sudden, it's because you've just #walk_into_syn_p# the (name) -017:You make a grand eccentric entrance into a (name);You make another one of your grand eccentric entrances into a (name) -018:Look at you, bigshot, walking into a (name) like it isn't some huge deal -019:Look around you. Take it all in. It's not every day someone gets to be in a (name) -020:A #signquality# #sign# tells you that you are now in the (name);Look at that #sign#! What does it say? It says (name) Module? Well that's cool -021:This just in- You, in the (name);Welcome to the (name) of Discovery space shuttle;Wow! You're on the pad of Discovery, basically in the (name);Here we are in the (name);You've entered a (name);This (name-n) you have just entered is definitely (name-adj) -022:If you're wondering why everything seems so weird all of a sudden, it's because you've just #launched_into_syn_v#, the space with no gravity anymore -# << ------------------------------------------------------------------------- >> - - -# --- Inform7 Snippets ---------------------------------------------------------- -## Shouldn't need to be messed with. These are shortcuts for when you need to use i7 code. Probably a bad idea to include symbols or tokens inside these -### -i7_closed/open:[if (obj) is open]an open[otherwise]a closed[end if] -i7_list_in:[a list of things in the (obj)] -i7_list_on:[a list of things on the (obj)] -i7_empty:[if (obj) contains nothing]an empty[otherwise]a[end if] -inform7:[if (obj) is locked]a locked[else if (obj) is open]an opened[otherwise]a closed[end if] -inform7A:[if (obj) is locked]A locked[else if (obj) is open]An opened[otherwise]A closed[end if] -inform7noa:[if (obj) is locked]a locked[else if (obj) is open]an opened[otherwise]a closed[end if] -inform7noun:[if (obj) is locked]locked[else if (obj) is open]opened[otherwise]closed[end if] -inform7nounnoa:[if (obj) is locked]locked[else if (obj) is open]opened[otherwise]closed[end if] -# << ------------------------------------------------------------------------- >> - - -# --- Prefixes ------------------------------------------------------------------ -## To be affixed before object descriptions. Keep away from doors. Prefixes start with a uppercase letter and end with "a" -### -prefix:You see a gleam over in a corner, where you can see a;What's that over there? It looks like it's a;You scan the room, seeing a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;You smell #smelltype# smell, and follow it to a;Were you looking for a (name-n)? Because look over there, it's a;You scan the room for a (name-n), and you find a;You hear a noise behind you and spin around, but you can't see anything other than a;Look out! It's a- oh, never mind, it's just a;Look over there! a;Oh, great. Here's a;Hey, want to see a (name-n)? Look over there, a;If you haven't noticed it already, there seems to be something there by the wall, it's a;When you freely float, you notice a;Oh wow! Is that what I think it is? It is! It's a;You are pushed against the wall, inadvertently pressing a secret button. The wall opens up to reveal a;You see a;As if things weren't amazing enough already, you can even see a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a -# << ------------------------------------------------------------------------- >> - - -# --- Suffixes ------------------------------------------------------------------ -## To be affixed after object descriptions. Keep away from doors. Keep in mind a suffix is usually (but not always) followed by a prefix. Suffixes start with punctuation and -## end with a period (or exclamation/question mark). -### -suffix_meta:. There's something about an object in a module that's just so... TextWorld.;. You can't really describe the (name-n) besides that it's (name-adj).;. Does this look like anything mentioned in the instructions?;. What a great pairing of adjectives and nouns!;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on. -suffix_fulfillment:. A (name-n)... Is that really what you were looking for?;. Is this it? Is this what you came to TextWorld to see? a (name-n)?;. Hmm. You always thought you'd be more excited to see a (name-n) in a spaceship module.;. Is this what you came to TextWorld for? This... (name-n)?;. You look around you, at all the containers and supporters, doors and objects, and you think to yourself. Why? Why Textworld? -suffix_(r):. Okay, just remember what is your mission here to do, and everything will go great.;. You try to gain information on your surroundings by using a technique you call 'looking.';. You can barely contain your excitement.;. The room seems oddly familiar, as though it were only superficially different from the other rooms in the spacecraft.;. You decide to just list off a complete list of everything you see in the module, because hey, why not?;. I guess you better just go and list everything you see here.;. You start to take note of what's in the module.;. You decide to start listing off everything you see in the module, as if you were in a text adventure.;. The module is well lit.;. You begin to take stock of what's here.;. Let’s list all the required tools here for the mission.;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# - -## * Cut for length -suffix:.;. You shudder, but continue examining the module.;. You wonder idly who left that here.;. Now why would someone leave that there?;. There's something strange about this being here, but you can't put your finger on it.;. There's something strange about this thing being here, but you don't have time to worry about that now.;. Huh, weird.;, so there's that.;!;. Hmmm... what else, what else?;. Wow, isn't TextWorld just the best?;. I mean, just wow! Isn't TextWorld just the best?;. You can't wait to tell the folks at mission control hall about this!;. Something scurries by right in the corner of your eye. Probably nothing.;. You idly wonder how they came up with the name TextWorld for this place. It's pretty fitting.;. Suddenly, you bump your head on the ceiling, but it's not such a bad bump that it's going to prevent you from looking at objects and even things.;. Now that's what I call TextWorld!;. Classic TextWorld.;. The light flickers for a second, but nothing else happens.;.;.;.;#emptymainperiod#;#emptymainperiod#;#emptymainperiod#;#suffix_fulfillment#;#suffix_meta# - -## * Multi suffixes need to be more flexible than normal ones -suffix-multi:.;. You shudder, but continue examining the room.;. You wonder idly who put this stuff here.;. There's something strange about this stuff being here, but you can't put your finger on it.;. There's something strange about this stuff being here, but you don't have time to worry about that now.;. Huh, weird.;, so there's that.;, so why not take a picture, it'll last longer!;. It doesn't get any more TextWorld than this!;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# -suffix_(s)_mid:.;. You shudder, but continue examining the (name-n).;. You wonder idly who left that here.;. Now why would someone leave that there?;#suffix_meta#;. Why don't you take a picture of it, it'll last longer!;!;. Wow, isn't TextWorld just the best?;. I guess it's true what they say, if you're looking for a (name-n), go to TextWorld.;. What a coincidence, weren't you just thinking about a (name-n)?;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# -suffix_(s)_end:.;. Check and see you cannot remove them.;. You shudder, but continue examining the room.;. There's something strange about this being here, but you can't put your finger on it.;. There's something strange about this thing being here, but you don't have time to worry about that now. You have more important mission!;. Huh, weird.;, so there's that.;. Hmmm... what else, what else?;. I mean, just wow! Isn't TextWorld just the best?;. You can't wait to tell the folks at home about this!;. Something scurries by right in the corner of your eye. Probably nothing.;. You idly wonder how they came up with the name TextWorld Spaceship for this place. It's pretty fitting.;. Suddenly, you bump your head on the ceiling, nogravity ha?! but it's not such a bad bump that it's going to prevent you from looking at objects and even things.;. Wow! Just like in the StartWar movies!;. It doesn't get more TextWorld than this!;. Now that's what I call TextWorld!;. Classic TextWorld.;#suffix#;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# -suffix_(s)_end_angry:. You move on, clearly #upsetwith# TextWorld.;. You move on, clearly #upsetwith# your TextWorld experience.;. Sometimes, just sometimes, TextWorld can just be the worst.;. What's the point of an empty (name-n)?;. Hopefully this doesn't make you too upset.;. You make a mental note to not get your hopes up the next time you see a (name-n) in a room.;. ;. Hopefully, this discovery doesn't ruin your TextWorld experience!;. Silly (name-n), silly, empty, good for nothing (name-n).;. You think about smashing the (name-n) to bits, throwing the bits #intheblank#, etc, until you get bored.;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n)! oh well.;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, and here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# -# << ------------------------------------------------------------------------- >> - - -# --- Separators Description ---------------------------------------------------- -## Used to separate the description of different object types - -## * Container Descriptions -### Rules for Container Descriptions -### Good idea to subdivide these into difficulty levels -### room_desc_(c): generates all container descriptions -### containerdescription: contains all physical exterior descriptions of containers -### room_desc_(c)_1_name: describes the container as an adj+noun -### room_dec_(c)_1_noun: describes the container as a noun -### room_desc_(c)_content: decides if we append a description of the container's contents depending on if the container is open or closed -### opencontainer:what is appended if the container is open -### room_desc_(c)_2_adj: adds an adjective and a list of contents (creates doubled adjectives?) -### room_desc_(c)_2: list of contents without an adjective -### -room_desc_(c):#containerdescription##room_desc_(c)_content# - -containerdescription:#room_desc_(c)_1_name#;#room_desc_(c)_1_noun# - -room_desc_(c)_1_name:#reg-a#;#normal-a#;#difficult-a#;#moredifficult-a#;#playful-a# -reg-a:#a1#;#a2# -normal-a:#a3#;#a4#;#a5# -difficult-a:#a6# -moredifficult-a:#reg-a# -playful-a:#reg-a# - -room_desc_(c)_1_noun:#reg-b#;#normal-b#;#difficult-b#;#moredifficult-b#;#playful-b# -reg-b:#b1#;#b2# -normal-b:#b3#;#b4#;#b5# -difficult-b:#reg-b# -moredifficult-b:#reg-b# -playful-b:#reg-b# - -room_desc_(c)_content:[if (obj) is open and there is something in the (obj)] #opencontainer##suffix#[end if][if (obj) is open and the (obj) contains nothing] #emptyreaction#[end if] -emptyreaction:The (name-n) is empty, what a horrible day!;The (name-n) is empty! What a waste of a day!;The (name-n) is empty! This is the worst thing that could possibly happen, ever!;Empty! What kind of nightmare TextWorld is this?;What a letdown! The (name-n) is empty! - -opencontainer:The (name) contains #i7_list_in# - -room_desc_(c)_2_adj:#c1#;#c2#;#c3#;#c4#;#c5#;#c6#;#c7#;#c8#;#c9# - -room_desc_(c)_2:#d0#;#d1#;#d2#;#d3#;#d4# - -room_desc_(c)_multi_noun:#e1# -room_desc_(c)_multi_open_noun:#f1#;#f2#;#f3#;#f4#;#f5#;#f6# - -room_desc_(c)_multi_adj:#g1# -room_desc_(c)_multi_open_adj:#h1#;#h2#;#h3#;#h4# - -## * Container Description Templates -### -### # A # -a1:#how_see# #inform7# (name).;#a6# -a2:#how_see# #inform7# #name_var# #here_alt#.;#a6# -a3:#inform7A# #name_var# is #here_alt#.;#a6# -a4:#a1#;#a6# -a5:#a2#;#a6# -a6:#prefix# (name)#suffix# - -### # B # -b1:#how_see# #inform7# (name-n).;#b5# -b2:#how_see# #inform7# (name-n) #here_alt#.;#b5# -b3:#inform7A# (name-n) is #here_alt#.;#b5# -b4:#b1#;#b5# -b5:#prefix# (name-n)#suffix# - -### # C # -c1:#it_is# (name-adj), and #contain_syn_v# #i7_list_in#. -c2:#it_is# (name-adj). Also, there #listwithis# in it. -c3:#c1# -c4:#ContentsC-# [list of things in the (obj)]. -c5:there [is|are] [a list of things in the (obj)] in this silly (name-adj) thing. -c6:#c9# -c7:#c9# -c8:Let's see what's inside - #i7_list_in#. -c9:#it# #reminds_you# the containers #ofyouryouth#. Oh, how they also #contain_syn_p# #i7_list_in#. - -### # D # -d0:the (name) contains #i7_list_in#. -d1:It #contain_syn_v# #i7_list_in#.;There is #i7_list_in# in it. -d2:There #listwithis# #findin_syn_p# it. -d3:You can see #i7_list_in# in the (name-n). -d4:In it, you can see #i7_list_in#. - -### # E # -e1:[if (obj) is open]#room_desc_(c)_multi_open_noun#.[else if (obj) is locked]The (name-n) is locked.[otherwise]The (name-n) is closed.[end if] - -### # F # -f1:The (name-n) #contain_syn_v# #i7_list_in# -f2:There #listwithis# #findin_syn_p# the (name-n) -f3:You can see #i7_list_in# in the (name-n) -f4:#f5#;#f6# -f5:#f6# -f6:The (name-n) #reminds_you# the containers #ofyouryouth#. Oh, how they also #contain_syn_p# #i7_list_in# - -### # G # -g1:[if (obj) is open]#room_desc_(c)_multi_open_adj#.[else if (obj) is locked]The (name-adj) one is locked.[otherwise]The (name-adj) one is closed.[end if] - -### # H # -h1:The (name-adj) one #contain_syn_v# #i7_list_in# -h2:There #i7_list_in# #findin_syn_p# the (name-adj) one -h3:You can see #i7_list_in# in the (name) -h4:In the (name-adj) one, you can see #i7_list_in# - -## * Supporter Descriptions -### Similar to Container descriptions, but without open/close or lock/unlock -### room_desc_(s): hub -### room_desc_(s)_1_noun : description of supporter without adjective. Paired with--> room_desc_(s)_2_adj -### room_desc_(s)_1_name : same as above, but with an adjective -### room_desc_(s)_2_adj : adjective for supporter plus a list of things on it -### room_desc_(s)_2: -### -room_desc_(s):#room_desc_(s)_1_noun# #room_desc_(s)_2_adj#;#room_desc_(s)_1_name# #room_desc_(s)_2# - -room_desc_(s)_1_noun:#prefix# floating (name-n)#suffix_(s)_mid# - -room_desc_(s)_1_name:#prefix# freefloating (name)#suffix_(s)_mid# - -room_desc_(s)_2_adj:The (name-n) is (name-adj).[if there is something on the (obj)] On the (name) #how_see_u# #i7_list_on# tightly fixed#suffix_(s)_end#[end if][if there is nothing on the (obj)] #emptysupporter##suffix_(s)_end_angry#[end if];The (name-n) is (name-adj) [if name has something on it] on the (name) #i7_list_on# which are screwed to the (name-n)[else if the (name) is empty]#emptysupporter#[end if] - -room_desc_(s)_2:[if there is something on the (obj)]On the (name) #how_see_u# #i7_list_on# tightened to the surface#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter##suffix_(s)_end_angry#[end if];[if there is something on the (obj)]You see #i7_list_on# on the (name-n), see how it is fixed to the surface#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter##suffix_(s)_end_angry#[end if] - -room_desc_(s)_multi_noun:[if there is something on the (obj)]On the (name-n), you see #i7_list_on#, which you cannot remove them#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter_multi##suffix_(s)_end_angry#[end if] - -room_desc_(s)_multi_adj:[if there is something on the (obj)]On the (name-adj) one, you see #i7_list_on##suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter_multi##suffix_(s)_end_angry#[end if] - -emptysupporter:But there isn't a thing on it, weightless is amazing!;Unfortunately, there isn't a thing on it;But the thing is empty;But the thing is empty, unfortunately;But the thing hasn't got anything on it;But oh no! there's nothing on this piece of #trash#;The (name-n) appears to be empty;Looks like someone's already been here and taken everything off it, though;However, the (name-n), like an empty (name-n), has nothing on it; - -emptysupporter_multi:There isn't a thing on the (name-n);The (name-n) is empty;Look at the (name-n). There's nothing on this piece of #trash#;But the (name-n) hasn't got anything on it;What a letdown, there's nothing here; - -## * Group Descriptions -### -room_desc_group:You can see (^) (val), (name), here#suffix-multi#;Your attention is drawn to (^) (val), (name)#suffix-multi# - -## * Exit Descriptions -### room_desc_(d): describes a single door in the room -### room_desc_(dir): describes a single unblocked exit in the room -### room_exit_desc: describes multiple unlocked exits in the room -### room_desc_exits: possible unnecessary -### room_desc_doors_closed: describes a group of closed doors in the room -### room_desc_doors_open: describes a group of open doors in the room -### -room_desc_(d):There is #i7_closed/open# (name) leading (dir). - -room_desc_(dir):There is an #unblocked# exit to the (dir).;There is an exit to the (dir). Don't worry, it is #unblocked#.;You need an #unblocked# exit? You should try going (dir).;You don't like doors? Why not try going (dir), that entranceway is #unblocked#. - -room_exit_desc:#easy1#.;#medium1#.;#hard1#. -easy1:There [is an|are] #unblocked# [exit|exits] to the (dir);There [is an|are] [exit|exits] to the (dir). And hey, don't worry, [they are|it's] #unblocked# -medium1:[An exit|Exits] #unblocked# [lies|lie] to the (dir);You can go (dir) from here without having to deal with any doors -hard1:it looks like you can exit to the (dir), if doors aren't really your #yourthing#;if you want to leave, and doors really aren't your #yourthing# you could try going (dir);If you're not really a door person, you could leave by the (dir);If you're not really a doors fan, you could leave by the (dir);not a fan of the doors? Why not go (dir);Hot tip- if you go (dir), you won't have to deal with any doors - -room_desc_exits:There [is an|are] #unblocked# [exit|exits] to the (dir). - -room_desc_doors_closed:#easy0a#. -easy0a:There are (^) closed doors, (name-indefinite), here;Let's see how many closed doors there are. Looks like (^), (name-indefinite);There are (^) closed doors here, (name-indefinite); - -room_desc_doors_open:#easy0b#. -easy0b:There are (^) open doors, (name-indefinite), here;Let's see how many open doors there are. Looks like (^), (name-indefinite) -# << ------------------------------------------------------------------------- >> - - - -############################################ Instructions Grammar ################################################################## - -# --- Compound Command Description Functions ------------------------------------ -## -### -ig_unlock_open:open the locked #lock_types# using the (k).;unlock and open the #lock_types#.;unlock and open the #lock_types# using the (k).;open the #lock_types# using the (k). -ig_unlock_open_take:open the locked #lock_types# using the (k) and take the #obj_types_no_key#.;unlock the #lock_types# and take the #obj_types_no_key#.;unlock the #lock_types# using the (k), and take the #obj_types_no_key#.;take the #obj_types_no_key# from within the locked #lock_types#. -ig_unlock_open_release:open the locked #lock_types# using the (k) and unhook the #obj_types_no_key#.;unlock the #lock_types# and release the #obj_types_no_key#.;unlock the #lock_types# using the (k), and unhook the #obj_types_no_key#.;release the #obj_types_no_key# from within the locked #lock_types#. -ig_open_take:take the #obj_types# from the (c).;open the (c) and take the #obj_types#.;from in the closed (c), take the #obj_types#. -ig_take/c_unlock:take the (k) and use it to unlock the #lock_types#.;unlock the #lock_types#, with the (k).; -ig_take/s_unlock:take the (k) and use it to unlock the #lock_types#.;unlock the #lock_types#, with the (k).; -ig_take_unlock:#take_syn_v# the (k) and use it to unlock the #lock_types#.;unlock the #lock_types# with the (k).; -ig_open_insert:open the (c) and place the #obj_types# in it.;put the #obj_types# in the closed (c).; -ig_insert_close:place the #obj_types# in the (c) and close it.;close (c) after placing the #obj_types# in it.;attach the #obj_types# to the hook in the (c) and close it. -ig_close_lock:close the #lock_types# and lock it.;close the #lock_types# and lock it with the (k). -# << ------------------------------------------------------------------------- >> - - -# --- Flavour Text --------------------------------------------------------------- -## -### -quest:#prologue# (list_of_actions) #epilogue# -quest_one_action:#prologue_one_action# (action) -prologue:#welcome#! Here is your task for today. #newsentence#;#welcome#! Here is how to play! #newsentence#;#welcome#! #newsentence#;Hey, thanks for coming over to the TextWorld today, there is something I need you to do for me. #newsentence# -prologue_one_action:#welcome#! Your task for today is to;#welcome#!;Your objective is to;Hey, thanks for coming over to TextWorld! Please -newsentence:First off,;First of all,;First stop,;First step,;Your first objective is to;First thing I need you to do is to;First off, if it's not too much trouble, I need you to;First of all, you could, like,;First, it would be #begood# if you could -action_separator: Then, ; Next, ; Following that, ; If you can #do_syn_v# that, ; Once you #do_syn_v# that, ; That done, ; With that over with, ; With that accomplished, ; With that done, ; Okay, and then, ; And then, ;#emptyinstruction# -epilogue:Once that's all handled, you can stop!;And once you've done that, you win!;And if you do that, you're the winner!;That's it!;Got that? Good!;Alright, thanks! -welcome:Welcome to TextWorld;You are now playing a #exciting# #game# of TextWorld Spaceship;Welcome to another #exciting# #game# of TextWorld;It's time to explore the amazing world of TextWorld Galaxy;Get ready to pick stuff up and put it in places, because you've just entered TextWorld shuttle;I hope you're ready to go into rooms and interact with objects, because you've just entered TextWorld shuttle;Who's got a virtual machine and is about to play through an #exciting# round of TextWorld? You do; -game:game;round;session;episode -# << ------------------------------------------------------------------------- >> - - -# --- Separators ----------------------------------------------------------------- -## *--- Action separators -### Need at least 5 for each action type -### -action_separator_take:#afterhave# #take_syn_pp# the #obj_types#, ;#after# #taking# the #obj_types#, ;With the #obj_types#, ;If you can get your hands on the #obj_types#, ;#emptyinstruction#; -action_separator_take/s:#afterhave# #take_syn_pp# the #obj_types# from (s), ;#after# #taking# the #obj_types# from (s), ;With the #obj_types#, ;If you can get your hands on the #obj_types#, ;#emptyinstruction# -action_separator_eat:#afterhave# #eat_syn_pp# the #eat_types#, ;#after# #eating# the #obj_types#, ;#emptyinstruction#; -action_separator_insert:#afterhave# #insert_syn_pp# the #obj_types# into the (c), ;#after# #inserting# the #obj_types# into the (c), ;#emptyinstruction# -action_separator_open: #afterhave# #open_syn_pp# the #close_open_types#, ;#after# #opening# the #close_open_types#, ;#emptyinstruction# -action_separator_unlock: #afterhave# #unlock_syn_pp# the #lock_types#, ;#after# #unlocking# the #lock_types#, ;#emptyinstruction#; -action_separator_lock: #afterhave# #lock_syn_pp# the #lock_types#, ;#after# #locking# the #lock_types#, ;#emptyinstruction#; -action_seperator_go: #afterhave# #go_syn_pp# (dir), ;#after# #going# (dir), ;once you're (dir), ;once you're in the (dir), ;If you can manage to go (dir), ;#afterhave# #go_syn_pp# through the (r), ;#after# #going# through the (r), ;#emptyinstruction# -action_seperator_go/south: #afterhave# #go_syn_pp# south, ;#emptyinstruction# -action_seperator_go/north: #afterhave# #go_syn_pp# north, ;#emptyinstruction# -action_seperator_go/east: #afterhave# #go_syn_pp# east, ;#emptyinstruction# -action_seperator_go/west: #afterhave# #go_syn_pp# west, ;#emptyinstruction# -action_separator_close: #afterhave# #close_syn_pp# the #close_open_types#, ; #after# #closing# the #close_open_types#, ;#emptyinstruction# -action_separator_release: #afterhave# #release_syn_pp# the #obj_types# from the #(s)_var#, ; #after# #releasing# the #obj_types# into the (r);#emptyinstruction# - - -## *--- Separator Symbols -### -afterhave:After you have;Having;Once you have;If you have -after:After; -# << ------------------------------------------------------------------------- >> - - - - -# --- Empty Icon ---------------------------------------------------------------- -### -emptymainperiod:#emptymain# -emptymain:#empty1#;#empty2#;#empty3#;#empty4#;#empty5#;#empty6#;#empty7#;#empty8#;#empty9#;#empty10#;#empty11#;#empty12#;#empty13#;#empty14#;#empty15#;#empty16#;#empty17#;#empty18#;#empty19#;#empty20#;#empty21#;#empty22#;#empty23#;#empty24#;#empty25#;#empty26#;#empty27#;#empty28#;#empty29#;#empty30#;#empty31#;#empty32#;#empty33#;#empty34#;#empty35#;#empty36#;#empty37#;#empty38#;#empty39#;#empty40#;#empty41#;#empty42#;#empty43#;#empty44#;#empty45#;#empty46#;#empty47#;#empty48#;#empty49#;#empty50#;#empty51#;#empty52#;#empty53#;#empty54#;#empty55#;#empty56#;#empty57#;#empty58#;#empty59#;#empty60#;#empty61#;#empty62#;#empty63# -empty1:.; -empty2:.; -empty3:.; -empty4:.; -empty5:.; -empty6:.; -empty7:.; -empty8:.; -empty9:.; -empty10:.; -empty11:.; -empty12:.; -empty13:.; -empty14:.; -empty15:.; -empty16:.; -empty17:.; -empty18:.; -empty19:.; -empty20:.; -empty21:.; -empty22:.; -empty23:.; -empty24:.; -empty25:.; -empty26:.; -empty27:.; -empty28:.; -empty29:.; -empty30:.; -empty31:.; -empty32:.; -empty33:.; -empty34:.; -empty35:.; -empty36:.; -empty37:.; -empty38:.; -empty39:.; -empty40:.; -empty41:.; -empty42:.; -empty43:.; -empty44:.; -empty45:.; -empty46:.; -empty47:.; -empty48:.; -empty49:.; -empty50:.; -empty51:.; -empty52:.; -empty53:.; -empty54:.; -empty55:.; -empty56:.; -empty57:.; -empty58:.; -empty59:.; -empty60:.; -empty61:.; -empty62:.; -empty63:.; - - -emptyinstruction:#emptyinstruction1#;#emptyinstruction2#;#emptyinstruction3#;#emptyinstruction4#;#emptyinstruction5#;#emptyinstruction6#;#emptyinstruction7#,#emptyinstruction8#;#emptyinstruction9#;#emptyinstruction10# -emptyinstruction1: And then, ; -emptyinstruction2: Then, ; -emptyinstruction3: After that, ; -emptyinstruction4: And then, ; -emptyinstruction5: After that, ; -emptyinstruction6: Then, ; -emptyinstruction7: And then, ; -emptyinstruction8: After that, ; -emptyinstruction9: And then, ; -emptyinstruction10: Then, ; diff --git a/textworld/generator/inform7/world2inform7.py b/textworld/generator/inform7/world2inform7.py index 386a5d83..423e393b 100644 --- a/textworld/generator/inform7/world2inform7.py +++ b/textworld/generator/inform7/world2inform7.py @@ -311,6 +311,7 @@ def gen_source(self, seed: int = 1234) -> str: objective = self.game.objective.replace("\n", "[line break]") maximum_score = 0 + wining = 0 for quest_id, quest in enumerate(self.game.quests): maximum_score += quest.reward @@ -350,6 +351,7 @@ def gen_source(self, seed: int = 1234) -> str: quest_ending_conditions += win_template.format(conditions=conditions, reward=quest.reward, quest_id=quest_id) + wining += 1 quest_ending = """\ Every turn:\n{conditions} @@ -358,13 +360,16 @@ def gen_source(self, seed: int = 1234) -> str: source += textwrap.dedent(quest_ending) # Enable scoring is at least one quest has nonzero reward. - if maximum_score != 0: + if maximum_score >= 0: source += "Use scoring. The maximum score is {}.\n".format(maximum_score) + print(maximum_score) + print(wining) # Build test condition for winning the game. game_winning_test = "1 is 0 [always false]" - if len(self.game.quests) > 0: - game_winning_test = "score is maximum score" + if wining > 0: + if maximum_score != 0: + game_winning_test = "score is maximum score" # Remove square bracket when printing score increases. Square brackets are conflicting with # Inform7's events parser in tw_inform7.py. From 6168512db00bdd5bc2cd85a033c79a7de7127868 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Fri, 20 Dec 2019 15:27:21 -0500 Subject: [PATCH 11/13] the spaceship game: the latest version of the game, Framework updates and refactoring, game files(json, ni, ulx), updated logic files, ... --- .../spaceship/games/levelMedium.json | 2 +- .../challenges/spaceship/games/levelMedium.ni | 55 +- .../spaceship/games/levelMedium.ulx | Bin 639488 -> 640000 bytes textworld/challenges/spaceship/maker.py | 215 +++- .../challenges/spaceship/spaceship_game.py | 63 +- .../spaceship/textworld_data/logic/CPU.twl | 37 +- .../spaceship/textworld_data/logic/cloth.twl | 10 +- .../spaceship/textworld_data/logic/text.twl | 3 +- .../text_grammars/Spaceship.twg | 969 ------------------ textworld/generator/__init__.py | 4 +- textworld/generator/game.py | 3 + textworld/generator/inform7/world2inform7.py | 2 - textworld/generator/text_grammar.py | 7 +- 13 files changed, 292 insertions(+), 1078 deletions(-) delete mode 100644 textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg diff --git a/textworld/challenges/spaceship/games/levelMedium.json b/textworld/challenges/spaceship/games/levelMedium.json index 4e1919bf..fc1ab8ba 100644 --- a/textworld/challenges/spaceship/games/levelMedium.json +++ b/textworld/challenges/spaceship/games/levelMedium.json @@ -1 +1 @@ -{"version": 1, "world": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_0", "type": "c"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_1", "type": "c"}, {"name": "r_1", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_5", "type": "c"}, {"name": "r_4", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_6", "type": "c"}, {"name": "r_5", "type": "r"}]}, {"name": "at", "arguments": [{"name": "l_0", "type": "l"}, {"name": "r_6", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_0", "type": "s"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_1", "type": "s"}, {"name": "r_2", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_2", "type": "s"}, {"name": "r_2", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_3", "type": "s"}, {"name": "r_3", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_4", "type": "s"}, {"name": "r_3", "type": "r"}]}, {"name": "clean", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "closed", "arguments": [{"name": "c_2", "type": "c"}]}, {"name": "closed", "arguments": [{"name": "c_5", "type": "c"}]}, {"name": "closed", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "east_of", "arguments": [{"name": "r_2", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "east_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_5", "type": "r"}]}, {"name": "east_of", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_2", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_2", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "in", "arguments": [{"name": "b_0", "type": "b"}, {"name": "c_4", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "c_1", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_1", "type": "k"}, {"name": "c_2", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "c_3", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_3", "type": "k"}, {"name": "c_5", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_4", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_6", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "in", "arguments": [{"name": "txt_0", "type": "txt"}, {"name": "c_6", "type": "c"}]}, {"name": "link", "arguments": [{"name": "r_0", "type": "r"}, {"name": "d_0", "type": "d"}, {"name": "r_1", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_1", "type": "r"}, {"name": "d_0", "type": "d"}, {"name": "r_0", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_1", "type": "r"}, {"name": "d_1", "type": "d"}, {"name": "r_3", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_3", "type": "r"}, {"name": "d_1", "type": "d"}, {"name": "r_1", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_3", "type": "r"}, {"name": "d_2", "type": "d"}, {"name": "r_5", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_4", "type": "r"}, {"name": "d_3", "type": "d"}, {"name": "r_6", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_5", "type": "r"}, {"name": "d_2", "type": "d"}, {"name": "r_3", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_6", "type": "r"}, {"name": "d_3", "type": "d"}, {"name": "r_4", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_6", "type": "r"}, {"name": "d_4", "type": "d"}, {"name": "r_7", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_7", "type": "r"}, {"name": "d_4", "type": "d"}, {"name": "r_6", "type": "r"}]}, {"name": "locked", "arguments": [{"name": "c_1", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_3", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_4", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_6", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "d_1", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_2", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_3", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_4", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_0", "type": "k"}, {"name": "d_1", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_1", "type": "k"}, {"name": "c_1", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_2", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_3", "type": "k"}, {"name": "d_2", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_4", "type": "k"}, {"name": "c_4", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_5", "type": "k"}, {"name": "d_3", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_6", "type": "k"}, {"name": "c_3", "type": "c"}]}, {"name": "north_of", "arguments": [{"name": "r_0", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_6", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_6", "type": "r"}, {"name": "r_7", "type": "r"}]}, {"name": "on", "arguments": [{"name": "c_2", "type": "c"}, {"name": "s_1", "type": "s"}]}, {"name": "on", "arguments": [{"name": "c_3", "type": "c"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "c_4", "type": "c"}, {"name": "s_4", "type": "s"}]}, {"name": "on", "arguments": [{"name": "cpu_0", "type": "cpu"}, {"name": "s_0", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_0", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_1", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_2", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "open", "arguments": [{"name": "c_0", "type": "c"}]}, {"name": "pair", "arguments": [{"name": "b_0", "type": "b"}, {"name": "d_4", "type": "d"}]}, {"name": "south_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_0", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_6", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_7", "type": "r"}, {"name": "r_6", "type": "r"}]}, {"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "unpushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "unread/t", "arguments": [{"name": "txt_0", "type": "txt"}]}, {"name": "west_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_2", "type": "r"}]}, {"name": "west_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "west_of", "arguments": [{"name": "r_5", "type": "r"}, {"name": "r_3", "type": "r"}]}], "grammar": {"theme": "Spaceship", "names_to_exclude": [], "include_adj": false, "blend_descriptions": false, "ambiguous_instructions": false, "only_last_action": false, "blend_instructions": false, "allowed_variables_numbering": false, "unique_expansion": false}, "quests": [{"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "read/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}], "postconditions": [{"name": "read/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "event", "arguments": [{"name": "cpu_0", "type": "cpu"}]}]}}], "fail_events": []}, {"desc": "", "reward": 0, "commands": [], "win_events": [], "fail_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}], "postconditions": [{"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "cpu_0", "type": "cpu"}, {"name": "d_0", "type": "d"}]}]}}]}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_0", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_2", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}], "postconditions": [{"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "event", "arguments": [{"name": "b_0", "type": "b"}, {"name": "l_0", "type": "l"}]}]}}], "fail_events": []}, {"desc": "", "reward": 0, "commands": [], "win_events": [], "fail_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}], "postconditions": [{"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "event", "arguments": [{"name": "b_0", "type": "b"}, {"name": "l_0", "type": "l"}]}]}}]}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_5", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "read/t", "arguments": [{"name": "txt_0", "type": "txt"}]}], "postconditions": [{"name": "read/t", "arguments": [{"name": "txt_0", "type": "txt"}]}, {"name": "event", "arguments": [{"name": "txt_0", "type": "txt"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}], "postconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "event", "arguments": [{"name": "l_0", "type": "l"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}], "postconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}]}}], "fail_events": []}], "infos": [["P", {"id": "P", "type": "P", "name": null, "noun": null, "adj": null, "desc": null, "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["I", {"id": "I", "type": "I", "name": null, "noun": null, "adj": null, "desc": null, "room_type": null, "definite": null, "indefinite": null, "synonyms": null}], ["r_2", {"id": "r_2", "type": "r", "name": "European Module", "noun": null, "adj": null, "desc": "This room belongs to European scientists. Isn't it cool? what do they research? well, we can explore it later... For now, there is a key code here. This code opens the box in the next room and consequently takes you to the next stage. So, explore the table to find the key.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["r_1", {"id": "r_1", "type": "r", "name": "US LAB", "noun": null, "adj": null, "desc": "This is where Americans do their research on Space. In addition to all computers and lab gadgets, you can find a couple of objects here which are useful during our game. Let's explore the room.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_3", {"id": "r_3", "type": "r", "name": "Russian Module", "noun": null, "adj": null, "desc": "The Russian module is a typical space lab that you can expect, filled with a lot of processing machines, test equipments and space drive cars, in fact for repair and test. Since it is located at the center of International Space Station, it is also important room for everyone. There are many other objects here and there belongs to other astronauts, probably that's why here looks a bit messy. There are some stuffs here you should pick, obviously if you can find them among all this mess.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["r_5", {"id": "r_5", "type": "r", "name": "Control Module", "noun": null, "adj": null, "desc": "This is the heart of this spaceship! Wow ... look around, all the monitors and panels. It is like you can control everything from here; more interestingly, you can communicate with people on the Earth. There are also super important objects kept in this room. Let's find them.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_4", {"id": "r_4", "type": "r", "name": "Lounge Module", "noun": null, "adj": null, "desc": "This lounge is very quiet room with a big round window to the space. Wow, you can look to our beloved Earth from this window. This room is the place that you can stay here for hours and just get relax. This room also contains some other stuff, let's explore what they are ...", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["r_0", {"id": "r_0", "type": "r", "name": "Sleep Station", "noun": null, "adj": null, "desc": "This is a typical bedroom in spaceship; here, it is called sleep station. It is small but comfortable to take a good rest after a day full of missions. However, today your mission will start from here. Wait to be notified by a message. So, you should find that message first. BTW, don't forget that when the Hatch door is open, you should already have worn your specially-designed outfit to be able to enter and stay at Hatch area; otherwise you'll die! Yes! Living in space is tough.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["r_6", {"id": "r_6", "type": "r", "name": "Hatch", "noun": null, "adj": null, "desc": "This area is like the entrance to the spaceship, so like home entrance with outer and inner doors and a place that outfits are hooked. There are only two important differences: first, if the outer door is open and you don't have outfit on you, you are dead!! No joke here! So make sure that you open the door after wearing those cloths. Second, the door nob to open the door is not neither on the door nor in this room. You should open the external door from Russian Module! woooh so much of safety concerns, yeah?!", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_7", {"id": "r_7", "type": "r", "name": "Outside", "noun": null, "adj": null, "desc": "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means that you have the special outfit on you and you passed the medium level of the game! Congrats!", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["d_0", {"id": "d_0", "type": "d", "name": "door A", "noun": null, "adj": null, "desc": "it's a commanding door A [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["d_1", {"id": "d_1", "type": "d", "name": "door B", "noun": null, "adj": null, "desc": "it's a manageable door B [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["d_2", {"id": "d_2", "type": "d", "name": "door C", "noun": null, "adj": null, "desc": "The door C looks imposing. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["d_3", {"id": "d_3", "type": "d", "name": "door D", "noun": null, "adj": null, "desc": "it is what it is, a door D [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["d_4", {"id": "d_4", "type": "d", "name": "door E", "noun": null, "adj": null, "desc": "The door E looks rugged. [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["c_0", {"id": "c_0", "type": "c", "name": "sleeping bag", "noun": null, "adj": null, "desc": "cool! You can sleep in a comfy bag.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["c_1", {"id": "c_1", "type": "c", "name": "box A", "noun": null, "adj": null, "desc": "This a regular box, keeps the electronic key to open door C. But it is locked. The lock looks like a keypad, means that the key is in fact just a code! So, ... let's search around to find its key.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["c_5", {"id": "c_5", "type": "c", "name": "box E", "noun": null, "adj": null, "desc": "This box is actually a wall-mounted bag and you can put an object into it. Since we have no gravity in the space, you can't just simply leave the object in the room. The object should be hooked or inserted into a container like this bag. Well, know we know what it is!", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["c_6", {"id": "c_6", "type": "c", "name": "secured box", "noun": null, "adj": null, "desc": "This box is secured very much, simple box with a complex, strange keypad to enter the code! So ... it should contain extremely important items in it. Isn't it the thing you are looking for?!", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["l_0", {"id": "l_0", "type": "l", "name": "outfit", "noun": null, "adj": null, "desc": "", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["s_0", {"id": "s_0", "type": "s", "name": "vertical desk", "noun": null, "adj": null, "desc": "This is not a regular table. The surface is installed vertically and your objects are attached or hooked to it, why? Come on! we are in space, there is no gravity here.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["s_1", {"id": "s_1", "type": "s", "name": "table", "noun": null, "adj": null, "desc": "This is a simple table located in the middle of the room. Let's take a look at it...", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["s_2", {"id": "s_2", "type": "s", "name": "chair", "noun": null, "adj": null, "desc": "this is a dark-gray chair which is developed to be used in space.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["s_3", {"id": "s_3", "type": "s", "name": "metal table", "noun": null, "adj": null, "desc": "This is a big metal table, a messy one, there are many things on it, it is difficult to find what you want. However, there is just one item which is important for you. Try to find that item.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["s_4", {"id": "s_4", "type": "s", "name": "wall-mounted surface", "noun": null, "adj": null, "desc": "This is a wall-mounted surface which different instruments are installed on this. These instruments are basically control various modules and doors in the shuttle.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["c_2", {"id": "c_2", "type": "c", "name": "box B", "noun": null, "adj": null, "desc": "This a regular box, keeps the key to open box A.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["b_0", {"id": "b_0", "type": "b", "name": "exit push button", "noun": null, "adj": null, "desc": "This push button is a key-like object which opens door A.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["c_4", {"id": "c_4", "type": "c", "name": "exit box", "noun": null, "adj": null, "desc": "The most important box here, which is in fact locked! sounds it carries important item... So, let's find its key to open it.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["k_0", {"id": "k_0", "type": "k", "name": "electronic key 1", "noun": null, "adj": null, "desc": "This key is a card key which opens door C.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["k_1", {"id": "k_1", "type": "k", "name": "code key 1", "noun": null, "adj": null, "desc": "This key is in fact a digital code which opens the box in the US Lab area. The code, in fact, is written on a piece of paper.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_2", {"id": "k_2", "type": "k", "name": "digital key 1", "noun": null, "adj": null, "desc": "This key is an important key in this craft. If you want to leave the spaceship, you definitely need this key.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["c_3", {"id": "c_3", "type": "c", "name": "box C", "noun": null, "adj": null, "desc": "This box is locked! sounds it carries important item... So, let's find its key to open it. Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this somewhere before.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["k_3", {"id": "k_3", "type": "k", "name": "electronic key 2", "noun": null, "adj": null, "desc": "This key is the key opens the door to the control room. Although it looks like a regular iron key, it is very special metal key! Not any other key can be like it. Make sure to keep it in safe place.", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["k_4", {"id": "k_4", "type": "k", "name": "digital key 2", "noun": null, "adj": null, "desc": "The digital key 2 is cold to the touch", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["k_5", {"id": "k_5", "type": "k", "name": "code key 2", "noun": null, "adj": null, "desc": "The code key 2 is cold to the touch", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["k_6", {"id": "k_6", "type": "k", "name": "hearty key", "noun": null, "adj": null, "desc": "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha...", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["txt_0", {"id": "txt_0", "type": "txt", "name": "Secret Codes Handbook", "noun": null, "adj": null, "desc": "If you open and check this book, here it is the description: 'This is a book of all secret codes to manage different actions and functions inside the International Space Station. These codes are pre-authorized by the main control room at Earth unless it is mentioned.' On the second page of the book, you can find this: 'To open the hatch door you should have both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening the hatch. Otherwise, your life is in fatal danger.'", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["cpu_0", {"id": "cpu_0", "type": "cpu", "name": "laptop", "noun": null, "adj": null, "desc": "This is your personal laptop which is attached to the surface of the table. You can do regular things with this, like check your emails, watch YouTube, Skype with family,etc.Since you are here, we recommend you to check your emails. New missions are posted through emails.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["o_0", {"id": "o_0", "type": "o", "name": "bunch of sticked papers", "noun": null, "adj": null, "desc": "The bunch of sticked papers is dirty.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["o_1", {"id": "o_1", "type": "o", "name": "lots of hanged notebooks", "noun": null, "adj": null, "desc": "The lots of hanged notebooks is modern.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["o_2", {"id": "o_2", "type": "o", "name": "attached bags for mechanical tools", "noun": null, "adj": null, "desc": "The attached bags for mechanical tools is dirty.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}]], "KB": {"logic": "# room\ntype r {\n predicates {\n at(P, r);\n at(t, r);\n\n north_of(r, r);\n west_of(r, r);\n\n north_of/d(r, d, r);\n west_of/d(r, d, r);\n\n free(r, r);\n\n south_of(r, r') = north_of(r', r);\n east_of(r, r') = west_of(r', r);\n\n south_of/d(r, d, r') = north_of/d(r', d, r);\n east_of/d(r, d, r') = west_of/d(r', d, r);\n }\n\n rules {\n go/north :: at(P, r) & $north_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/south :: at(P, r) & $south_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/east :: at(P, r) & $east_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/west :: at(P, r) & $west_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n }\n\n reverse_rules {\n go/north :: go/south;\n go/west :: go/east;\n }\n\n constraints {\n r1 :: at(P, r) & at(P, r') -> fail();\n r2 :: at(s, r) & at(s, r') -> fail();\n r3 :: at(c, r) & at(c, r') -> fail();\n\n # An exit direction can only lead to one room.\n nav_rr1 :: north_of(r, r') & north_of(r'', r') -> fail();\n nav_rr2 :: south_of(r, r') & south_of(r'', r') -> fail();\n nav_rr3 :: east_of(r, r') & east_of(r'', r') -> fail();\n nav_rr4 :: west_of(r, r') & west_of(r'', r') -> fail();\n\n # Two rooms can only be connected once with each other.\n nav_rrA :: north_of(r, r') & south_of(r, r') -> fail();\n nav_rrB :: north_of(r, r') & west_of(r, r') -> fail();\n nav_rrC :: north_of(r, r') & east_of(r, r') -> fail();\n nav_rrD :: south_of(r, r') & west_of(r, r') -> fail();\n nav_rrE :: south_of(r, r') & east_of(r, r') -> fail();\n nav_rrF :: west_of(r, r') & east_of(r, r') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"room\";\n }\n\n predicates {\n at(P, r) :: \"The player is in {r}\";\n at(t, r) :: \"The {t} is in {r}\";\n free(r, r') :: \"\"; # No equivalent in Inform7.\n\n north_of(r, r') :: \"The {r} is mapped north of {r'}\";\n south_of(r, r') :: \"The {r} is mapped south of {r'}\";\n east_of(r, r') :: \"The {r} is mapped east of {r'}\";\n west_of(r, r') :: \"The {r} is mapped west of {r'}\";\n\n north_of/d(r, d, r') :: \"South of {r} and north of {r'} is a door called {d}\";\n south_of/d(r, d, r') :: \"North of {r} and south of {r'} is a door called {d}\";\n east_of/d(r, d, r') :: \"West of {r} and east of {r'} is a door called {d}\";\n west_of/d(r, d, r') :: \"East of {r} and west of {r'} is a door called {d}\";\n }\n\n commands {\n go/north :: \"go north\" :: \"going north\";\n go/south :: \"go south\" :: \"going south\";\n go/east :: \"go east\" :: \"going east\";\n go/west :: \"go west\" :: \"going west\";\n }\n }\n}\n\n# CPU-Like\ntype cpu : o {\n predicates {\n #turned_on(cpu);\n #turned_off(cpu);\n\n read/e(cpu);\n unread/e(cpu);\n }\n\n rules {\n check/e :: $at(P, r) & $at(s, r) & $on(cpu, s) & unread/e(cpu) -> read/e(cpu);\n examine/cpu :: at(P, r) & $at(s, r) & $on(cpu, s) -> at(P, r); # Nothing changes.\n }\n\n reverse_rules {\n check/e :: check/e;\n examine/cpu :: examine/cpu;\n }\n\n constraints {\n #cpu1 :: turned_on(cpu) & turned_off(cpu) -> fail();\n cpu2 :: read/e(cpu) & unread/e(cpu) -> fail(); \n }\n\n inform7 {\n type {\n kind :: \"CPU-like\";\n definition :: \"A CPU-like can be either read or unread. A CPU-like is usually unread.\";\n #definition :: \"A CPU-like can be either turned on or turned off. A CPU-like is usually turned off. A CPU-like can be either read or unread. A CPU-like is usually unread.\";\n }\n\n predicates {\n #turned_on(cpu) :: \"The {cpu} is turned on\";\n #turned_off(cpu) :: \"The {cpu} is turned off\";\n\n read/e(cpu) :: \"The {cpu} is read\";\n unread/e(cpu) :: \"The {cpu} is unread\";\n }\n\n commands { \n check/e :: \"check email\" :: \"checking email\";\n examine/cpu :: \"examine {cpu}\" :: \"examining the {cpu}\";\n }\n\n code :: \"\"\"\n Understand the command \"check\" as something new. \n Understand \"check email\" as checking email. \n checking email is an action applying to nothing. \n\n Carry out checking email: \n if a CPU-like (called pc) is unread: \n if a random chance of 1 in 4 succeeds: \n Now the pc is read; \n Say \"Email: Your mission is started.\"; \n otherwise:\n Say \"No emails yet! Wait.\". \n \"\"\";\n }\n}\n\n# door\ntype d : t {\n predicates {\n open(d);\n closed(d);\n locked(d);\n\n link(r, d, r);\n }\n\n rules {\n lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d);\n unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d);\n\n open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r);\n close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d);\n \n lock/close/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & pushed(b) & open(d) & free(r, r') & free(r', r) -> unpushed(b) & locked(d);\n unlock/open/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r, r') & free(r', r);\n\n lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & pushed(b) & open(d) & free(r', r'') & free(r'', r') -> unpushed(b) & locked(d);\n unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r', r'') & free(r'', r');\n\n examine/d :: at(P, r) & $link(r, d, r') -> at(P, r); # Nothing changes.\n }\n\n reverse_rules {\n lock/d :: unlock/d;\n open/d :: close/d;\n lock/close/d/b :: unlock/open/d/b;\n lock/close/db :: unlock/open/db;\n }\n\n constraints {\n d1 :: open(d) & closed(d) -> fail();\n d2 :: open(d) & locked(d) -> fail();\n d3 :: closed(d) & locked(d) -> fail();\n\n # A door can't be used to link more than two rooms.\n link1 :: link(r, d, r') & link(r, d, r'') -> fail();\n link2 :: link(r, d, r') & link(r'', d, r''') -> fail();\n\n # There's already a door linking two rooms.\n link3 :: link(r, d, r') & link(r, d', r') -> fail();\n\n # There cannot be more than four doors in a room.\n too_many_doors :: link(r, d1: d, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n\n # There cannot be more than four doors in a room.\n dr1 :: free(r, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr2 :: free(r, r1: r) & free(r, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr3 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr4 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & free(r, r4: r) & link(r, d5: d, r5: r) -> fail();\n\n free1 :: link(r, d, r') & free(r, r') & closed(d) -> fail();\n free2 :: link(r, d, r') & free(r, r') & locked(d) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"door\";\n definition :: \"door is openable and lockable.\";\n }\n\n predicates {\n open(d) :: \"The {d} is open\";\n closed(d) :: \"The {d} is closed\";\n locked(d) :: \"The {d} is locked\";\n \n link(r, d, r') :: \"\"; # No equivalent in Inform7.\n }\n\n commands {\n open/d :: \"open {d}\" :: \"opening {d}\";\n close/d :: \"close {d}\" :: \"closing {d}\";\n\n unlock/d :: \"unlock {d} with {k}\" :: \"unlocking {d} with the {k}\";\n lock/d :: \"lock {d} with {k}\" :: \"locking {d} with the {k}\";\n\n lock/close/d/b :: \"push {b}\" :: \"_pushing the {b}\";\n unlock/open/d/b :: \"push {b}\" :: \"_pushing the {b}\";\n\n lock/close/db :: \"push {b}\" :: \"_pushing the {b}\";\n unlock/open/db :: \"push {b}\" :: \"_pushing the {b}\";\n\n examine/d :: \"examine {d}\" :: \"examining the {d}\";\n }\n }\n}\n\n# Inventory\ntype I {\n predicates {\n in(o, I);\n }\n\n rules {\n inventory :: at(P, r) -> at(P, r); # Nothing changes.\n\n take :: $at(P, r) & at(o, r) -> in(o, I);\n \n take/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, c) -> in(o, I);\n insert/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, I) -> in(o, c);\n\n take/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, c) -> in(o, I);\n insert/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, I) -> in(o, c);\n\n take/s :: $at(P, r) & $at(s, r) & on(o, s) -> in(o, I);\n hook :: $at(P, r) & $at(s, r) & in(o, I) -> on(o, s);\n\n examine/I :: in(o, I) -> in(o, I); # Nothing changes.\n examine/s :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes.\n examine/c :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes.\n examine/or :: at(P, r) & $in(o, r) -> at(P, r); # Nothing changes.\n examine/oc :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes.\n examine/os :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes.\n }\n\n reverse_rules { \n inventory :: inventory;\n\n take/c :: insert/c;\n take/s :: hook;\n take/cs :: insert/cs;\n\n examine/I :: examine/I;\n examine/s :: examine/s;\n examine/c :: examine/c;\n examine/or :: examine/or;\n examine/oc :: examine/oc;\n examine/os :: examine/os;\n }\n\n inform7 {\n predicates {\n in(o, I) :: \"The player carries the {o}\";\n }\n\n commands {\n\n inventory :: \"inventory\" :: \"taking inventory\";\n\n take :: \"take {o}\" :: \"taking the {o}\"; \n\n take/c :: \"take {o} from {c}\" :: \"removing the {o} from the {c}\";\n insert/c :: \"insert {o} into {c}\" :: \"inserting the {o} into the {c}\";\n\n take/cs :: \"take {o} from {c}\" :: \"removing the {o} from the {c}\";\n insert/cs :: \"insert {o} into {c}\" :: \"inserting the {o} into the {c}\";\n\n take/s :: \"take {o} from {s}\" :: \"removing the {o} from the {s}\";\n hook :: \"hook {o} on {s}\" :: \"hooking the {o} on the {s}\";\n\n examine/I :: \"examine {o}\" :: \"examining the {o}\";\n examine/s :: \"examine {o}\" :: \"examining the {o}\";\n examine/c :: \"examine {o}\" :: \"examining the {o}\";\n examine/or :: \"examine {o}\" :: \"examining the {o}\";\n examine/oc :: \"examine {o}\" :: \"examining the {o}\";\n examine/os :: \"examine {o}\" :: \"examining the {o}\";\n }\n }\n}\n\n# food\ntype f : o {\n predicates {\n edible(f);\n eaten(f);\n }\n\n rules {\n eat :: in(f, I) -> eaten(f);\n }\n\n constraints {\n eaten1 :: eaten(f) & in(f, I) -> fail();\n eaten2 :: eaten(f) & in(f, c) -> fail();\n eaten3 :: eaten(f) & on(f, s) -> fail();\n eaten4 :: eaten(f) & at(f, r) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"food\";\n definition :: \"food is edible.\";\n }\n\n predicates {\n edible(f) :: \"The {f} is edible\";\n eaten(f) :: \"The {f} is nowhere\";\n }\n\n commands {\n eat :: \"eat {f}\" :: \"eating the {f}\";\n }\n }\n}\n\n# supporter\ntype s : t {\n predicates {\n on(o, s);\n on(c, s);\n }\n\n inform7 {\n type {\n kind :: \"supporter\";\n definition :: \"supporters are fixed in place.\";\n }\n\n predicates {\n on(o, s) :: \"The {o} is on the {s}\";\n on(c, s) :: \"The {c} is on the {s}\"; \n }\n }\n}\n\n# push button\ntype b : t {\n predicates {\n pushed(b);\n unpushed(b);\n\n pair(b, d);\n\n in(b, c);\n }\n\n inform7 {\n type {\n kind :: \"button-like\";\n definition :: \"A button-like can be either pushed or unpushed. A button-like is usually unpushed. A button-like is fixed in place.\";\n }\n\n predicates {\n pushed(b) :: \"The {b} is pushed\";\n unpushed(b) :: \"The {b} is unpushed\";\n\n pair(b, d) :: \"The {b} pairs to {d}\";\n\n in(b, c) :: \"The {b} is in the {c}\";\n }\n\n code :: \"\"\"\n connectivity relates a button-like to a door. The verb to pair to means the connectivity relation. \n\n Understand the command \"push\" as something new. \n Understand \"push [something]\" as _pushing. \n _pushing is an action applying to a thing. \n\n Carry out _pushing: \n if a button-like (called pb) pairs to door (called dr): \n if dr is locked:\n Now the pb is pushed; \n Now dr is unlocked; \n Now dr is open; \n otherwise:\n Now the pb is unpushed; \n Now dr is locked.\n\n Report _pushing: \n if a button-like (called pb) pairs to door (called dr): \n if dr is unlocked:\n say \"You push the [pb], and [dr] is now open.\";\n otherwise:\n say \"You push the [pb] again, and [dr] is now locked.\" \n \"\"\";\n }\n}\n\n# container\ntype c : t {\n predicates {\n open(c);\n closed(c);\n locked(c);\n\n in(o, c); \n }\n\n rules {\n lock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & closed(c) -> locked(c);\n unlock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & locked(c) -> closed(c);\n\n open/c :: $at(P, r) & $at(c, r) & closed(c) -> open(c); \n close/c :: $at(P, r) & $at(c, r) & open(c) -> closed(c);\n\n lock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & closed(c) -> locked(c);\n unlock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & locked(c) -> closed(c);\n\n open/bx :: $at(P, r) & $at(s, r) & $on(c, s) & closed(c) -> open(c);\n close/bx :: $at(P, r) & $at(s, r) & $on(c, s) & open(c) -> closed(c);\n }\n\n reverse_rules {\n lock/c :: unlock/c;\n open/c :: close/c;\n lock/bx :: unlock/bx;\n open/bx :: close/bx;\n }\n\n constraints {\n c1 :: open(c) & closed(c) -> fail();\n c2 :: open(c) & locked(c) -> fail();\n c3 :: closed(c) & locked(c) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"container\";\n definition :: \"containers are openable, lockable and fixed in place. containers are usually closed.\";\n }\n\n predicates {\n open(c) :: \"The {c} is open\";\n closed(c) :: \"The {c} is closed\";\n locked(c) :: \"The {c} is locked\";\n\n in(o, c) :: \"The {o} is in the {c}\";\n }\n\n commands {\n open/c :: \"open {c}\" :: \"opening the {c}\";\n close/c :: \"close {c}\" :: \"closing the {c}\";\n\n lock/c :: \"lock {c} with {k}\" :: \"locking the {c} with the {k}\";\n unlock/c :: \"unlock {c} with {k}\" :: \"unlocking the {c} with the {k}\";\n\n open/bx :: \"open {c}\" :: \"opening the {c}\";\n close/bx :: \"close {c}\" :: \"closing the {c}\";\n\n lock/bx :: \"lock {c} with {k}\" :: \"locking the {c} with the {k}\";\n unlock/bx :: \"unlock {c} with {k}\" :: \"unlocking the {c} with the {k}\";\n }\n }\n}\n\n# key\ntype k : o {\n predicates {\n match(k, c);\n match(k, d);\n }\n\n constraints {\n k1 :: match(k, c) & match(k', c) -> fail();\n k2 :: match(k, c) & match(k, c') -> fail();\n k3 :: match(k, d) & match(k', d) -> fail();\n k4 :: match(k, d) & match(k, d') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"key\";\n }\n\n predicates {\n match(k, c) :: \"The matching key of the {c} is the {k}\";\n match(k, d) :: \"The matching key of the {d} is the {k}\";\n }\n }\n}\n\n# cloth\ntype l : o {\n predicates { \n worn(l);\n\t takenoff(l);\n clean(l);\n\t dirty(l);\n \t}\n\n rules {\n wear/l :: in(l, I) -> worn(l);\n takeoff/l :: worn(l) -> in(l, I);\n\n wash/l :: $at(l,r) & dirty(l) -> clean(l);\n dirty/l :: $worn(l,P) & clean(l) -> dirty(l);\n \t}\n\n reverse_rules {\n wear/l :: takeoff/l;\n wash/l :: dirty/l;\n \t}\n\n constraints {\n l1 :: clean(l) & dirty(l) -> fail();\n l2 :: worn(l) & takenoff(l) -> fail();\n \t}\n\n inform7 {\n type {\n kind :: \"cloth-like\";\n definition :: \"cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean. cloth-like can be either worn in or worn out. cloth-like are usually worn out.\"; \n }\n\n predicates { \n\t #worn(l) :: \"The {P} wears the {l}.\";\n\t #takenoff(l) :: \"The {P} does not wear the {l}.\";\n worn(l) :: \"The {l} is worn in\";\n\t takenoff(l) :: \"The {l} is worn out\"; \n clean(l) :: \"The {l} is clean\";\n\t dirty(l) :: \"The {l} is dirty\"; \n }\n\n commands {\n wear/l :: \"wear {l}\" :: \"wearing the {l}\";\n takeoff/l :: \"take off {l}\" :: \"taking off the {l}\";\n\n clean/l :: \"clean {l}\" :: \"cleaning the {l}\";\n\t dirty/l :: \"dirty {l}\" :: \"dirtying the {l}\";\n }\n\n code :: \"\"\"\n Understand the command \"wear\" as something new. \n Understand \"wear [something]\" as _wearing. \n _wearing is an action applying to a thing. \n\n Carry out _wearing: \n if a cloth-like (called cl) is worn out: \n Now the cl is worn in; \n otherwise:\n Say \"You have this cloth on.\". \n \"\"\";\n }\n}\n\n# text-Like\ntype txt : o {\n predicates {\n read/t(txt);\n unread/t(txt);\n }\n\n rules {\n read/book :: $at(P, r) & $in(txt, I) & unread/t(txt) -> read/t(txt);\n examine/book :: at(P, r) & $in(txt, I) -> at(P, r); # Nothing changes.\n }\n \n reverse_rules {\n examine/book :: examine/book;\n }\n \n constraints {\n txt1 :: read/t(txt) & unread/t(txt) -> fail(); \n }\n\n inform7 {\n type {\n kind :: \"text-like\";\n definition :: \"A text-like can be either read or unread. A text-like is usually unread.\";\n }\n\n predicates {\n read/t(txt) :: \"The {txt} is read\";\n unread/t(txt) :: \"The {txt} is unread\";\n }\n\n commands { \n read/book :: \"read the book\" :: \"reading the book\";\n examine/book :: \"examine {txt}\" :: \"examining the {txt}\";\n }\n \n code :: \"\"\"\n Understand the command \"read\" as something new. \n Understand \"read [something]\" as _reading. \n _reading is an action applying to a thing. \n \n Carry out _reading: \n if a text-like (called tx) is unread: \n Now the tx is read; \n \"\"\";\n }\n}\n\n# object\ntype o : t {\n constraints {\n obj1 :: in(o, I) & in(o, c) -> fail();\n obj2 :: in(o, I) & on(o, s) -> fail();\n obj3 :: in(o, I) & at(o, r) -> fail();\n obj4 :: in(o, c) & on(o, s) -> fail();\n obj5 :: in(o, c) & at(o, r) -> fail();\n obj6 :: on(o, s) & at(o, r) -> fail();\n obj7 :: at(o, r) & at(o, r') -> fail();\n obj8 :: in(o, c) & in(o, c') -> fail();\n obj9 :: on(o, s) & on(o, s') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"object-like\";\n definition :: \"object-like is portable.\";\n }\n }\n}\n\n# Player\ntype P {\n rules {\n look :: at(P, r) -> at(P, r); # Nothing changes.\n\t #wear/cloth :: $at(P,r) & at(l,r) -> on(l,P);\n }\n\n inform7 {\n commands {\n look :: \"look\" :: \"looking\";\n\t #wear/cloth :: \"wear cloth\" :: \"wearing the cloth\";\n }\n }\n}\n\n# thing\ntype t {\n rules {\n examine/t :: at(P, r) & $at(t, r) -> at(P, r);\n }\n\n reverse_rules {\n examine/t :: examine/t;\n }\n\n inform7 { \n type {\n kind :: \"thing\";\n }\n\n commands {\n examine/t :: \"examine {t}\" :: \"examining the {t}\";\n }\n\n code :: \"\"\"\n Understand \"tw-set seed [a number]\" as updating the new seed. \n Updating the new seed is an action applying to a number.\n Carry out updating the new seed:\n seed the random-number generator with the number understood.\n \"\"\";\n }\n}\n\n", "text_grammars_path": "/home/v-hapurm/Documents/Haki_Git/TextWorld/textworld/challenges/spaceship/textworld_data/text_grammars"}, "metadata": {"desc": "Spaceship", "mode": "medium", "seeds": {"map": 59225, "objects": 31964, "quest": 43730, "grammar": 657, "agent": 44415}, "world_size": 8, "uuid": "tw-spaceship-Medium"}, "objective": "", "extras": {}} \ No newline at end of file +{"version": 1, "world": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_0", "type": "c"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_1", "type": "c"}, {"name": "r_1", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_5", "type": "c"}, {"name": "r_4", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_6", "type": "c"}, {"name": "r_5", "type": "r"}]}, {"name": "at", "arguments": [{"name": "l_0", "type": "l"}, {"name": "r_6", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_0", "type": "s"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_1", "type": "s"}, {"name": "r_2", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_2", "type": "s"}, {"name": "r_2", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_3", "type": "s"}, {"name": "r_3", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_4", "type": "s"}, {"name": "r_3", "type": "r"}]}, {"name": "clean", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "closed", "arguments": [{"name": "c_2", "type": "c"}]}, {"name": "closed", "arguments": [{"name": "c_5", "type": "c"}]}, {"name": "closed", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "east_of", "arguments": [{"name": "r_2", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "east_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_5", "type": "r"}]}, {"name": "east_of", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_2", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_2", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "in", "arguments": [{"name": "b_0", "type": "b"}, {"name": "c_4", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "c_1", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_1", "type": "k"}, {"name": "c_2", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "c_3", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_3", "type": "k"}, {"name": "c_5", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_4", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_6", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "in", "arguments": [{"name": "txt_0", "type": "txt"}, {"name": "c_6", "type": "c"}]}, {"name": "link", "arguments": [{"name": "r_0", "type": "r"}, {"name": "d_0", "type": "d"}, {"name": "r_1", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_1", "type": "r"}, {"name": "d_0", "type": "d"}, {"name": "r_0", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_1", "type": "r"}, {"name": "d_1", "type": "d"}, {"name": "r_3", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_3", "type": "r"}, {"name": "d_1", "type": "d"}, {"name": "r_1", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_3", "type": "r"}, {"name": "d_2", "type": "d"}, {"name": "r_5", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_4", "type": "r"}, {"name": "d_3", "type": "d"}, {"name": "r_6", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_5", "type": "r"}, {"name": "d_2", "type": "d"}, {"name": "r_3", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_6", "type": "r"}, {"name": "d_3", "type": "d"}, {"name": "r_4", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_6", "type": "r"}, {"name": "d_4", "type": "d"}, {"name": "r_7", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_7", "type": "r"}, {"name": "d_4", "type": "d"}, {"name": "r_6", "type": "r"}]}, {"name": "locked", "arguments": [{"name": "c_1", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_3", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_4", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_6", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "d_1", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_2", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_3", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_4", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_0", "type": "k"}, {"name": "d_1", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_1", "type": "k"}, {"name": "c_1", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_2", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_3", "type": "k"}, {"name": "d_2", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_4", "type": "k"}, {"name": "c_4", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_5", "type": "k"}, {"name": "d_3", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_6", "type": "k"}, {"name": "c_3", "type": "c"}]}, {"name": "north_of", "arguments": [{"name": "r_0", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_6", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_6", "type": "r"}, {"name": "r_7", "type": "r"}]}, {"name": "on", "arguments": [{"name": "c_2", "type": "c"}, {"name": "s_1", "type": "s"}]}, {"name": "on", "arguments": [{"name": "c_3", "type": "c"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "c_4", "type": "c"}, {"name": "s_4", "type": "s"}]}, {"name": "on", "arguments": [{"name": "cpu_0", "type": "cpu"}, {"name": "s_0", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_0", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_1", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_2", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "open", "arguments": [{"name": "c_0", "type": "c"}]}, {"name": "pair", "arguments": [{"name": "b_0", "type": "b"}, {"name": "d_4", "type": "d"}]}, {"name": "south_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_0", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_6", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_7", "type": "r"}, {"name": "r_6", "type": "r"}]}, {"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "unpushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "unread/t", "arguments": [{"name": "txt_0", "type": "txt"}]}, {"name": "west_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_2", "type": "r"}]}, {"name": "west_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "west_of", "arguments": [{"name": "r_5", "type": "r"}, {"name": "r_3", "type": "r"}]}], "grammar": {"theme": "spaceship", "names_to_exclude": [], "include_adj": false, "blend_descriptions": false, "ambiguous_instructions": false, "only_last_action": false, "blend_instructions": false, "allowed_variables_numbering": false, "unique_expansion": false}, "quests": [{"desc": "", "reward": 0, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}], "postconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "read/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_1", "type": "r"}]}], "postconditions": [{"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "read/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_1", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "cpu_0", "type": "cpu"}, {"name": "d_0", "type": "d"}, {"name": "r_0", "type": "r"}, {"name": "r_1", "type": "r"}]}]}}], "fail_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_1", "type": "r"}]}], "postconditions": [{"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_1", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "cpu_0", "type": "cpu"}, {"name": "d_0", "type": "d"}, {"name": "r_0", "type": "r"}, {"name": "r_1", "type": "r"}]}]}}]}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_0", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_2", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}], "postconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "event", "arguments": [{"name": "b_0", "type": "b"}, {"name": "l_0", "type": "l"}]}]}}], "fail_events": []}, {"desc": "", "reward": 0, "commands": [], "win_events": [], "fail_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}], "postconditions": [{"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "event", "arguments": [{"name": "b_0", "type": "b"}, {"name": "l_0", "type": "l"}]}]}}]}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_5", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "read/t", "arguments": [{"name": "txt_0", "type": "txt"}]}], "postconditions": [{"name": "read/t", "arguments": [{"name": "txt_0", "type": "txt"}]}, {"name": "event", "arguments": [{"name": "txt_0", "type": "txt"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}], "postconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "event", "arguments": [{"name": "l_0", "type": "l"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}], "postconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}]}}], "fail_events": []}], "infos": [["P", {"id": "P", "type": "P", "name": null, "noun": null, "adj": null, "desc": null, "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["I", {"id": "I", "type": "I", "name": null, "noun": null, "adj": null, "desc": null, "room_type": null, "definite": null, "indefinite": null, "synonyms": null}], ["r_2", {"id": "r_2", "type": "r", "name": "European Module", "noun": null, "adj": null, "desc": "This room belongs to European scientists. Isn't it cool? what do they research? well, we can explore it later... For now, there is a key code here. This code opens the box in the next room and consequently takes you to the next stage. So, explore the table to find the key.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["r_1", {"id": "r_1", "type": "r", "name": "US LAB", "noun": null, "adj": null, "desc": "This is where Americans do their research on Space. In addition to all computers and lab gadgets, you can find a couple of objects here which are useful during our game. Let's explore the room.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_3", {"id": "r_3", "type": "r", "name": "Russian Module", "noun": null, "adj": null, "desc": "The Russian module is a typical space lab that you can expect, filled with a lot of processing machines, test equipments and space drive cars, in fact for repair and test. Since it is located at the center of International Space Station, it is also important room for everyone. There are many other objects here and there belongs to other astronauts, probably that's why here looks a bit messy. There are some stuffs here you should pick, obviously if you can find them among all this mess.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["r_5", {"id": "r_5", "type": "r", "name": "Control Module", "noun": null, "adj": null, "desc": "This is the heart of this spaceship! Wow ... look around, all the monitors and panels. It is like you can control everything from here; more interestingly, you can communicate with people on the Earth. There are also super important objects kept in this room. Let's find them.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["r_4", {"id": "r_4", "type": "r", "name": "Lounge Module", "noun": null, "adj": null, "desc": "This lounge is very quiet room with a big round window to the space. Wow, you can look to our beloved Earth from this window. This room is the place that you can stay here for hours and just get relax. This room also contains some other stuff, let's explore what they are ...", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["r_0", {"id": "r_0", "type": "r", "name": "Sleep Station", "noun": null, "adj": null, "desc": "This is a typical bedroom in spaceship; here, it is called sleep station. It is small but comfortable to take a good rest after a day full of missions. However, today your mission will start from here. Wait to be notified by a message. So, you should find that message first. BTW, don't forget that when the Hatch door is open, you should already have worn your specially-designed outfit to be able to enter and stay at Hatch area; otherwise you'll die! Yes! Living in space is tough.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["r_6", {"id": "r_6", "type": "r", "name": "Hatch", "noun": null, "adj": null, "desc": "This area is like the entrance to the spaceship, so like home entrance with outer and inner doors and a place that outfits are hooked. There are only two important differences: first, if the outer door is open and you don't have outfit on you, you are dead!! No joke here! So make sure that you open the door after wearing those cloths. Second, the door nob to open the door is not neither on the door nor in this room. You should open the external door from Russian Module! woooh so much of safety concerns, yeah?!", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_7", {"id": "r_7", "type": "r", "name": "Outside", "noun": null, "adj": null, "desc": "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means that you have the special outfit on you and you passed the medium level of the game! Congrats!", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["d_0", {"id": "d_0", "type": "d", "name": "door A", "noun": null, "adj": null, "desc": "The door A looks sturdy. [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["d_1", {"id": "d_1", "type": "d", "name": "door B", "noun": null, "adj": null, "desc": "it's a manageable door B [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["d_2", {"id": "d_2", "type": "d", "name": "door C", "noun": null, "adj": null, "desc": "The door C looks sturdy. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["d_3", {"id": "d_3", "type": "d", "name": "door D", "noun": null, "adj": null, "desc": "it is what it is, a door D [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["d_4", {"id": "d_4", "type": "d", "name": "door E", "noun": null, "adj": null, "desc": "The door E looks sturdy. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["c_0", {"id": "c_0", "type": "c", "name": "sleeping bag", "noun": null, "adj": null, "desc": "cool! You can sleep in a comfy bag.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["c_1", {"id": "c_1", "type": "c", "name": "box A", "noun": null, "adj": null, "desc": "This a regular box, keeps the electronic key to open door C. But it is locked. The lock looks like a keypad, means that the key is in fact just a code! So, ... let's search around to find its key.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["c_5", {"id": "c_5", "type": "c", "name": "box E", "noun": null, "adj": null, "desc": "This box is actually a wall-mounted bag and you can put an object into it. Since we have no gravity in the space, you can't just simply leave the object in the room. The object should be hooked or inserted into a container like this bag. Well, know we know what it is!", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["c_6", {"id": "c_6", "type": "c", "name": "secured box", "noun": null, "adj": null, "desc": "This box is secured very much, simple box with a complex, strange keypad to enter the code! So ... it should contain extremely important items in it. Isn't it the thing you are looking for?!", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["l_0", {"id": "l_0", "type": "l", "name": "outfit", "noun": null, "adj": null, "desc": "", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["s_0", {"id": "s_0", "type": "s", "name": "vertical desk", "noun": null, "adj": null, "desc": "This is not a regular table. The surface is installed vertically and your objects are attached or hooked to it, why? Come on! we are in space, there is no gravity here.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["s_1", {"id": "s_1", "type": "s", "name": "table", "noun": null, "adj": null, "desc": "This is a simple table located in the middle of the room. Let's take a look at it...", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["s_2", {"id": "s_2", "type": "s", "name": "chair", "noun": null, "adj": null, "desc": "this is a dark-gray chair which is developed to be used in space.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["s_3", {"id": "s_3", "type": "s", "name": "metal table", "noun": null, "adj": null, "desc": "This is a big metal table, a messy one, there are many things on it, it is difficult to find what you want. However, there is just one item which is important for you. Try to find that item.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["s_4", {"id": "s_4", "type": "s", "name": "wall-mounted surface", "noun": null, "adj": null, "desc": "This is a wall-mounted surface which different instruments are installed on this. These instruments are basically control various modules and doors in the shuttle.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["c_2", {"id": "c_2", "type": "c", "name": "box B", "noun": null, "adj": null, "desc": "This a regular box, keeps the key to open box A.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["b_0", {"id": "b_0", "type": "b", "name": "exit push button", "noun": null, "adj": null, "desc": "This push button is a key-like object which opens door A.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["c_4", {"id": "c_4", "type": "c", "name": "exit box", "noun": null, "adj": null, "desc": "The most important box here, which is in fact locked! sounds it carries important item... So, let's find its key to open it.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_0", {"id": "k_0", "type": "k", "name": "electronic key 1", "noun": null, "adj": null, "desc": "This key is a card key which opens door C.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["k_1", {"id": "k_1", "type": "k", "name": "code key 1", "noun": null, "adj": null, "desc": "This key is in fact a digital code which opens the box in the US Lab area. The code, in fact, is written on a piece of paper.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["k_2", {"id": "k_2", "type": "k", "name": "digital key 1", "noun": null, "adj": null, "desc": "This key is an important key in this craft. If you want to leave the spaceship, you definitely need this key.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["c_3", {"id": "c_3", "type": "c", "name": "box C", "noun": null, "adj": null, "desc": "This box is locked! sounds it carries important item... So, let's find its key to open it. Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this somewhere before.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_3", {"id": "k_3", "type": "k", "name": "electronic key 2", "noun": null, "adj": null, "desc": "This key is the key opens the door to the control room. Although it looks like a regular iron key, it is very special metal key! Not any other key can be like it. Make sure to keep it in safe place.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["k_4", {"id": "k_4", "type": "k", "name": "digital key 2", "noun": null, "adj": null, "desc": "The digital key 2 is cold to the touch", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_5", {"id": "k_5", "type": "k", "name": "code key 2", "noun": null, "adj": null, "desc": "The metal of the code key 2 is rusty.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_6", {"id": "k_6", "type": "k", "name": "hearty key", "noun": null, "adj": null, "desc": "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha...", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["txt_0", {"id": "txt_0", "type": "txt", "name": "Secret Codes Handbook", "noun": null, "adj": null, "desc": "If you open and check this book, here it is the description: 'This is a book of all secret codes to manage different actions and functions inside the International Space Station. These codes are pre-authorized by the main control room at Earth unless it is mentioned.' On the second page of the book, you can find this: 'To open the hatch door you should have both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening the hatch. Otherwise, your life is in fatal danger.'", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["cpu_0", {"id": "cpu_0", "type": "cpu", "name": "laptop", "noun": null, "adj": null, "desc": "This is your personal laptop which is attached to the surface of the table. You can do regular things with this, like check your emails, watch YouTube, Skype with family,etc.Since you are here, we recommend you to check your emails. New missions are posted through emails.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["o_0", {"id": "o_0", "type": "o", "name": "bunch of sticked papers", "noun": null, "adj": null, "desc": "The bunch of sticked papers appears to be to fit in here", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["o_1", {"id": "o_1", "type": "o", "name": "lots of hanged notebooks", "noun": null, "adj": null, "desc": "The lots of hanged notebooks seems well matched to everything else here", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["o_2", {"id": "o_2", "type": "o", "name": "attached bags for mechanical tools", "noun": null, "adj": null, "desc": "The attached bags for mechanical tools is clean.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}]], "KB": {"logic": "# room\ntype r {\n predicates {\n at(P, r);\n at(t, r);\n\n north_of(r, r);\n west_of(r, r);\n\n north_of/d(r, d, r);\n west_of/d(r, d, r);\n\n free(r, r);\n\n south_of(r, r') = north_of(r', r);\n east_of(r, r') = west_of(r', r);\n\n south_of/d(r, d, r') = north_of/d(r', d, r);\n east_of/d(r, d, r') = west_of/d(r', d, r);\n }\n\n rules {\n go/north :: at(P, r) & $north_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/south :: at(P, r) & $south_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/east :: at(P, r) & $east_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/west :: at(P, r) & $west_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n }\n\n reverse_rules {\n go/north :: go/south;\n go/west :: go/east;\n }\n\n constraints {\n r1 :: at(P, r) & at(P, r') -> fail();\n r2 :: at(s, r) & at(s, r') -> fail();\n r3 :: at(c, r) & at(c, r') -> fail();\n\n # An exit direction can only lead to one room.\n nav_rr1 :: north_of(r, r') & north_of(r'', r') -> fail();\n nav_rr2 :: south_of(r, r') & south_of(r'', r') -> fail();\n nav_rr3 :: east_of(r, r') & east_of(r'', r') -> fail();\n nav_rr4 :: west_of(r, r') & west_of(r'', r') -> fail();\n\n # Two rooms can only be connected once with each other.\n nav_rrA :: north_of(r, r') & south_of(r, r') -> fail();\n nav_rrB :: north_of(r, r') & west_of(r, r') -> fail();\n nav_rrC :: north_of(r, r') & east_of(r, r') -> fail();\n nav_rrD :: south_of(r, r') & west_of(r, r') -> fail();\n nav_rrE :: south_of(r, r') & east_of(r, r') -> fail();\n nav_rrF :: west_of(r, r') & east_of(r, r') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"room\";\n }\n\n predicates {\n at(P, r) :: \"The player is in {r}\";\n at(t, r) :: \"The {t} is in {r}\";\n free(r, r') :: \"\"; # No equivalent in Inform7.\n\n north_of(r, r') :: \"The {r} is mapped north of {r'}\";\n south_of(r, r') :: \"The {r} is mapped south of {r'}\";\n east_of(r, r') :: \"The {r} is mapped east of {r'}\";\n west_of(r, r') :: \"The {r} is mapped west of {r'}\";\n\n north_of/d(r, d, r') :: \"South of {r} and north of {r'} is a door called {d}\";\n south_of/d(r, d, r') :: \"North of {r} and south of {r'} is a door called {d}\";\n east_of/d(r, d, r') :: \"West of {r} and east of {r'} is a door called {d}\";\n west_of/d(r, d, r') :: \"East of {r} and west of {r'} is a door called {d}\";\n }\n\n commands {\n go/north :: \"go north\" :: \"going north\";\n go/south :: \"go south\" :: \"going south\";\n go/east :: \"go east\" :: \"going east\";\n go/west :: \"go west\" :: \"going west\";\n }\n }\n}\n\n# CPU-Like\ntype cpu : o {\n predicates {\n read/e(cpu);\n unread/e(cpu);\n }\n\n rules {\n check/e :: $at(P, r) & $at(s, r) & $on(cpu, s) & unread/e(cpu) -> read/e(cpu);\n }\n\n constraints {\n cpu2 :: read/e(cpu) & unread/e(cpu) -> fail(); \n }\n\n inform7 {\n type {\n kind :: \"CPU-like\";\n definition :: \"A CPU-like can be either read or unread. A CPU-like is usually unread.\";\n }\n\n predicates {\n read/e(cpu) :: \"The {cpu} is read\";\n unread/e(cpu) :: \"The {cpu} is unread\";\n }\n\n commands { \n check/e :: \"check laptop for email\" :: \"checking email\";\n }\n\n code :: \"\"\"\n Understand the command \"check\" as something new. \n Understand \"check laptop for email\" as checking email. \n checking email is an action applying to nothing. \n\n Before checking email:\n if a CPU-like (called pc) is read:\n Say \"You've already read all today's emails.\";\n rule fails;\n otherwise:\n if a random chance of 3 in 4 succeeds:\n Say \"No emails yet! Wait.\";\n rule fails.\n\n Carry out checking email: \n if a CPU-like (called pc) is unread: \n Say \"Email: Your mission is started. You should go and check outside of the spaceship.\";\n Now the pc is read.\n \"\"\";\n }\n}\n\n# door\ntype d : t {\n predicates {\n open(d);\n closed(d);\n locked(d);\n\n link(r, d, r);\n }\n\n rules {\n lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d);\n unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d);\n\n open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r);\n close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d);\n \n lock/close/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & pushed(b) & open(d) & free(r, r') & free(r', r) -> unpushed(b) & locked(d);\n unlock/open/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r, r') & free(r', r);\n\n lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & pushed(b) & open(d) & free(r', r'') & free(r'', r') -> unpushed(b) & locked(d);\n unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r', r'') & free(r'', r');\n\n examine/d :: at(P, r) & $link(r, d, r') -> at(P, r); # Nothing changes.\n }\n\n reverse_rules {\n lock/d :: unlock/d;\n open/d :: close/d;\n lock/close/d/b :: unlock/open/d/b;\n lock/close/db :: unlock/open/db;\n }\n\n constraints {\n d1 :: open(d) & closed(d) -> fail();\n d2 :: open(d) & locked(d) -> fail();\n d3 :: closed(d) & locked(d) -> fail();\n\n # A door can't be used to link more than two rooms.\n link1 :: link(r, d, r') & link(r, d, r'') -> fail();\n link2 :: link(r, d, r') & link(r'', d, r''') -> fail();\n\n # There's already a door linking two rooms.\n link3 :: link(r, d, r') & link(r, d', r') -> fail();\n\n # There cannot be more than four doors in a room.\n too_many_doors :: link(r, d1: d, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n\n # There cannot be more than four doors in a room.\n dr1 :: free(r, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr2 :: free(r, r1: r) & free(r, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr3 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr4 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & free(r, r4: r) & link(r, d5: d, r5: r) -> fail();\n\n free1 :: link(r, d, r') & free(r, r') & closed(d) -> fail();\n free2 :: link(r, d, r') & free(r, r') & locked(d) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"door\";\n definition :: \"door is openable and lockable.\";\n }\n\n predicates {\n open(d) :: \"The {d} is open\";\n closed(d) :: \"The {d} is closed\";\n locked(d) :: \"The {d} is locked\";\n \n link(r, d, r') :: \"\"; # No equivalent in Inform7.\n }\n\n commands {\n open/d :: \"open {d}\" :: \"opening {d}\";\n close/d :: \"close {d}\" :: \"closing {d}\";\n\n unlock/d :: \"unlock {d} with {k}\" :: \"unlocking {d} with the {k}\";\n lock/d :: \"lock {d} with {k}\" :: \"locking {d} with the {k}\";\n\n lock/close/d/b :: \"push {b}\" :: \"_pushing the {b}\";\n unlock/open/d/b :: \"push {b}\" :: \"_pushing the {b}\";\n\n lock/close/db :: \"push {b}\" :: \"_pushing the {b}\";\n unlock/open/db :: \"push {b}\" :: \"_pushing the {b}\";\n\n examine/d :: \"examine {d}\" :: \"examining the {d}\";\n }\n }\n}\n\n# Inventory\ntype I {\n predicates {\n in(o, I);\n }\n\n rules {\n inventory :: at(P, r) -> at(P, r); # Nothing changes.\n\n take :: $at(P, r) & at(o, r) -> in(o, I);\n \n take/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, c) -> in(o, I);\n insert/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, I) -> in(o, c);\n\n take/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, c) -> in(o, I);\n insert/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, I) -> in(o, c);\n\n take/s :: $at(P, r) & $at(s, r) & on(o, s) -> in(o, I);\n hook :: $at(P, r) & $at(s, r) & in(o, I) -> on(o, s);\n\n examine/I :: in(o, I) -> in(o, I); # Nothing changes.\n examine/s :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes.\n examine/c :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes.\n examine/or :: at(P, r) & $in(o, r) -> at(P, r); # Nothing changes.\n examine/oc :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes.\n examine/os :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes.\n }\n\n reverse_rules { \n inventory :: inventory;\n\n take/c :: insert/c;\n take/s :: hook;\n take/cs :: insert/cs;\n\n examine/I :: examine/I;\n examine/s :: examine/s;\n examine/c :: examine/c;\n examine/or :: examine/or;\n examine/oc :: examine/oc;\n examine/os :: examine/os;\n }\n\n inform7 {\n predicates {\n in(o, I) :: \"The player carries the {o}\";\n }\n\n commands {\n\n inventory :: \"inventory\" :: \"taking inventory\";\n\n take :: \"take {o}\" :: \"taking the {o}\"; \n\n take/c :: \"take {o} from {c}\" :: \"removing the {o} from the {c}\";\n insert/c :: \"insert {o} into {c}\" :: \"inserting the {o} into the {c}\";\n\n take/cs :: \"take {o} from {c}\" :: \"removing the {o} from the {c}\";\n insert/cs :: \"insert {o} into {c}\" :: \"inserting the {o} into the {c}\";\n\n take/s :: \"take {o} from {s}\" :: \"removing the {o} from the {s}\";\n hook :: \"hook {o} on {s}\" :: \"hooking the {o} on the {s}\";\n\n examine/I :: \"examine {o}\" :: \"examining the {o}\";\n examine/s :: \"examine {o}\" :: \"examining the {o}\";\n examine/c :: \"examine {o}\" :: \"examining the {o}\";\n examine/or :: \"examine {o}\" :: \"examining the {o}\";\n examine/oc :: \"examine {o}\" :: \"examining the {o}\";\n examine/os :: \"examine {o}\" :: \"examining the {o}\";\n }\n }\n}\n\n# food\ntype f : o {\n predicates {\n edible(f);\n eaten(f);\n }\n\n rules {\n eat :: in(f, I) -> eaten(f);\n }\n\n constraints {\n eaten1 :: eaten(f) & in(f, I) -> fail();\n eaten2 :: eaten(f) & in(f, c) -> fail();\n eaten3 :: eaten(f) & on(f, s) -> fail();\n eaten4 :: eaten(f) & at(f, r) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"food\";\n definition :: \"food is edible.\";\n }\n\n predicates {\n edible(f) :: \"The {f} is edible\";\n eaten(f) :: \"The {f} is nowhere\";\n }\n\n commands {\n eat :: \"eat {f}\" :: \"eating the {f}\";\n }\n }\n}\n\n# supporter\ntype s : t {\n predicates {\n on(o, s);\n on(c, s);\n }\n\n inform7 {\n type {\n kind :: \"supporter\";\n definition :: \"supporters are fixed in place.\";\n }\n\n predicates {\n on(o, s) :: \"The {o} is on the {s}\";\n on(c, s) :: \"The {c} is on the {s}\"; \n }\n }\n}\n\n# push button\ntype b : t {\n predicates {\n pushed(b);\n unpushed(b);\n\n pair(b, d);\n\n in(b, c);\n }\n\n inform7 {\n type {\n kind :: \"button-like\";\n definition :: \"A button-like can be either pushed or unpushed. A button-like is usually unpushed. A button-like is fixed in place.\";\n }\n\n predicates {\n pushed(b) :: \"The {b} is pushed\";\n unpushed(b) :: \"The {b} is unpushed\";\n\n pair(b, d) :: \"The {b} pairs to {d}\";\n\n in(b, c) :: \"The {b} is in the {c}\";\n }\n\n code :: \"\"\"\n connectivity relates a button-like to a door. The verb to pair to means the connectivity relation. \n\n Understand the command \"push\" as something new. \n Understand \"push [something]\" as _pushing. \n _pushing is an action applying to a thing. \n\n Carry out _pushing: \n if a button-like (called pb) pairs to door (called dr): \n if dr is locked:\n Now the pb is pushed; \n Now dr is unlocked; \n Now dr is open; \n otherwise:\n Now the pb is unpushed; \n Now dr is locked.\n\n Report _pushing: \n if a button-like (called pb) pairs to door (called dr): \n if dr is unlocked:\n say \"You push the [pb], and [dr] is now open.\";\n otherwise:\n say \"You push the [pb] again, and [dr] is now locked.\" \n \"\"\";\n }\n}\n\n# container\ntype c : t {\n predicates {\n open(c);\n closed(c);\n locked(c);\n\n in(o, c); \n }\n\n rules {\n lock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & closed(c) -> locked(c);\n unlock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & locked(c) -> closed(c);\n\n open/c :: $at(P, r) & $at(c, r) & closed(c) -> open(c); \n close/c :: $at(P, r) & $at(c, r) & open(c) -> closed(c);\n\n lock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & closed(c) -> locked(c);\n unlock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & locked(c) -> closed(c);\n\n open/bx :: $at(P, r) & $at(s, r) & $on(c, s) & closed(c) -> open(c);\n close/bx :: $at(P, r) & $at(s, r) & $on(c, s) & open(c) -> closed(c);\n }\n\n reverse_rules {\n lock/c :: unlock/c;\n open/c :: close/c;\n lock/bx :: unlock/bx;\n open/bx :: close/bx;\n }\n\n constraints {\n c1 :: open(c) & closed(c) -> fail();\n c2 :: open(c) & locked(c) -> fail();\n c3 :: closed(c) & locked(c) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"container\";\n definition :: \"containers are openable, lockable and fixed in place. containers are usually closed.\";\n }\n\n predicates {\n open(c) :: \"The {c} is open\";\n closed(c) :: \"The {c} is closed\";\n locked(c) :: \"The {c} is locked\";\n\n in(o, c) :: \"The {o} is in the {c}\";\n }\n\n commands {\n open/c :: \"open {c}\" :: \"opening the {c}\";\n close/c :: \"close {c}\" :: \"closing the {c}\";\n\n lock/c :: \"lock {c} with {k}\" :: \"locking the {c} with the {k}\";\n unlock/c :: \"unlock {c} with {k}\" :: \"unlocking the {c} with the {k}\";\n\n open/bx :: \"open {c}\" :: \"opening the {c}\";\n close/bx :: \"close {c}\" :: \"closing the {c}\";\n\n lock/bx :: \"lock {c} with {k}\" :: \"locking the {c} with the {k}\";\n unlock/bx :: \"unlock {c} with {k}\" :: \"unlocking the {c} with the {k}\";\n }\n }\n}\n\n# key\ntype k : o {\n predicates {\n match(k, c);\n match(k, d);\n }\n\n constraints {\n k1 :: match(k, c) & match(k', c) -> fail();\n k2 :: match(k, c) & match(k, c') -> fail();\n k3 :: match(k, d) & match(k', d) -> fail();\n k4 :: match(k, d) & match(k, d') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"key\";\n }\n\n predicates {\n match(k, c) :: \"The matching key of the {c} is the {k}\";\n match(k, d) :: \"The matching key of the {d} is the {k}\";\n }\n }\n}\n\n# cloth\ntype l : o {\n predicates { \n worn(l);\n\t takenoff(l);\n clean(l);\n\t dirty(l);\n \t}\n\n rules {\n wear/l :: in(l, I) & takenoff(l) -> worn(l);\n takeoff/l :: worn(l) -> in(l, I) & takenoff(l);\n\n wash/l :: $at(l,r) & dirty(l) -> clean(l);\n dirty/l :: $worn(l,P) & clean(l) -> dirty(l);\n \t}\n\n reverse_rules {\n wear/l :: takeoff/l;\n wash/l :: dirty/l;\n \t}\n\n constraints {\n l1 :: clean(l) & dirty(l) -> fail();\n l2 :: worn(l) & takenoff(l) -> fail();\n \t}\n\n inform7 {\n type {\n kind :: \"cloth-like\";\n definition :: \"cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean. cloth-like can be either worn in or worn out. cloth-like are usually worn out.\"; \n }\n\n predicates {\n worn(l) :: \"The {l} is worn in\";\n\t takenoff(l) :: \"The {l} is worn out\"; \n clean(l) :: \"The {l} is clean\";\n\t dirty(l) :: \"The {l} is dirty\"; \n }\n\n commands {\n wear/l :: \"wear {l}\" :: \"_wearing the {l}\";\n takeoff/l :: \"take off {l}\" :: \"taking off the {l}\";\n\n clean/l :: \"clean {l}\" :: \"cleaning the {l}\";\n\t dirty/l :: \"dirty {l}\" :: \"dirtying the {l}\";\n }\n\n code :: \"\"\"\n Understand the command \"wear\" as something new. \n Understand \"wear [something]\" as _wearing. \n _wearing is an action applying to a thing. \n\n Carry out _wearing: \n if a cloth-like (called cl) is worn out: \n Now the cl is worn in; \n otherwise:\n Say \"You have this cloth on.\". \n \"\"\";\n }\n}\n\n# text-Like\ntype txt : o {\n predicates {\n read/t(txt);\n unread/t(txt);\n }\n\n rules {\n read/book :: $at(P, r) & $in(txt, I) & unread/t(txt) -> read/t(txt);\n examine/book :: at(P, r) & $in(txt, I) -> at(P, r); # Nothing changes.\n }\n \n reverse_rules {\n examine/book :: examine/book;\n }\n \n constraints {\n txt1 :: read/t(txt) & unread/t(txt) -> fail(); \n }\n\n inform7 {\n type {\n kind :: \"text-like\";\n definition :: \"A text-like can be either read or unread. A text-like is usually unread.\";\n }\n\n predicates {\n read/t(txt) :: \"The {txt} is read\";\n unread/t(txt) :: \"The {txt} is unread\";\n }\n\n commands { \n read/book :: \"read the {txt}\" :: \"_reading the {txt}\";\n examine/book :: \"examine {txt}\" :: \"examining the {txt}\";\n }\n \n code :: \"\"\"\n Understand the command \"read\" as something new. \n Understand \"read [something]\" as _reading. \n _reading is an action applying to a thing. \n \n Carry out _reading: \n if a text-like (called tx) is unread: \n Say \"You read the book and realized about that crucial hint.\";\n Now the tx is read; \n \"\"\";\n }\n}\n\n# object\ntype o : t {\n constraints {\n obj1 :: in(o, I) & in(o, c) -> fail();\n obj2 :: in(o, I) & on(o, s) -> fail();\n obj3 :: in(o, I) & at(o, r) -> fail();\n obj4 :: in(o, c) & on(o, s) -> fail();\n obj5 :: in(o, c) & at(o, r) -> fail();\n obj6 :: on(o, s) & at(o, r) -> fail();\n obj7 :: at(o, r) & at(o, r') -> fail();\n obj8 :: in(o, c) & in(o, c') -> fail();\n obj9 :: on(o, s) & on(o, s') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"object-like\";\n definition :: \"object-like is portable.\";\n }\n }\n}\n\n# Player\ntype P {\n rules {\n look :: at(P, r) -> at(P, r); # Nothing changes.\n\t #wear/cloth :: $at(P,r) & at(l,r) -> on(l,P);\n }\n\n inform7 {\n commands {\n look :: \"look\" :: \"looking\";\n\t #wear/cloth :: \"wear cloth\" :: \"wearing the cloth\";\n }\n }\n}\n\n# thing\ntype t {\n predicates {\n event(P, r);\n }\n\n rules {\n examine/t :: at(P, r) & $at(t, r) -> at(P, r);\n }\n\n reverse_rules {\n examine/t :: examine/t;\n }\n\n inform7 { \n type {\n kind :: \"thing\";\n }\n\n predicates {\n event(P, r) :: \"the player was in {r}\";\n }\n commands {\n examine/t :: \"examine {t}\" :: \"examining the {t}\";\n }\n\n code :: \"\"\"\n Understand \"tw-set seed [a number]\" as updating the new seed. \n Updating the new seed is an action applying to a number.\n Carry out updating the new seed:\n seed the random-number generator with the number understood.\n \"\"\";\n }\n}\n\n", "text_grammars_path": "/home/v-hapurm/Documents/Haki_Git/TextWorld/textworld/challenges/spaceship/textworld_data/text_grammars"}, "metadata": {"desc": "Spaceship", "mode": "medium", "seeds": {"map": 59225, "objects": 31964, "quest": 43730, "grammar": 657}, "world_size": 8, "uuid": "tw-spaceship-Medium"}, "objective": "", "extras": {}} \ No newline at end of file diff --git a/textworld/challenges/spaceship/games/levelMedium.ni b/textworld/challenges/spaceship/games/levelMedium.ni index 043f94ad..7717ae74 100644 --- a/textworld/challenges/spaceship/games/levelMedium.ni +++ b/textworld/challenges/spaceship/games/levelMedium.ni @@ -24,16 +24,22 @@ A room has a text called internal name. Understand the command "check" as something new. -Understand "check email" as checking email. +Understand "check laptop for email" as checking email. checking email is an action applying to nothing. +Before checking email: + if a CPU-like (called pc) is read: + Say "You've already read all today's emails."; + rule fails; + otherwise: + if a random chance of 3 in 4 succeeds: + Say "No emails yet! Wait."; + rule fails. + Carry out checking email: - if a CPU-like (called pc) is unread: - if a random chance of 1 in 4 succeeds: - Now the pc is read; - Say "Email: Your mission is started."; - otherwise: - Say "No emails yet! Wait.". + if a CPU-like (called pc) is unread: + Say "Email: Your mission is started. You should go and check outside of the spaceship."; + Now the pc is read. connectivity relates a button-like to a door. The verb to pair to means the connectivity relation. @@ -77,6 +83,7 @@ _reading is an action applying to a thing. Carry out _reading: if a text-like (called tx) is unread: + Say "You read the book and realized about that crucial hint."; Now the tx is read; @@ -164,31 +171,31 @@ The s_0 and the s_1 and the s_2 and the s_3 and the s_4 are privately-named. The txt_0 are text-likes. The txt_0 are privately-named. -The description of d_0 is "it's a commanding door A [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". +The description of d_0 is "The door A looks sturdy. [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]". The printed name of d_0 is "door A". Understand "door A" as d_0. Understand "door" as d_0. Understand "A" as d_0. The d_0 is closed. -The description of d_1 is "it's a manageable door B [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". +The description of d_1 is "it's a manageable door B [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]". The printed name of d_1 is "door B". Understand "door B" as d_1. Understand "door" as d_1. Understand "B" as d_1. The d_1 is locked. -The description of d_2 is "The door C looks imposing. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". +The description of d_2 is "The door C looks sturdy. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". The printed name of d_2 is "door C". Understand "door C" as d_2. Understand "door" as d_2. Understand "C" as d_2. The d_2 is locked. -The description of d_3 is "it is what it is, a door D [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". +The description of d_3 is "it is what it is, a door D [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]". The printed name of d_3 is "door D". Understand "door D" as d_3. Understand "door" as d_3. Understand "D" as d_3. The d_3 is locked. -The description of d_4 is "The door E looks rugged. [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]". +The description of d_4 is "The door E looks sturdy. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". The printed name of d_4 is "door E". Understand "door E" as d_4. Understand "door" as d_4. @@ -324,7 +331,7 @@ Understand "key" as k_4. Understand "2" as k_4. The k_4 is in the c_6. The matching key of the c_4 is the k_4. -The description of k_5 is "The code key 2 is cold to the touch". +The description of k_5 is "The metal of the code key 2 is rusty.". The printed name of k_5 is "code key 2". Understand "code key 2" as k_5. Understand "code" as k_5. @@ -352,21 +359,21 @@ The printed name of cpu_0 is "laptop". Understand "laptop" as cpu_0. The cpu_0 is on the s_0. The cpu_0 is unread. -The description of o_0 is "The bunch of sticked papers is dirty.". +The description of o_0 is "The bunch of sticked papers appears to be to fit in here". The printed name of o_0 is "bunch of sticked papers". Understand "bunch of sticked papers" as o_0. Understand "bunch" as o_0. Understand "sticked" as o_0. Understand "papers" as o_0. The o_0 is on the s_3. -The description of o_1 is "The lots of hanged notebooks is modern.". +The description of o_1 is "The lots of hanged notebooks seems well matched to everything else here". The printed name of o_1 is "lots of hanged notebooks". Understand "lots of hanged notebooks" as o_1. Understand "lots" as o_1. Understand "hanged" as o_1. Understand "notebooks" as o_1. The o_1 is on the s_3. -The description of o_2 is "The attached bags for mechanical tools is dirty.". +The description of o_2 is "The attached bags for mechanical tools is clean.". The printed name of o_2 is "attached bags for mechanical tools". Understand "attached bags for mechanical tools" as o_2. Understand "attached" as o_2. @@ -387,17 +394,23 @@ Test quest0_0 with "" Every turn: if quest0 completed is true: do nothing; - else if The cpu_0 is read: - increase the score by 1; [Quest completed] + else if The player is in r_0: + increase the score by 0; [Quest completed] Now the quest0 completed is true; The quest1 completed is a truth state that varies. The quest1 completed is usually false. + +Test quest1_0 with "" + Every turn: if quest1 completed is true: do nothing; - else if The cpu_0 is unread and The d_0 is open: + else if The cpu_0 is unread and The d_0 is open and the player was in r_0 and The player is in r_1: end the story; [Lost] + else if The d_0 is open and the player was in r_0 and The cpu_0 is read and The player is in r_1: + increase the score by 1; [Quest completed] + Now the quest1 completed is true; The quest2 completed is a truth state that varies. The quest2 completed is usually false. @@ -431,7 +444,7 @@ Test quest4_0 with "" Every turn: if quest4 completed is true: do nothing; - else if The b_0 is pushed and The l_0 is worn in: + else if The l_0 is worn in and The b_0 is pushed: increase the score by 1; [Quest completed] Now the quest4 completed is true; @@ -440,7 +453,7 @@ The quest5 completed is usually false. Every turn: if quest5 completed is true: do nothing; - else if The b_0 is pushed and The l_0 is worn out: + else if The l_0 is worn out and The b_0 is pushed: end the story; [Lost] The quest6 completed is a truth state that varies. diff --git a/textworld/challenges/spaceship/games/levelMedium.ulx b/textworld/challenges/spaceship/games/levelMedium.ulx index c5286a2e185dac19a2ee661882f9e6c56ca1a709..672addb063e402847544ca90fc4064a378b965d8 100644 GIT binary patch literal 640000 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 %qtbjNvsW&W8(=Dm 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%0D#9w;JW2 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≶T-R#h6C(xr~s6QFSqdkpy8fEsKnb zsB@H|%z>rwVsQ#z9XP7uivzA%d~JZ>RBZ88DvGLGZwV2BG8u#w$#C1gd|ts9IMnzE zXr6#l5E2NQpP=-IuZpe`nLz>v5fRJVV4zUt=^G$6{9W(AiRm*M{rn-LWqBJKN{kwR z;}v2$0M7}^DPm8XlP)jfoni0 zHx1|kE5Cb~Yz+U?%!vhc48{wmGEfiphl2xA>Kx2w3J40OL5B7R0Hq>9Wnv7mdJkeF z+_f_w-~?tRQb>*O&sM)z6P%X?Bx|$4ocICbQH>^#YC5DOn1y+6BF@=L>tAZBdJdvaaJI8iO2vjBaD#iDYejT zwQiV2$Mz$%T`g%fg006DTxDjs)Qu@umZQvpCGm1O*~df!K2Ty!6!}=R4|_rclxLAo zNyRs$zzC(n8Hg3l3eAJ`sLdl2qc)FB4EzqoPcsyyn+e~5XG8f6Km^1>=rIDaxMdmX z24zo8z@9JyVueiz3M!<9QO?{<_%s{MMLLZZb zsfL&=+8Yvsvzklj7kgA%pjdZpisTB6XT#Df0|13-n3yqgX&lLZ+iBG2rvy3 zbHrPeGgqa)=0HXRFUbx=CdQ5&C!DKliC-+g<3|9AgqvIluuMb&r5Odpml%Ecj)~1- zChIWAL7i_(JAOC?OQj4yV@w>+9|Fb+V8vjcMoa;UOUi&Oi%G)3ixD6cZqG(9Jx9q% zP`S>SGooTIU8ZJFUi29+6kt~7UX)D(e!M5dITZ*1FAiwgqAPyTA^2s>CeOVZix=2l zCbsnW?-P5@wPw`rf3U7fZ?#)X{m2(&|C8b`zRIkF9j8lyv7$@yff%Et_ka8AOl(8h z{$(T2RSWD|WR-aCknIoTulyTFU#QlbKC)1Bn?8b`!!Id11hnnp`GQZyK-u)szfbH1 zYR3l-D)(X$Id-=I7!BuGAf-V0^@fU857k5@*`mC@e z!cz1T??Io;#Gj8lidhmPPnNKshzCZcV0a^I`W6N!%q$R54&cAZx}EV0fH+|>rU{=; z2pA9OfSMr8@Wh{=K4fAkriYC@1;Bp)JN>ZtC?0-5r)|TOPPp~Nn~0Zycn|te2JeMl z#!D=2&$^pYMEJVm#Q`Q=iNpg9Xa<4}wEc{V;As@WJXYf=!_O=DAu|C1*$Mp9BZ7zY z2MU>kWjl}Qh>acLKW95krcaNah;s=0Ei6+bDzLcoL|VdS=pdf| zi-c$v;rqOJ49C4{_U6=5(E$G{A*xTV)pG>a&fh^i z(J$saDWG*Z4kYuJ9zI{#Y$ksf|8E?9-r7<=xaEJskYE917Yj*x33zjc7l^cYsDCo~ zPl^j~m7420TO);JzYf3DvItniG9VDVKqy-gulyTFS+hN7tzj9Fu4e%nkA>8F0?te) z%J2da(Q*vKe^UH~8i6tkbAts~d0`_e-df&sXrP1pA;AVHMQ6CH4C!@@PoN!{L=3fneFLWf3ynRR{(|hZzR4fbVqM;*SA(d6#=Cq048+Sx`E8BC=?!&tRKJnJ>X|eP_OdE$j5?Yiy$J73t>m z7i=*I#Xh8Z_lq1Iips?wrF(f}+cfBN>Eoq1;_$C15P1k+&QjXJuO6p?VZ#A?cnRBf z9EUGbT(E(HKLwyB4g1So`eYYk(*xFX9f!Nhrt~Dx?zF6#?j3QdrtuI_qc$3 zx{SdKDJKDumyyRFE(Hb$KRm|5bd94Ay`d-ZE<#q6O%P!1ru14&`+IqV_EK5!v}{KL zIIPExU|A!FS}eeGh^z(!Q6C5-SX*cHm9H3LPY`Py)&Xd(k=O&oiWW6pq!{8;gkIdBEsG2^I6-XKr6o8d`n#3#sSRi^%u^t1XA z0S6{pa95s#Vzp0?%%rCSO2Z)y54`E`=;d+xn24UX{hqA#MKJg$lWyPhBTac zEoG$7%x@C{Hd|{hjR?1joisep8ArP&>mE3;%9Q3^?Rz|LZ)t6TGV*AwX<2wcU`oKF zNkh)NV6*&xOYF_dGY7lnnRdDGAi5hX@1H3CLW!a?>{+6mavohZ!f6SP2Ks$WUHJE~ zXXX26U@c{2wUp+VFK8)tl`*?TIHX4qcw|>A5p~+x9JTwTIqSrs`r>(3R`c@-)8+Fl zr)E@HyIY<&7nI=LA-!LvE*#}a!> zv;Chn!vBLJ|7F^}d4T^=WW5~&G!N$yai=T?3s0GCbs42i@)*w?ATn~vkLj& zhCM-6bGa?meD0^s%-+)eEtI}^?3olam+{B=THbx$d{5M}xr~;2JSi!go9K^G|7$*d z-iCQ`>Ys)AS+Ez!{D1q#AJhEDPg^K`R=yV4^AEOv6}9}&)U4&*mRL($w7^Zr zrJnbVmVD2OJ+rhwy1Cg*YfmPu|LN5|LTor zmD>V)ahhA+ZHYY#%k#qi7)#63=Z!t9+?IF$_-RW%ibd7NsCFdGuD~44lCaONjrlyF z>at06>w^=EW{%97a3!ku`!u=et!%-OvDpSaC)yo5T8KF}IZ{q%Be*Lb-0wm`>!0rT#N#PBc!9cF0`>?9f{YO!lT@ew)T$!56SN!!s3^%v#`78hp%w19*KXR+UolMD&SV zfZlhiqN6ycUGm85-IX#wNRBf8zEr6h29!29&-2QF9~Vu>{($D!8cc@F z_$-5e2))H!DG%Rc$;;-&^3Txa37&hsmABVp6721RD`;i4W<=rol}pO>o&q{wc`8{G zjJrWgo&puMqvZl>cC6lSLF2JAjvZ>V>B8}Px0H&p`FHt^lmm-)Rni63P03Ed;m4hJ zZ^~$VJR&9EABRXMn=IMU7=kq&J-4CR*BeucKSmdhzFl9S*e{^DAJ&geRef*|HKw-! zcwAl74wp!{ZN=4ZW#|f)C-C6xKlz7w4PNdkv*3)+op*dD?cy(SEUs}nGt;pb6kZ{&c}n;LD;(*8jZVs zs`H>@Gj9HvY%)4F^ThD?$0j@;AA8cRUroX1U&fC8dN*cR4CB1_#hW_>r%i4*+lD>5PH`wIrN*P)OWA^!zVM}oBs`F zv7ahr+NtPpG=R6_8qhT3{+v-(Inx?hlW8-`yDzLAQ(156@1AixVljBjTj@0Y=Cn(_ zRAX^A2P%z8zC->urmwNtNGEMaRGcwT+S^%==);?&p{l^%(s_PD%*E0C`ryg0RDKc` zn{*!)@(aY*li9dT$rszC*o@_=Z;b|x!JH%!g1uA>M%>b*w4ZO=m>)>Jrgdy(ne%bV zbu-*Zh2u*9Y93tRRvqIOJEt|HhROpwDr0#LH_ON6378EQ*IIVpp!!)~3GC@{g}zCo z5EIL&Ie*T@Ky~i^fP(cPWyA&N?q%&ZC?jwL{=HOPV~FR|&9{ezv!Rkg%d@rbu%aAO$&UKVcb-aRj<^{7^2g>wo8|sr8{h^05{&r zU#hEHyu+z3Hn?WQfji-7v-;Asbo)AGGC1;R7h)yDIBQ(nbyInFQp{?sAhZZiZ>6X} zYxvk+Hzq80%BEDcvEnj2-O`HAVM!&|T); zNC({L9e2`r>n+5x0=)?PHGtLyqt z!H*hTHJU`Nq^+BeHmD`xGPH{PKJ9RQKav$5Ni?>oM^Ey?P^_0u2j zp8%dO352MbgP$c8URD=y!OV{1`bt#T(gfX1T2HXgL_Z8U+`HDg@kb-bS(bkKoj_CD z)fVXxUJnC?vvr3}c3}y(7k3H^TAFV1aL?nqqK2Ntw0<1E>)RPatVfhYXRrsQ^-i8m z#gh^~=$+b&GU+m2x&xh3%5R{o!qAGUeLucqSXDR{${fm9bob>o zOb|HrDFS1n572SAMW9pI^cg>#SX>pS->(`*$YL)G;!||U-{+Y3(WIg)Pi862+w!(g zePl(r*)XFG={|M7+Ho~AopSU}WPPGqKD~6ivup47C(`{Vw+kxb)B7~wuB$|!rByb5 zHZ%+upSZqtM2-@7bX-{>YTt}3${^R}{@Z${=3|7`y`AB`OOMe(1bp# zWhuQ3Ohc|v@AjrKZKPjVt2aQv7YX7!4*u|6;p29MB%ukU@z?h^;Qf;*yORZcxyMN&N_t` zi^n{Z%!;$7k2(G@4_6GLcHRn0CPO@XD+Via-4#9baFVmv?qm=H3v*{(bskoTf1vx? z+45c7uEi&CqImKWdO4xbh@2>v5t6v6hwW;z)-Zm4FPWb(R3rZuiZX`NYV(QV3kk;} z7Z|fmuhiscP+jnLC*y^CL&knRWfL?YBk&GGns9r-m`q%`b`3Qzq#M4`o~2#UOpz9k z-R7UYj`bi`nPu)<9?u9s{n+*B80`6vM?f&ZcwWiu;w1x1kTCEIEZUE8_j^*Gtb~Ez zE~mZ*0R_N;rXUJWDonX-8d5@pJ|S(-D#{@d5Hao@*`iEYQ$60fi zaQO(mDd8~lgFkzvl16IL{)lWgUgqKSG;d|sbey6`_ve__1ueP6$b3^5j`J=&$k@cQ`UT3_*ZqW((A|NfPVf^7UG>pV0+|0({ ziGlGQaleXuL`*6ZxEY;wVj8u*-Kh2tu3Hk3FSPd>q| z?U@0YKYW2Ugox#GK`N2o(L}{A+b5b$$~A(qg1!`^69N*9#Her$IQs6S1b*uhF(FQp z1026&9%c7Br~gz78~*6`C5in=i$5K~qvrQ*E}=6vT!X(&tjEA2_&s(y^clj4g2)Hq zqvN|hg`ZrzqwoF!Hg-W7Q9viNKp$`h6mpBW2~VDxXUSkTZ$m@mI+J-V+2mvllp@s{ z$QafoRtz14R#%^;StK@oUpHR;=Hk#VP&e#d3}-&U^K@f~hH3GWVY@BjZ30Dkcr9C zeN)!kZ>5_K*V`^5NAB6cgR!@q8qF`&wS{;aH1hir%ILQ%aNFch{d&FuSPi^nqBd|F z3>A3qy7%VW`vgB`BH{NP*3#im^x`vttPgz#;(|IoX19uxiIpR?T?ezV@DpLI3 zoRPNE&#m8;Uhm--hyv`_1Wa-m4r;@G-cWbr!cZ2v78C!o>?3A=I}lC@?xw~Z1&u@5 zc2AC_n%n>`vLf#m2TT8fQI8)skSvwS^$*B2w7(Ovn1p%|oqXSYD2BH&%ZTHnlTv;3 z+uk$V>HXF8>BO$&+*n^rsyH2xe$_Kz#|NH^JTO~#-}YW!WCm`++IpF;O~brG%2v;# zb#r$QV-wBb+llvY`aYV&LHuGax*n@ritZwGCc7gG)5_DDEO7nSZA?Ma9CIPNjHwIH zBJO2kw+zkQ-IW9RokLg&VE6i*GPPTV^MUx~K6J^Bz|L;kp(}8Pxi%hjz$R+C2WND$ zzt?Y{;QBARO_DB5+nzb>NOK*od3{E=UEpGdDR)x0dvme@Y`&>Mw@}a}ZfL+wLvsQJ z0sOinI#9Q`)63DhCs5tVpDFgGyPYd8|9RHn>3B1}qF~6pI(h9Q?v%fL*QI=HlIWjZbB_KZxt0<>_MN*xlBn-Ym&m+%GA~{n!s@n({11Kvw$H z_$K|3N{6jUDzVu)%{0cd_uKt{!%9U9shGa}@dFxdpcP9Zj>D~MD%=kav%z)7%1Y-s zhH#2z>>J?Ucz34Pj8k@(KMpIV^$GjCqdOKyHO}aFWZE8%C2K z#dM8mZ5Dnp&;3UA%(dBCgPMx=^Ml{G)??1@X}^U}Iq8axu%tbWP0OP|b& zv0AsR&|M*ehg<81wIAu$s2+Nsnyu!*>KvDMZE)zu){kF{jeL(*6BQ$|uFqnO=4M z)>IlzK8#ytJK236nEDBu%wdZlHp6i@XM(Qb@jkNoU|FSGOBu}PyO|knm*?P@wGrofuCuDF8%HJ zfIuATY{x9$;|q;OnEYK|&8*S5Vp_=3uFt7r^Lcd%eIEQJyuKi$?h~T~yM)FR|M?N4 zO)!i_QqapleLd!rpy3zZDf>0-m0hY%)iVt@UpJX>rI*Tglj--~et|fXxx#00 zc%yS-)AhYp)?wBu*VU#M-BSk|sO#Nbdr$wa$FRW6>ONyeUK-$Ev!*(?-Lc@*m=QU( zO`-d4yL~nKwntM@uqT?Q=}qH^?ftTjT92~`8x?xxTIVtIrkCdZwWJs-!NIRz+{SeN0V>5E?lu4G-iwSnBdfG=lAIA2xwsE(%Q9dPWKPpAN=#5yWeVG$!`B~@Ei0_ z-tdDB1B}z=8O1fua1GEct{DIRW1Qp|dG{NGYH-`J)N{0U>)?08OyxJ(2rDiL98K!m zq>cbz@+EJqILCnod_prMDAB}t70$o@xPNe8hm51yq!LPX>$A0bw^q?*y!zgx8Izx!p$jQ#}ccdzkHZw z6BPL+>%o-mQy?D4X%^>(zK4~Wu&iX;&OF);M0IW*V3xowzC&rdOd9A4wH}U zZv3bU4qklZ+CUuHy2`GfL)F+RKiJoNs+#$TTb{owH!Jzh*h*h8&*q2xxn1dfSF&LJ zZ1r`opIdL>=bGL2a88fX`tc}z?RE9;6>i6mq>i?lZuG#kewvNNFF6${1y^C4fu87- z?x*WcANo18`*J>t941`(c$|-F?AIx?aYAUegKwhelwrw%#UW+jNxubK)|BQAkAGn5 zZxgq00DXTMKd|4(_^RO4fSFTnM9mN0HvZ$UAQ&%)Zat}tJ0G>MDeK%?Wq6KZarE$T zhj6R>iFdcq+i*lpH7npVujd~$NU+m^STaty)MEd>KCm+)Xi2UtHK7GB&e3_t3+U2?+^D zU(PyX@)16hXhVmxFTRwbJ)9oZ>!bd`%fiAuLqfUg{Ol{%t;=Sn{9;%!ao*cb%U%szc|ClwV`=^Cx&hnVoQ!S#cT6e& zwb!|xx6r@0cJDT+(NKlQev?(`)K}AB>dyv`(*3j<))P$Z{nx9WXggyRt z_k-RV6690g)i%BFJ&pON(C_yQYCJTM`i^(>Qm`PhO*b_V2Li{=+3@8DbyS4g&b_Sk2t!Wc| z*y^Z>`c94Sj@(1@Zs*#1rrz;sDtb_7)A;^XuwCrfX?skZv6N&^7kXP?N-xV@l7A`F zYs;C}rgW%y1NH{Hy4sQHUSif`7`A5X_fLKN#r=g>@Znm_hyFJ21T(wcwOeMIhfNjf z+Og4^|3=erULINX~4JlqELr?0zeMxxGc_!#fuAzrP^yb`pe4 zWu{TCJ0|>jBUQxOciT3xd{5`>+_shIiOo1oSYvV2|CPbeeRc_llj*wqeb{$#eQ&xy z?M(>lnrE!O?$%9bU!@0=(fUDp^n2QI(~m$pS#*rWie=Diojw-c_x;p)4c(^9tJq$S z>1yk@D^L2?9S<_|nOTeWKRlE=v@ zQ>F}xGYgxz>+a0Q_C{rAci$Q7g6%S)nW+iXzVdl9BhY>r@>E<{iU6>TUMW8y7|y1s+Lg zw_JDC!=};3>HVzY%X=|!MkiZUwck9klWkK?D!f!sNt(4u&v-9XGDyT4!(h_NjEC8y zD%QNv>9iQG*I-h6J-nY-imqt7X;gM}wW0SKo1!{Y~qTSZSl35)h@+L#HA3|M%KmQ1U|rgsc78XD3-ym}u|~&0*M&SP4tn2u42+t<@Wa86a)bV4%qB(-#!eU< zqYepL`sw|L7mvZ*OupT|so&v66L%HFBw3hZI!y~P&vaYNf5R*mbl zzA97qC?ohYkF0aFThHaqZm(AQW=tG%zJzCbKiU$TOI#zD{?=|udW!3;ZKqrhCg^^( zpBxze!Myc)&?(@g#BM%U#`N5AJO;|y>D;x%lrvL1s7Jb}jBIUe8fSM*njTaPlRBjF zp}+si9rH02lkin049+E1GY$Ou9r_A`YI@3e_)B3s_4Zbmo}RqDp!;M0yn1&u)FIax z%~xhuNrAIUjE;vGGrE;Kt*U)xaUpojCB)Flet6Ci-P?M(S~r~i2dz+ObJVw~KLe-YDHS`eGxWd&K24sw(0O}i>IdOS@Z`XeXp zbA-2!4~BE+e1oH~X7c@ENmF;2D}~6A@Qc2(%kCI0 z-GTZEsJG#EJq6VbB=1cx*J8iPo?dFAZ#8ELhcfDHK}H^ek^0Ii@n{+M{8LAq$ zi_=4QdL-V)-m3+LvT1p~A(?LDzhINJ!1`{|{gE~>KipT1*=pS!mf3rw7fKx?u ztg0d12`s>qhZ?YFpqo;-qy~$#q>|DKhe71p4^veA(2l2^zfHiF0qo`e)`GsS$1<~F zIsJp!m|dVaZna>&Rfc#n`Y}1Fm9i}N%PsDUTv3_Bb z*A*}A{+!|oKNvanZD&6w92YAYd!pyQRcw}*#z)bhxD)+5 zYu&PUOkerCnR0U__#?Q2IPGwSQ31F&%? zdEZVroxp7G>&PkvbhMl`VVtIX&s&&P?t@b*YIG5!lQ7OuXFR4Fm1fL+T-M6xZ_)2@ zhcDP_on-x8J_wIcQi0}4D9@l^8TWklNJvI`% z*yL1%W0J6DeU*)jyM&ah_7gP(6LI@ves)FJH4l)89!fkjI{&iqRYjF3^8OCu`vsTS7Hrn?0<2R;( z@zW-hq5zj~6KB>%c2gYdLoAi#O{@38@+nMrKXxn~IwN_L-rmFqckg~uzM--Altnww ztug&}HCheu{*>?2DNTL_eYN!`mtSUicQzpJT${$zAIF~U95e^JBV8_8tm>xBdp&hy zYueSH(C3S!)Z=cI{u#?|pO3`okbtD>rN3R=-W`WnfQCz$-0-x%KI3o^-HchYclk1V z+q(&uF@10c)4Z79EvbpKy?em0&~~oM%dwksBP?d$FeQ1=wh8sv5TCrMHnIqt$?R<{ zl9sP_K0{j=Tx{+(n4|T4Xx2H3cDd>GwoETnd>q$TeRueB5;nL*rDavtes^nh&7)s8 z;wB;Nh-#%k5gOVoLVfpLMT7a+XND(+?=l=$pMX*rD1To;6B20?8b5_qL*ldsGMWBJ z7}q(zV-%;CYgn-lU#Z-G^HoE;vZ=VdWVEU}3fg5NCW7kU(}a5|_^`oZzvYO#{b578nf%xm0wvV|1=BCOB4of_}TLJk7e#HIfkyCZ`>~nd+Ges#n#Mqn>*#+ zca52=>yATEGtTchp{j1$gzRkH-Mf9Tw|~owZdd9Id{D?)NV5yri(QowQ0uTvr7-o z9{V+F{5xX)IGN_O#v#LT*(JY*wYk_?==j;+HE9W^pp#O=QFFfA;HmZ=a`@9V`*yZ8 z*gtF`pIpNqjp{Y;8l-tbKp5V-89QnD8#?7^q2VEmVX7ERRx{Wm^9ggyof@HAV(whr zoAs%#;%AG;Y2H(9ow2U;RLTE1!CozDhsnCm_xD;voBV(aPp>;+gXq(*kPeUh+b-9b z%rc9Cb5p--rEHIS7+v8qxuQKLCF*jfdH$lg5x!Wr5Q?^@9=98%(gq?Le9l<#UMIe~divPv+SQO_vYe{>2UBJrosCu^h<#?jZ$k`CcYbmxx>OnB zbZLC%hTPuR)nU{4qq+5C%{nroZnvkL7o@&1cl9v60#gRxP@zs2<|n7d1Zzhpr{yk2 z8$?}8G+A>hanVkC#pTM&yFY%<; zpM4)Pr8kt)3B%)JqK*w{T{>fAVff}xk%=3Gg*_W*$8M*MB|U5dXYTJxS_nEy=W6#k zBxyn)hbkCg(2LCKvp2T;a5)xG#j8>4vky4l!#v_^hCMbvZk3a?n_f@GX0GIY#y3!z zi^FTZOtGcSa0&i==>KNQF}hqdn%)@b2- zwGI=a7}*nj@f`*)_n&?*Ff=mRGu#T6StTT;&f^!&=Z7a}W5UGc-s_gXF9ey-?OyQ^ z8(653u$9xmZ%_y}l|3Jcf!i?H9$FlL4}hKYd9Dhkw=A$59iP5g@|EjOVfg52Yp|{U z{wyyK>!84bHr$lpwND+KU~P@z@ACydg8E(c-!AcsTzbhgwCktvuK%~NQ}4lsr+$KE zNGUgm>d;gVzNNtJ(a^MWCeC8xz(0OccxL?jw0Qw~&T)c|f{mD)GWOA4^MoW8a0_bF zVC_l0DNTdMB;LE(d0A0A+|AvxoPXmheUFvKmH9tqn9hkEQhM3t@_=t6BF19;|09h5 z`=#8=#{L*;icP0D#Ww~tX88{{Id=b`&4Y@!;%Ng(M!RF4t8V;f(I;ja#zPj)m$gVO_>wiI4xhuDC34!$nAzH4#78%sSH$ zq)NO!dg6WOV{@&@cW8TKFMLQs%#E3DrRKcZw_EZmJbK!y z+K20nQ%8SjvUbInYa(|1+WbcS?zeoBy6)yHMMdqxtt^#o_D9q3MNGc_iI@*Pd-v{d z(USS~k^#k5g{F;f9KRY{3@>;Y1TG@e5!H^y^JEBwF=V{ckLu zz4NQKC0)%ssB+u_Ji>iFY1{1H%BaERQ(7u@1s%b)31dc>!b6p`Uy4YO6)UbQ=o3*k zuhZ|6`{IjAa`I2Isj8>;c~UiL}1u7>CX&EZ`|_ulo59(WF`u#@dC z*OOZRStSiPxxcEvb zzx55@F8**an#L!sf#~(Rf-MSc>a8o2`=IL!Y%>acspj-ht$?-DJTK(|c9k<^PofOeU8M`? z7}9I87nIiC-{2-&Z~ZQ>*_GiQuWc^aj!xfz;!A0Fc55W<=AvulFf$F`+@fPQWsK!? z%+T%jYoJ*>_E9xv9iuC7NjAGuJv0)h_3p*4Z+4%wDiu?3Z^ZXNZA?{*e&ths!`S9< znvJZ@V{fi-E7sInbj6OdWpuLVhqyV)40BE8Veoc>2O4x!M$c|ot7_`1Y%@7*{nqNN zo0YIi(ViC-i~<9L&Dj_}t?!(VGWFlH4VSd)7Tzv^wT(@gM3(M!XWbif`d#Ib)pRg; zOiuBRQ0NL4HX^dkzRPQ!e^ziWz}%In)ipz7ng_w0S-nNi_CNlL2_A}GV?^@kW%o-! zbhpz_HZ)sk(XrQ+i};<5V>qMT$16p8igUnix30KH{qyy8Us^3vbjCdsj$+m^`?UX5 zyD)vK(S+8pdnZ47W%7ppU*cN7&AHi0ci|{a=%ZJlc5AI{Z@vDa64U+VV>qX=rt^hG}VMa32Nkq22lvjiaXL@T>66Q#eXW&3* zH;iOtmXS^@LM;GiXRs>a@kN?nZp%L?yUgh_E*bB0L2)^!hmVr*MQ{nW7-NIc>B^h< zlB~KAfAt5};4@je{S|BU_!ub7NmuN*l4eb>8Tzit`J6^23hg0j?lJyIeIX#*y2yyR zfvlLhK{HI|-)7$Yg83WG`Q8xu9yhiU6-I31;%ai*G9Sk^H(A_EJ4+tmtK`hbjk5I+ zV=o)$O#bq^L6afoywltI&YFO6n4La9;yxxHvaRO4dS*GL{SIu{;#p&%0&2#9; zn_ghgu{&)cb~m$V-{eO80KMJ z@;6+=7sU8XVC+tOflA>}e41gekLx;o`W6qxx(g=2Tz>m<95#`;lw$fcs<$atV;-hN z56A(BIjoqjM552%G{!ZkHCJ(gYQ8&6%|j27vxaW8&XXd;x%L0nE&a_Giv^Ma(o6Tj?bV30oa+E-Tr zieR9#xouWkSzRmo9P_ayhfbYnb@&wF3hdg=FuCD8fj-D6o~l}&*zROZtGdHQu^2o6 zX5+Kz!8%;XTykjM@mYJEJvP5S+UV$j6~-5^TvBq#^C_5jckClg>+#c*`39{+zO+}( zH7k<_xAW70iNQ}LX$j4AmL>h9|1xTmcB5D6x-QNhUCOTA^!@FVJ^LwJ1c&|nc!2MU z94`Qx2~Y2T_BEq3DH!ws9v8JCp!H6CP>BIilh!%i{uoq7O9VpSdeLAETL-_WZL~I6 zetERZ2Y2G$@y0FJHSQI@oB!y|XD3Jc;FvuE*b|L2lo#p<-)P z3XMMKFqhi*(RYYg?}SEVfR$KDWB})iLW&Hu^M1v8C-uLz>A~>D=Gd8mZM2a2uhw=l zJ=j%AZRfKTVj;Di-I=fLzA04td^-`^jehY-1qGE%LqG_f_E%HBcindP!7O^ojBPjO z_O!&A0rskxOR+WGCr;Xh&R~hCL}!fcH8NRa1N#G!&XM75o@j zGdJY7i+g=fwuL&dKX<2BLzgvf$8e@}lohuB(l0z$kLu$Q4}78JtB?QHPSu*ipNqjn zaoJx$bz&i0j}C#IbqNC#Vb4E>C1GeGcJ1Xgm=wxtb3N>(R(Ytca!Z97E`KsI56|9{9Y3)M2Mj|xerz?%ApGO-;c@%d zLcR37w_r^74VL4qBlgqoNQ_SgncSgQ>SFgBkVrh;G|uSH?iD|uE%uavo-#wt)$xg` zhITLG;Fy~FwxZHCu~nJ9O5viHpYDN$U`k$Hk)zdYJ$MMCt2tE*slgNF%E&gDLvkfv>5C zTV0!6a?l62QI8w@xgq5o`}rz}!1uq+{)?L zF>LkE$7vFtgCDscp$1wuz=?Vakt*j4G;k5~bZjz@@9~+E|BG?b@}*t9a0U-VE>GnD za&-$c(tbX(J}%`IW(B&;)XnU4_O(zWgWI`!>$;JFV~p+d7Y|?i$`ChSQ+!XhQeJ6h z(AlN-I0oL3!y9^8B`29(&E8~&;lv2C4~elVaO<%w7DJ+@z6-Gv6=7!e;MG>8Q8|SI z&G|8}YE*r&_Ttd+r@ooXwuxqwL+#;aCW8h#x+ zR9=f;f&QWZ{Y3#dmI54TP658zq+l-Q84{2z zz2|~CSP1T5A*3k_vB=HB)0h~heDJV%2p**Le36C#p>%llUKDBy}YWe=w?KC`>tv$I(k)G(bH{CtQ0KqGFAnsuiBiz z%rB4N;4Kz;*-t_)ip(dVsCb?R8NsF@2Kh5II7L=f3MO1NznKdq8&(QFTs2=ZVx{E7 zO38|qk{2r_Ggb<2T-7Ks2T9D05_6-(93(L}O3aNCbECxEC^3`bW5kz9!7)c*Zc`>O zw<(jdV~)Vwrc7XNQzkICDHE96lnKmj$|TJPWe*;dJ$O*|;6d4g2W1Z)ls$M*_TWL; zgQP%N^BxpExXMpr_LG?XBxXN}*-v8jlbHP^W=HMLZ0YN^-MbA{qi&lQ?OJy)m>^<1Gl z5D`5%S7;BlRB!6JLVu{Gf>TQkri(iB@b#P4{9Y3Y9$Y9B@b#P4{9Y3Y9$Y9B@b#P4{9Y3Y9$Y9B@b#P4{Ftd z2epz1wUP(5k_WYt2NB`pSu1%^D|t{Wc~C2PP%C**D|t{Wc~C2PP%C*55rJ9qpjPsr zR`Q@$@}O4opjPsrR`Q@$@}O4oAR+>@i(ii&OL=Q?H z)Jh)IN*>fo9@I)6)Jh)IN*>fo9@I)6L_}bgJgAjCsFggZl{~1GJgAjCsFggZl{~1G zJcx+IEaZk(@}O4opjPsrR`Q@$@}O4opjPsrR`MVs0<+{nt>i(iBGogae8rsK{JL1fc$ z=Z7G&>A3Sl5GiE1^8*NXekdaNcolbk2qHLd6?c9JB6trGF1l86=Z79i%-s0_ggZYJ zk(jyjLlB9XJ3j=Gn7Q*q5W&~0xbp)DcYY`$TZ2141d*-5ogae8*5J+$K_t!G`5}m; znL9s#aOa02l4kDw5Jb|J{Pq;E~iU z!ucVHkhQ}3A&8K+aCK;kk03(c3g?F)LgEVNhaf`72cZBmp5Q$l;9^w4ZBZ*mR zA3y|Vsegp?14Bddpm2T&A}|Z*hajSzh4VuY(ays8A&6*a;rsw1Z8hQi5JU)b;rsw1 z?KR>2P#&Qsg!4lXp(cd$1Bm27;rtLp@St#h2qGksaDE6PB$9A`2qMO_aDD)3w%;TV z3g?F&2~H8t4?zT{2 zwzXi`hG8S}R<`7=Y{^^MlDD!Y@9A%RZ*);!B_ zQdVM}lUNvaSe=oM?>P7Ah6e0*Y|QqhEpqlvZ#%3$qmKipDh#u4eY_XD6$wkX(bnJC zr<^ffou5>P)lS@~;?`=#PXz<}`)Jx%h3FX;g7bMO(vVdwjXq)_iB}dO6Nf_}UU>xG zFnhU zmxXSs^z6Y>*rJC;WaR6@l3x@wIMap(JRdkP9eqv2+&cV z(*bo~4qt)OmM~l>Upv}}{rZxZafpS{*QO}YbS%3ACHK*|Hdb{I>fv~*&|j#bAzX#1Hdqb&dIOuKl2El6}~L`FE{53%i8zh z8nz^0(B@z6>tI#!^0|Y#*U=0^(z0>#V5!@~x002WUX&d37uOgZExHw3q)K-7Y4CgN zSTXiwgoNR0YWf(lb*M=!7TlvsfFxXxE#9Yxr_ZpT)MHs*J1mXUYQ6wO(-&Dwd^8{6 zY9XI>zfu$%nwI$Z9;4rN_>KZ`d>@8i?DNDg{6G9+Q^FFT1MGL5=C3U4s09G6)0EJ! z`BnNI#p6G)$L1Ir^n~LzN2?<>l?9qcR=OsR6;Hc0K}8VDsG*~{DaA<81Th*kL5v7Z z5G!AEgay7$42f?7A@ObEl~6Gxz6rbjD{)b%FftbdKvbmM}rXKy)#J+gQG&fEPCqZZoCeG*bYVnF2V> z6u@0Zum}s52ue5>BaWqnV=3WSj5wAOj-`ZSDdAX3I2IR%|0yX$x~hai>100^MDWT&4nzrhXooPX9CSc z&ILL)^flHjs|F{?1F6QEbAra2vx3H2P;AYaLF2+h^T!;Q`4ooB{4r-EJBG`Aibx5r zvJ-4&$8nk42^@4P1XV=PHHy03IHA>JmO3*b*&^1cXHA>QTk2k#eCe~u+ z_jtpbFB3&?;tg-Uj5oabGT!j!%Xq_^FXIhv{(}hb2y~Gg-5r6>TcC>+=)46wZ-LHR zpz{`Jl10e*f1NoK0PD=T1XyRzMF7A89Tx(C3v^rzAT7`cL111js9Vdas}|IG3F_7g zbY6lwFM-ZWQ0FDkCGv2pKsS}6n<~&v73ii4bW;VosRG?pfo`fmHfUm|3T3Bk)aQxnH!xF(JXaU^MwY2ug|2T-KgkOPzr zIfSe!5VE1BiIc)yNb^P^&V@X06au|bNc2V_(i??LZxlkkQAqVhF4i?cyk9jztY492 z9ia*0{R%Ma2&7p@AY>hZkheq-?^mc3))AUGF5xwCOvEF}(Zz8g4=_g;$HlxRj>~z3 z99(u{#AQD88}Eo9F7-7*TAF2xZFd|ZwrE%0$kjd`ASnBLd$Mf$xaG zcSPVj!twbwamMg%;*5bb*HulNF#zY`V+;UAiZKSDj4=>0#z4pz!#9C5hHn#R4BsZk7)Y|A=i9^?17J4vkY*zpp$jt= znmA)1&4wII8y>2J!K309k4l<6!sby)qeogj((I9T4`&Qt6=w|J1kM<~35+q278Bb6|XRKhk=3FAm5 ztRs~$k5s}wQV9b|B`hSBFp*TkMp6kQNyP`UuS%FnDq$z7grTGomXb=CN-8msj|qIo z1ioVe-!Xyjn80^T;5#Pp9TWJD34F(d)zrWlV_gGhjCBp1F%Yu;1Dr7i(u{EtGR8p2 z7#AU93>e6aao24YR{v&h_HX8P|7LFZZ|0W&W^-<&Y!g_Vf1l(b!$C#B2~Z)Rh8ZCO z0y2aEVN&KX3^GOtgAfKGA|?S+rPeBS0<2YQsq#7iPJoI)F#@6jq5@h)s;N@zfJ2p9 z{eElh_3)fLO!d9~|F7@&y=Pz7?Yj5c>zuRKz1P|2JWoQDb0z#l6B{^Lf|q*5o#0mi z-+z*h`#*Vc%lBlbOe{B;@BFVp}RqA)Q zdR~P{yoUb3f!#Z|xs>L4a+6g6(Z%r!>12X5P#MGr$dx5n4w5m6NduXnFt*Sq81}r; zUh*wfi49w*K&U{dK&U{dK&U{dK&U{dK&U{dK&U{dK&U{dK&U{dK&U{dK&U{dK&U{d zK&U{dK&U{dK&U{dK&U{dK&U{dK&Zg~IR!2_`Kc1*7ka|xg*vz*2z3Z=hERe3rUIvX z{?m*2HOf}{+n)YY@Kn$EEcw++$2WY#?^C{PzY&`0`OkLoyfgVtWc%e$|Hbif{c|Kf zHooDdz<7e^zsR|dj?;hY&ZFZp2mdL??fk<14Ijn&%*B5?5YPPm4R6}G`weOTv4Ngf zsTJ2qbn}1goAUh^7}x9D_%rn7dS0rFf2KwG{-!@jpZ1-OdtO`5U;8xi%zYEb@_VTM zi;J)k&wp|jwgR>bHp%m!e+iq6JqMfO`D>D}sc3j7)@SZdV=Llsfj!OhH;SKic~Oo( zgYzuHR>EF_J(KgiiLH#4eie>82V0f%{Q-Lx$BR81`wjLS=GOvyE>_~t!!O5I!@h*A zj$e+iflb1mkN;`x1=x?U7c!55*qUDQuS&pTa4WbS+zFO~d%^wSA@B%z46NpuV3R_L z;@|NHV?rJ(@PAu@=)bJ^zkQwX{GkG&0-*w-0-*w-0-*x`Llx-ohUYbH?fI9Nfl`H+ z=)RXrzHPsL21>r|L$iDyYnlymJwJo^j8f;nozFnW_4C=~xPCs19M_+I0)Ix-Z`W%h zedAg1T;siDUd9J{ezSDr!{IXT60pL26XiIGkumelFuQ=UsP7ixF1B3Gcb&k0{|Wq$ zoxr~?>bGmZD1GBE#f@#FpKD{U2l)N~KM>%54e)OR{D&A{B5Q{ZQQemCIWu~VC46>t zy18pEsTI>|N!{|=Eom6nXU&4zE}_QC^*eB#6?Wb(0p5eSQuFsSI}~4;@vE6DYnBl` zb}YQa#wG;#)W9)?Hh#0&C1#h)oQywY_A#^1n0?XgR^EkAboMtX zW-FVmZnlouhGv_aZD%&yY;Ute%#JpjXVz-=H}kB&$n33V?>2kC*+VgKKF=z@d11&*o&=zz6S)dE(26}>Cpf4Bz27??h0*nGW0781x$ubaq@ zccPZ$rC#tT*a1HEQZGCm$WtJNADqjsBl8&p@<2W)0PHd{UST{oxOW6O<7rY`iC)qj z&A}}24ETqabf-L37}p&Q9p708Hof=QYgMqj!P_=I0b4=*Zp=GBz!RD05b!B67bE{f z*@dIy|7q*y)LC}xr2q6>qSt3G5ihmoZQy>eO8Z{2Je{Qmc|tJmCCgKg--Kwg#QO5I z;Wr|hEW=hfUqqJ5=TG6Kyit{sxq~IRlG7F9w3e6+@vT!4E1>mC<3Ca&GG_jt{)N9b zeL3m*F+a@fB@a`H3&gAcBK~_Ch>xcXnCh{9c_5zw;?I+gPnz7iZaxX};O2KXpxZPEBc#LJ6;-10J4^Cw(`zY+bj%K7QwmzSNhf#l%g zA^7Fx;v7&Ni2po5>vbvrITtJk!FYLLl9+hEyr5JA@$=8XC+Cj$%S%^{kA{qn+=2tT<09VQ0iQeq;{BQUl7MIw%&Q}P*$$-z{aN&-rsL<+37^z- zyuUL(sp)us7kpCF@qW2arKaQkUGdci(fP}qXuZ1ep9Ua4zB@jtX=%av_npqzZZR}>G<>X#wRr$@9%?8YC7KE7oXI0yuTklscC7! z>-MKFH66c>1Mo>r$Dc=D=%uEm1(;*{W$&!_<9`2KM|kQbQ%ci zkVju?I^I7CpVV}`e=(|(H68DthEHlb6`Tg-8nj;1 z`H$4JwBU8~=}S#Z3;Ji!mztIq^v|R(H7zaZpG9A4T3XOQo4(Yvw4nbw`cl)<3+PKtOAGq1r!O@vE$E*|Uus%f(0>DcscC6J|9twR#7PVKZ=^q3 zz2*Id_+(8IKm^D!vJR(%Gk~;8;7m{%Q~_1NS>SAN4mcOceP0d8K2QUk4=w-~f|{Tf zNCUM&9dHpy1j(QRNCGL~VsHsa2X#R`P#-h^4M8K&7&HNwf~KGu$N-mt=AZ>=2`&e% zKx@zjTmjmGcA!1z05U;GkOevcxwqv$mU~w2Pq`PngC3wKkb6h&6S*g({-xHXuBC>h zUZpmr4yER#zND6%ralDr zc!_=m(A-N*Y=)ieC7yn|mssghFR^l>mssUvFR|)dUgBBFU?F(k#Yya0pT@ZK&#mVA z=WZzPKkq>=@x1+BVzsKyU#&-MyjpRL%Q=pRYU_{h55`tIeCn8BeDwyWj;}uE)G_7G zx$Nh~*LW`$fBu0Ozrb{qb6;>*%pbhg1+O{(g*&}OJ_@OBHMe?+wX$RJwYCKK4>4Y+ zTYwjOiFMHKqB>q8w@+evQxKR-U9MA~nyEhlu!apggPEYrOKf~AV6B^Q%%wF!FEHOr zY)Z{Ey9Y3z%N_^h*}RXJ*rGj{3OIku${^FtqvaYe@p57$zgCsJ#MW~hZ~ZWQub0>+ z)%DvHI4f~iuzpwMc!_Ph0pi;d+inQB39R)J+cVyt@%D=Wxp!y;hI@&b)OKcDz`Q!9 z0p``Q&`ZoBhpbWHHZQSLBFF%&f9D;5J;4Z&4{ip(15bb#!A|f#_`8?^>$YCR~oA};(6S14x0`lE-9asV$2b^!yU%lkb6##!G zVKaGd?hUR1y~Z-XjjU$OTYD!UuNB2rdD2V0y=@Afb+jhPA@Z$mwyY;>E-7E8oc}tpjKY~ zmzTWt41iu+F9jU|^WTadThVPRb+&aW_%E;lP-k2J0>1N-x19#K<~FXmjk#{)xNTDa z^W1hfcnq*E+ujDBd&%3A0Qqlk2-*QO*q#dtz+!MOV2<0L13Lh7-2OMf9A9CMuQ10~ zsF7E?fWcrAxB=V-_;VJoJPTO2SN4LB0ebJK3@!rAL02#YOaNSS2iM&3JMav61-uWw z@seNl!G(Zpy~;7K=74Jf_4X=t^eWeS^(nv_y!sYk4PIppUP}Sw_gY;*9lX{Zunw;= z&)2R8T<^8zfc1Xu1+W`@1peVAzkV9vny<44uX8`WJ^+jd*MXbB-QZ#HEZ7Rr=Jij( z4_@-lN`PA4$vW)J1bx65FdJ~}PLAElu{$|-XDN6aFz22B@RE0t>#iE0A!rYJgR24e z=&mAg2jJLU&jB>r^=I&R@GmcU_nCk-+1(7VCc6iNJa8jGr`->LHGmq}y$et`yT9_1 z--v*7z$M@c&<{)i^8m-au>x?tH+F-+0!ybpU$3$GqQT>^;u$ z9(DiTyWp^w{C-u?98jKw|kM|m%Ye>e|eEb zmwAzriC*Lvzw;tDz3D|3pXNn=+0l#Ka-A39&*wyL{fig5t-2Svy|))xvdD}4<~c8N z$CqB@uDV|2?h#((p5J(prQ5v7vY))jy)C@RZzp+?`yTKjzkAz@JaC2=d9afg`Tblk z^3W4rqTDK=|%QLyvVyPy$WZGp3+8p6$0U@|y%4 z-?_Hgubu6ZY_^)&24>ru?PYeCv)K#H-evY-v+JGh`h;0t*5rC!-!S`;*?&0OO@8}< z@ow@P3t}6aUFB?dtIzJ^t$&@fJt~^L!0d}=ZGJue;`%+GF}v05ezTvN{n6PgE1Ug| zvsdvWT$#^Rt<2gwUS;dp%j&zA)pzf6TwL$EX06_OTfOzRdh28B*2mVZkF8tZIqtZ= zi_P9^_HnZto$c4jY^k&Ttxo#yaQy-DTM^8Ap!}wS*t5-AJ_9YEfj!JW-0W1dg=UwS zeaNioIM8$)XgUrw9S53@gG|Rkb=+}-nw!lwJH%|B*?DGfHG99=HD`1d#mqUxKe}~x>X4jhCZuVWXpE;X@ zk-EvLYW8BYEzNc_D}fR>+3b9?x0!v=>{Dh-&F(dO$m|c!4y$A~&1{C*&SnRhonW@W z>@8;RGrP*{X0v;|(t%^o!SwX-9V z%~mtpz-(Kyz08g>n{RfZ*}Kd>Y<9ib9cJG%`-QV36V0A&Hr;G1vpviXH#^mAq1h#7 zA2R!l*{x>xoBh=6kIr6Q*=!xN&CO<;9bz`m>^!r#n!Vrb8nau>zGe1fvqzjAb-LM_ zW}BMLGCRO*uGu+e7n{A;?BixPn%!;oL$lvHJ37^D4YQ5Rwl~|y>=?5%&6b$G$Lvb8 z&zpVC>;bcfogGub?73#^nQdeCO0y%)PBU9<_71Zv%&s-N-R!$&KXZ00M(*peRn1;( zwx!u_W^>F=Hap+!ZDt=d`;^&IvwO`RGW&zG<0_d=Gn-+yv)MsrCzvfTdyCoo%&s!K z+3X&(WoEx~c6>#%7np5gHq&fBv*XOpHhYuVWo92WyTR;Evj@$7?QCwc*=lARm~Cse zm)TKf^UW?adzaaV&8|1Q!|Z!zzi{@NM6+j`O*h-hY!9=;v17and3(In5!FF$&>GYS z%|J)c9rOi5!DuiMOb2s85x5!L4wixkz$0KaSO+$NZD1GJ2R;CwfG@%KUh2pM;Dail zI;ahrf%>2|=m@%lzF;UA4JLx=U@j;EH-p>3Qt$wH1gr+@z$UN_>;n712jCO%CHUS; zy*dH-pbDrCYJ>Wq8E6eUg6^O%7z##%iC{XI3yQ$a;C8SSJOCa6tHC<332Xzqz&`K+ z_yl|jzV}i`B>*2(0o6fmP#-h{twBf79rOi5!DuiMOb2s85x5!L4wixkz$0KaSO+$N zZD1GJ2R;CwfG@%KUh3!s;DailI;aimgJz&L=m@%lzF;UA4JLx=U@j;EH-p>3Qt$wH z1gr+@z$UN_>;n712jCO%CHUS;9g_fjPz6*6wLyK*473IvL3hv>3N;1RGItOJ|CHn0oq10R4-z?a~AFLhi3@Ie(&9n=Q(K{L=AbOhZ& zUoaGm1{1+_Fc%boo5Ag1DR=-p0#<`{U=!E|c7c811Mms>5`6Eaj!ytSr~;~k+MvFd zI)s=Z#0(*3C^18c8A{AhVulhkl$fE-Kx@zubO(LGP%s)y1k=G>Py}uUw}YkN0q_V| z4c388U>n#4_JI$;C*Vu)y_cGk0DMpdR0p*|eb5ZF1|30n&=(8^qrpTl9n1wq;AU_; zSPC8hkAT%+9oPi6fn8u9_yBwYz69TUslyV052}Fbpf;!vnt|4!Bj^tLf}vnEmD0E-9cY4 z6pRKF!E`Ve6oH$;?O-W*06YR#gLPmN*amiiec%J|3HTCx&pw?1d{BjFg=;B8mP7as zBZ2QVZ{b}bp#r$cOBu2P8*zvRtL2^Iary2`wrx3dp1Aa-ua&%Xm+yM=gjUl`-!v9 zU_`fP&NFN8EYEbYzC6oie1_S@W*;!S)~xCEjOq1^>Gf>38-I3$S=Lg{_v{O1Ew8nv z!`jWxzt+BMT5Inf>oT2x-C(m*&3^0b`ZLU4Z1xJX_Rh85)?>Y`$9nsYWWBxXJV(9B zyq>fCp8L@CpKoe*o>}`Y=lPY^x9_5!-)sHPo#khpdcGGfG~3*))Hv7KVC%J^y7lck z8@gJ5q*<%e4YykVNwb#si>AkmricECdd~miy)N!Wi+^#u^*=ECowFOQo;GG$-_Ezu z&bM)q`R#lg?R*>Ud>ie28|{3X&UEpc(#^IrJHYHDv$vT2y|bG;nawe4{y&}N`hQwr zcA44LX1AJs->m7f#p+>;)x#F6hb>kQTkM^C%kSKATda<^?6SU{=OxL9ciER(ntk4l zmu8tQHoMu4m%iid%d$Uk+{@RyaejWP>%R4Dv)7n?)!A+5Vu{~2$L#mczuofQZu!0P zYvg7FT0ky@m;H&-EDQedy4g6clM1mvv&WzVfWvjOPqhtT(d7Z`({0}=6~~m z_5b1QTQ+Zg2B-6S%lvQKe)qPl4?66X^NXEs_7E1m_Kh`bdG2rR`ul(B>^p|I#S`|e*{|Ib#hf3~{h=UzI_&$;w^?^}Hyu>0Y_Lgzp5xw9YG@gLZA4vu&J zgMW7RFP7I|ZnnOi_d{FX4|h8MM_tUWced+>PEAc$JfJM|Lfb$ zn%>`3b^ULw{=PZr`rq36f4j!@|IyQ|)zNnuuK%6wYu|n4`rq4izW>Jck6dkbowNT; zGi&SnLmk)uVTjpH&i>2l{A4-b+&GjqvGy9ygN$$EyNh7WQlC#N8%--p2N}5@>-z23x zVf}wPo9do_NvS(r-|u7gZD%XmyelrYzFp_ERM$VPmf3sF+Ht3+x&G;P-P7H=C7n^- z`Ok25mUM=zv!pZjI)9~$%-V64cDw$WbswycUEL;CpY8nBE$`~PT)#$Bv$lRUtbS@(U7dfi8$bVAvumBb zptf1l=YsvNf8ix&uQO}wsegzEU20Zw{+hXFUv;)tOSA62NlL5e`e_5r+Pu=-K9yAa zZ2VsG8S-DR=8f`)XRLWC)5uB6ik6x;$V;l-7GGQGo*-ONRpN`JdxH7%j6NDa+e^CmYvPxjBz|ci zzQjwa`xxS@^QiE%VfBq!#o6E;HP9t8{`9$;IT|WNOeZV}i=dr}^kocd|Mtdpw2^=8SJ$zD%CcA!-+uTx$hr5393bSR-E}&p&sd=SdB>PP- zWdUD6DDMK_t-M0D58&^Ze=GbWE@s)cnO?{Yf4sqyOYD~u!L!ffN0!TT5=1s`hsSMV{)D^&XtKFRUwmtp^D z{#GttuA9&X-m zyy&=xehH-(^CNs)fbR(K*SJ2F#o0aCmL@I&x0q~Ij;@)r@^D=%r}2STr&dx zS>|tme>S|Lou|G+G_(eo?__!q*XbBorn#NRA2cAmv@ELzpYNNp#ZKU&Y1;QtN& z3!Oi5TkP1#qry3MKT9R`8G*lpSrv$(KD;XU58&S{e)tFQKf!(TM{8^&{#WtKd^W*% zT0F-^b{T&e{-$w!k++O*hrcb{<|*~{383C0Us%ja_?O0+W8|=l_fp_r1&;m3V(!QP zopCwOKV!T?Q+OJuKY+x2;FaN=v%+ZX`+)cgzr?&^d^7ed;iyT6h~ z<4>o*lhXNx#JIdz2G46`d<@*`p{5)=$(^(2UHGluYA%P%*h`*Q^8xH1T}&<9UaCW_ z%2?K2`nA%WRo*nfGvU#gK5&~)t-g+He7}Idf55Nzshe}HfdT)ZK>Xlw z@#}tTxjY+)(S7x&pZ-Gq*P>pJ9xHXudGy#VX#X!emO4HfvlAY@?rz8BSyt<<06!3j zIS7x~c|L;6`KjSrWiCdKJ?#9-t+sUzUkB#!k629F^Z>sx#%ohw(RtRc1ZSRd&e~@M z{Oor}V`Sep-DMvx6%wO;Y#P`I&I4&+FW`9L z2_CtzCqTS}ref(chlC8QTuA(_;kpOFd%)i?ztoV#{{k~N5MSiRJ=P_m7(eT$=P5D& zYjinAeCn6IRo0SyEa8^{|E`F*~b(9Xk5MBJm&-E^Ep)y$PY!UXXU=CunGTH=HCft9W>@UXN4!py<<8iHN#KdUQ;f4zvFVAni4aKKJhiB zeymn%>0V8r^VO=xc(U<&@Koci0=!!wW+>y|Tg-$&%v!j-2go_s8-E7A6a7{BV|3cHvYJ1Kc(nC7dQKx ztZ#`EEYZ>qhOd`ak31XE#3n`HRc%pDD$UTKqNtUVKrZ#h>}_#V@dY=gGf~IdL45h=OG^HQ#L4>Za>wPDACKx9wJ8f+o+)$X-|-x0 z{>RLxjyvz{<3IP0U9Z1c{O!j-e|&w;eA~s(IKg_wJug!7uOwdbJ?xH~dGhy#lp?G9 zIj)YPIz;WU_t#{1-W#W>jmAaoG5O|S@8&b%ESpc+agRHCe9;USw_vlg`Tup?`1tq4 zlw$d}S=7ai{M)SKty{dV3tGAOq9ezTk6-5n_q+Ic(~ln?_nwh{ng;l;YMFKl`}XNr`*U zO(~Xn%lzfvrXAdDQj&2LibB`^NO^IJa_b$R}!rGfD>#y?|R z_Q|6yHhyU`wL5Y#?u-9C*$889fV9vwVr=zHlIx&@%%OwkBgFj(@Hsen){*0YJTjB!axr{&S z`B$Xacy8Qy3F8|WFR}5GxbYQ?lV96`HohWmyp(bDZP(JqOXJ4N7~kvp?Ju$Mvhw52 zk{LhX`5mgcar(5_{F|jSPJLybX5;B`df;<)4wxcn8n#TE)iGC>9`Eirt!~&Gv!}0 z`^{G{&i*>MsSe10@KK*1IpSr#D#%=vtmN5RZ=TFFHyhMlnmL;+Iw_L&aHqW0} zthq^m-%|27eOs0?{)*@4@eJWy)?)g#EMxpt&z~gk#jg1+%VOuhJel#=J%2Lw&AFuc zmnX;Oe|b9NyF7o&*Nm4jmM$TI@odK5@ce7DY&<(|JeTn|J%8G5Ixd5>*!(UpVf<~+ zpZ=a3;lKXnKJ%5(Y z+m0`rR?(}xQ}3Tv$&A0xIQuu}@>`{YK>qZTmwn***Y#k$?CAL`k1_pQWi$R4&!2OT z9iJ^R%+J=hRW9QndH&ozIxd5LtK8W9Ta_^WSI@t`GJZYQ9Ur~_TdiQ6=kL6c;@9T4 zS}~2eZ(K;vZ&k|p-#q_@3*aRd5zx0)8RLKV{P}s&F|pIqvJ+hXt&m!4lJS3BAQ$7eJCmFE{7I64RkjOQ}`jpr|DdxG&2#{c2@3+4U$XcK)3WqqV2 zFZpOr#zbBE7``RcpD;#1Gx;iaDcJiP=Ev19pj z6BhSJm^+JnJaAV?=7@LcSxd5m6UFh3Q4EkdOR&kt_HzDB(06m9Gu_ zrrCDMgIsDo*p3%}8V}#J-9Wx1C={3Ho$fB*R-S@-`L^;2BSlWuRz6Fplx^ixgG$*} zJ|F1h+R7(^N*Y%arqgU&2d0y2n-0^-wQT@9Pve>}&C@xz-!=oE-!#`vvv#@9ButMz zKJ73#;`#htC13y62nU?3omJ>Y&mf%$7kG!ROXsh!WWD^~U@kHFlE5YQ70e~}5132r zpD>r$PcTiaT?D3ywM&6%V(m_YX=3fpj3(CZEPQ^`l0b4FS^EYYi6=te5J1lvjRYl7`|!!*Hm^4VAuY_}h#3AU5{UK4D05T*&XD}!l*?GC|Q zf}g=$f`?%)!Ea$ML7r-E<=XuSJ457bFYE6&T@gq%A5VO${YWndi~&7B9x*3v{C%09 z%BRc6miA9`jHcWEC77n$ej7~FZT~7v(`_$bM`*h3--Kzp?f1bn-S&TmX}aw{fN8qz zKZ0qx?LUEOy6xGsT)OSQjHcV+3`YH?rEw`gh&MjvV$xg;mVg4VjF^))OS#Ae$qJKl zhllBE${p6iH02Jmb!o~SHo`RJ4qITFa)+%jO}WDkn5NueCrnfBAUm|C++i7+i%)qCX|4yG!Ah`Q4n0{r?kZ<4=MYUfQ}$m?Ia9s} z(v&lwglWo|&%!k2%;#X5a^{OLO*!*VFiko0WtgU%`3g)^&U_uFDQCVBO*!-Jqbcit z&@8!p%5@SsCO+kZqbQ`urrhy1m?qls4wxp|@gA5a z+VNhPCff0S*y(Zyc6xmK{iN44$}Etdm7j zJpkKOoi-qcn3J~K$|cBs+9{iOO|a7-m?qdsPNQqtN!}-QEj!8ObuByP!Zg87vKwlG zou}K%~-v1NiM+~pJYCX6@X%p2Nn}^(pEXk zD|7*}iX_>&Aze+f^A#{nvU3NRCfT_YOq1-~6{bmc?g`T*JNJfZlAZg*G|A3`VVY#; zVK7ay^VKj-vNLZ$u1q^$gU@eP5|`v=yzxmsNMb7iTTz{5U_CJ>Z-voPm3JUs8oDGC zuSs^1+Sk;&oD0*`y3~MaYF%o=G_@{uV47N&beN{rMeY$ztqbovF10QhFiovX%V=s{ z+Tin>tq2t8VLY+s*V#=P`@uo59UO`co`_W_bR*G}HV=Q_9{Cb1A(Cb15B! zxs=L|riA7RdTdvz4!>DhAh~{cV$HuOgM`|EEYJY-hz*{U6}nMdv#zqkX@XtZ&0KsvO+f^DY1QY8%0-B>NX9gYu0ThOjGJM2c{`?n+MaBx)s7S zrEUvhno_r$V4705TVR?}H+gDmO5J#Bx=o{-J~cDaMr}9rqx~cJx!~-?0cG4ciHzet?sh#X+b!Xpm zX?2%Pz}(Z-s8(PmQF4t9g}Knnd-tLELwrq!bXOw;NiJDsN0BLk*s^u;|HUFZ+q;kabFHXcB!d8q89-mcUwF-48nwIQd7AG(&{ODoUT^SDlko}=Q%Jim zr)q^Rz|!g|Z*rPePkHOtw0iD@X<9w^z+75;VJ@wAVJ@u$FkP*lAHrN(AH!T)pTb;P zUmQ*AYkYpjinz4$@y42eaX(VY0b@W9kQW;~6_YPmSmZ0OB2d%1av)46dF4=;PV&kT zFrDO;qhWqVDf?GC7g_>}K>=9o6*8tR*-rW>J$KTlVD6;66Wd8eNq5qXDNG4-3N2$dypgiXZh}P72p3oJ3cVm&CGJUm((i{ zyBn-0Qd-2B6a3e|Oy>;cD?JsG`rrSh-TNj0Zg;&EqkA4*IV{J z&8|0lpL-VdZUb{?83fa{>zxC0=Nrip{@Ns$-P$g(>@G?4{7Wi&Nqs2nORAFH5hA6X zD!US5I9As%nw{LyE<3ql_r=lds1M8TJC5*QxYK2~A-Hy9 z$SBWC8qf!u4|0f5QU|kDmz&- zzPE3ljJ50rw1;bU1A4$Ty8-=Rn%#gwFwJg&)Q48)0NL#{y8&Zhn%#h0m}WO1FPhze zsnP5PERJS3fckK2H(&`z_?v9)HjNKtx0#H#dr5=$V|Rn~L`pkFcFog?NhLe6mfgS$ z;F{gQdN9pyU{jc8H?TQOvm3~6=dv3pyPak?FcYTP4eSil>;`s=W;gK4Xm$f9M6(-6 zeYorfPU8rF^(?n`tGNH7?;e*NB%?!K(okl4$ziacNNK0aPS(sPyKHPUyCZPTZjg*> zc7rOxG`m4nVVd0_b~~5dpc*jEZct5_W;dt~OtTw=a_)IIs6jNlL0r#0?*>sHF1ta! zIKqFri_7lmOJdojCwhK*MK39b->*uqN_H|sX{X9AmzauVC)TnXv={EO`w-@``xNG~ z`vT^&W4E*HWVdtK{Q%SKzUDM|15DrO2XBUHc7sb{`j#Hf9ovxgaGm`SnW=t}I7DWupIe5=O!afi5SgidZW$so z)hvg|O!afi5SgjwJ49xxt2u<3x_pPoOm#Jfd}+a@{9_^d)%4fmrj?^U0YHAnCqqCH==Tya~+U1-JQ|)qU zz*M`OnlRNarw&YOB_|!G+T}EWsdhO{V5(hC228c%J~i!f+Q2T*tF?!zb~#zF+Um=W zYM0XkU%Bt9(>LRZ*X}{I;*(YS8ZT+~r`Yvi8FA4jAIas8;615%8QO9FleTlHJ7R~) z?yTAkWB+xE4eJBbY8y5HrqwoV2uu|lHXNpk4I2eh#khY>v0?1pPO)L^-A=J#vUjUu z!)C%%v0-yys@Sl3Fs-&>g)r4=*utnf!)}7<3JiM)c9v*2>|vPRx5FNV>8cD{#j(eH zTaqr-9czC2ZdBtbn10Ypn$Pnh{Seq53*c^)UE)-g=eNiuj+v;HnzKqAUI+mfwy^Du$g{8^Nhwp&tT|9gzspwrid=I{IcX3^*|8XGJ{JM#r zUzaCK-Kt(vK096A8fbVV7NB?W1@wud3jG!<0%OOcwttV9&7f*GVm?eY8Bq+=3L8-Z z)BStIVwhIMh+AP=2P0&+QB6kN1yfB%$lakzjJOY``}c?kVY+{hU{-Gb9H@z-3BERPTltX%aGm`~nW?V)NSUdw{79LpuKY-u zsjmD;nW<(uQf8_vKT>9@`HqyC>K-&w^wWGt%1kxOk&nYP%aLnfy7D8RfoZ-Y*TZz> zM{a=W9yD?@EKO!UvJ|F!(8%qiqANf0HGJjvpt{9);#YnQIp=|VFKGh5?^&0gV!sYR#Q)l!S9*wuSss@T=S}|I-^d9>G?+0 zgXtbLsu4_UZ&Xv5USm{qjy+}%sw*oLYku7&sJ09|=q1fd$Fi%}l}d@Wvms}m^1ks~ zh~ivNtyHDmN26rTRn1YNzv?xLm3AtPl9kr`Xw+_)%jzwd%Vj^zU}io5KQl*QJ;~$z6Xsuj4yT{9VDyGK(2zn?tZ(Eq&B6=jM*VtmNF)@v-@bY)Tz#X zw9HiRqtS8>y^luAOtmUT%S^Q@M$1e!%h57Zt%}hyQ>}{8GE=RJ(ahB4J6dL{S&se| zrdf_Y0@JD({Uc2C9g_&t`)EuuOn1;R6=7*|AC0L5(;ak7RnpP>Xw13z%I%=_7(3=Z zI!w+-JilI|mo(!Jtn8*T&uDX3leb{Ghy0eg(SZ|K({7B+T(ui3vsCTI$}Cm8u`(0Y zZmiByau{0!pK3R@CQP*(TL-4vjZKHCc4HgBv{uG8fvI+5GhnLS*p@KWZfqNvYB#n$ zOtl-E1=BrfY&J}_8`}e>d(hZkQSHX|!&hz(swYRr?LqbGpjQKs;UyLAz_tOB1;_Hc zw35Hv36j0s8Gg$W_{o~>LE}0Tq}q)e08_=r4S}g*(4Hf|bB6&p7brizW515?Gu&4a08;|gJ_*tmr-Rczc%Fx6??Em3vG-3D{#dlaU7 z(707Fy>G`o1#{O}%dyAoLG|+S#+qM`r(C@pFvd%|@eno-$eKi(>_JsfPZT|IbK~5_ zmrI;{W;=^}nyMW?AFgVSUkp<<$KMK5HODW3shZ>Of~lJ0m%&uc@%O=0&G8SyRL$`# zV4D5-l`ze8{NpfHbNm{ZsyY4{n5sE`JxtXczX6se)jobRD(QVXz7*!pcQC5l_%h=B z4C7q3?k3t+A?55Hx4z;`TlZw|}&%;!$+>J0*D|ZV_)ymxpQ?+t;z*Mc=oiJ4^cMnXn%iRl8wQ}Eusam-QV5(N` zhcHzu_hXoNc?#Om&;s52m_J90b$n>BJnEDmZZ@OrNI{$3(T9DA|^Kp4OK+$<7;Ve*LPR zU%v*Z<0Z|?#5Mr3g3*=?k?i@r%kv=c?;N55an`iUlbNe_c`{3Vp61CcwdV4erPD4? zXDK^OULHQxE^jJKwad$gsdjm@VX9qT0ZeNyZ$3=5%PWSdc6lW*)h=%_Ots6q6{gzd zErIFtH195$YL~YRrq9#7`=Z+AJ&3Q|^R&LqI9|IfwCVx+c}WEY*c{M?IF8j_U7n|> zgCw+D0m@|PB+ay&Br{j-Cdn*Su}LyZt+q+b(pB3enWZW=X$4Fbo3s+9icNYPrix8k z15?E&Jp)t4Cas65Vv{z&RIy2$VXD}qQkW_>X**1Hn)F&!ok_c4?rNXG+*uC8+*!Wm z2)`NkVf0y0UsR7ZzkWVCiC)EClKk77`intcEP!`xeFr&(UViJ`z%lj)Ke-T}YByQl z1XP{Lx4=}B$+yAu4Sw<+Fx6!8JurO}n0zlx)tP)hO!J!j5KJ|h{4h-4;3q!{(>M6Z ztH@g4;3q$Y&u^OTo__T=lhK1fl*eCxy?cYNFRLgm0r0H9JeM(9Fj$V{~crZ7{N?-ZG-W;sQkn40Aj zd1C77P1y+3e5Y)IX$?%-3e&r0$_`i>v-hX$gy~%~We@4-o52)$VwS&asET9mn%(5Q z9~|_OCZktc$o4OySicNhFrix8H2vfzT z$~9E6sfS>y*i`D+DK=GRtcp#QI@SuAdIYA5P5lw3id~xsQ^l@LhN)uL%B)qfYb(K2 zr)#T5)w%Xun4a(244A%!UfU9;wRdeBm|o-B_8fc6TWEticw^0Pkm&ghDuSwB(jxYq z1~pJo<{52gL(W3I^r+*w){V2bYn&)=YEG*LS2d^AgQ=R+8o^Y}X-#3O=CtN8RdZS^ zn5sFgEllfgS|&`@oYonp*-z^R(@dvb2~#zv^?|9H(+0p)&1pkms^+xeur#TJmHS;IKRImJLFjXmkCQSGE{5deqDt{hKDP|4FV&)% z=HCX>JwE>qve!Lc|IWzKJ-)#jvRVQ}V^nFd((UmLWWA&%0J*bD8I!fKJ$}XnxYoi9 znW^saGi0V(6*FX}S`{-2VOkY4WTu+s44J7`#SEFL<~u`Xs#U@FA(roqdtjR7jC)~P z6*KOKX;sX42&OAL<6)Rq#f(Q`y2sC01xu6qnDG=$_xKrWNk=PX#`E~f?ePr`;*k}J zHNOGRzXr1MyS=2mW!U{-eJp_dB{%&Ri+e@>eG;1Tw zWwiz7a@h)Vx$JRHa#aV0s_T+6&YBXx6)AulLcc1Ne^KM-8*ctPaS)i@#wT zcONxGH*Insv8VDcr2U2s;ODvTNoLE+>g;FBD(ZbSTUJr4Vz#WJR>f>lN2_ACXs21u zmQ~dIXtu1P-bb@pMOPKGSw)xc>>pv8<#mZL&GNcrm{!Gg6=9n1b(LUR71zlc)|9*F zIx4``$90m)Me36Z(EI2*D!~1l$Lrd|+_71(^EED;BmAb^8PRv>h6Q-y?y`nCD8gRb zFwaXG&Q8=YAM_(G+ESy$*8XVsctllCoxtB>XxM{syW{4h!ByosO<}6-oaQjqc1|mp zYCESbOtqbp2~%z7bcU(6bGpHFkD7BOOlxUQADC)8X8=sKoihZc+RhmcQ*Gyrf~h`p zB>yzgXU+taQXS_^hPm_I1k*ci&Mh#l(mA)m+%@jt*kkXwm3U*#Z@8H3MagAe(#`x; zl7~63o7C`<^6VBC2 z>iksAv@5uuK-I25W~tg0$Sk!c3z((Tu0UrgITSpPPqi!92vh9}w!pL|3%0_vCJT1J zw1x_H!c@D0Juua-U@uIyD|i>C+7%ptsdfb)!t~pif{$UUo&NnW{WhlHi>P)5Uo%?n z+n7eOd&FyZ2(1o-BVN+Aojt!%BK#n6(Izz|yNPHgHFm0Ick%UQ1gdt|%PyyiU4I0o z)pot?a$0Tk5@D*?Jh_r8Hc#fMip`ThaZUIUowG_Ofiop~8BcfMXQcRqHq1g*+>gJ7!hyc~}8Gt$eye>Q4^H`e?{HBhb& z;J2f0;kObSWdNCRvveNq8ocA5fW%UD0 zccdF2POlp(z*MgrQempn4X4BOxp_lnm_9deIGgPCxp_l1d`F*~jq=E<2M|s0HyY!f zn~k!x&q3H^vMgl`ExD@x*2)cs;X3>Ivf5e;^JTTQ7Us)pYc0%|)z;kRJH5E0=F4hp zEzFnI)>@b^tF2kim(|v_n=h-axy_f=*1KmutL?I!p8?amXMRgq8Z-6hvxaV$nJ>>n zcRn(6wJ?7qOrNUr$G}vV`MDhHXOzU%!ZN(E<~J%J`(m)zOPa!+)o2OGj|DJanW@j; zS~+!-b&58th554XPEA>Dr<+@r6g=sL&tx&G3GbpSF(|=4m6r$$Hc#G2n|zvunyfam?lU&U)dTnj3w(Lr#?OByBBAyu+l5Aa(^ja2}m zALr#S?wqW-ann}+nzCwJG>wB)+oG8;)wXC3OtmeV2UBf}3Sp{k(L$JNTXYjlwJo{@ zrrH+W0aI;@?t!VcMfbu~+oJnns%_CjFx9r`VVG)L^e9ZV)xS2Y+7>;9Pqi&t3sW77 zo+oM5wrC^F`QBx;oVJbS?v6FTF}uf)+|xgfcG}8k-^Nuz4KHbA8J1nSaboNM)mHkf zX6y8T|5)nAP21v)1gN&fJ7B79@lKd(Tf7IR+7|DHskX&3ch$D|08F(l{t%|x7Jm#= zZHvEvskX&m!&KYi?_jE}{sn*4b^$J@?Scw0)pkKDOtoEbI!v`)P#LD$E;t*eI?CS* zb=oet0OowH7%i`D4xU)^8@EAMYT!ry;+oW~{PsuVEYQPC8q*%z56I5SdGz}ynV0-r znftPJwzyB&+_-7GkU2SR7uJKRwhJ4t)pp?!m}>+G17^4S7zcF?D z0-vhO{S+d0&M0%^rtKo;VqI+Sg z?V|f(s_mkOVXEz-M`5b%qE#@}cF|KX)ppTZm}bv?r?VqAwUNukCs~vF0~khOVu^Sf{JJk2HP|tn`xj9R|Pg8n7gGfbI$M z8G-N4T9*X;C!&%oHD2-{0s7nQB`aaNJCw+?PE{^>2Bs>P$o#Z|OE$n%<&w=X)v=@$ zraG2vhpBocufbHk5_vADdL?hcRK1e@FjcSQJ(#LjLM=JXO3I>|l^nw7ubJifFY<2` zqEDyB;*B-GF;DWwyTN{N5Xj7;EfJCy?ffj8e9PIy%RTg;Z~C`7zDl|S$4!rSxyei(Q`R^E_<2ZwU0h@y^y%Aulyq9V>DnUI0W%s7VukKIwh z6~$dIyyZ?p!hHn8k%Y-X!sUX1>w$_2D=NCE=&FGI{+_DpCh_&%|KIWR9s8N;uC9Kn zy1FMbB%nRh7<1D`f!s_RizwL7H1;!%ew;QHbFc(e*aD7u+FpDE+0S9iJH0iI!-+T( zUC6~xVUqT5gKt88$1NBbd2XZ*Wi;ke5XY@p0Tm{-agLcmtj%<*Z z88JMJiFgXn;WZRv5$LxWbs#@8J^}lfVO!pr^wG@I&<(V6<^bG^0La742QV45b!HK$ zYbJHgtOt3Rxd(?W?=0Fns{>8~$3E*kaGuY)8031^wHS+lb7oW+dQ;xF+%4q4uk*7yVd1dg%f0`$V= zVCz_WN2voRm#U=EqvfGv0rpW-VV0OwL^8)SigEIkWd&>Ngb zr2}yj?tmX5#PJ{|;%U5y>6nWpScO__!VY|d&#@mrTi&u3I0h%+G@Ofz&=)=o#%&md zAR;J48k6xHUc($LzzS5O5nJ&-KEpozfL|@|JTKbeB%F<|=!5>a4mV>Y0vL+~9>OI2 z4KHB^O0g8HQHRZV2OncEzQr$=cYaG8i;g%Q=b;BK!!;O!;kXBRh+;e*!IO9%ucHVH z@g~+{J>JF#*p098BW%mN;3%}m$v6kya51jL^%#abk&SUk;$b|FzvE@hL>ZQ04eIe0 z{)t`q0^i}F~|5l zU9=AeaLDp5=2#aWixY4v*!SXY=z}XT07EexqmYX*l6VLcF$FK+b$(6vHtJxdHG4q4u%t#B+(z^UkjZs>z6FaSd_9HWqnFp_u(6EOuZ;C0Nwe3YXKD^UwpA;TjCVaNL7DL@^$Z;7L3W`f)`O7UE5C9<5l9xA6gX<7@l~+w#776x!ot zoP%z-7+2zY48xts#yBMLFdoO>@iJzj49l_>a#4db+?{LuaRVmjtx309#N zo3H~P;dAWA&z85cC5{6*tz>_d-N5lxUIX%3ITAUDU;@}r<=??^RThCfR;~v1SCYTV zZ!K?CE1U${UPZgBXm=Iut{Q>S7=sw7uj&!d<|_K7im_L<5Gz2Qsu&AZZ{Z!#?kf7G zioU6$Z>s5=YWk*{zNw~f`1zi<`a;n5YWk*{zNsFLY%mV0AI0;S3EEtp!8Uw>gO+z~ zdz=f}yOus(%lKJKZr9S6Yo~zYU0aGbLI16N8}Ea@Tg&zt+LLL6W6=ThU*>dl0(r>v zz$NI9YeD-mH-nsHMu8k>#)7tH#)JK4CV_otXm^JFXJ~tde$6ZbIm%R`4jZr)@8V;S zr_9%2Ol4?WO$)R|7XFCSK)Y(Xq8Ba$IjgxI^ivIOs-aCaw5f(R)zGFI+EhcEY90sU ztmXy0hFKslHRQC0+|TEImC_oYqf_|-?jA!r?rlAN6upDbZj%sO7?RMNkSEss8|hI(=XH;O{#f@cUcpS1VhL6vgZ0>o_dpKTeSvTBv*m5@;3zOw8^}QeW3_?4 zXdnj-uL zG^XMW6k!3%!8qK&INY!a+p!b7u@47u$ntJ%1;*h<#^J_Oa1OenH!jDu7=qhyH*zoz z2|S3$@D!fMYnY9BSccW8#YSwy2lxzM;d>mkyqj9$7#xpNa1OenH!jDu7=qhyH*zoz z2|S3$@D!fMYnY9BSccW8#YSwy2lxzM;d>mkyqjC%7#xpNa1OenH~PVc8*nq2k2W(m zZsxkWIf_CsS8skC%txDF#55FRAy%LY>+lwK;6v=e*Z2X4E$>^caU440G;~5Y^uZMv zfT0+UQOMzyGI*-&|J2zl|w64NqYXSf`knpJ%l#PJr)Q z7xTBRiuqkjC44Ge(i=YTsc=al9s%2yJcFrt71UG0r?&H2G-og zScPhA1AjZJl<%SO^Pje*?7Ord_|_jk_i0EY$drtgZr|rBBI2T=UJ%-};qxoR<8h#mDD$5!v3k&Ma!jc_kVQEno zUrO-MIqFkZS!j{P7bsb|Vv>1TzUs$Az2vOjnrPWnvx2TbUUIf+OKsWm`_ba^8c$17 zx5_W{%i>dAUN7%VRKc$QORGF;uQbMNK_%rQc&aFpZR^dh+evj5lXz)K>VLJyX<%!; zpUfUw=%zqLZXQ%5$?(W=X7)&3?AtU#y_D6GgOdMrM7vn1DAIdvp}us=XUo5rAdg$< zvE&<+vRWIK-0j)Qyslo#;!|)I^bxg`NVaLIUdmG6IpEXyY)PXeWgrJ%K0-G`eKkQB zHp`Qz*;Y+9XysI%#iy{UWz@S+s$5WRs+8|IG~M3_3f*MOS0R39e=V%jJyOs{o;W)B zt{@8>LG=#xdR7bTjAm=d_vxCi(TX?=k6En;50YUZEAWaQ4>A;v9DnsxUFc!JliK#I zCSMg$>vxb`E*xm06V&({=x!}X<7~}8&|}riB(rKqX|Em%ZCNVs?Ce9nd%z>x48{dP z3EOf=@?`@aS?ZezEU;CLI$jThN4~wG3Qtjc*<+%UBy!H1798D?LzPJFM75TNmJc)= znX$)~)j!DQDgC;Kjk7%Np?j=b%sxF!s_d6(6?z4TU!@W$A$8e%&%vvmD;!q?#pUHwUY+OzkZ>`EL|i`=|K%W-2L<< z>M8ZzqY+qSz~dWpN#+g<7-)n6}9SGiAD%hEOS@+$Q)mD!8=wz9%NnQ_CjDP8d#oE|JM}b3mekW=SyE3o$`Vg4ts&Gp#Hn?tsnuiM zBunLTdMz8l)6#*gf3w@}VeZncvfk=Fk266(!78^&y|>HLa4A?R7oAFZs`!D|M*Ple zcSs}dl!C?OS=L>$AXn_WWnp!YjYdgr_ox**XSK3M%Ti6pEbCrbSixE4mxYy6c`E1S zfJ94ECX#u|({3ubj&}&~e>$_nWW0eCmhhVbSZ>Fcu-Xm8ohZN~C`Bc1_UH_TN{1U!kN5C3|3=7zj<^8*aSMW&fTuAN zd6GC9mnA389h*w1 z4Se=zQa&aSQmZ@V5~~$Vec`a$+OqiShpb;~|&B2S;q$lS~G3@^yKmDwjCOPSWxs>l3Rg zeD+R>3j^bVQbK)OomjO|$Jwe(p3?H<&ko43$RjOJ5+`KAjcI=Kc)Sjs_2a>SJ_5b} z?06`cr`E{W`%cUm$NX!5Hv@Rze%BIae`%5>DB}1k?l$!zR zuAhuYCBu4uxuG$kWI)alQyz*3^(pAYi9mK(QsT2qrT$QYE|OOG>>qU;3kP(42Xq{d zN^>axMdE0l9zJeth70k}s@$C3&i~rRWU_j3%&hZD`6V_+{Q`QfS$(P=9%Ows5X=7Sm^asPFD;|x6 zj>Pv%saswU2Sj#{P=(yg=BDe_ftOK6LwicB7OB zWp0v(&;CKjW2#Rm&vWyo$5&qHe$xeMsl=b>bhl|Qae+QSr#z((*Qqa> ziZ{)7UOZ}MaGlS*lrzDb?THgP(Rk2o@63iye~by5!{>N@r9ETZ_UYprBY(n5Ju>$9 zQXW+&2e0_-`Na8wuo=&3S&KN5n;nfZB;9z7&X|dV0dqV)dy}kBoKzj?l!x8hp)b7l8=Hg4a9)DbXgX(u?u)qJv`jJFP&!|p$(qvfoUnp|F*@LM+!s){$ ze}c7M@6YKjlaElc`SFiU6}b76;~N*$XNQxYaUo}X==_Wendz1G$?=)Ntd8$ni372u zPMK~mmlHF9ed>G(hnyKDE$#M)n~Zn4{;60E0H^%O`LtP;I|pRSqvmo(dp?r#sJa=U z>WsZY#WJ?!k+D_#qD}(R@}j>WF#cXW-gQ0;oaUK)6$H70MnX9OH`cSglb?c6ZmycX zo$^p_L?4o=KNLwNRh>;^=>ro-o%35?Ukg(4T<3mB#$$og9nSg_5Fu4Xfm2^3 zV7ilhyu^k^nQ!zNow1jz^0>JnO3O}IpIBWK zn#6@cE)q_h49fYQI1-2Q)G_+(C2IRrM2}FPy-ealsa76odGfo>bK>)I!g>gpax=R) z=aYN+G}m)t_j(}nv2%3J`51K*X6oZ)k{!F{(U>`b((4A%y0izv2*{e$CGon z>$cy$A6c)?2kzeU^b}<3OC`+-Z(`?m$Fx5dhz0e8qswEzx&FrVV5Dh!K8}TsoF9j2 zpWJNd1nBm~oaxczGZqbp)bGS$d%6C{;=u$HimLB`iJktD`@vW|q)MIqsQBJQGQjrp zRCzQKRbA?{m#R2rGOX{%V(#@v-=DiVMsc>9Y^2m}5~Ba>lMUv0NQx z|5YZAhjK`e&n}WUnhfak-DmHTIOV*<(D{s~oHN#^u8(FgQC}LCKjBQ5)VEf}&IF*} zA944n?j~h_a{sO8F4=UDU8~}FP@gh-|8jS$?_YfOYF%zxq}yX|Uf4b@mG~1}Uvu(h z(P!^baZX%c^3(DnXWe}5B+{K!3~(sKw4g;KDl1W4WWtE zdpRl6_rHmJZjdA-mhndHjvpDHiF_s;Ri3dcbZkb1$ya{V%pgAdfGT$ejDG)+2pyR( z<$gHf3=jHupNgBmze|M1H@ja;jB_f`_Xmk^FsN(P^RJ548|1XK(w_*2)ZMEbPrbwi z0W+ZWcuy1r%>~zIza{07ka+`O;;3_lGWA7|yx;qmtj~m^y3fg{#7*X7Ro-MiPQ;G9 zUzPXY2~HU2{NJYIVDJGM?><|_Np9HWNXXA2DR+junV%9#CY+|@BgK3rZ-Uu=rL3Qd z=jr?Rv{d3x{APYn6b8a!)nz_g^+(~6e5(E~)IV*I_PnjO4<()P`Z00Rc{^Z^Kk2;v zXMK4;oRs@>*)#D*iJf#4zo%m7{7lPA{$#%MhQ^8Y*3S4Qxy{~R6Pp>;UEfsb#?9U@ z$XgHn6NZWGPWE@?{nUZ9cJ8?XyTkOWs)EF5d`g~31$IS_% z-;XBqof|?u9+U3js$m-TP%zKc^=X2KzJhMN_)Fh~@oHG9HMi zIf{6dic==RroJXWAK4}4h28maKs?Z$^-FYYE`&Y9*w-wFmqtBbizp0ONwpn?y(2Yap z4Yr=olZEDX#FVEj=b^Xf^2zl}-UI3TkyOOoPMZEEHWfJQhs})V#^#RNXMae(xO8&? zkdsvJKNTsA>sw4yzcYQB_b==_TaUnu{U+NJyZ3jMI!@>xP!6)!=$IKp?kM&C-RZ!I z1I~o(vp-;c_s4m(XRC_C?*0AuIu3U);Eu!H-b@dyFYo6In_ORaOWfrBmY;{P-W~=;TWgE)27?u&aQeNI)?Th>D8V7-LP;6oe!uF^x7x zO=FuKF)dUeASQ)GjWuar6|ANuMx%K}t8HTbk!TGjn1a~;AX;CWZW5w~eZS}2=b68| z{Ozy5&rjKzd+*%8=bn4+Ip>~p@7Y&>@@kW?o*D52W0Fs~KWpT_d8YA}Hzt1YmTl+! z@drO{NSi(Vq?2Y$KWUD!Gw05nIb-&d#>_~N@wq>nX$b#G!ZfZLIn&xWe1fK2te>Bd zbe~FkI;^pQrhQ4mo(n%A;e-pnqx4f`o^D`^tbut zl!m&LY+cHvx|Cd9N_Uh}?n}O=FFiH!$u;pQHGS=^Yoo8OjpJ(SIKHNisdXi$)#R97 zm*a$*95d?rQK(CqUzf6=F6E3Ur3|5kHN8KxrscEhN}OGjV^Liz=hUSvsY_W}mvUv4 zQtsQbnwFN=mH9wjnGe>K`A}V%t7^*JW=y{piW?@OSetNjZNiG$gj;G8K3kjc7qtn0 zsR{8qxGibc)pVAm_4P@&)hFFupY%6TQpKnqs_nqnYdi4w_4WKieLdT1>v^&^VS8=D zk82ZtQk(ExZNl@l3I9@?@PZ~(z;9Q5_jlJPy<9({y|q>Et4;W2ZNjUyjlWUf(tp+` z{i?q4|EjHNpuX5|>y!4^C;hIz@;7Vy{Z?(l+qDV5uT3~mn=n|D0FG7C{M(GJ-ULYS zYI9U?3%4b0wr)IjQhib_)u&)g_REN1^L2o*y|o?at4*jTyzfxC(W%-IweY~=u@G#PxEUNF04&>S8c))O{johOr0y*xvI9%hiel) zQk(G6+JviX6F#O16%GG!{g^*ql_YrPD=$&TIM^EDKZ>R;30KkGVfnY0uGgOtgxP+9Ex5xQ|T$t~k;9c5MT-x1YOvB^$i{7OqTwYH2 zl6QG=X(9<5HrnJmOas-DVb0Z*aEafQZoIqDUnqKoVuF7&+Ubfv$Co6(P_&gv5^JbQ zyV-nK3iiwYGur8f?P&1kNFxj`Yg5Igd#KQUPSfVSx76^n((t*3*S)-#Ev)mWbXdP> zqSl=(tfFB*?nt^L>03W*|Fv+lc~<(gmIB35e9bAfH!o^sk2j~dR0fb7Z5IQp5x@CK z%qJFhd2{%i$6tZJh5RkzZ!v#a{x0QDKqY0HidQB!7~?gV5d-%K*xtP;5lFbO!}Lsp z-JCYEu+Mmlv$jv8(>1y%Ysba;Rv8_M)iETS{Nj}xT!mU=);{1`Fni(_mc}Jr3+B68 z<(#a2hqPdx)#$ve?bYb_G+M~oj<^^NGG8_AQGL|jm!lE=E^cpOTre8ZdaZF`%@9C| znkv2D#Z^9D#=>56v#Y=13vvCm5c{Ime`yS{FKP7hn&v>in&zl58o>iO5IsVs#;M+= zL@zH#nK_;HCbw=_r$u9vNx!?p7nCn-Fv-t;!4!+@_?raHFBWHdCOP#Bd?)yRm~Wr& z7x-@A`#0(KqzEu+GOlmrqiw_pspFR4NJ3zW{WGm;ylE=m9^bq9MppU6X1;yXc-;wn zH<-pxcJke58n5l+dj#o^M(baMmA^`!W0SMYwMi9o{wiHqXIKKJu?w)SGGL-$1D0T|^HeUbJ zhC)#2&)Vds!u->MpZ1U29xnpwDrh~~H zHl6J(*Sm@aO7&)K)43b8hIB~AaK`vvKIe|^>`12k6kQBwq*o|_2mb1oGXPK{AfMc4@c!Ns;z8Gll3{{hg0{(g>+(uWeBTMOR~!Bn~#vKf3xMnO?J{o9Q)QV}Pmb zm??cWMb&vCmnQ}AS#v#e43$V+>0Nj^_>>MVozRiYbcVnq<7dK-WY`*Z zcZ7koF``i#%yk6EGgD!k04~`Ckir=ubX%Z5G94!83jzsJQF$1F(0(mzo6E_ma`Pi+ zCR0z!zUK(C|Fkz}R7YTz7X_D1gCOM6N7nn74sRehuwGCp5A!93`*a|G7^eZEf)K3T`R7@l`B@t z;;dK##bq1T$uj+G13n268hcR?=asrYPqK7l>_xilJF}koj?7Vi;bvQD*OxMnv(y6U>L-GpIabK?yR!D^>-@gm*I4F+{Q!CZwwV7kUejrB$iIssPqQ3(jB_Q>>w~SZ>HH zRW-l+=xXkaJG;qsRv;A39|Lj|(YMk1&7?=j=9hk$89eF3b`j?%nK58$d;vV<7*ZUh z%@3w*vO#*B0*4te0Z`1!Qdii&GFg6Y1Tp`%uqnutb3y)Op-pd*&#AiHa-~wUwN7|f zH>)Oya%a1=%vdecCZFXpKWy6+1Q`fIDv=HY!BWtQrQ@g92Yx9%QIXC@U{gZ(G7VWv z7YApQK;T1mPI5y|-v8Sfh4txKg>{__xHDz`kv2MA8&_`FC}8pPaZ-XVyQFMihs`IU zg2_DFS=I+&A)^ZOC#2~obWgemxD?6E*d45+2yaLH?kS;#p@mZZ2s#@kJNS{+AV^*L z_vrqPIvMIv|f|QNBTwY=Ugj`^lwLhbsP1-}Dd=Xj&Q+loSCl_7} zOkq2z&%LBL}M*`=(qHi)!t!)*3*U-xC>9jml=5=lQGg9su>@k-Fcq1lO&jjHHsbPTmKu&qBEbpW6vS!tE``T) z1?I*D7R3b$FQVygwg$;gHj~6RS*;({9e@hw?0;sc2rvNjNDKoYe;s${3}5&uLT-BOYh%_sfYdjGV#j$izjt9-d6AE~odU zzhl(xO2(!68Pd?T2>jOaZ=2t!ouqe#jl#kj&lH!C#rs@ZCeXSaU z>`1`{2~J6V_dT-<`W7sJ49yqDp^hs*qpMIHE4^EwO!Qc&^Z%p6fIAlw6;0Plo9X+SVr!E@vcqp zgU1y%57mI}qU8?i_s{7}kEjR-S$kYzRi;oJp?kQB7OK8j6&8wY=j`jHG}gZe0QRdg zc41njzsIXeU>;LFhUNmhpyw{@L00m7rTkf?TyqLTYdWZFQ46_5^YNrN2c^P6)D!~9 zHrKkSayn093WcLHqMb5>gK=$0pUqNPQTt`4ZMTgYmQ{^tAMKH>Tlmp;ERLkAVyx== zo^beGOwad}RHtf{NQJD;(mbn^UKTPeIaopzO{+4c9wXc`0|jJ3#huRq{1^-cur?L| zM#S6HiMpWa*h=L=iXsIyuISgjdh#k8H0Ch7Praei?Lz4}2 zSK`H54{h`<^3 zKq`oOaKZIeoxR|Ctsn-IXh=&uh#M+(dm9SM*IZaYId*OWeaH57y{oL5FRYAxbjU+*{Jwq7NMQL zTF@R!IDsBiu&noew7A6aNf5JXn_$C)_~oO(pzyi;uxJx>R~9Ydb1T9^>$IW2nQ5jl z`jke#HX43?@?2|9{o=D`rf!1{4x43UlBggwlV)o62Qzb%nyMsI%9+*$h01adD?~`F zD)%iZCs|#&KGX_(r&YA}WIF&(?5!&EOr|eMnk&&^&GO?b3Vgr4qoneQ`nEj-@3UO9 z=ag3Y&SvAUUQo^!cGJ2s{|w#ScZL1*T>K^Ck4ik@;=768Cvo4!|DE_Ii8r|TFNv>` zc%zH|AL5^q_y`yOFXA7Tc;Mpui7VTjbn)L4KSzEasqtGa@wpOja&ez{pTtuxo+REO z@n#oqC7zUci;IuWdggZ$Z*}qU#P>-&?c$S&zbNrG7oS4>yAmJe;?s#gD)Dv~pGEw> z$z7hwn0tEpT4uf^&>k77Djn2rJ%wCXNvTAWpvJ9*ST=Ccv$FPF`L)4C&&%3VCEDns z??S67(Gf2ChgsVt(ZEHo$l4Z(CKVNLU6zs7bKz)h=PHfGn4%j*!WfzRlx)86xG5D7 zN4mlvy*8@lV~oKcd2K*(`H~T(`U2}(ye8{#<<{%8LeN^b5?Fm<>sgDXWGB@2m`D|| zbdIPWK5(LZet4>Uetfcgeljbc^T)~OnHl*!M^zkupel~{$ij`}QbErAX|$O9`&TnA z@DJxT^=QgJT;{rWZ`Pg?rF_q&{JoshXr669cPS6E-MN$}$GenoXDy;d-1EFF*5uZY zS{L~G&!fO2r$&Ko=fz!$vR)Sb@U8Qrz&9R?0$W~<0$;y13Ow<1Eey>O4*bvI44TeO z1|}ccYg&ZEI2qGe}l>On!j<8z7Lx2UUU1Qd+a&(4DIX53?_W%(2njK~??2Eu%MIQK8#?fm2)i2t2>tTDZ&Jk>caVbYXXcy@T`{ zDZ~o8)TdHWYp|Mne<`a8^(Jv1666|1{tIu4Sd<4_rr2gxuy zT6@!nZKG9kjLww>&6&gZNAqF=Q7hb_cUWR_T|2{bn}eN>j&ub(V>%)fsaXh^zq5iO zy|hy)QUmh{hupKtTLOoL*yAl}l3defFPSL}d)PC?^Gzd3(El?=rZ>{iq&RO2=NbW@lU6y+G^~rp;yyhuE0wX)9Zgj(`z6 zS~9g4V%MsjWq3XmWuG>RWr1c$^yY*74!i5pXgn7iIS-B^E5k6?5uO$gFf_>%#&n0H zD&t?sh2v1#h(Zs!fy$I0Oq{$RYmr(XMeSo}pwhCl3i|>(hj9i2jnL{jg*&fK6}Dep zSTleocmRb0Mg%~r*$QbENbPRPg`Cl#!Gn<$MIMLb>B5eI?yjq0LQ+@fIx?zFqbcf} zH8Yvk&6b^FPP)4z-B`GDK(_L`=+wWbv4DdDEJuH%owPH$!#^xuxksms-*i}V^j%K) zLWORuJ3J00%AE14PZ=%x6l%u$$$!VC^X-gC2KRPt0Yw}brd*uPZ)95kqZD<<7r8DN zq~@4Gf{Tg?TO0MU{Xy6YD}>Wp6eb(|Xc8`#qpB3bCET*04bULwaR9Rx^{QEgGLy|L zLNq2DwU8njD=%)|Kbq!gG@fY8Wlosg9gZvasJc6xVSU`ecFM(eh7Nrnaan!DWw{K^ z7nV3o-Q zLCF2eCgyi#yz}c`l~|dz?>?_9SPA2L-mp1FN)D)HpJ3WJ#k7oIn()ZYVA{{;udG6} zXnXm8tGzk9hiPvv$A-E}Ryt}oOn>LRzrMT=^-SND^e~v`T+=sShE9)~5O~Y|^a{>R z-u|NMzL!Hjb%SHUig4C87mkP@+rt*$Tdq`?gu?m*onoXl^$Wu2X@|t7>tPtn7b^KL zS*T9rL6$d*T*s1P*B+66~b)QLYLAX~J^Y*OYs2|q+| z4ih1omCgf6jJ`S{!>qDStVGujc8YN1VKCwkjuI_0D(CKw%v@1t`9}FhVN2#NM|{sp zVxck-L%c};J9qhe(O5jf(ZN;xT}|6COeapu5Z#yYu7(M^s@ZWnKWaD*?hUCNrF9^S zSF8wBs0(76Ra(4_LFM8NoOr0)fSEV1ur70yHHd)8vcI`&}XH8mH`a)M5begV~WO^Egq&tb^ruq<6uSD z0dz@hitS;L5Ya3-8S!qv2Tf?4X%jJta0-?mp{G)v)K7~`IXIN#-6Zf0hX=O7(DqzAY9eK}9v=cT=?&6AW^CGxI!Rk}ym zk*~?@V*R5hqfw@HWJ2+*nH(0GGe@Gb|1oO5@nDtHi?BFWP!+$xzGm&a!s&s1-h;>- z&-`OBc`!la_--jOL5lL zBEwjhz`1;<}7S=4D1a_(wsxoMG zB0~w#y=I?VjZ^kn${b%^L}#Ep0o|ckWvPzhCq0_K3N!S#6pg3AfYs%i;N@1-)pTWf z@>6LsB*nTY<4@+qGQ(+yoV^NOKvkK0?1H?jGMp&0Z)Pp#QGzy_=!+2=9U8hfVvghu zUPD2$L_PNo?4kM+HamOG4l|F5JmP6$GgXOCjAIk#V@FxV;WEgL&}+w^j}Xm4%7a`9 zHqV=fS&S~P!_XMAKUZ+OqEAKhS-I#BOYb;bEkZyPXG{1s{6hXxX(3N#A@?49A+eAf znaU3xJlABGYkq0HV+>GQ?^1pW3%<02Ax!IF55<2W_Edn(2?&kCAK1?^R$Wzo-LkSD zKQwnXbj8Qgrw+eFH~q?G3$1$qAPc=a%5GuT2X>`oiHK>evSX<_c8smN0#qr7U1E#3 z6i6uvNL6<0?4w*U&=Uy2#fd;v-E##m_@2Yyp7hZzu;cCI?|J@q@b?-_D_$UJyAv&F z0nX->v-y3WPX^QiJ76GQgKhP*YzZTTd3epSHDaEsY)!_oHPZ^k36X_HWB)=A<=8cB z?{@{>HJR=Z1FiCpZ+dVm84nIW^KCHzfxE&!$jq3Kv^ycx9p(gSua}9&I<`GxKg9s=Nq;0YuFGJ8neoRka=0=qUQ-dTowa+BU$Usfa6dq2gxiNSzDog} zae$Vrn9X9Q8~Wx&03_^4Pb%bCmH6F(5@vHtuGhYKa7sR*JM5;#q0chp#KE7ST^c%r@Lpt)Du&_C z^w2`97$$?VZ=9DLq8I5y^}x^RJX1YOrz!%n=`AtwU|&mkuiA_Fu*hEy2JyRTkU zHW_G72<_=CtjqQ)dATWG-Ki{R%i%<~Kr5+9Ofa$*6;Y@7l_=lP+1g8Rtw=Y$c2_R! zA%SdkC8cTjsG60FW!tBQ-H1IGZPSWk92OpoJT zj%am4q)`KGSlyyu8dHJ}r9wweMd2?3hIl5}-AXHDm&7a$XmN|n3!Q^-m*6GZrb~>X z3;U##!r9#24vHURwrzTgecm_rdF(qnef0oYikc5~Q>rc{4R_Lr(!Nsp6np8=wN4om zO`6kRYM5G)PS~X{T;4DXgkV~9WDZT{^d-GncC(v3cAZYpA`>}X3^j1JWjBmnKs0N= ztFwVofNtT69)cYu-cFMhPXtZ6!{(?}2*%#3qO7ztN6t~M*tWAn?nSvbLzo-_o%zD1 zOfUOm?^N^Wm8IM!GDElrq_8uo|BslIUMr|dg$yUpaC!yH+59SpGsDf}46yv*6^=|# zXt8_ghU{v6=vMYpk(f{mGQ@VUi>_pMbn7H+og;^3x)SHWbI2&QE9p#inRCMtaR8*oGP%CILDCbP)`HWWP<-$yQ zA7=BfjVj_&BsPWSk~NV^<=IC1+RlO74WkeZ!j_QnJ%0eY=GoF>_gkfUU5D%n(_|Xn z5I*$A^u88qwL(R74W?~zi7-#%hh*`#_yFwRQWzcaI@)JD?cNFLO+lv!S|TO)q;NV7 z#Y;%n&A;jpyxYA{l~QkNwBgZDq+^IUi>SBbF}diVOvr1({0bYj*1jUhLIb-ESm?Ks zMn_*^A+i!+K{*y;68L+Czg=xnS@K8HP~|}Lh27pk2Fj+9rJ!PS+EKkU9B_uY)2^+? zjf(Z>-SAAKFX^m!pv#tF(e1z@i)!+DWf@Un$!xiS4n12UsAKY}q$Le$sr2P|ucqQf z79I!A7#nIl(q@Ad-WT6MUWCYKcqQQ}L+9J{zsvbHr3jy2s(GrG7+0z}4McIb^8WgE z9|5by5ju(4l&)5^oXmm@|C3+we1SRmo3iH*yH(5f=I6S@;|s-ctPEkPMOp#COx$_z zW8Ny#-}L0Twfqw@l7pn+y-b?+)AZ+hJ;842#j^>az>4PyEQIXK;N-A7>4~x%r-5g# zYl)mqEvY`6!mdD0o|do}grx<04_*`d`faMvYPlY&}OXhte7i$y!Gv_UUJ5N${Irc(GIUt(?q6yWB$I0k0J+NYAy;&UYs5 zzh9CPrKCk9ohL~m^fOQ7I*X(^lGIR2I)|hlNop)5olVjxNg4qjxPs@RAt?6=;wAHb z!!rrD-}>Of4_w+OpY=<)fLPn>Z5|d}XGe%|`mi~AB*z3Xhf^b$xy$Fr{W(u;d2yyU z*9}{EQdB+O65u<7FBM*>g%4hkR_hBct}9rDMKCe1JbQA@b15cen-|j zbC;i?YtF%X{_qOs_e)`TZaGakgkEw;3{&N>Yvp_) zYPz)0N=WUaV_;Y1l<=rvjBB4560TP=DaQ+u4c(k2L3el}jIju0K}_`AQ83$G$T)(@ zSbIYBka|!PHFD@R{843ThMFlXhlW9o1uMyNXc#mGc=Zo{0xo*G?vPmoig?#oZeVp| zysF-%o(ro3)>bOlhpW5hOM|S#3+D3${vEk+Zd~V74HVR%F-GXPfr~29;@yH4r~!vt zDSsg~i`<>RxI}JhBNTks};L5$FbYiG$fl z%@ir<T=Kt{RgINA%-;QZ0ljhEvzSaUPOC$AsC$N2aO+CjAlOJIg3 z0<1L5IS{VJh*MlI!UEkCL=L{V^t0ilS0c{Y^u{2r^JsuCdZ}LX^P?7Y zJaM+u$L7NK{P$D@z#x7M5^3*)TID5C-!7@>+a*Kx?UI_lT~gh*W3H&WZ%4NeL@T6^ zHK1)HbId*-shu&cy0aF;BtRdS1yc*b&RiScceg#UQ#w1upTfsv$F z*jDtKRalpUBtvWZT7-;ZUxCF0Zs0{EYE%>=0KDl9TShh`b3B_-WqzE@i``YFeSR;e zER+)ts{e){^^6dU5I6BZT&>SMGT+1uVL?5Fd|T8)pA-6(PA zU9|c%;wvTYe6m(wLi|RFJD;r8A18j5#GOyp>b1l#mALcCT74(+MG|*DS*!0Su1vA> z$y)s+@m~4e`DCr$K|GYW^T}E*K3{>voln;4-@u0Mm$>uES_49xy%KjmS!loi94UHHGf2WrNo_2)|yWczfs~D zh2NT6h+ie~(MsRfd_MBN8snm0iM+4Iy6D!(`^u@B*8EfCebwQ9eIfF`8t0;~N8VTC zRR~|}4rM@Ol!~G$LuUO^L)%P_Fbsdb-`$1iA<2-G42M&G`%7g9#KSFQ z7GR=jS0|)S{9s$`YHL@ECDv-MS^eGn))J-#;Xbs{(>Mu?;UNCNB{-nCS+oIbs^9*M zTSVq!09x)u6fbo`?&4O2iaKGmMVsuqi^fcI+z(NSiw)FeI|LBe-Lx~4%hO^uwmiKm zNYiPX;liU#I)kHf8s(1Ue&61{RW{QB)}(DiE}6mjd=satKWdng#+C{cMosg+fwZs4 zY%V*^*|w9E;W`AVQkbGt?8pzef%}xWjeC2rw^&NIe>8BsW2J}uGpDzQMhemkP*%d zho|NAHQBj10oncavp1>=T};c(`*#(JHxeLKHR_{IZOH2V1zwOf>rrX48HV1C<}c)u zCT@9(uMA91o@Vjlog`Nza4YA{cEs?P2LAe4t!JphZIy*9E;lK#n7Q6WR|eyio2oDd z(`pvW!W(!h>YBar?4c{?HqqfKN5yr)3IH+iR5q&H{zLJ~lM;HJ8L5Ji5d_o4mgROy zVaGLv9qRh+Lv2;ri1JpfHk7qki$uEt8gw~mFURB%C??rot`4n&cZwt_COH+T11vtn z9X1eLOO+;=>&z6_)alLi%whkV`oaQ?F#Y9NVsV_aDb1mJiz7;~G6<>gHXM~-xvAe| zkY@)+vDP!o(|cK+GVwD3;d63a#<)bSy*ih47%bQAMD>r$$jT6h+vUY8S8epgVksDe zFNk-OuDAlZqt(M6;|nS%uy}mA*Rfm4+eA_K7bnK#jb*(Uf4sov{MM@6APdBBnA|4k z+p65TgXX>m#l2dPffpY-C)r}`Ei63<_@o}=h2VUJy9OfJN@4yyM9PMsu*+Kw!fpJF{i(OlvDs?QJdWZuK4!@(~X&3|m^gt(qI=dY9~m znn8~#CAnGXkU1xbp0Z8o-QXYxmqK#|;q_c6%{5@slIWpd`p)vgOOIbASIj}J3ME4d zlVT((q57!;7Z>FV{e|M`dXY-S+LqDdcl+n zsgF}jIa^KV=i0PMKK$6|C~ztppQkBaGluVXW2Oe{(lN1`wwb*_3N$>Y)QYEaZ8s>RzOsrVG;PxX=HKHX|4iijWT16Nep7 zd^!^cnqXBxlP5mit_abrIJ?GXy|;f=T*5Zcbxo@9WA9#ml&dwj-z%nKFyETsy+d-F z@zIUNV=wX@#{Wc)1=lWeCgEc*a+r6{N6%Djdi#rXgX%Zv<|4)qySzIlvy<~*)8uyj zPJ>Y`N-$exS0_&;J#JonlHAyJk^JBa+NhwdEhq%KOvoz=T367E3VO8#z2ORau3#c6 zn5Zq77_MLfHJi`fVfR`>-o0EFzQwNYYq54CCz;|B@V)_pqDEiZ?qcQi)fw2abcPEd z`4n5Vw9a-~P*iUL+pBYR*^Y<|Y`!%j17F`9k%7&(noqR}rz2uA@DcasX*d)zgm-R+3>v<<}5j;p5qe&O$U6Ra&3vIqtj6{>0Z>9JdB={OLc(~OIbCG z!ma9_CVXjxVcy`{LjsST;?w!kcs@03H>+A5qMNi@-OZ|T4Y9c}u5vfIUiu;X9H;af zp}WtqyIgYLKu?;>0n-yu9HnjOSPQv1d4dM(%O zt!2Hkl!f%l$p;-b(f2LIWhWWv?B^GwGaZwKqq>DZ6gvZKh}i;J8?)Y9n{$0x^L=(u z)sSXQa>fg}Uh~)yVM*I!WU&ZKqzgw6b64^(_bg^hBx#u~9)(yh3}ZN79dC~-toJg# z`)tOpn;7pKjth9;El8?!OXDc$z{hYGtpr0v$noQ(VI{cNEv8IZ2$ zMVs9@JI1>eh`(3J%}c7t+k9(uU((k%M{2&!x5k9J^;%4<*()~aW|rj&uHXHuG!OBq zYQ8&^D@?=R21FsU3MOa07ToQG zWmx)kdpo2rz?$pIla$4k`-aP6pws5CYh5Z^*X6oN$%kAgBgX3}#gQE`F!h6$`xpaN z{?YTP6su?*Ir{lt$@e^cedJe95q(}}zgP5AEL8Ae&~71h2c*8RE>Ea`a*Or)#g)

lA;xd7 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

s|fQ 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

I)?5S=scAkHy&7+%3Mb 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 read/e(cpu); - examine/cpu :: at(P, r) & $at(s, r) & $on(cpu, s) -> at(P, r); # Nothing changes. - } - - reverse_rules { - check/e :: check/e; - examine/cpu :: examine/cpu; } constraints { - #cpu1 :: turned_on(cpu) & turned_off(cpu) -> fail(); cpu2 :: read/e(cpu) & unread/e(cpu) -> fail(); } @@ -27,34 +17,35 @@ type cpu : o { type { kind :: "CPU-like"; definition :: "A CPU-like can be either read or unread. A CPU-like is usually unread."; - #definition :: "A CPU-like can be either turned on or turned off. A CPU-like is usually turned off. A CPU-like can be either read or unread. A CPU-like is usually unread."; } predicates { - #turned_on(cpu) :: "The {cpu} is turned on"; - #turned_off(cpu) :: "The {cpu} is turned off"; - read/e(cpu) :: "The {cpu} is read"; unread/e(cpu) :: "The {cpu} is unread"; } commands { - check/e :: "check email" :: "checking email"; - examine/cpu :: "examine {cpu}" :: "examining the {cpu}"; + check/e :: "check laptop for email" :: "checking email"; } code :: """ Understand the command "check" as something new. - Understand "check email" as checking email. + Understand "check laptop for email" as checking email. checking email is an action applying to nothing. + Before checking email: + if a CPU-like (called pc) is read: + Say "You've already read all today's emails."; + rule fails; + otherwise: + if a random chance of 3 in 4 succeeds: + Say "No emails yet! Wait."; + rule fails. + Carry out checking email: - if a CPU-like (called pc) is unread: - if a random chance of 1 in 4 succeeds: - Now the pc is read; - Say "Email: Your mission is started."; - otherwise: - Say "No emails yet! Wait.". + if a CPU-like (called pc) is unread: + Say "Email: Your mission is started. You should go and check outside of the spaceship."; + Now the pc is read. """; } } diff --git a/textworld/challenges/spaceship/textworld_data/logic/cloth.twl b/textworld/challenges/spaceship/textworld_data/logic/cloth.twl index f61c636f..042bc2ba 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/cloth.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/cloth.twl @@ -8,8 +8,8 @@ type l : o { } rules { - wear/l :: in(l, I) -> worn(l); - takeoff/l :: worn(l) -> in(l, I); + wear/l :: in(l, I) & takenoff(l) -> worn(l); + takeoff/l :: worn(l) -> in(l, I) & takenoff(l); wash/l :: $at(l,r) & dirty(l) -> clean(l); dirty/l :: $worn(l,P) & clean(l) -> dirty(l); @@ -31,9 +31,7 @@ type l : o { definition :: "cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean. cloth-like can be either worn in or worn out. cloth-like are usually worn out."; } - predicates { - #worn(l) :: "The {P} wears the {l}."; - #takenoff(l) :: "The {P} does not wear the {l}."; + predicates { worn(l) :: "The {l} is worn in"; takenoff(l) :: "The {l} is worn out"; clean(l) :: "The {l} is clean"; @@ -41,7 +39,7 @@ type l : o { } commands { - wear/l :: "wear {l}" :: "wearing the {l}"; + wear/l :: "wear {l}" :: "_wearing the {l}"; takeoff/l :: "take off {l}" :: "taking off the {l}"; clean/l :: "clean {l}" :: "cleaning the {l}"; diff --git a/textworld/challenges/spaceship/textworld_data/logic/text.twl b/textworld/challenges/spaceship/textworld_data/logic/text.twl index 83511d71..744f82c2 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/text.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/text.twl @@ -30,7 +30,7 @@ type txt : o { } commands { - read/book :: "read the book" :: "reading the book"; + read/book :: "read the {txt}" :: "_reading the {txt}"; examine/book :: "examine {txt}" :: "examining the {txt}"; } @@ -41,6 +41,7 @@ type txt : o { Carry out _reading: if a text-like (called tx) is unread: + Say "You read the book and realized about that crucial hint."; Now the tx is read; """; } diff --git a/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg b/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg deleted file mode 100644 index da68d24b..00000000 --- a/textworld/challenges/spaceship/textworld_data/text_grammars/Spaceship.twg +++ /dev/null @@ -1,969 +0,0 @@ -#---------------------------------------------------------------------------------------------------------------------------------- -# GAME DESCRIPTOR GRAMMAR # -#---------------------------------------------------------------------------------------------------------------------------------- -# The organization of this file is as follows: -# 1. Expandables : All required combinations, structures, etc of words, letters, and numbers which are used in the -# whole text of the grammars. Collect them here will avoid from redundant repeats. -# 2. Verbs : All verbs which are used as action or simply as verb in the text are collected. -# 3. Types & Variables : Type of objects and variables of the game are defined and coded. -# 4. Objects Garmmar : The grammar of each object of the game is defined in this section. -# 5. Room Description Grammar: All the texts which are used to describe the game inside different rooms are defined and expanded. -# 6. Instructions Grammar : The grammar of instructions for compound commands, etc are described. - - - -################################################ Expandables ####################################################################### - -## Any type of expandables, such as adjectives, the name of different types of food, brans, materials, etc. are named here. -## During the design of the game, this expandables are like a general dictionary of various types of words which can be used -## in different sections of the grammar design. This list does not include verb type of words. -### -# --- General Expandables ------------------------------------------------------- -ordinary_adj:ordinary;normal;typical;standard;usual -adj_stripped:#simpleadj# -simpleadj:good;bad;small;big;heavy;light;great;terrible;expensive;cheap -hot-adj:super;unreasonably;absurdly;alarmingly;upsettingly -supp_stable:stable;wobbly;unstable;balanced;durable;reliable;solid;undependable;solidly built;an unstable piece of #garbage#;shaky -obj_what:unremarkable;clean;dirty;modern;well-used;brand new;expensive looking;cheap looking -out_in_place:out of place;to fit in;well matched to everything else -food_what:appetizing;delicious;tasty;appealing;delectable;heavenly;inviting;savory;tantalizing;tempting -door_what_is:imposing;sturdy;well-built;durable;robust;rugged;hefty;commanding;manageable;solid -shape:rectangular;cuboid;spherical;formless;non-euclidean -colour:red;blue;chartreuse;purple;violet;orange;yellow;green;brown;teal;cyan -smell:vanilla;lavender;cake;fudge;fresh laundry;soap - -number:0;1;2;3;4;5;6;7;8;9 -bignumber:Thirty;Forty;Fifty;Sixty;Seventy;Eighty;Ninety;A hundred;Two hundred;Three hundred -letter:A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z - -material_type:#metal#;#plastic#;#others# -metal:steel;cementite;iron;aluminum;copper;brass -plastic:plastic -others:card - -fruit:watermelon;melon;honeydew;apple;pear;grape;kiwi;cantaloupe;banana;pear;durian;#berry#berry;berry -can:sardine;mixed beans;chicken;soup;tuna -candy:chocolate bar;gummy bear;candy bar;licorice strip;cookie;power bar -berry:straw;blue;rasp;black;elder;boysen;lingon;huckle;logan;cran;goji;goose - -garbage:garbage;trash;junk - -weight:complicated;heavy;light;weighty;surprisingly heavy;heavier than it looks - -brand:#brandname# style;#brandname# limited edition;#brandname# -brandname:Microsoft;American;Canadian;Henderson's;TextWorld -# << ------------------------------------------------------------------------- >> - - -# --- Fix Expandables ----------------------------------------------------------- -here_alt:here;in the room;in the shuttle room;on the dock;nearby;close by;in the corner;right there by you -here_alt_u:Here;In the room;Nearby;Close by;In the corner;Right there by you -how_see:you #you_what#;you can #you_what# -how_see_u:You #you_what#;You can #you_what# -there_what:is;seems to be -you_what:see;make out -smelltype:an #ansmell#;a #asmell# -ansmell:interesting;awful;intriguing -asmell:hideous;pungent;sickening;terrible;wretched;lovely;great;fine; -upsetwith:upset with;angry about;infuriated by;depressed by;done caring about;upset by;furious with -bignumber:Thirty;Forty;Fifty;Sixty;Seventy;Eighty;Ninety;A hundred;Two hundred;Three hundred -Iknow:I know a;I got this;I have a;You know, I know a;You know, I got a;You know what, I've got a -youknow:You know;Do you know;Did you ever meet;You ever meet - -afriend:person, they work out of #friendplace#,;person;friend;person who works for #friendcompany# -myfriend:they work for #friendcompany# -friendplace:the lab;the space shuttle -friendcompany:the #affiliation# team;the International Space Station; -affiliation: Russian;European;Japanese;USA -friendtype:buddy;pal;friend;good friend;mate; - -cooljob:the astronaut;#friendcompany#;the space craft engineer -expensiveplace:some kind of expensive place;some kind of expensive project -intheblank:in the dump;in a fire;into a pit;into the garbage - -key_metal:#plastic#;#others#;brushed;polished;satin;rusty - - - -begood:good;great;fantastic;a great idea -in_the_(r):in the (r);within the (r);inside the (r) -by_the_syn:with the -init_syn:in it;inside;placed inside -into_syn:into;inside -on_it_syn:on it;upon it -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Container Symbols ----------------------------------------- -it:It;Something about it -reminds_you:reminds you of;looks like;floods your mind with memories of;is reminiscent of;is just like -ofyouryouth:of your youth;that you knew in your youth;that you knew so long ago;that you knew so long ago, in your youth -it_is:It is;You can see that it is;Upon examination, you see that it is -name_var:(name);(name-n), which looks (name-adj),;(name-adj) looking (name-n) -listwithis: [is-are a list of things in the (obj)] -lookthere:Look over there;Wow! look at that -ContentsC-:Contents-;Contained within-;Inside are the following-;Inventory is as follows-;Here's what's inside -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Supporter Symbols ----------------------------------------- -on_it:on it;lying on it;resting on it;upon it -ContentsS-:Contents-;Upon it are displayed the following-;Upon it you may see the following-;Upon it lie the following-;Upon the (name-n) are displayed the following-;Upon the (name-n) you may see the following-;Upon the (name-n) lie the following- -trash:trash;garbage;junk -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Group Symbols --------------------------------------------- -this_the:this;the -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Room Symbols ---------------------------------------------- -dec_find-yourself:You #dec_what# -dec_guess-what:#dec_well-guess#, you are in #dec_a_the# place we're calling #dec_a_the# -dec_well-guess:Guess what;Well how about that;Well I'll be -dec_what:are;find yourself;arrive -dec_a_the:a;the -announce_mood:sorry;pleased;excited;stoked;so happy;honoured;required;obligated -signquality:decrepit;laminated;crooked;framed -sign:sign;placard;signboard;board -# << ------------------------------------------------------------------------- >> - - -# --- Expandables for Exit Symbols ---------------------------------------------- -yourthing:thing;bag;style;cup of tea -door_what:leading;facing;heading -unblocked:unblocked;unguarded -# << ------------------------------------------------------------------------- >> - - - - -################################################### Verbs ########################################################################## - -# --- Actions & Verbs ----------------------------------------------------------- -## Actions are actually those verbs which are used in the game by the player. Actions should start with a verb (ie:ensure, make -## sure, etc (these could probably just be a tag)). -### The structure for a verb is as follows, (not necessarily contains all the parts): -### a) (verb): action's instructions; -### b) (verb)_syn_v: synonyms of the verb; they are all in lowercase format, -### c) (verb)_syn_u: Uppercase format (Sentence format) of the synonyms, -### d) (verb)_syn_p: past form of the synonyms -### e) (verb)_syn_pp: past participle form of the synonyms -### f) (verb)ing: the ing-form of the verb - - -# --- Action Verbs -------------------------------------------------------------- -look:look around in (r). - -examine:examine (o|k|f|d|c|s|t|b). - -inventory:examine your inventory. - -take:#take_syn_v# the #obj_types# from the (r).;#take_syn_v# the #obj_types# that's in the (r). -take_syn_v:take;retrieve;grab -take_syn_pp:taken;got;picked -taking:taking;getting;picking -take/s:#take_syn_v# the #obj_types# from the #on_var#. -take/c:#take_syn_v# the #obj_types# from the #on_var#. - -insert:#insert_syn_v# the #obj_types# #into_syn# the #(c)_var#.;you can #insert_syn_v# the #obj_types# #into_syn# the #(c)_var#. -insert_syn_v:insert;put;place;deposit;attach -insert_syn_u:Insert;Put;Place;Deposit;Attach -insert_syn_p:inserted;put;placed;deposited;attached -insert_syn_pp:inserted;put in;placed;deposited;attached -inserting:inserting;putting in;placeing;depositting;attaching - -eat:#eat_syn_v# the #eat_var#. -eat_syn_u:Eat; -eat_syn_v:eat; -eat_syn_pp:eaten;consumed -eat_syn_p:ate -eating:eating - -open:open the #lock_type_var#.;ensure that the #lock_type_var# is open.;make sure that the #lock_type_var# is #open_var#. -open_syn_v:open; -open_syn_pp:opened;pulled open -opening:opening;pulling open - -close:close the #lock_type_var#.;ensure that the #lock_type_var# is #close_syn_pp#. -close_syn_pp:closed;shut -closing:closing;shutting - -go:#go_syn_v# easily into the space;#go_syn_v# towards the #obj_types#;#go_syn_v# smoothly twards the #obj_types#;#go_syn_v# into the (r) -go_syn_v: go;move;dive;fly;float;propel;wobble;head;go to the; -go_syn_p: went;moved;dived;flew;floated;propelled;wobbled;headed;went to the; -go_syn_u: Go;Move;Dive;Fly;Float;Propel;Wobble;Head;Go to the; -go_syn_pp:gone;moved;dived;flown;floated;propelled;wobbled;headed;gone to the;got -going:going;moving;diving;flying;floating;propelling;wobbling;heading;going to the;getting -go/north:#go_syn_v# north.;#tryto# #go_syn_v# north. -go/south:#go_syn_v# south.;#tryto# #go_syn_v# south. -go/east:#go_syn_v# east.;#tryto# #go_syn_v# east. -go/west:#go_syn_v# west.;#tryto# #go_syn_v# west. -go/north/d:#go_syn_v# through the north (d).;#tryto# #go_syn_v# through the north (d). -go/south/d:#go_syn_v# through the south (d).;#tryto# #go_syn_v# through the south (d). -go/east/d:#go_syn_v# through the east (d).;#tryto# #go_syn_v# through the east (d). -go/west/d:#go_syn_v# through the west (d).;#tryto# #go_syn_v# through the west (d). - -tryto:try to;make an effort to;make an attempt to;attempt to - -unlock:#unlock_key#;#unlock_no_key# -unlock_key:unlock the #lock_type_var# #by_the_syn# (k).;check that the #lock_type_var# is unlocked #by_the_syn# (k).;ensure that the #lock_type_var# is unlocked #by_the_syn# (k).;insert the (k) into the #lock_type_var#'s lock to unlock it. -unlock_no_key:unlock the #lock_type_var#.;ensure that the #lock_type_var# is unlocked. -unlock_syn_pp:unlocked -unlocking:unlocking - -lock:#lock_key#;#lock_no_key# -lock_key:lock the #lock_type_var# #by_the_syn# (k).;make sure that the #lock_type_var# is locked #by_the_syn# (k).;#insert_syn_u# the (k) into the #lock_type_var# to lock it. -lock_no_key:lock the #lock_type_var#.;make sure the #lock_type_var# is locked.;ensure that the #lock_type_var# is locked. -lock_syn_pp:locked -locking:locking - -cook:#cook_syn_v# the #eat_var#;#cook_syn_v# your #eat_var#; -cook_syn_v:cook;hydrate;heat up;prepare -cook_syn_p:cooked;hydrated;heated up;prepared -cook_syn_u:Cook;Hydrate;Heat up;Prepare - -release:#release_syn_v# the #obj_types# from #(s)_var#.;#release_syn_v# the #obj_types# from its hook; -release_syn_v:release;let;disentangle;loose;unfasten;unfix;let loose;unhook;leave;unleash -release_syn_u:Let;Disentangle;Release;Loose;Unfasten;Unfix;Let loose;Unhook;Leave;Unleash -release_syn_p:let;disentangled;released;loosed;unfastened;unfixed;let loose;unhooked;left;unleashed -release_syn_pp:let;disentangled;released;loosed;unfastened;unfixed;let loose;unhooked;left;unleashed -releasing:letting;disentangling;releasing;loosing;unfastening;unfixing;unhooking;unleashing - -communicate: #communicate_syn_v# your message with (r) -communicate_syn_v:communicate;talk;call;transmit -communicate_syn_p:communicated;talked;called;transmitted -communicate_syn_u:Communicate;Talk;Call;Transmit - -push: push (b) -push_syn_v:push;press -push_syn_u:Push;Press -push_syn_p:pushed;pressed -# << ------------------------------------------------------------------------- >> - - -# --- General Verbs ------------------------------------------------------------- -wait:Wait - -do_syn_v:manage;do;accomplish;get around to doing;finish;succeed at;get through with - -exciting:exciting;fast paced;life changing;profound - -force_open_syn_v:break;crack;destroy - -looks_seems_syn_v:looks;seems;appears;appears to be;would seem to be;seems to be;looks;seems;appears - -can_should:can;should;should be able to;may - -enter_syn_p:entered;walked into;fallen into;moved into;stumbled into;come into;fly into;fly over - -walk_into_syn_v:walk into;show up in;saunter into;come round;space-walk;space-walk into -walk_into_syn_p:walked into;shown up in;sauntered into;space-walked;space-walked into - -launched_into_syn_v:launched;blasted off - -contain_syn_v:contains;has;is filled with;reveals inside it;holds;shelters;offers you;reveals to you -contain_syn_p:contained;#hold_syn_p#;had;had in it;revealed;concealed;sheltered;offered you;revealed to you;guarded;protected - -findin_syn_p:in;found in - -hold_syn_p:held;carried;had;presented;held up;was used to support -# << ------------------------------------------------------------------------- >> - - - -############################################## Types & Variables ##################################################################### - -# --- Types, Word Synonyms & Variables -------------------- -## * Types -obj_types:(o|k|f) -obj_types_no_key:(o|f) -on_types:(c|s) -lock_types:(c|d) -eat_types:(f) -close_open_types:(d|c) - -## * Variables -lock_type_var:#lock_types#;#lock_types# #in_the_(r)# -(s)_var:(s);(s) #in_the_(r)# -(c)_var:(c);(c) #in_the_(r)# -on_var:#on_types#;#on_types# #in_the_(r)# -eat_var:#eat_types#;#eat_types# -open_var:opened;open;wide open;ajar -# << ------------------------------------------------------------------------- >> - - -############################################## Objects Garmmar ##################################################################### - -# --- Player -------------------------------------------------------------------- -## These values are typically empty -### -(P):#(P)_adj# | #(P)_noun# -(P)_noun:None -(P)_adj:None -# << ------------------------------------------------------------------------- >> - - -# --- Rooms --------------------------------------------------------------------- -## List each type of room with a ';' between each -## Each roomType must have specific rooms -### Creating a room: first, take the name of the roomtype as listed under #room_type# (which we'll call X for now). create three symbols with this: X_(r), X_(r)_noun, and X_(r)_adj. X_(r) will always be composed of X_(r)_adj | X_(r)_noun. If you want to subdivide a roomtype into two or more variants, you can add _type1, _type2, etc at the end of the noun and adj symbols. make sure that these changes are also accounted for in the X_(r) token, see below for examples - -room_type:clean;cook;rest;work;storage - -(r):#(r)_adj# | #(r)_noun# -(r)_noun:sleep station;crew cabin;washroom;closet;kitchenette;module;lab;lounge -(r)_adj:nondescript;plain - -### > Clean Room -clean_(r):#clean_(r)_adj_type_1# | #clean_(r)_noun_type_1# -### >> Cleaning Self -clean_(r)_noun_type_1:washroom;bathroom;restroom;toilett -clean_(r)_adj_type_1:spotless;clean;cramped;small - -### > Storage Room -storage_(r):#storage_(r)_adj# | #storage_(r)_noun# -storage_(r)_noun:closet;spare room -storage_(r)_adj:spacious;roomy;cramped;stuffed;messy;forgotten;ugly;gloomy - -### > Cook Room -cook_(r):#cook_(r)_adj# | #cook_(r)_noun# -cook_(r)_noun:kitchen;kitchenette -cook_(r)_adj:#hot-adj# hot;steamy;hot;sweaty - -### > Rest Room -### >> Sleep Room -rest_(r):#rest_(r)_adj_type_1# | #rest_(r)_noun_type_1#;#rest_(r)_adj_type_2# | #rest_(r)_noun_type_2# -rest_(r)_noun_type_1:sleep station;sleep station;sleep station;sleeping bag;crew cabin -rest_(r)_adj_type_1:cozy;relaxing;pleasant;sleepy -### >> fun with friends -rest_(r)_noun_type_2:lounge;playroom;recreation zone;crew cabin;crew cabin;crew cabin -rest_(r)_adj_type_2:fun;entertaining;exciting;well lit;silent - -### > Work Room -### >> At spaceshuttle -work_(r):#work_(r)_adj_type_1# | #work_(r)_noun_type_1#;#work_(r)_adj_type_2# | #work_(r)_noun_type_2# -work_(r)_noun_type_1:module;module;lab;lab;lab;control module;service module;maintenance;radars -work_(r)_adj_type_1:silent;austere;serious;still;cramped;stuffed -### >> At Earth -work_(r)_noun_type_2:office;mission control -work_(r)_adj_type_2:silent;huge;serious;still;stressful;noisy -# << ------------------------------------------------------------------------- >> - - -# --- Containers ---------------------------------------------------------------- -## Each roomType must has specific containers -## container descriptions work like room descriptions, except the (r) is replaced by a (c) -(c):#(c)_adj_noun# -(c)_adj_noun:#(c)_adj# | #(c)_noun# -(c)_noun:chest;box;safe;locker -(c)_adj:sturdy;nice;ugly; - -### > Clean Container -clean_(c):#clean_(c)_adj_type_1# | #clean_(c)_noun_type_1#;#clean_(c)_adj_type_2# | #clean_(c)_noun_type_2# -### >> Clean Container Type 1 -clean_(c)_noun_type_1:cabinet;cabinet;cabinet;basket;box;box;box;safe;case -clean_(c)_adj_type_1:stained;spotless;plain;zipped;sturdy -### >> Clean Container Type 2 -clean_(c)_noun_type_2:drawer;cabinet -clean_(c)_adj_type_2:#material_type# case - -### > Storage Container -storage_(c):#storage_(c)_adj# | #storage_(c)_noun# -storage_(c)_noun:toolbox;chest;safe;locker;coffer;cabinet;crate;case;suitcase -storage_(c)_adj:rusty;neglected;brand new,sturdy - -### > Cook Container -cook_(c):#cook_(c)_adj# | #cook_(c)_noun# -cook_(c)_noun:fridge;refrigerator;freezer;cabinet -cook_(c)_adj:fancy;big;small;stuffed - -### > Rest Container -rest_(c):#rest_(c)_adj# | #rest_(c)_noun# -rest_(c)_noun:chest;box;locker;coffer;suitcase -rest_(c)_adj:new;dusty;clean;amazing - -### > Work Container -work_(c):#work_(c)_adj# | #work_(c)_noun# -work_(c)_noun:box;safe;locker;coffer;case;toolbox;display -work_(c)_adj:iron;rusty;high-tech -# << ------------------------------------------------------------------------- >> - - -# --- Doors --------------------------------------------------------------------- -## The (r) is now has a (d), and you shouldn't create room-specific door types -(d):#(d)_adj# | #(d)_noun# -(d)_adj:#material_type#;material -(d)_noun:door;portal;gate;passageway;gateway;hatch -# << ------------------------------------------------------------------------- >> - - -# --- Supporters ---------------------------------------------------------------- -## Each roomType must has specific supporters -## Like containers, but with a (s) -(s):#(s)_adj# | #(s)_noun# -(s)_noun:shelf;table;pedestal;slab -(s)_adj:#(o)_adj# - -### > Clean Supporter -clean_(s):#clean_(s)_adj# | #clean_(s)_noun# -clean_(s)_noun:board;shelf;rack; -clean_(s)_adj:dusty;cramped;messy;shiny - -### > Storage Supporter -storage_(s):#storage_(s)_adj# | #storage_(s)_noun# -storage_(s)_noun:shelf;rack;stand -storage_(s)_adj:rusty;shoddy;splintery;rough - -### > Cook Supporter -cook_(s):#cook_(s)_adj# | #cook_(s)_noun# -cook_(s)_noun:counter;board;shelf;rack;plate;bowl;platter;saucepan -cook_(s)_adj:greasy;soaped down;filthy;messy - -### > Rest Supporter -rest_(s):#rest_(s)_adj# | #rest_(s)_noun# -rest_(s)_noun:sleep bag;sleep bag;sleeping bag;sleeping bag;shelf;laptop hanger;laptop stand -rest_(s)_adj:comfy;warm;worn-out - -### > Work Supporter -work_(s):#work_(s)_adj# | #work_(s)_noun# -work_(s)_noun:stand;table;chair;desk;stand;dashboard;control panel -work_(s)_adj:stern;solid;worn;gross -# << ------------------------------------------------------------------------- >> - - -# --- Objects ------------------------------------------------------------------ -## Each roomType must have specific objects -## (s) --> (o) Very useful to create multiple subtypes to avoid inappropriate or awkward adjective pairing -(o):#(o)_adj# | #(o)_noun# -(o)_noun:pencil;pen -(o)_adj:new;old;used;dusty;clean;large;small;fancy;plain;ornate;contemporary;modern;dirty;simple;hefty;modest;austere - -### > Clean objects -clean_(o):#clean_(o)_adj_type_1# | #clean_(o)_noun_type_1#;#clean_(o)_adj_type_2# | #clean_(o)_noun_type_2#;#clean_(o)_adj_type_3# | #clean_(o)_noun_type_3# -clean_(o)_noun:#clean_(o)_noun_type_1#;#clean_(o)_noun_type_2#;#clean_(o)_noun_type_3# -clean_(o)_adj:#clean_(o)_adj_type_1#;#clean_(o)_adj_type_2#;#clean_(o)_adj_type_3# -### >> appliances -clean_(o)_noun_type_1:vacuum;wet napkins;paper toillet -clean_(o)_adj_type_1:new;old;clean;large;small;plain;ornate;contemporary;dirty;elegant;immaculate;simple;hefty -### >> paperproducts -clean_(o)_noun_type_2:paper towel;paper toillet;sponge -clean_(o)_adj_type_2:new;old;used;dusty;torn;ripped;dirty;clean;large;small;fancy;plain;ornate;elegant;immaculate;simple;hefty;modest;decorated;austere;embroidered -### >> non-disposable -clean_(o)_noun_type_3:napkin;towel;shirt;sock;sponge -clean_(o)_adj_type_3:new;old;used;dusty;clean;large;small;fancy;plain;dirty;elegant;tacky - -### > Storage objects -storage_(o):#storage_(o)_adj_type_1# | #storage_(o)_noun_type_1#;#storage_(o)_adj_type_2# | #storage_(o)_noun_type_2# -storage_(o)_noun:#storage_(o)_noun_type_1#;#storage_(o)_noun_type_2# -storage_(o)_adj:#storage_(o)_adj_type_1#;#storage_(o)_adj_type_2# -### >> clothing -storage_(o)_noun_type_1:shirt;sock;shoe;glove;hat;scarf;cloak;top hat;pair of pants -storage_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;contemporary;modern;dirty;elegant;immaculate;simple;modest;gaudy;fashionable;tacky -### >> appliances -storage_(o)_noun_type_2:lightbulb;pair of headphones;lampshade;frisbee -storage_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;modern;dirty;elegant;immaculate;simple;hefty;modest;off brand;useless;broken - -### > Cook objects -cook_(o):#cook_(o)_adj_type_1# | #cook_(o)_noun_type_1#;#cook_(o)_adj_type_2# | #cook_(o)_noun_type_2#;#cook_(o)_adj_type_3# | #cook_(o)_noun_type_3# -cook_(o)_noun:#cook_(o)_noun_type_1#;#cook_(o)_noun_type_2#;#cook_(o)_noun_type_3# -cook_(o)_adj:#cook_(o)_adj_type_1#;#cook_(o)_adj_type_2#;#cook_(o)_adj_type_3# -### >> utensil -cook_(o)_noun_type_1:fork;knife;spoon;spork;teaspoon -cook_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere;plastic -### >> cooking appliance -cook_(o)_noun_type_2:napkin;whisk;ladle;blender;kettle;teapot;MW -cook_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere;fancy;broken -### >> vessel/plate -cook_(o)_noun_type_3:mug;bowl;teacup;glass;coffee cup -cook_(o)_adj_type_3:new;old;used;clean;large;small;fancy;plain;ornate;antique;contemporary;modern;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;chipped - -### > Rest objects -rest_(o):#rest_(o)_adj_type_1# | #rest_(o)_noun_type_1#;#rest_(o)_adj_type_2# | #rest_(o)_noun_type_2#;#rest_(o)_adj_type_3# | #rest_(o)_noun_type_3# -rest_(o)_noun:#rest_(o)_noun_type_1#;#rest_(o)_noun_type_2#;#rest_(o)_noun_type_3# -rest_(o)_adj:#rest_(o)_adj_type_1#;#rest_(o)_adj_type_2#;#rest_(o)_adj_type_3# -### >> screen -rest_(o)_noun_type_1:laptop;tablet;monitor -rest_(o)_adj_type_1:shiny;widescreen;shut off;flat-screen -### >> electronic -rest_(o)_noun_type_2:controller;dvd;cd;lamp;laptop -rest_(o)_adj_type_2:new;old;used;dusty;clean;large;small;fancy;plain;fancy -### >> comfortable things -rest_(o)_noun_type_3:pillow;sleep bag -rest_(o)_adj_type_3:cozy;comfy;comfortable;plush;frilly;nice;small;big;heavy;cute - -### > Work objects -work_(o):#work_(o)_adj_type_1# | #work_(o)_noun_type_1#;#work_(o)_adj_type_2# | #work_(o)_noun_type_2# -work_(o)_noun:#work_(o)_noun_type_1#;#work_(o)_noun_type_2# -work_(o)_adj:#work_(o)_adj_type_1#;#work_(o)_adj_type_2# -### >> utensil -work_(o)_noun_type_1:pen;pencil;staple;notebook;cd;book;backup calendar -work_(o)_adj_type_1:new;old;used;dusty;clean;large;small;fancy;plain;ornate;dirty;elegant;immaculate;simple;hefty;modest;gaudy;decorated;austere -### >> electronic -work_(o)_noun_type_2:printer;laptop;telephone -work_(o)_adj_type_2:fancy;broken;operational;working - -## * Object Descriptor Functions -(P)_desc:It's you. -(c)_desc:The (name) looks strong, and impossible to #force_open_syn_v#. -(s)_desc:The (name) is #supp_stable#. -(o)_desc:The (name) is #obj_what#.;The (name) #looks_seems_syn_v# #out_in_place# here -(f)_desc:The (name) looks #food_what#.;that's a (name-adj) (name-n)!;You couldn't pay me to eat that (name-adj) thing.;You are starving (name), the food is #food_what# yeah?! But you can't eat that, sorry!! -(k)_desc:The (name) is cold to the touch;The (name) is #weight#.;The metal of the (name) is #key_metal#.;The (name) looks useful -(d)_desc:The (name) looks #door_what_is#.;it's a #door_what_is# (name-n);it is what it is, a (name) -# << ------------------------------------------------------------------------- >> - - -# --- Foods --------------------------------------------------------------------- -## Each roomType must have specific food -## The below should work as an expandable food pyramid. This can be made room specific. - -### > Base food -(f):#(f)_adj# | #(f)_noun# -(f)_adj:#(f)_adj_good#;#(f)_adj_bad#;#(f)_adj_neutral# -(f)_adj_good:fresh;soft;chilled;organic -(f)_adj_bad:aging;half-eaten;rotting -(f)_adj_neutral:dehydrated;dehydrated;frozen;large;small;tiny;hefty;sizable;dried;dry;pureed -(f)_noun:#(f)_noun_fresh#;#(f)_noun_preserved#;#(f)_noun_dehydrated#;(f)_noun_snack -(f)_noun_fresh:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein#;#(f)_noun_dairy#;#(f)_noun_nuts# -(f)_noun_preserved:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein#;#(f)_noun_dairy#;#candy#;#can#; -(f)_noun_dehydrated:#(f)_noun_fruit#;#(f)_noun_vegetable#;#(f)_noun_grain#;#(f)_noun_protein# -(f)_noun_snack:cheetoz;corn sticks;nacho cheese tortilla;donut;fruit chew;cheese puff;#candy# -(f)_noun_fruit:#fruit# -(f)_noun_vegetable:broccoli;carrot;cucumber;onion;garlic clove;potato;cabbage;cauliflower;pizza;salad -(f)_noun_grain:loaf of bread;sandwich -(f)_noun_protein:;legume;cashew;peanut;burger -(f)_noun_dairy:stick of butter;fondue -(f)_noun_nuts:pistachio;walnut;almond;raisin - -### > Clean food -clean_(f):#(f)# - -### > Storage food -storage_(f):#(f)# - -### > Cook food -cook_(f):#(f)# - -### > Rest food -rest_(f):#(f)# - -### > Work food -work_(f):#(f)# -# << ------------------------------------------------------------------------- >> - - -# --- Keys ---------------------------------------------------------------------- -## Each roomType must have specific keys -(k):#(k)_adj# | #(k)_noun# -(k)_adj:digital;magnetic;digital;magnetic;iron;brass;metal;rusty;steel;aluminum;copper -(k)_noun:key;keycard;latchkey;passkey - -## * Unique-use Key Match Adjective -## These adjectives CANNOT be used elsewhere! -clearancelevel:type #number#;type #letter#;#brand#;#brand#;#brand#;#shape#;#shape#;#shape#;#smell# scented; -(k<->d)_match:#(k)_adj# | #clearancelevel# #(k)_noun# <-> #(d)_adj# | #clearancelevel# #(d)_noun#; #colour# | #(k)_noun# <-> #colour# | #(d)_noun# -(k<->c)_match:#(k)_adj# | #clearancelevel# #(k)_noun# <-> #(c)_adj# | #clearancelevel# #(c)_noun#; #colour# | #(k)_noun# <-> #colour# | #(c)_noun# -# << ------------------------------------------------------------------------- >> - - -# --- Keys ---------------------------------------------------------------------- -### -openable_desc:[if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if];[if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if] -on_desc:On the (name), is [a list of things on the (obj)].;You can see [list of things on the (obj)] on the (name);this (name) has the following upon it, [list of things on the (obj)];you gaze in terror at the [list of things on the (obj)] that lie upon this very (name)!; "now why" you think, "am I looking at [list of things on the (obj)] on this (name)?" -# << ------------------------------------------------------------------------- >> - - - -########################################## Room Descriptor Grammar ################################################################# - -# --- Greetings ----------------------------------------------------------------- -## Text for starting the game. ex: "Greetings, you are now in the messy sleep station" -### -dec:#GREETING# #dec_type##suffix_(r)#;#dec_type##suffix_(r)# -GREETING:GREETING!;GREETINGS TREKKIE!;HELLO ASTRONAUT!;ALRIGHT THEN!; HEY TREKKIE -# << ------------------------------------------------------------------------- >> - - -# --- Room Intro ---------------------------------------------------------------- -## Text for introducing the room. -### -## * Room Intro Blocks -dec_type:#reg-0#;#normal-0#;#difficult-0#;#moredifficult-0#;#playful-0# -reg-0:#01#;#02#;#03# -normal-0:#04# -difficult-0:#05# -moredifficult-0:#06# -playful-0:#07#;#08#;#09#;#010#;#011#;#012#;#013#;#014#;#015#;#016#;#017#;#018#;#019#;#020#;#021#;#022# - -## * Room Intro Templates -01:#dec_find-yourself# in a (name);#dec_guess-what# (name) -02:Well, here we are in #dec_a_the# (name) -03:You're now in #dec_a_the# (name) -04:You've entered a (name);You've just #walk_into_syn_p# a (name) -05:#dec_find-yourself# in a (name-n). A (name-adj) one -06:#dec_find-yourself# in a (name-n). A (name-adj) kind of space at the craft -07:I am sorry to announce that you are now in the (name) -08:Ah, the (name-n). This is some kind of (name-n), really great (name-adj) vibes in this place, a wonderful (name-adj) atmosphere. And now, well, you're in it -09:This might come as a shock to you, but you've just #enter_syn_p# a (name) -010:I am #announce_mood# to announce that you are now in the (name) -011:You've #enter_syn_p# a (name-adj) room of the spaceship. Your mind races to think of what kind of room would be (name-adj). And then it hits you. Of course. You're in the (name) -012:Of every (name-n) you could have #walk_into_syn_p#, you had to #walk_into_syn_v# a (name-adj) one -013:You have #enter_syn_p# a (name-n) in the capsule. Not the (name-n) you'd expect. No, this is a (name) -014:You are in a (name-n). It seems to be pretty (name-adj) here -015:You #dec_what# in a (name-adj) kind of place at this spaceship. That is to say, you're in a (name-n) -016:If you're wondering why everything seems so (name-adj) all of a sudden, it's because you've just #walk_into_syn_p# the (name) -017:You make a grand eccentric entrance into a (name);You make another one of your grand eccentric entrances into a (name) -018:Look at you, bigshot, walking into a (name) like it isn't some huge deal -019:Look around you. Take it all in. It's not every day someone gets to be in a (name) -020:A #signquality# #sign# tells you that you are now in the (name);Look at that #sign#! What does it say? It says (name) Module? Well that's cool -021:This just in- You, in the (name);Welcome to the (name) of Discovery space shuttle;Wow! You're on the pad of Discovery, basically in the (name);Here we are in the (name);You've entered a (name);This (name-n) you have just entered is definitely (name-adj) -022:If you're wondering why everything seems so weird all of a sudden, it's because you've just #launched_into_syn_v#, the space with no gravity anymore -# << ------------------------------------------------------------------------- >> - - -# --- Inform7 Snippets ---------------------------------------------------------- -## Shouldn't need to be messed with. These are shortcuts for when you need to use i7 code. Probably a bad idea to include symbols or tokens inside these -### -i7_closed/open:[if (obj) is open]an open[otherwise]a closed[end if] -i7_list_in:[a list of things in the (obj)] -i7_list_on:[a list of things on the (obj)] -i7_empty:[if (obj) contains nothing]an empty[otherwise]a[end if] -inform7:[if (obj) is locked]a locked[else if (obj) is open]an opened[otherwise]a closed[end if] -inform7A:[if (obj) is locked]A locked[else if (obj) is open]An opened[otherwise]A closed[end if] -inform7noa:[if (obj) is locked]a locked[else if (obj) is open]an opened[otherwise]a closed[end if] -inform7noun:[if (obj) is locked]locked[else if (obj) is open]opened[otherwise]closed[end if] -inform7nounnoa:[if (obj) is locked]locked[else if (obj) is open]opened[otherwise]closed[end if] -# << ------------------------------------------------------------------------- >> - - -# --- Prefixes ------------------------------------------------------------------ -## To be affixed before object descriptions. Keep away from doors. Prefixes start with a uppercase letter and end with "a" -### -prefix:You see a gleam over in a corner, where you can see a;What's that over there? It looks like it's a;You scan the room, seeing a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;You smell #smelltype# smell, and follow it to a;Were you looking for a (name-n)? Because look over there, it's a;You scan the room for a (name-n), and you find a;You hear a noise behind you and spin around, but you can't see anything other than a;Look out! It's a- oh, never mind, it's just a;Look over there! a;Oh, great. Here's a;Hey, want to see a (name-n)? Look over there, a;If you haven't noticed it already, there seems to be something there by the wall, it's a;When you freely float, you notice a;Oh wow! Is that what I think it is? It is! It's a;You are pushed against the wall, inadvertently pressing a secret button. The wall opens up to reveal a;You see a;As if things weren't amazing enough already, you can even see a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a;#how_see# a -# << ------------------------------------------------------------------------- >> - - -# --- Suffixes ------------------------------------------------------------------ -## To be affixed after object descriptions. Keep away from doors. Keep in mind a suffix is usually (but not always) followed by a prefix. Suffixes start with punctuation and -## end with a period (or exclamation/question mark). -### -suffix_meta:. There's something about an object in a module that's just so... TextWorld.;. You can't really describe the (name-n) besides that it's (name-adj).;. Does this look like anything mentioned in the instructions?;. What a great pairing of adjectives and nouns!;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on.;. Make a note of this, you might have to put stuff on or in it later on. -suffix_fulfillment:. A (name-n)... Is that really what you were looking for?;. Is this it? Is this what you came to TextWorld to see? a (name-n)?;. Hmm. You always thought you'd be more excited to see a (name-n) in a spaceship module.;. Is this what you came to TextWorld for? This... (name-n)?;. You look around you, at all the containers and supporters, doors and objects, and you think to yourself. Why? Why Textworld? -suffix_(r):. Okay, just remember what is your mission here to do, and everything will go great.;. You try to gain information on your surroundings by using a technique you call 'looking.';. You can barely contain your excitement.;. The room seems oddly familiar, as though it were only superficially different from the other rooms in the spacecraft.;. You decide to just list off a complete list of everything you see in the module, because hey, why not?;. I guess you better just go and list everything you see here.;. You start to take note of what's in the module.;. You decide to start listing off everything you see in the module, as if you were in a text adventure.;. The module is well lit.;. You begin to take stock of what's here.;. Let’s list all the required tools here for the mission.;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# - -## * Cut for length -suffix:.;. You shudder, but continue examining the module.;. You wonder idly who left that here.;. Now why would someone leave that there?;. There's something strange about this being here, but you can't put your finger on it.;. There's something strange about this thing being here, but you don't have time to worry about that now.;. Huh, weird.;, so there's that.;!;. Hmmm... what else, what else?;. Wow, isn't TextWorld just the best?;. I mean, just wow! Isn't TextWorld just the best?;. You can't wait to tell the folks at mission control hall about this!;. Something scurries by right in the corner of your eye. Probably nothing.;. You idly wonder how they came up with the name TextWorld for this place. It's pretty fitting.;. Suddenly, you bump your head on the ceiling, but it's not such a bad bump that it's going to prevent you from looking at objects and even things.;. Now that's what I call TextWorld!;. Classic TextWorld.;. The light flickers for a second, but nothing else happens.;.;.;.;#emptymainperiod#;#emptymainperiod#;#emptymainperiod#;#suffix_fulfillment#;#suffix_meta# - -## * Multi suffixes need to be more flexible than normal ones -suffix-multi:.;. You shudder, but continue examining the room.;. You wonder idly who put this stuff here.;. There's something strange about this stuff being here, but you can't put your finger on it.;. There's something strange about this stuff being here, but you don't have time to worry about that now.;. Huh, weird.;, so there's that.;, so why not take a picture, it'll last longer!;. It doesn't get any more TextWorld than this!;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# -suffix_(s)_mid:.;. You shudder, but continue examining the (name-n).;. You wonder idly who left that here.;. Now why would someone leave that there?;#suffix_meta#;. Why don't you take a picture of it, it'll last longer!;!;. Wow, isn't TextWorld just the best?;. I guess it's true what they say, if you're looking for a (name-n), go to TextWorld.;. What a coincidence, weren't you just thinking about a (name-n)?;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# -suffix_(s)_end:.;. Check and see you cannot remove them.;. You shudder, but continue examining the room.;. There's something strange about this being here, but you can't put your finger on it.;. There's something strange about this thing being here, but you don't have time to worry about that now. You have more important mission!;. Huh, weird.;, so there's that.;. Hmmm... what else, what else?;. I mean, just wow! Isn't TextWorld just the best?;. You can't wait to tell the folks at home about this!;. Something scurries by right in the corner of your eye. Probably nothing.;. You idly wonder how they came up with the name TextWorld Spaceship for this place. It's pretty fitting.;. Suddenly, you bump your head on the ceiling, nogravity ha?! but it's not such a bad bump that it's going to prevent you from looking at objects and even things.;. Wow! Just like in the StartWar movies!;. It doesn't get more TextWorld than this!;. Now that's what I call TextWorld!;. Classic TextWorld.;#suffix#;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# -suffix_(s)_end_angry:. You move on, clearly #upsetwith# TextWorld.;. You move on, clearly #upsetwith# your TextWorld experience.;. Sometimes, just sometimes, TextWorld can just be the worst.;. What's the point of an empty (name-n)?;. Hopefully this doesn't make you too upset.;. You make a mental note to not get your hopes up the next time you see a (name-n) in a room.;. ;. Hopefully, this discovery doesn't ruin your TextWorld experience!;. Silly (name-n), silly, empty, good for nothing (name-n).;. You think about smashing the (name-n) to bits, throwing the bits #intheblank#, etc, until you get bored.;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n)! oh well.;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;. Aw, and here you were, all excited for there to be things on it!;. Oh! Why couldn't there just be stuff on it?;. Hm. Oh well;. What, you think everything in TextWorld should have stuff on it?;. It would have been so cool if there was stuff on the (name-n).;#emptymainperiod#;#emptymainperiod#;#emptymainperiod# -# << ------------------------------------------------------------------------- >> - - -# --- Separators Description ---------------------------------------------------- -## Used to separate the description of different object types - -## * Container Descriptions -### Rules for Container Descriptions -### Good idea to subdivide these into difficulty levels -### room_desc_(c): generates all container descriptions -### containerdescription: contains all physical exterior descriptions of containers -### room_desc_(c)_1_name: describes the container as an adj+noun -### room_dec_(c)_1_noun: describes the container as a noun -### room_desc_(c)_content: decides if we append a description of the container's contents depending on if the container is open or closed -### opencontainer:what is appended if the container is open -### room_desc_(c)_2_adj: adds an adjective and a list of contents (creates doubled adjectives?) -### room_desc_(c)_2: list of contents without an adjective -### -room_desc_(c):#containerdescription##room_desc_(c)_content# - -containerdescription:#room_desc_(c)_1_name#;#room_desc_(c)_1_noun# - -room_desc_(c)_1_name:#reg-a#;#normal-a#;#difficult-a#;#moredifficult-a#;#playful-a# -reg-a:#a1#;#a2# -normal-a:#a3#;#a4#;#a5# -difficult-a:#a6# -moredifficult-a:#reg-a# -playful-a:#reg-a# - -room_desc_(c)_1_noun:#reg-b#;#normal-b#;#difficult-b#;#moredifficult-b#;#playful-b# -reg-b:#b1#;#b2# -normal-b:#b3#;#b4#;#b5# -difficult-b:#reg-b# -moredifficult-b:#reg-b# -playful-b:#reg-b# - -room_desc_(c)_content:[if (obj) is open and there is something in the (obj)] #opencontainer##suffix#[end if][if (obj) is open and the (obj) contains nothing] #emptyreaction#[end if] -emptyreaction:The (name-n) is empty, what a horrible day!;The (name-n) is empty! What a waste of a day!;The (name-n) is empty! This is the worst thing that could possibly happen, ever!;Empty! What kind of nightmare TextWorld is this?;What a letdown! The (name-n) is empty! - -opencontainer:The (name) contains #i7_list_in# - -room_desc_(c)_2_adj:#c1#;#c2#;#c3#;#c4#;#c5#;#c6#;#c7#;#c8#;#c9# - -room_desc_(c)_2:#d0#;#d1#;#d2#;#d3#;#d4# - -room_desc_(c)_multi_noun:#e1# -room_desc_(c)_multi_open_noun:#f1#;#f2#;#f3#;#f4#;#f5#;#f6# - -room_desc_(c)_multi_adj:#g1# -room_desc_(c)_multi_open_adj:#h1#;#h2#;#h3#;#h4# - -## * Container Description Templates -### -### # A # -a1:#how_see# #inform7# (name).;#a6# -a2:#how_see# #inform7# #name_var# #here_alt#.;#a6# -a3:#inform7A# #name_var# is #here_alt#.;#a6# -a4:#a1#;#a6# -a5:#a2#;#a6# -a6:#prefix# (name)#suffix# - -### # B # -b1:#how_see# #inform7# (name-n).;#b5# -b2:#how_see# #inform7# (name-n) #here_alt#.;#b5# -b3:#inform7A# (name-n) is #here_alt#.;#b5# -b4:#b1#;#b5# -b5:#prefix# (name-n)#suffix# - -### # C # -c1:#it_is# (name-adj), and #contain_syn_v# #i7_list_in#. -c2:#it_is# (name-adj). Also, there #listwithis# in it. -c3:#c1# -c4:#ContentsC-# [list of things in the (obj)]. -c5:there [is|are] [a list of things in the (obj)] in this silly (name-adj) thing. -c6:#c9# -c7:#c9# -c8:Let's see what's inside - #i7_list_in#. -c9:#it# #reminds_you# the containers #ofyouryouth#. Oh, how they also #contain_syn_p# #i7_list_in#. - -### # D # -d0:the (name) contains #i7_list_in#. -d1:It #contain_syn_v# #i7_list_in#.;There is #i7_list_in# in it. -d2:There #listwithis# #findin_syn_p# it. -d3:You can see #i7_list_in# in the (name-n). -d4:In it, you can see #i7_list_in#. - -### # E # -e1:[if (obj) is open]#room_desc_(c)_multi_open_noun#.[else if (obj) is locked]The (name-n) is locked.[otherwise]The (name-n) is closed.[end if] - -### # F # -f1:The (name-n) #contain_syn_v# #i7_list_in# -f2:There #listwithis# #findin_syn_p# the (name-n) -f3:You can see #i7_list_in# in the (name-n) -f4:#f5#;#f6# -f5:#f6# -f6:The (name-n) #reminds_you# the containers #ofyouryouth#. Oh, how they also #contain_syn_p# #i7_list_in# - -### # G # -g1:[if (obj) is open]#room_desc_(c)_multi_open_adj#.[else if (obj) is locked]The (name-adj) one is locked.[otherwise]The (name-adj) one is closed.[end if] - -### # H # -h1:The (name-adj) one #contain_syn_v# #i7_list_in# -h2:There #i7_list_in# #findin_syn_p# the (name-adj) one -h3:You can see #i7_list_in# in the (name) -h4:In the (name-adj) one, you can see #i7_list_in# - -## * Supporter Descriptions -### Similar to Container descriptions, but without open/close or lock/unlock -### room_desc_(s): hub -### room_desc_(s)_1_noun : description of supporter without adjective. Paired with--> room_desc_(s)_2_adj -### room_desc_(s)_1_name : same as above, but with an adjective -### room_desc_(s)_2_adj : adjective for supporter plus a list of things on it -### room_desc_(s)_2: -### -room_desc_(s):#room_desc_(s)_1_noun# #room_desc_(s)_2_adj#;#room_desc_(s)_1_name# #room_desc_(s)_2# - -room_desc_(s)_1_noun:#prefix# floating (name-n)#suffix_(s)_mid# - -room_desc_(s)_1_name:#prefix# freefloating (name)#suffix_(s)_mid# - -room_desc_(s)_2_adj:The (name-n) is (name-adj).[if there is something on the (obj)] On the (name) #how_see_u# #i7_list_on# tightly fixed#suffix_(s)_end#[end if][if there is nothing on the (obj)] #emptysupporter##suffix_(s)_end_angry#[end if];The (name-n) is (name-adj) [if there is nothing on the (obj)] on the (name) #i7_list_on# which are screwed to the (name-n)[otherwise]#emptysupporter#[end if] - -room_desc_(s)_2:[if there is something on the (obj)]On the (name) #how_see_u# #i7_list_on# tightened to the surface#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter##suffix_(s)_end_angry#[end if];[if there is something on the (obj)]You see #i7_list_on# on the (name-n), see how it is fixed to the surface#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter##suffix_(s)_end_angry#[end if] - -room_desc_(s)_multi_noun:[if there is something on the (obj)]On the (name-n), you see #i7_list_on#, which you cannot remove them#suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter_multi##suffix_(s)_end_angry#[end if] - -room_desc_(s)_multi_adj:[if there is something on the (obj)]On the (name-adj) one, you see #i7_list_on##suffix_(s)_end#[end if][if there is nothing on the (obj)]#emptysupporter_multi##suffix_(s)_end_angry#[end if] - -emptysupporter:But there isn't a thing on it, weightless is amazing!;Unfortunately, there isn't a thing on it;But the thing is empty;But the thing is empty, unfortunately;But the thing hasn't got anything on it;But oh no! there's nothing on this piece of #trash#;The (name-n) appears to be empty;Looks like someone's already been here and taken everything off it, though;However, the (name-n), like an empty (name-n), has nothing on it; - -emptysupporter_multi:There isn't a thing on the (name-n);The (name-n) is empty;Look at the (name-n). There's nothing on this piece of #trash#;But the (name-n) hasn't got anything on it;What a letdown, there's nothing here; - -## * Group Descriptions -### -room_desc_group:You can see (^) (val), (name), here#suffix-multi#;Your attention is drawn to (^) (val), (name)#suffix-multi# - -## * Exit Descriptions -### room_desc_(d): describes a single door in the room -### room_desc_(dir): describes a single unblocked exit in the room -### room_exit_desc: describes multiple unlocked exits in the room -### room_desc_exits: possible unnecessary -### room_desc_doors_closed: describes a group of closed doors in the room -### room_desc_doors_open: describes a group of open doors in the room -### -room_desc_(d):There is #i7_closed/open# (name) leading (dir). - -room_desc_(dir):There is an #unblocked# exit to the (dir).;There is an exit to the (dir). Don't worry, it is #unblocked#.;You need an #unblocked# exit? You should try going (dir).;You don't like doors? Why not try going (dir), that entranceway is #unblocked#. - -room_exit_desc:#easy1#.;#medium1#.;#hard1#. -easy1:There [is an|are] #unblocked# [exit|exits] to the (dir);There [is an|are] [exit|exits] to the (dir). And hey, don't worry, [they are|it's] #unblocked# -medium1:[An exit|Exits] #unblocked# [lies|lie] to the (dir);You can go (dir) from here without having to deal with any doors -hard1:it looks like you can exit to the (dir), if doors aren't really your #yourthing#;if you want to leave, and doors really aren't your #yourthing# you could try going (dir);If you're not really a door person, you could leave by the (dir);If you're not really a doors fan, you could leave by the (dir);not a fan of the doors? Why not go (dir);Hot tip- if you go (dir), you won't have to deal with any doors - -room_desc_exits:There [is an|are] #unblocked# [exit|exits] to the (dir). - -room_desc_doors_closed:#easy0a#. -easy0a:There are (^) closed doors, (name-indefinite), here;Let's see how many closed doors there are. Looks like (^), (name-indefinite);There are (^) closed doors here, (name-indefinite); - -room_desc_doors_open:#easy0b#. -easy0b:There are (^) open doors, (name-indefinite), here;Let's see how many open doors there are. Looks like (^), (name-indefinite) -# << ------------------------------------------------------------------------- >> - - - -############################################ Instructions Grammar ################################################################## - -# --- Compound Command Description Functions ------------------------------------ -## -### -ig_unlock_open:open the locked #lock_types# using the (k).;unlock and open the #lock_types#.;unlock and open the #lock_types# using the (k).;open the #lock_types# using the (k). -ig_unlock_open_take:open the locked #lock_types# using the (k) and take the #obj_types_no_key#.;unlock the #lock_types# and take the #obj_types_no_key#.;unlock the #lock_types# using the (k), and take the #obj_types_no_key#.;take the #obj_types_no_key# from within the locked #lock_types#. -ig_unlock_open_release:open the locked #lock_types# using the (k) and unhook the #obj_types_no_key#.;unlock the #lock_types# and release the #obj_types_no_key#.;unlock the #lock_types# using the (k), and unhook the #obj_types_no_key#.;release the #obj_types_no_key# from within the locked #lock_types#. -ig_open_take:take the #obj_types# from the (c).;open the (c) and take the #obj_types#.;from in the closed (c), take the #obj_types#. -ig_take/c_unlock:take the (k) and use it to unlock the #lock_types#.;unlock the #lock_types#, with the (k).; -ig_take/s_unlock:take the (k) and use it to unlock the #lock_types#.;unlock the #lock_types#, with the (k).; -ig_take_unlock:#take_syn_v# the (k) and use it to unlock the #lock_types#.;unlock the #lock_types# with the (k).; -ig_open_insert:open the (c) and place the #obj_types# in it.;put the #obj_types# in the closed (c).; -ig_insert_close:place the #obj_types# in the (c) and close it.;close (c) after placing the #obj_types# in it.;attach the #obj_types# to the hook in the (c) and close it. -ig_close_lock:close the #lock_types# and lock it.;close the #lock_types# and lock it with the (k). -# << ------------------------------------------------------------------------- >> - - -# --- Flavour Text --------------------------------------------------------------- -## -### -quest:#prologue# (list_of_actions) #epilogue# -quest_one_action:#prologue_one_action# (action) -prologue:#welcome#! Here is your task for today. #newsentence#;#welcome#! Here is how to play! #newsentence#;#welcome#! #newsentence#;Hey, thanks for coming over to the TextWorld today, there is something I need you to do for me. #newsentence# -prologue_one_action:#welcome#! Your task for today is to;#welcome#!;Your objective is to;Hey, thanks for coming over to TextWorld! Please -newsentence:First off,;First of all,;First stop,;First step,;Your first objective is to;First thing I need you to do is to;First off, if it's not too much trouble, I need you to;First of all, you could, like,;First, it would be #begood# if you could -action_separator: Then, ; Next, ; Following that, ; If you can #do_syn_v# that, ; Once you #do_syn_v# that, ; That done, ; With that over with, ; With that accomplished, ; With that done, ; Okay, and then, ; And then, ;#emptyinstruction# -epilogue:Once that's all handled, you can stop!;And once you've done that, you win!;And if you do that, you're the winner!;That's it!;Got that? Good!;Alright, thanks! -welcome:Welcome to TextWorld;You are now playing a #exciting# #game# of TextWorld Spaceship;Welcome to another #exciting# #game# of TextWorld;It's time to explore the amazing world of TextWorld Galaxy;Get ready to pick stuff up and put it in places, because you've just entered TextWorld shuttle;I hope you're ready to go into rooms and interact with objects, because you've just entered TextWorld shuttle;Who's got a virtual machine and is about to play through an #exciting# round of TextWorld? You do; -game:game;round;session;episode -# << ------------------------------------------------------------------------- >> - - -# --- Separators ----------------------------------------------------------------- -## *--- Action separators -### Need at least 5 for each action type -### -action_separator_take:#afterhave# #take_syn_pp# the #obj_types#, ;#after# #taking# the #obj_types#, ;With the #obj_types#, ;If you can get your hands on the #obj_types#, ;#emptyinstruction#; -action_separator_take/s:#afterhave# #take_syn_pp# the #obj_types# from (s), ;#after# #taking# the #obj_types# from (s), ;With the #obj_types#, ;If you can get your hands on the #obj_types#, ;#emptyinstruction# -action_separator_eat:#afterhave# #eat_syn_pp# the #eat_types#, ;#after# #eating# the #obj_types#, ;#emptyinstruction#; -action_separator_insert:#afterhave# #insert_syn_pp# the #obj_types# into the (c), ;#after# #inserting# the #obj_types# into the (c), ;#emptyinstruction# -action_separator_open: #afterhave# #open_syn_pp# the #close_open_types#, ;#after# #opening# the #close_open_types#, ;#emptyinstruction# -action_separator_unlock: #afterhave# #unlock_syn_pp# the #lock_types#, ;#after# #unlocking# the #lock_types#, ;#emptyinstruction#; -action_separator_lock: #afterhave# #lock_syn_pp# the #lock_types#, ;#after# #locking# the #lock_types#, ;#emptyinstruction#; -action_seperator_go: #afterhave# #go_syn_pp# (dir), ;#after# #going# (dir), ;once you're (dir), ;once you're in the (dir), ;If you can manage to go (dir), ;#afterhave# #go_syn_pp# through the (r), ;#after# #going# through the (r), ;#emptyinstruction# -action_seperator_go/south: #afterhave# #go_syn_pp# south, ;#emptyinstruction# -action_seperator_go/north: #afterhave# #go_syn_pp# north, ;#emptyinstruction# -action_seperator_go/east: #afterhave# #go_syn_pp# east, ;#emptyinstruction# -action_seperator_go/west: #afterhave# #go_syn_pp# west, ;#emptyinstruction# -action_separator_close: #afterhave# #close_syn_pp# the #close_open_types#, ; #after# #closing# the #close_open_types#, ;#emptyinstruction# -action_separator_release: #afterhave# #release_syn_pp# the #obj_types# from the #(s)_var#, ; #after# #releasing# the #obj_types# into the (r);#emptyinstruction# - - -## *--- Separator Symbols -### -afterhave:After you have;Having;Once you have;If you have -after:After; -# << ------------------------------------------------------------------------- >> - - - - -# --- Empty Icon ---------------------------------------------------------------- -### -emptymainperiod:#emptymain# -emptymain:#empty1#;#empty2#;#empty3#;#empty4#;#empty5#;#empty6#;#empty7#;#empty8#;#empty9#;#empty10#;#empty11#;#empty12#;#empty13#;#empty14#;#empty15#;#empty16#;#empty17#;#empty18#;#empty19#;#empty20#;#empty21#;#empty22#;#empty23#;#empty24#;#empty25#;#empty26#;#empty27#;#empty28#;#empty29#;#empty30#;#empty31#;#empty32#;#empty33#;#empty34#;#empty35#;#empty36#;#empty37#;#empty38#;#empty39#;#empty40#;#empty41#;#empty42#;#empty43#;#empty44#;#empty45#;#empty46#;#empty47#;#empty48#;#empty49#;#empty50#;#empty51#;#empty52#;#empty53#;#empty54#;#empty55#;#empty56#;#empty57#;#empty58#;#empty59#;#empty60#;#empty61#;#empty62#;#empty63# -empty1:.; -empty2:.; -empty3:.; -empty4:.; -empty5:.; -empty6:.; -empty7:.; -empty8:.; -empty9:.; -empty10:.; -empty11:.; -empty12:.; -empty13:.; -empty14:.; -empty15:.; -empty16:.; -empty17:.; -empty18:.; -empty19:.; -empty20:.; -empty21:.; -empty22:.; -empty23:.; -empty24:.; -empty25:.; -empty26:.; -empty27:.; -empty28:.; -empty29:.; -empty30:.; -empty31:.; -empty32:.; -empty33:.; -empty34:.; -empty35:.; -empty36:.; -empty37:.; -empty38:.; -empty39:.; -empty40:.; -empty41:.; -empty42:.; -empty43:.; -empty44:.; -empty45:.; -empty46:.; -empty47:.; -empty48:.; -empty49:.; -empty50:.; -empty51:.; -empty52:.; -empty53:.; -empty54:.; -empty55:.; -empty56:.; -empty57:.; -empty58:.; -empty59:.; -empty60:.; -empty61:.; -empty62:.; -empty63:.; - - -emptyinstruction:#emptyinstruction1#;#emptyinstruction2#;#emptyinstruction3#;#emptyinstruction4#;#emptyinstruction5#;#emptyinstruction6#;#emptyinstruction7#,#emptyinstruction8#;#emptyinstruction9#;#emptyinstruction10# -emptyinstruction1: And then, ; -emptyinstruction2: Then, ; -emptyinstruction3: After that, ; -emptyinstruction4: And then, ; -emptyinstruction5: After that, ; -emptyinstruction6: Then, ; -emptyinstruction7: And then, ; -emptyinstruction8: After that, ; -emptyinstruction9: And then, ; -emptyinstruction10: Then, ; diff --git a/textworld/generator/__init__.py b/textworld/generator/__init__.py index 0f300807..069379e8 100644 --- a/textworld/generator/__init__.py +++ b/textworld/generator/__init__.py @@ -159,9 +159,9 @@ def make_quest(world: Union[World, State], options: Optional[GameOptions] = None return quests -def make_grammar(options: Mapping = {}, rng: Optional[RandomState] = None) -> Grammar: +def make_grammar(options: Mapping = {}, rng: Optional[RandomState] = None, kb: Optional[KnowledgeBase] = None) -> Grammar: rng = g_rng.next() if rng is None else rng - grammar = Grammar(options, rng) + grammar = Grammar(options, rng, kb) grammar.check() return grammar diff --git a/textworld/generator/game.py b/textworld/generator/game.py index ccae041a..6ee51362 100644 --- a/textworld/generator/game.py +++ b/textworld/generator/game.py @@ -990,6 +990,9 @@ def update(self, action: Action) -> None: for quest_progression in self.quest_progressions: quest_progression.update(action, self.state) + for win_event in quest_progression.win_events: + self.state.apply(win_event.event.condition) + class GameOptions: """ diff --git a/textworld/generator/inform7/world2inform7.py b/textworld/generator/inform7/world2inform7.py index 423e393b..38889cc1 100644 --- a/textworld/generator/inform7/world2inform7.py +++ b/textworld/generator/inform7/world2inform7.py @@ -363,8 +363,6 @@ def gen_source(self, seed: int = 1234) -> str: if maximum_score >= 0: source += "Use scoring. The maximum score is {}.\n".format(maximum_score) - print(maximum_score) - print(wining) # Build test condition for winning the game. game_winning_test = "1 is 0 [always false]" if wining > 0: diff --git a/textworld/generator/text_grammar.py b/textworld/generator/text_grammar.py index 59af474d..acaf22de 100644 --- a/textworld/generator/text_grammar.py +++ b/textworld/generator/text_grammar.py @@ -132,7 +132,8 @@ class Grammar: _cache = {} - def __init__(self, options: Union[GrammarOptions, Mapping[str, Any]] = {}, rng: Optional[RandomState] = None): + def __init__(self, options: Union[GrammarOptions, Mapping[str, Any]] = {}, rng: Optional[RandomState] = None, + kb: Optional[KnowledgeBase] = None): """ Arguments: options: @@ -159,6 +160,10 @@ def __init__(self, options: Union[GrammarOptions, Mapping[str, Any]] = {}, rng: # Load the object names file path = pjoin(KnowledgeBase.default().text_grammars_path, glob.escape(self.theme) + "*.twg") files = glob.glob(path) + if kb is not None: + path = pjoin(kb.text_grammars_path, glob.escape(self.theme) + "*.twg") + files += glob.glob(path) + if len(files) == 0: raise MissingTextGrammar(path) From 99656ba9ce34592ca1c352612e7ccb61d8b98012 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Mon, 6 Jan 2020 12:50:37 -0500 Subject: [PATCH 12/13] The spaceship game - medium level v1.0 full package --- .../challenges/spaceship/agent_design_a2c.py | 18 +- .../spaceship/games/levelMedium.json | 1 - .../challenges/spaceship/games/levelMedium.ni | 917 ------------------ .../spaceship/games/levelMedium.ulx | Bin 640000 -> 0 bytes .../challenges/spaceship/spaceship_game.py | 315 +++++- .../spaceship/textworld_data/logic/CPU.twl | 6 +- 6 files changed, 307 insertions(+), 950 deletions(-) delete mode 100644 textworld/challenges/spaceship/games/levelMedium.json delete mode 100644 textworld/challenges/spaceship/games/levelMedium.ni delete mode 100644 textworld/challenges/spaceship/games/levelMedium.ulx diff --git a/textworld/challenges/spaceship/agent_design_a2c.py b/textworld/challenges/spaceship/agent_design_a2c.py index 0764365f..bc78804a 100644 --- a/textworld/challenges/spaceship/agent_design_a2c.py +++ b/textworld/challenges/spaceship/agent_design_a2c.py @@ -263,7 +263,7 @@ def _discount_rewards(self, last_values): return returns[::-1], advantages[::-1] -def play(agent, path, max_step=50, nb_episodes=1, verbose=True): +def play(agent, path, max_step=50, nb_episodes=10, verbose=True): """ This code uses the cooking agent design in the spaceship game. @@ -304,7 +304,6 @@ def play(agent, path, max_step=50, nb_episodes=1, verbose=True): command = agent.act(obs, score, done, infos) obs, score, done, infos = env.step(command) nb_moves += 1 - agent.act(obs, score, done, infos) # Let the agent know the game is done. if verbose: @@ -319,19 +318,26 @@ def play(agent, path, max_step=50, nb_episodes=1, verbose=True): if os.path.isdir(path): print(msg.format(np.mean(avg_moves), np.mean(avg_norm_scores), 1)) else: + print(avg_scores) print(msg.format(np.mean(avg_moves), np.mean(avg_scores), infos["max_score"])) agent = NeuralAgent() +step_size = 750 print(" ===== Training ===================================================== ") agent.train() # Tell the agent it should update its parameters. start_time = time() -play(agent, "./games/levelMedium.ulx", nb_episodes=25, verbose=False) +print(os.path.realpath("./games/levelMedium_v1.ulx")) +play(agent, "./games/levelMedium_v1.ulx", max_step=step_size, nb_episodes=2000, verbose=False) print("Trained in {:.2f} secs".format(time() - start_time)) print(' ===== Test ========================================================= ') -# agent.test() -agent.test(method='eps-soft') -play(agent, "./games/levelMedium.ulx") # Medium level game. +agent.test(method='random') +play(agent, "./games/levelMedium_v1.ulx", max_step=step_size) # Medium level game. + +save_path = "./model/levelMedium_v1_random.npy" +if not os.path.exists(os.path.dirname(save_path)): + os.mkdir(os.path.dirname(save_path)) +np.save(save_path, agent) diff --git a/textworld/challenges/spaceship/games/levelMedium.json b/textworld/challenges/spaceship/games/levelMedium.json deleted file mode 100644 index fc1ab8ba..00000000 --- a/textworld/challenges/spaceship/games/levelMedium.json +++ /dev/null @@ -1 +0,0 @@ -{"version": 1, "world": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_0", "type": "c"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_1", "type": "c"}, {"name": "r_1", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_5", "type": "c"}, {"name": "r_4", "type": "r"}]}, {"name": "at", "arguments": [{"name": "c_6", "type": "c"}, {"name": "r_5", "type": "r"}]}, {"name": "at", "arguments": [{"name": "l_0", "type": "l"}, {"name": "r_6", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_0", "type": "s"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_1", "type": "s"}, {"name": "r_2", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_2", "type": "s"}, {"name": "r_2", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_3", "type": "s"}, {"name": "r_3", "type": "r"}]}, {"name": "at", "arguments": [{"name": "s_4", "type": "s"}, {"name": "r_3", "type": "r"}]}, {"name": "clean", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "closed", "arguments": [{"name": "c_2", "type": "c"}]}, {"name": "closed", "arguments": [{"name": "c_5", "type": "c"}]}, {"name": "closed", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "east_of", "arguments": [{"name": "r_2", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "east_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_5", "type": "r"}]}, {"name": "east_of", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_2", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_2", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "free", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "in", "arguments": [{"name": "b_0", "type": "b"}, {"name": "c_4", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "c_1", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_1", "type": "k"}, {"name": "c_2", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "c_3", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_3", "type": "k"}, {"name": "c_5", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_4", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "in", "arguments": [{"name": "k_6", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "in", "arguments": [{"name": "txt_0", "type": "txt"}, {"name": "c_6", "type": "c"}]}, {"name": "link", "arguments": [{"name": "r_0", "type": "r"}, {"name": "d_0", "type": "d"}, {"name": "r_1", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_1", "type": "r"}, {"name": "d_0", "type": "d"}, {"name": "r_0", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_1", "type": "r"}, {"name": "d_1", "type": "d"}, {"name": "r_3", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_3", "type": "r"}, {"name": "d_1", "type": "d"}, {"name": "r_1", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_3", "type": "r"}, {"name": "d_2", "type": "d"}, {"name": "r_5", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_4", "type": "r"}, {"name": "d_3", "type": "d"}, {"name": "r_6", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_5", "type": "r"}, {"name": "d_2", "type": "d"}, {"name": "r_3", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_6", "type": "r"}, {"name": "d_3", "type": "d"}, {"name": "r_4", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_6", "type": "r"}, {"name": "d_4", "type": "d"}, {"name": "r_7", "type": "r"}]}, {"name": "link", "arguments": [{"name": "r_7", "type": "r"}, {"name": "d_4", "type": "d"}, {"name": "r_6", "type": "r"}]}, {"name": "locked", "arguments": [{"name": "c_1", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_3", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_4", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "c_6", "type": "c"}]}, {"name": "locked", "arguments": [{"name": "d_1", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_2", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_3", "type": "d"}]}, {"name": "locked", "arguments": [{"name": "d_4", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_0", "type": "k"}, {"name": "d_1", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_1", "type": "k"}, {"name": "c_1", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_2", "type": "k"}, {"name": "c_6", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_3", "type": "k"}, {"name": "d_2", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_4", "type": "k"}, {"name": "c_4", "type": "c"}]}, {"name": "match", "arguments": [{"name": "k_5", "type": "k"}, {"name": "d_3", "type": "d"}]}, {"name": "match", "arguments": [{"name": "k_6", "type": "k"}, {"name": "c_3", "type": "c"}]}, {"name": "north_of", "arguments": [{"name": "r_0", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_3", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_4", "type": "r"}, {"name": "r_6", "type": "r"}]}, {"name": "north_of", "arguments": [{"name": "r_6", "type": "r"}, {"name": "r_7", "type": "r"}]}, {"name": "on", "arguments": [{"name": "c_2", "type": "c"}, {"name": "s_1", "type": "s"}]}, {"name": "on", "arguments": [{"name": "c_3", "type": "c"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "c_4", "type": "c"}, {"name": "s_4", "type": "s"}]}, {"name": "on", "arguments": [{"name": "cpu_0", "type": "cpu"}, {"name": "s_0", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_0", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_1", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "on", "arguments": [{"name": "o_2", "type": "o"}, {"name": "s_3", "type": "s"}]}, {"name": "open", "arguments": [{"name": "c_0", "type": "c"}]}, {"name": "pair", "arguments": [{"name": "b_0", "type": "b"}, {"name": "d_4", "type": "d"}]}, {"name": "south_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_0", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_1", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_6", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "south_of", "arguments": [{"name": "r_7", "type": "r"}, {"name": "r_6", "type": "r"}]}, {"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "unpushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "unread/t", "arguments": [{"name": "txt_0", "type": "txt"}]}, {"name": "west_of", "arguments": [{"name": "r_1", "type": "r"}, {"name": "r_2", "type": "r"}]}, {"name": "west_of", "arguments": [{"name": "r_3", "type": "r"}, {"name": "r_4", "type": "r"}]}, {"name": "west_of", "arguments": [{"name": "r_5", "type": "r"}, {"name": "r_3", "type": "r"}]}], "grammar": {"theme": "spaceship", "names_to_exclude": [], "include_adj": false, "blend_descriptions": false, "ambiguous_instructions": false, "only_last_action": false, "blend_instructions": false, "allowed_variables_numbering": false, "unique_expansion": false}, "quests": [{"desc": "", "reward": 0, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}], "postconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "read/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_1", "type": "r"}]}], "postconditions": [{"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "read/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_1", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "cpu_0", "type": "cpu"}, {"name": "d_0", "type": "d"}, {"name": "r_0", "type": "r"}, {"name": "r_1", "type": "r"}]}]}}], "fail_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_1", "type": "r"}]}], "postconditions": [{"name": "unread/e", "arguments": [{"name": "cpu_0", "type": "cpu"}]}, {"name": "open", "arguments": [{"name": "d_0", "type": "d"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_0", "type": "r"}]}, {"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_1", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "cpu_0", "type": "cpu"}, {"name": "d_0", "type": "d"}, {"name": "r_0", "type": "r"}, {"name": "r_1", "type": "r"}]}]}}]}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_0", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_0", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_2", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_2", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}], "postconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "event", "arguments": [{"name": "b_0", "type": "b"}, {"name": "l_0", "type": "l"}]}]}}], "fail_events": []}, {"desc": "", "reward": 0, "commands": [], "win_events": [], "fail_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}], "postconditions": [{"name": "takenoff", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "pushed", "arguments": [{"name": "b_0", "type": "b"}]}, {"name": "event", "arguments": [{"name": "b_0", "type": "b"}, {"name": "l_0", "type": "l"}]}]}}]}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "I", "type": "I"}]}], "postconditions": [{"name": "in", "arguments": [{"name": "k_5", "type": "k"}, {"name": "I", "type": "I"}]}, {"name": "event", "arguments": [{"name": "I", "type": "I"}, {"name": "k_5", "type": "k"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "read/t", "arguments": [{"name": "txt_0", "type": "txt"}]}], "postconditions": [{"name": "read/t", "arguments": [{"name": "txt_0", "type": "txt"}]}, {"name": "event", "arguments": [{"name": "txt_0", "type": "txt"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}], "postconditions": [{"name": "worn", "arguments": [{"name": "l_0", "type": "l"}]}, {"name": "event", "arguments": [{"name": "l_0", "type": "l"}]}]}}], "fail_events": []}, {"desc": "", "reward": 1, "commands": [], "win_events": [{"commands": [], "actions": [], "condition": {"name": "trigger", "preconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}], "postconditions": [{"name": "at", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}, {"name": "event", "arguments": [{"name": "P", "type": "P"}, {"name": "r_7", "type": "r"}]}]}}], "fail_events": []}], "infos": [["P", {"id": "P", "type": "P", "name": null, "noun": null, "adj": null, "desc": null, "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["I", {"id": "I", "type": "I", "name": null, "noun": null, "adj": null, "desc": null, "room_type": null, "definite": null, "indefinite": null, "synonyms": null}], ["r_2", {"id": "r_2", "type": "r", "name": "European Module", "noun": null, "adj": null, "desc": "This room belongs to European scientists. Isn't it cool? what do they research? well, we can explore it later... For now, there is a key code here. This code opens the box in the next room and consequently takes you to the next stage. So, explore the table to find the key.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["r_1", {"id": "r_1", "type": "r", "name": "US LAB", "noun": null, "adj": null, "desc": "This is where Americans do their research on Space. In addition to all computers and lab gadgets, you can find a couple of objects here which are useful during our game. Let's explore the room.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_3", {"id": "r_3", "type": "r", "name": "Russian Module", "noun": null, "adj": null, "desc": "The Russian module is a typical space lab that you can expect, filled with a lot of processing machines, test equipments and space drive cars, in fact for repair and test. Since it is located at the center of International Space Station, it is also important room for everyone. There are many other objects here and there belongs to other astronauts, probably that's why here looks a bit messy. There are some stuffs here you should pick, obviously if you can find them among all this mess.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["r_5", {"id": "r_5", "type": "r", "name": "Control Module", "noun": null, "adj": null, "desc": "This is the heart of this spaceship! Wow ... look around, all the monitors and panels. It is like you can control everything from here; more interestingly, you can communicate with people on the Earth. There are also super important objects kept in this room. Let's find them.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["r_4", {"id": "r_4", "type": "r", "name": "Lounge Module", "noun": null, "adj": null, "desc": "This lounge is very quiet room with a big round window to the space. Wow, you can look to our beloved Earth from this window. This room is the place that you can stay here for hours and just get relax. This room also contains some other stuff, let's explore what they are ...", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["r_0", {"id": "r_0", "type": "r", "name": "Sleep Station", "noun": null, "adj": null, "desc": "This is a typical bedroom in spaceship; here, it is called sleep station. It is small but comfortable to take a good rest after a day full of missions. However, today your mission will start from here. Wait to be notified by a message. So, you should find that message first. BTW, don't forget that when the Hatch door is open, you should already have worn your specially-designed outfit to be able to enter and stay at Hatch area; otherwise you'll die! Yes! Living in space is tough.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["r_6", {"id": "r_6", "type": "r", "name": "Hatch", "noun": null, "adj": null, "desc": "This area is like the entrance to the spaceship, so like home entrance with outer and inner doors and a place that outfits are hooked. There are only two important differences: first, if the outer door is open and you don't have outfit on you, you are dead!! No joke here! So make sure that you open the door after wearing those cloths. Second, the door nob to open the door is not neither on the door nor in this room. You should open the external door from Russian Module! woooh so much of safety concerns, yeah?!", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["r_7", {"id": "r_7", "type": "r", "name": "Outside", "noun": null, "adj": null, "desc": "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means that you have the special outfit on you and you passed the medium level of the game! Congrats!", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["d_0", {"id": "d_0", "type": "d", "name": "door A", "noun": null, "adj": null, "desc": "The door A looks sturdy. [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["d_1", {"id": "d_1", "type": "d", "name": "door B", "noun": null, "adj": null, "desc": "it's a manageable door B [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["d_2", {"id": "d_2", "type": "d", "name": "door C", "noun": null, "adj": null, "desc": "The door C looks sturdy. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["d_3", {"id": "d_3", "type": "d", "name": "door D", "noun": null, "adj": null, "desc": "it is what it is, a door D [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["d_4", {"id": "d_4", "type": "d", "name": "door E", "noun": null, "adj": null, "desc": "The door E looks sturdy. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["c_0", {"id": "c_0", "type": "c", "name": "sleeping bag", "noun": null, "adj": null, "desc": "cool! You can sleep in a comfy bag.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["c_1", {"id": "c_1", "type": "c", "name": "box A", "noun": null, "adj": null, "desc": "This a regular box, keeps the electronic key to open door C. But it is locked. The lock looks like a keypad, means that the key is in fact just a code! So, ... let's search around to find its key.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["c_5", {"id": "c_5", "type": "c", "name": "box E", "noun": null, "adj": null, "desc": "This box is actually a wall-mounted bag and you can put an object into it. Since we have no gravity in the space, you can't just simply leave the object in the room. The object should be hooked or inserted into a container like this bag. Well, know we know what it is!", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["c_6", {"id": "c_6", "type": "c", "name": "secured box", "noun": null, "adj": null, "desc": "This box is secured very much, simple box with a complex, strange keypad to enter the code! So ... it should contain extremely important items in it. Isn't it the thing you are looking for?!", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["l_0", {"id": "l_0", "type": "l", "name": "outfit", "noun": null, "adj": null, "desc": "", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["s_0", {"id": "s_0", "type": "s", "name": "vertical desk", "noun": null, "adj": null, "desc": "This is not a regular table. The surface is installed vertically and your objects are attached or hooked to it, why? Come on! we are in space, there is no gravity here.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["s_1", {"id": "s_1", "type": "s", "name": "table", "noun": null, "adj": null, "desc": "This is a simple table located in the middle of the room. Let's take a look at it...", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["s_2", {"id": "s_2", "type": "s", "name": "chair", "noun": null, "adj": null, "desc": "this is a dark-gray chair which is developed to be used in space.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["s_3", {"id": "s_3", "type": "s", "name": "metal table", "noun": null, "adj": null, "desc": "This is a big metal table, a messy one, there are many things on it, it is difficult to find what you want. However, there is just one item which is important for you. Try to find that item.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["s_4", {"id": "s_4", "type": "s", "name": "wall-mounted surface", "noun": null, "adj": null, "desc": "This is a wall-mounted surface which different instruments are installed on this. These instruments are basically control various modules and doors in the shuttle.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["c_2", {"id": "c_2", "type": "c", "name": "box B", "noun": null, "adj": null, "desc": "This a regular box, keeps the key to open box A.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["b_0", {"id": "b_0", "type": "b", "name": "exit push button", "noun": null, "adj": null, "desc": "This push button is a key-like object which opens door A.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["c_4", {"id": "c_4", "type": "c", "name": "exit box", "noun": null, "adj": null, "desc": "The most important box here, which is in fact locked! sounds it carries important item... So, let's find its key to open it.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_0", {"id": "k_0", "type": "k", "name": "electronic key 1", "noun": null, "adj": null, "desc": "This key is a card key which opens door C.", "room_type": "clean", "definite": null, "indefinite": null, "synonyms": null}], ["k_1", {"id": "k_1", "type": "k", "name": "code key 1", "noun": null, "adj": null, "desc": "This key is in fact a digital code which opens the box in the US Lab area. The code, in fact, is written on a piece of paper.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["k_2", {"id": "k_2", "type": "k", "name": "digital key 1", "noun": null, "adj": null, "desc": "This key is an important key in this craft. If you want to leave the spaceship, you definitely need this key.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["c_3", {"id": "c_3", "type": "c", "name": "box C", "noun": null, "adj": null, "desc": "This box is locked! sounds it carries important item... So, let's find its key to open it. Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this somewhere before.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_3", {"id": "k_3", "type": "k", "name": "electronic key 2", "noun": null, "adj": null, "desc": "This key is the key opens the door to the control room. Although it looks like a regular iron key, it is very special metal key! Not any other key can be like it. Make sure to keep it in safe place.", "room_type": "work", "definite": null, "indefinite": null, "synonyms": null}], ["k_4", {"id": "k_4", "type": "k", "name": "digital key 2", "noun": null, "adj": null, "desc": "The digital key 2 is cold to the touch", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_5", {"id": "k_5", "type": "k", "name": "code key 2", "noun": null, "adj": null, "desc": "The metal of the code key 2 is rusty.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["k_6", {"id": "k_6", "type": "k", "name": "hearty key", "noun": null, "adj": null, "desc": "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha...", "room_type": "rest", "definite": null, "indefinite": null, "synonyms": null}], ["txt_0", {"id": "txt_0", "type": "txt", "name": "Secret Codes Handbook", "noun": null, "adj": null, "desc": "If you open and check this book, here it is the description: 'This is a book of all secret codes to manage different actions and functions inside the International Space Station. These codes are pre-authorized by the main control room at Earth unless it is mentioned.' On the second page of the book, you can find this: 'To open the hatch door you should have both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening the hatch. Otherwise, your life is in fatal danger.'", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["cpu_0", {"id": "cpu_0", "type": "cpu", "name": "laptop", "noun": null, "adj": null, "desc": "This is your personal laptop which is attached to the surface of the table. You can do regular things with this, like check your emails, watch YouTube, Skype with family,etc.Since you are here, we recommend you to check your emails. New missions are posted through emails.", "room_type": "cook", "definite": null, "indefinite": null, "synonyms": null}], ["o_0", {"id": "o_0", "type": "o", "name": "bunch of sticked papers", "noun": null, "adj": null, "desc": "The bunch of sticked papers appears to be to fit in here", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["o_1", {"id": "o_1", "type": "o", "name": "lots of hanged notebooks", "noun": null, "adj": null, "desc": "The lots of hanged notebooks seems well matched to everything else here", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}], ["o_2", {"id": "o_2", "type": "o", "name": "attached bags for mechanical tools", "noun": null, "adj": null, "desc": "The attached bags for mechanical tools is clean.", "room_type": "storage", "definite": null, "indefinite": null, "synonyms": null}]], "KB": {"logic": "# room\ntype r {\n predicates {\n at(P, r);\n at(t, r);\n\n north_of(r, r);\n west_of(r, r);\n\n north_of/d(r, d, r);\n west_of/d(r, d, r);\n\n free(r, r);\n\n south_of(r, r') = north_of(r', r);\n east_of(r, r') = west_of(r', r);\n\n south_of/d(r, d, r') = north_of/d(r', d, r);\n east_of/d(r, d, r') = west_of/d(r', d, r);\n }\n\n rules {\n go/north :: at(P, r) & $north_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/south :: at(P, r) & $south_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/east :: at(P, r) & $east_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n go/west :: at(P, r) & $west_of(r', r) & $free(r, r') & $free(r', r) -> at(P, r');\n }\n\n reverse_rules {\n go/north :: go/south;\n go/west :: go/east;\n }\n\n constraints {\n r1 :: at(P, r) & at(P, r') -> fail();\n r2 :: at(s, r) & at(s, r') -> fail();\n r3 :: at(c, r) & at(c, r') -> fail();\n\n # An exit direction can only lead to one room.\n nav_rr1 :: north_of(r, r') & north_of(r'', r') -> fail();\n nav_rr2 :: south_of(r, r') & south_of(r'', r') -> fail();\n nav_rr3 :: east_of(r, r') & east_of(r'', r') -> fail();\n nav_rr4 :: west_of(r, r') & west_of(r'', r') -> fail();\n\n # Two rooms can only be connected once with each other.\n nav_rrA :: north_of(r, r') & south_of(r, r') -> fail();\n nav_rrB :: north_of(r, r') & west_of(r, r') -> fail();\n nav_rrC :: north_of(r, r') & east_of(r, r') -> fail();\n nav_rrD :: south_of(r, r') & west_of(r, r') -> fail();\n nav_rrE :: south_of(r, r') & east_of(r, r') -> fail();\n nav_rrF :: west_of(r, r') & east_of(r, r') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"room\";\n }\n\n predicates {\n at(P, r) :: \"The player is in {r}\";\n at(t, r) :: \"The {t} is in {r}\";\n free(r, r') :: \"\"; # No equivalent in Inform7.\n\n north_of(r, r') :: \"The {r} is mapped north of {r'}\";\n south_of(r, r') :: \"The {r} is mapped south of {r'}\";\n east_of(r, r') :: \"The {r} is mapped east of {r'}\";\n west_of(r, r') :: \"The {r} is mapped west of {r'}\";\n\n north_of/d(r, d, r') :: \"South of {r} and north of {r'} is a door called {d}\";\n south_of/d(r, d, r') :: \"North of {r} and south of {r'} is a door called {d}\";\n east_of/d(r, d, r') :: \"West of {r} and east of {r'} is a door called {d}\";\n west_of/d(r, d, r') :: \"East of {r} and west of {r'} is a door called {d}\";\n }\n\n commands {\n go/north :: \"go north\" :: \"going north\";\n go/south :: \"go south\" :: \"going south\";\n go/east :: \"go east\" :: \"going east\";\n go/west :: \"go west\" :: \"going west\";\n }\n }\n}\n\n# CPU-Like\ntype cpu : o {\n predicates {\n read/e(cpu);\n unread/e(cpu);\n }\n\n rules {\n check/e :: $at(P, r) & $at(s, r) & $on(cpu, s) & unread/e(cpu) -> read/e(cpu);\n }\n\n constraints {\n cpu2 :: read/e(cpu) & unread/e(cpu) -> fail(); \n }\n\n inform7 {\n type {\n kind :: \"CPU-like\";\n definition :: \"A CPU-like can be either read or unread. A CPU-like is usually unread.\";\n }\n\n predicates {\n read/e(cpu) :: \"The {cpu} is read\";\n unread/e(cpu) :: \"The {cpu} is unread\";\n }\n\n commands { \n check/e :: \"check laptop for email\" :: \"checking email\";\n }\n\n code :: \"\"\"\n Understand the command \"check\" as something new. \n Understand \"check laptop for email\" as checking email. \n checking email is an action applying to nothing. \n\n Before checking email:\n if a CPU-like (called pc) is read:\n Say \"You've already read all today's emails.\";\n rule fails;\n otherwise:\n if a random chance of 3 in 4 succeeds:\n Say \"No emails yet! Wait.\";\n rule fails.\n\n Carry out checking email: \n if a CPU-like (called pc) is unread: \n Say \"Email: Your mission is started. You should go and check outside of the spaceship.\";\n Now the pc is read.\n \"\"\";\n }\n}\n\n# door\ntype d : t {\n predicates {\n open(d);\n closed(d);\n locked(d);\n\n link(r, d, r);\n }\n\n rules {\n lock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & closed(d) -> locked(d);\n unlock/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & $in(k, I) & $match(k, d) & locked(d) -> closed(d);\n\n open/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & closed(d) -> open(d) & free(r, r') & free(r', r);\n close/d :: $at(P, r) & $link(r, d, r') & $link(r', d, r) & open(d) & free(r, r') & free(r', r) -> closed(d);\n \n lock/close/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & pushed(b) & open(d) & free(r, r') & free(r', r) -> unpushed(b) & locked(d);\n unlock/open/db :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r, r') & free(r', r);\n\n lock/close/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & pushed(b) & open(d) & free(r', r'') & free(r'', r') -> unpushed(b) & locked(d);\n unlock/open/d/b :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & $in(b, c) & $pair(b, d) & $link(r', d, r'') & $link(r'', d, r') & unpushed(b) & locked(d) -> pushed(b) & open(d) & free(r', r'') & free(r'', r');\n\n examine/d :: at(P, r) & $link(r, d, r') -> at(P, r); # Nothing changes.\n }\n\n reverse_rules {\n lock/d :: unlock/d;\n open/d :: close/d;\n lock/close/d/b :: unlock/open/d/b;\n lock/close/db :: unlock/open/db;\n }\n\n constraints {\n d1 :: open(d) & closed(d) -> fail();\n d2 :: open(d) & locked(d) -> fail();\n d3 :: closed(d) & locked(d) -> fail();\n\n # A door can't be used to link more than two rooms.\n link1 :: link(r, d, r') & link(r, d, r'') -> fail();\n link2 :: link(r, d, r') & link(r'', d, r''') -> fail();\n\n # There's already a door linking two rooms.\n link3 :: link(r, d, r') & link(r, d', r') -> fail();\n\n # There cannot be more than four doors in a room.\n too_many_doors :: link(r, d1: d, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n\n # There cannot be more than four doors in a room.\n dr1 :: free(r, r1: r) & link(r, d2: d, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr2 :: free(r, r1: r) & free(r, r2: r) & link(r, d3: d, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr3 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & link(r, d4: d, r4: r) & link(r, d5: d, r5: r) -> fail();\n dr4 :: free(r, r1: r) & free(r, r2: r) & free(r, r3: r) & free(r, r4: r) & link(r, d5: d, r5: r) -> fail();\n\n free1 :: link(r, d, r') & free(r, r') & closed(d) -> fail();\n free2 :: link(r, d, r') & free(r, r') & locked(d) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"door\";\n definition :: \"door is openable and lockable.\";\n }\n\n predicates {\n open(d) :: \"The {d} is open\";\n closed(d) :: \"The {d} is closed\";\n locked(d) :: \"The {d} is locked\";\n \n link(r, d, r') :: \"\"; # No equivalent in Inform7.\n }\n\n commands {\n open/d :: \"open {d}\" :: \"opening {d}\";\n close/d :: \"close {d}\" :: \"closing {d}\";\n\n unlock/d :: \"unlock {d} with {k}\" :: \"unlocking {d} with the {k}\";\n lock/d :: \"lock {d} with {k}\" :: \"locking {d} with the {k}\";\n\n lock/close/d/b :: \"push {b}\" :: \"_pushing the {b}\";\n unlock/open/d/b :: \"push {b}\" :: \"_pushing the {b}\";\n\n lock/close/db :: \"push {b}\" :: \"_pushing the {b}\";\n unlock/open/db :: \"push {b}\" :: \"_pushing the {b}\";\n\n examine/d :: \"examine {d}\" :: \"examining the {d}\";\n }\n }\n}\n\n# Inventory\ntype I {\n predicates {\n in(o, I);\n }\n\n rules {\n inventory :: at(P, r) -> at(P, r); # Nothing changes.\n\n take :: $at(P, r) & at(o, r) -> in(o, I);\n \n take/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, c) -> in(o, I);\n insert/c :: $at(P, r) & $at(c, r) & $open(c) & in(o, I) -> in(o, c);\n\n take/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, c) -> in(o, I);\n insert/cs :: $at(P, r) & $at(s, r) & $on(c, s) & $open(c) & in(o, I) -> in(o, c);\n\n take/s :: $at(P, r) & $at(s, r) & on(o, s) -> in(o, I);\n hook :: $at(P, r) & $at(s, r) & in(o, I) -> on(o, s);\n\n examine/I :: in(o, I) -> in(o, I); # Nothing changes.\n examine/s :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes.\n examine/c :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes.\n examine/or :: at(P, r) & $in(o, r) -> at(P, r); # Nothing changes.\n examine/oc :: at(P, r) & $at(c, r) & $open(c) & $in(o, c) -> at(P, r); # Nothing changes.\n examine/os :: at(P, r) & $at(s, r) & $on(o, s) -> at(P, r); # Nothing changes.\n }\n\n reverse_rules { \n inventory :: inventory;\n\n take/c :: insert/c;\n take/s :: hook;\n take/cs :: insert/cs;\n\n examine/I :: examine/I;\n examine/s :: examine/s;\n examine/c :: examine/c;\n examine/or :: examine/or;\n examine/oc :: examine/oc;\n examine/os :: examine/os;\n }\n\n inform7 {\n predicates {\n in(o, I) :: \"The player carries the {o}\";\n }\n\n commands {\n\n inventory :: \"inventory\" :: \"taking inventory\";\n\n take :: \"take {o}\" :: \"taking the {o}\"; \n\n take/c :: \"take {o} from {c}\" :: \"removing the {o} from the {c}\";\n insert/c :: \"insert {o} into {c}\" :: \"inserting the {o} into the {c}\";\n\n take/cs :: \"take {o} from {c}\" :: \"removing the {o} from the {c}\";\n insert/cs :: \"insert {o} into {c}\" :: \"inserting the {o} into the {c}\";\n\n take/s :: \"take {o} from {s}\" :: \"removing the {o} from the {s}\";\n hook :: \"hook {o} on {s}\" :: \"hooking the {o} on the {s}\";\n\n examine/I :: \"examine {o}\" :: \"examining the {o}\";\n examine/s :: \"examine {o}\" :: \"examining the {o}\";\n examine/c :: \"examine {o}\" :: \"examining the {o}\";\n examine/or :: \"examine {o}\" :: \"examining the {o}\";\n examine/oc :: \"examine {o}\" :: \"examining the {o}\";\n examine/os :: \"examine {o}\" :: \"examining the {o}\";\n }\n }\n}\n\n# food\ntype f : o {\n predicates {\n edible(f);\n eaten(f);\n }\n\n rules {\n eat :: in(f, I) -> eaten(f);\n }\n\n constraints {\n eaten1 :: eaten(f) & in(f, I) -> fail();\n eaten2 :: eaten(f) & in(f, c) -> fail();\n eaten3 :: eaten(f) & on(f, s) -> fail();\n eaten4 :: eaten(f) & at(f, r) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"food\";\n definition :: \"food is edible.\";\n }\n\n predicates {\n edible(f) :: \"The {f} is edible\";\n eaten(f) :: \"The {f} is nowhere\";\n }\n\n commands {\n eat :: \"eat {f}\" :: \"eating the {f}\";\n }\n }\n}\n\n# supporter\ntype s : t {\n predicates {\n on(o, s);\n on(c, s);\n }\n\n inform7 {\n type {\n kind :: \"supporter\";\n definition :: \"supporters are fixed in place.\";\n }\n\n predicates {\n on(o, s) :: \"The {o} is on the {s}\";\n on(c, s) :: \"The {c} is on the {s}\"; \n }\n }\n}\n\n# push button\ntype b : t {\n predicates {\n pushed(b);\n unpushed(b);\n\n pair(b, d);\n\n in(b, c);\n }\n\n inform7 {\n type {\n kind :: \"button-like\";\n definition :: \"A button-like can be either pushed or unpushed. A button-like is usually unpushed. A button-like is fixed in place.\";\n }\n\n predicates {\n pushed(b) :: \"The {b} is pushed\";\n unpushed(b) :: \"The {b} is unpushed\";\n\n pair(b, d) :: \"The {b} pairs to {d}\";\n\n in(b, c) :: \"The {b} is in the {c}\";\n }\n\n code :: \"\"\"\n connectivity relates a button-like to a door. The verb to pair to means the connectivity relation. \n\n Understand the command \"push\" as something new. \n Understand \"push [something]\" as _pushing. \n _pushing is an action applying to a thing. \n\n Carry out _pushing: \n if a button-like (called pb) pairs to door (called dr): \n if dr is locked:\n Now the pb is pushed; \n Now dr is unlocked; \n Now dr is open; \n otherwise:\n Now the pb is unpushed; \n Now dr is locked.\n\n Report _pushing: \n if a button-like (called pb) pairs to door (called dr): \n if dr is unlocked:\n say \"You push the [pb], and [dr] is now open.\";\n otherwise:\n say \"You push the [pb] again, and [dr] is now locked.\" \n \"\"\";\n }\n}\n\n# container\ntype c : t {\n predicates {\n open(c);\n closed(c);\n locked(c);\n\n in(o, c); \n }\n\n rules {\n lock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & closed(c) -> locked(c);\n unlock/c :: $at(P, r) & $at(c, r) & $in(k, I) & $match(k, c) & locked(c) -> closed(c);\n\n open/c :: $at(P, r) & $at(c, r) & closed(c) -> open(c); \n close/c :: $at(P, r) & $at(c, r) & open(c) -> closed(c);\n\n lock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & closed(c) -> locked(c);\n unlock/bx :: $at(P, r) & $at(s, r) & $on(c, s) & $in(k, I) & $match(k, c) & locked(c) -> closed(c);\n\n open/bx :: $at(P, r) & $at(s, r) & $on(c, s) & closed(c) -> open(c);\n close/bx :: $at(P, r) & $at(s, r) & $on(c, s) & open(c) -> closed(c);\n }\n\n reverse_rules {\n lock/c :: unlock/c;\n open/c :: close/c;\n lock/bx :: unlock/bx;\n open/bx :: close/bx;\n }\n\n constraints {\n c1 :: open(c) & closed(c) -> fail();\n c2 :: open(c) & locked(c) -> fail();\n c3 :: closed(c) & locked(c) -> fail();\n }\n\n inform7 {\n type {\n kind :: \"container\";\n definition :: \"containers are openable, lockable and fixed in place. containers are usually closed.\";\n }\n\n predicates {\n open(c) :: \"The {c} is open\";\n closed(c) :: \"The {c} is closed\";\n locked(c) :: \"The {c} is locked\";\n\n in(o, c) :: \"The {o} is in the {c}\";\n }\n\n commands {\n open/c :: \"open {c}\" :: \"opening the {c}\";\n close/c :: \"close {c}\" :: \"closing the {c}\";\n\n lock/c :: \"lock {c} with {k}\" :: \"locking the {c} with the {k}\";\n unlock/c :: \"unlock {c} with {k}\" :: \"unlocking the {c} with the {k}\";\n\n open/bx :: \"open {c}\" :: \"opening the {c}\";\n close/bx :: \"close {c}\" :: \"closing the {c}\";\n\n lock/bx :: \"lock {c} with {k}\" :: \"locking the {c} with the {k}\";\n unlock/bx :: \"unlock {c} with {k}\" :: \"unlocking the {c} with the {k}\";\n }\n }\n}\n\n# key\ntype k : o {\n predicates {\n match(k, c);\n match(k, d);\n }\n\n constraints {\n k1 :: match(k, c) & match(k', c) -> fail();\n k2 :: match(k, c) & match(k, c') -> fail();\n k3 :: match(k, d) & match(k', d) -> fail();\n k4 :: match(k, d) & match(k, d') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"key\";\n }\n\n predicates {\n match(k, c) :: \"The matching key of the {c} is the {k}\";\n match(k, d) :: \"The matching key of the {d} is the {k}\";\n }\n }\n}\n\n# cloth\ntype l : o {\n predicates { \n worn(l);\n\t takenoff(l);\n clean(l);\n\t dirty(l);\n \t}\n\n rules {\n wear/l :: in(l, I) & takenoff(l) -> worn(l);\n takeoff/l :: worn(l) -> in(l, I) & takenoff(l);\n\n wash/l :: $at(l,r) & dirty(l) -> clean(l);\n dirty/l :: $worn(l,P) & clean(l) -> dirty(l);\n \t}\n\n reverse_rules {\n wear/l :: takeoff/l;\n wash/l :: dirty/l;\n \t}\n\n constraints {\n l1 :: clean(l) & dirty(l) -> fail();\n l2 :: worn(l) & takenoff(l) -> fail();\n \t}\n\n inform7 {\n type {\n kind :: \"cloth-like\";\n definition :: \"cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean. cloth-like can be either worn in or worn out. cloth-like are usually worn out.\"; \n }\n\n predicates {\n worn(l) :: \"The {l} is worn in\";\n\t takenoff(l) :: \"The {l} is worn out\"; \n clean(l) :: \"The {l} is clean\";\n\t dirty(l) :: \"The {l} is dirty\"; \n }\n\n commands {\n wear/l :: \"wear {l}\" :: \"_wearing the {l}\";\n takeoff/l :: \"take off {l}\" :: \"taking off the {l}\";\n\n clean/l :: \"clean {l}\" :: \"cleaning the {l}\";\n\t dirty/l :: \"dirty {l}\" :: \"dirtying the {l}\";\n }\n\n code :: \"\"\"\n Understand the command \"wear\" as something new. \n Understand \"wear [something]\" as _wearing. \n _wearing is an action applying to a thing. \n\n Carry out _wearing: \n if a cloth-like (called cl) is worn out: \n Now the cl is worn in; \n otherwise:\n Say \"You have this cloth on.\". \n \"\"\";\n }\n}\n\n# text-Like\ntype txt : o {\n predicates {\n read/t(txt);\n unread/t(txt);\n }\n\n rules {\n read/book :: $at(P, r) & $in(txt, I) & unread/t(txt) -> read/t(txt);\n examine/book :: at(P, r) & $in(txt, I) -> at(P, r); # Nothing changes.\n }\n \n reverse_rules {\n examine/book :: examine/book;\n }\n \n constraints {\n txt1 :: read/t(txt) & unread/t(txt) -> fail(); \n }\n\n inform7 {\n type {\n kind :: \"text-like\";\n definition :: \"A text-like can be either read or unread. A text-like is usually unread.\";\n }\n\n predicates {\n read/t(txt) :: \"The {txt} is read\";\n unread/t(txt) :: \"The {txt} is unread\";\n }\n\n commands { \n read/book :: \"read the {txt}\" :: \"_reading the {txt}\";\n examine/book :: \"examine {txt}\" :: \"examining the {txt}\";\n }\n \n code :: \"\"\"\n Understand the command \"read\" as something new. \n Understand \"read [something]\" as _reading. \n _reading is an action applying to a thing. \n \n Carry out _reading: \n if a text-like (called tx) is unread: \n Say \"You read the book and realized about that crucial hint.\";\n Now the tx is read; \n \"\"\";\n }\n}\n\n# object\ntype o : t {\n constraints {\n obj1 :: in(o, I) & in(o, c) -> fail();\n obj2 :: in(o, I) & on(o, s) -> fail();\n obj3 :: in(o, I) & at(o, r) -> fail();\n obj4 :: in(o, c) & on(o, s) -> fail();\n obj5 :: in(o, c) & at(o, r) -> fail();\n obj6 :: on(o, s) & at(o, r) -> fail();\n obj7 :: at(o, r) & at(o, r') -> fail();\n obj8 :: in(o, c) & in(o, c') -> fail();\n obj9 :: on(o, s) & on(o, s') -> fail();\n }\n\n inform7 {\n type {\n kind :: \"object-like\";\n definition :: \"object-like is portable.\";\n }\n }\n}\n\n# Player\ntype P {\n rules {\n look :: at(P, r) -> at(P, r); # Nothing changes.\n\t #wear/cloth :: $at(P,r) & at(l,r) -> on(l,P);\n }\n\n inform7 {\n commands {\n look :: \"look\" :: \"looking\";\n\t #wear/cloth :: \"wear cloth\" :: \"wearing the cloth\";\n }\n }\n}\n\n# thing\ntype t {\n predicates {\n event(P, r);\n }\n\n rules {\n examine/t :: at(P, r) & $at(t, r) -> at(P, r);\n }\n\n reverse_rules {\n examine/t :: examine/t;\n }\n\n inform7 { \n type {\n kind :: \"thing\";\n }\n\n predicates {\n event(P, r) :: \"the player was in {r}\";\n }\n commands {\n examine/t :: \"examine {t}\" :: \"examining the {t}\";\n }\n\n code :: \"\"\"\n Understand \"tw-set seed [a number]\" as updating the new seed. \n Updating the new seed is an action applying to a number.\n Carry out updating the new seed:\n seed the random-number generator with the number understood.\n \"\"\";\n }\n}\n\n", "text_grammars_path": "/home/v-hapurm/Documents/Haki_Git/TextWorld/textworld/challenges/spaceship/textworld_data/text_grammars"}, "metadata": {"desc": "Spaceship", "mode": "medium", "seeds": {"map": 59225, "objects": 31964, "quest": 43730, "grammar": 657}, "world_size": 8, "uuid": "tw-spaceship-Medium"}, "objective": "", "extras": {}} \ No newline at end of file diff --git a/textworld/challenges/spaceship/games/levelMedium.ni b/textworld/challenges/spaceship/games/levelMedium.ni deleted file mode 100644 index 7717ae74..00000000 --- a/textworld/challenges/spaceship/games/levelMedium.ni +++ /dev/null @@ -1,917 +0,0 @@ -Use MAX_STATIC_DATA of 500000. -When play begins, seed the random-number generator with 1234. - -button-like is a kind of thing. -container is a kind of thing. -door is a kind of thing. -object-like is a kind of thing. -supporter is a kind of thing. -CPU-like is a kind of object-like. -food is a kind of object-like. -key is a kind of object-like. -cloth-like is a kind of object-like. -text-like is a kind of object-like. -A button-like can be either pushed or unpushed. A button-like is usually unpushed. A button-like is fixed in place. -containers are openable, lockable and fixed in place. containers are usually closed. -door is openable and lockable. -object-like is portable. -supporters are fixed in place. -A CPU-like can be either read or unread. A CPU-like is usually unread. -food is edible. -cloth-like are wearable. cloth-like can be either clean or dirty. cloth-like are usually clean. cloth-like can be either worn in or worn out. cloth-like are usually worn out. -A text-like can be either read or unread. A text-like is usually unread. -A room has a text called internal name. - - -Understand the command "check" as something new. -Understand "check laptop for email" as checking email. -checking email is an action applying to nothing. - -Before checking email: - if a CPU-like (called pc) is read: - Say "You've already read all today's emails."; - rule fails; - otherwise: - if a random chance of 3 in 4 succeeds: - Say "No emails yet! Wait."; - rule fails. - -Carry out checking email: - if a CPU-like (called pc) is unread: - Say "Email: Your mission is started. You should go and check outside of the spaceship."; - Now the pc is read. - - -connectivity relates a button-like to a door. The verb to pair to means the connectivity relation. - -Understand the command "push" as something new. -Understand "push [something]" as _pushing. -_pushing is an action applying to a thing. - -Carry out _pushing: - if a button-like (called pb) pairs to door (called dr): - if dr is locked: - Now the pb is pushed; - Now dr is unlocked; - Now dr is open; - otherwise: - Now the pb is unpushed; - Now dr is locked. - -Report _pushing: - if a button-like (called pb) pairs to door (called dr): - if dr is unlocked: - say "You push the [pb], and [dr] is now open."; - otherwise: - say "You push the [pb] again, and [dr] is now locked." - - -Understand the command "wear" as something new. -Understand "wear [something]" as _wearing. -_wearing is an action applying to a thing. - -Carry out _wearing: - if a cloth-like (called cl) is worn out: - Now the cl is worn in; - otherwise: - Say "You have this cloth on.". - - -Understand the command "read" as something new. -Understand "read [something]" as _reading. -_reading is an action applying to a thing. - -Carry out _reading: - if a text-like (called tx) is unread: - Say "You read the book and realized about that crucial hint."; - Now the tx is read; - - -Understand "tw-set seed [a number]" as updating the new seed. -Updating the new seed is an action applying to a number. -Carry out updating the new seed: - seed the random-number generator with the number understood. - - -The r_2 and the r_1 and the r_3 and the r_5 and the r_4 and the r_0 and the r_6 and the r_7 are rooms. - -The internal name of r_2 is "European Module". -The printed name of r_2 is "-= European Module =-". -The European Module part 0 is some text that varies. The European Module part 0 is "This room belongs to European scientists. Isn't it cool? what do they research? well, we can explore it later... For now, there is a key code here. This code opens the box in the next room and consequently takes you to the next stage. So, explore the table to find the key.". -The description of r_2 is "[European Module part 0]". - -The r_1 is mapped west of r_2. -The internal name of r_1 is "US LAB". -The printed name of r_1 is "-= Us Lab =-". -The US LAB part 0 is some text that varies. The US LAB part 0 is "This is where Americans do their research on Space. In addition to all computers and lab gadgets, you can find a couple of objects here which are useful during our game. Let's explore the room.". -The description of r_1 is "[US LAB part 0]". - -south of r_1 and north of r_3 is a door called d_1. -north of r_1 and south of r_0 is a door called d_0. -The r_2 is mapped east of r_1. -The internal name of r_3 is "Russian Module". -The printed name of r_3 is "-= Russian Module =-". -The Russian Module part 0 is some text that varies. The Russian Module part 0 is "The Russian module is a typical space lab that you can expect, filled with a lot of processing machines, test equipments and space drive cars, in fact for repair and test. Since it is located at the center of International Space Station, it is also important room for everyone. There are many other objects here and there belongs to other astronauts, probably that's why here looks a bit messy. There are some stuffs here you should pick, obviously if you can find them among all this mess.". -The description of r_3 is "[Russian Module part 0]". - -west of r_3 and east of r_5 is a door called d_2. -north of r_3 and south of r_1 is a door called d_1. -The r_4 is mapped east of r_3. -The internal name of r_5 is "Control Module". -The printed name of r_5 is "-= Control Module =-". -The Control Module part 0 is some text that varies. The Control Module part 0 is "This is the heart of this spaceship! Wow ... look around, all the monitors and panels. It is like you can control everything from here; more interestingly, you can communicate with people on the Earth. There are also super important objects kept in this room. Let's find them.". -The description of r_5 is "[Control Module part 0]". - -east of r_5 and west of r_3 is a door called d_2. -The internal name of r_4 is "Lounge Module". -The printed name of r_4 is "-= Lounge Module =-". -The Lounge Module part 0 is some text that varies. The Lounge Module part 0 is "This lounge is very quiet room with a big round window to the space. Wow, you can look to our beloved Earth from this window. This room is the place that you can stay here for hours and just get relax. This room also contains some other stuff, let's explore what they are ...". -The description of r_4 is "[Lounge Module part 0]". - -The r_3 is mapped west of r_4. -south of r_4 and north of r_6 is a door called d_3. -The internal name of r_0 is "Sleep Station". -The printed name of r_0 is "-= Sleep Station =-". -The Sleep Station part 0 is some text that varies. The Sleep Station part 0 is "This is a typical bedroom in spaceship; here, it is called sleep station. It is small but comfortable to take a good rest after a day full of missions. However, today your mission will start from here. Wait to be notified by a message. So, you should find that message first. BTW, don't forget that when the Hatch door is open, you should already have worn your specially-designed outfit to be able to enter and stay at Hatch area; otherwise you'll die! Yes! Living in space is tough.". -The description of r_0 is "[Sleep Station part 0]". - -south of r_0 and north of r_1 is a door called d_0. -The internal name of r_6 is "Hatch". -The printed name of r_6 is "-= Hatch =-". -The Hatch part 0 is some text that varies. The Hatch part 0 is "This area is like the entrance to the spaceship, so like home entrance with outer and inner doors and a place that outfits are hooked. There are only two important differences: first, if the outer door is open and you don't have outfit on you, you are dead!! No joke here! So make sure that you open the door after wearing those cloths. Second, the door nob to open the door is not neither on the door nor in this room. You should open the external door from Russian Module! woooh so much of safety concerns, yeah?!". -The description of r_6 is "[Hatch part 0]". - -south of r_6 and north of r_7 is a door called d_4. -north of r_6 and south of r_4 is a door called d_3. -The internal name of r_7 is "Outside". -The printed name of r_7 is "-= Outside =-". -The Outside part 0 is some text that varies. The Outside part 0 is "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means that you have the special outfit on you and you passed the medium level of the game! Congrats!". -The description of r_7 is "[Outside part 0]". - -north of r_7 and south of r_6 is a door called d_4. - -The b_0 are button-likes. -The b_0 are privately-named. -The c_0 and the c_1 and the c_5 and the c_6 and the c_2 and the c_4 and the c_3 are containers. -The c_0 and the c_1 and the c_5 and the c_6 and the c_2 and the c_4 and the c_3 are privately-named. -The cpu_0 are CPU-likes. -The cpu_0 are privately-named. -The d_0 and the d_1 and the d_2 and the d_3 and the d_4 are doors. -The d_0 and the d_1 and the d_2 and the d_3 and the d_4 are privately-named. -The k_0 and the k_1 and the k_2 and the k_3 and the k_4 and the k_5 and the k_6 are keys. -The k_0 and the k_1 and the k_2 and the k_3 and the k_4 and the k_5 and the k_6 are privately-named. -The l_0 are cloth-likes. -The l_0 are privately-named. -The o_0 and the o_1 and the o_2 are object-likes. -The o_0 and the o_1 and the o_2 are privately-named. -The r_2 and the r_1 and the r_3 and the r_5 and the r_4 and the r_0 and the r_6 and the r_7 are rooms. -The r_2 and the r_1 and the r_3 and the r_5 and the r_4 and the r_0 and the r_6 and the r_7 are privately-named. -The s_0 and the s_1 and the s_2 and the s_3 and the s_4 are supporters. -The s_0 and the s_1 and the s_2 and the s_3 and the s_4 are privately-named. -The txt_0 are text-likes. -The txt_0 are privately-named. - -The description of d_0 is "The door A looks sturdy. [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]". -The printed name of d_0 is "door A". -Understand "door A" as d_0. -Understand "door" as d_0. -Understand "A" as d_0. -The d_0 is closed. -The description of d_1 is "it's a manageable door B [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]". -The printed name of d_1 is "door B". -Understand "door B" as d_1. -Understand "door" as d_1. -Understand "B" as d_1. -The d_1 is locked. -The description of d_2 is "The door C looks sturdy. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". -The printed name of d_2 is "door C". -Understand "door C" as d_2. -Understand "door" as d_2. -Understand "C" as d_2. -The d_2 is locked. -The description of d_3 is "it is what it is, a door D [if open]It is open.[else if closed]It is closed.[otherwise]It is locked.[end if]". -The printed name of d_3 is "door D". -Understand "door D" as d_3. -Understand "door" as d_3. -Understand "D" as d_3. -The d_3 is locked. -The description of d_4 is "The door E looks sturdy. [if open]You can see inside it.[else if closed]You can't see inside it because the lid's in your way.[otherwise]There is a lock on it.[end if]". -The printed name of d_4 is "door E". -Understand "door E" as d_4. -Understand "door" as d_4. -Understand "E" as d_4. -The d_4 is locked. -The description of c_0 is "cool! You can sleep in a comfy bag.". -The printed name of c_0 is "sleeping bag". -Understand "sleeping bag" as c_0. -Understand "sleeping" as c_0. -Understand "bag" as c_0. -The c_0 is in r_0. -The c_0 is open. -The description of c_1 is "This a regular box, keeps the electronic key to open door C. But it is locked. The lock looks like a keypad, means that the key is in fact just a code! So, ... let's search around to find its key.". -The printed name of c_1 is "box A". -Understand "box A" as c_1. -Understand "box" as c_1. -Understand "A" as c_1. -The c_1 is in r_1. -The c_1 is locked. -The description of c_5 is "This box is actually a wall-mounted bag and you can put an object into it. Since we have no gravity in the space, you can't just simply leave the object in the room. The object should be hooked or inserted into a container like this bag. Well, know we know what it is!". -The printed name of c_5 is "box E". -Understand "box E" as c_5. -Understand "box" as c_5. -Understand "E" as c_5. -The c_5 is in r_4. -The c_5 is closed. -The description of c_6 is "This box is secured very much, simple box with a complex, strange keypad to enter the code! So ... it should contain extremely important items in it. Isn't it the thing you are looking for?!". -The printed name of c_6 is "secured box". -Understand "secured box" as c_6. -Understand "secured" as c_6. -Understand "box" as c_6. -The c_6 is in r_5. -The c_6 is locked. -The description of l_0 is "". -The printed name of l_0 is "outfit". -Understand "outfit" as l_0. -The l_0 is in r_6. -The l_0 is clean. -The l_0 is worn out. -The description of s_0 is "This is not a regular table. The surface is installed vertically and your objects are attached or hooked to it, why? Come on! we are in space, there is no gravity here.". -The printed name of s_0 is "vertical desk". -Understand "vertical desk" as s_0. -Understand "vertical" as s_0. -Understand "desk" as s_0. -The s_0 is in r_0. -The description of s_1 is "This is a simple table located in the middle of the room. Let's take a look at it...". -The printed name of s_1 is "table". -Understand "table" as s_1. -The s_1 is in r_2. -The description of s_2 is "this is a dark-gray chair which is developed to be used in space.". -The printed name of s_2 is "chair". -Understand "chair" as s_2. -The s_2 is in r_2. -The description of s_3 is "This is a big metal table, a messy one, there are many things on it, it is difficult to find what you want. However, there is just one item which is important for you. Try to find that item.". -The printed name of s_3 is "metal table". -Understand "metal table" as s_3. -Understand "metal" as s_3. -Understand "table" as s_3. -The s_3 is in r_3. -The description of s_4 is "This is a wall-mounted surface which different instruments are installed on this. These instruments are basically control various modules and doors in the shuttle.". -The printed name of s_4 is "wall-mounted surface". -Understand "wall-mounted surface" as s_4. -Understand "wall-mounted" as s_4. -Understand "surface" as s_4. -The s_4 is in r_3. -The description of c_2 is "This a regular box, keeps the key to open box A.". -The printed name of c_2 is "box B". -Understand "box B" as c_2. -Understand "box" as c_2. -Understand "B" as c_2. -The c_2 is closed. -The c_2 is on the s_1. -The description of b_0 is "This push button is a key-like object which opens door A.". -The printed name of b_0 is "exit push button". -Understand "exit push button" as b_0. -Understand "exit" as b_0. -Understand "push" as b_0. -Understand "button" as b_0. -The b_0 is in the c_4. -The b_0 pairs to d_4. -The b_0 is unpushed. -The description of c_4 is "The most important box here, which is in fact locked! sounds it carries important item... So, let's find its key to open it.". -The printed name of c_4 is "exit box". -Understand "exit box" as c_4. -Understand "exit" as c_4. -Understand "box" as c_4. -The c_4 is locked. -The c_4 is on the s_4. -The description of k_0 is "This key is a card key which opens door C.". -The printed name of k_0 is "electronic key 1". -Understand "electronic key 1" as k_0. -Understand "electronic" as k_0. -Understand "key" as k_0. -Understand "1" as k_0. -The k_0 is in the c_1. -The matching key of the d_1 is the k_0. -The description of k_1 is "This key is in fact a digital code which opens the box in the US Lab area. The code, in fact, is written on a piece of paper.". -The printed name of k_1 is "code key 1". -Understand "code key 1" as k_1. -Understand "code" as k_1. -Understand "key" as k_1. -Understand "1" as k_1. -The k_1 is in the c_2. -The matching key of the c_1 is the k_1. -The description of k_2 is "This key is an important key in this craft. If you want to leave the spaceship, you definitely need this key.". -The printed name of k_2 is "digital key 1". -Understand "digital key 1" as k_2. -Understand "digital" as k_2. -Understand "key" as k_2. -Understand "1" as k_2. -The k_2 is in the c_3. -The matching key of the c_6 is the k_2. -The description of c_3 is "This box is locked! sounds it carries important item... So, let's find its key to open it. Wait... strange! the lock looks like a heart!! Wait we've seen something similar to this somewhere before.". -The printed name of c_3 is "box C". -Understand "box C" as c_3. -Understand "box" as c_3. -Understand "C" as c_3. -The c_3 is locked. -The c_3 is on the s_3. -The description of k_3 is "This key is the key opens the door to the control room. Although it looks like a regular iron key, it is very special metal key! Not any other key can be like it. Make sure to keep it in safe place.". -The printed name of k_3 is "electronic key 2". -Understand "electronic key 2" as k_3. -Understand "electronic" as k_3. -Understand "key" as k_3. -Understand "2" as k_3. -The k_3 is in the c_5. -The matching key of the d_2 is the k_3. -The description of k_4 is "The digital key 2 is cold to the touch". -The printed name of k_4 is "digital key 2". -Understand "digital key 2" as k_4. -Understand "digital" as k_4. -Understand "key" as k_4. -Understand "2" as k_4. -The k_4 is in the c_6. -The matching key of the c_4 is the k_4. -The description of k_5 is "The metal of the code key 2 is rusty.". -The printed name of k_5 is "code key 2". -Understand "code key 2" as k_5. -Understand "code" as k_5. -Understand "key" as k_5. -Understand "2" as k_5. -The k_5 is in the c_6. -The matching key of the d_3 is the k_5. -The description of k_6 is "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha...". -The printed name of k_6 is "hearty key". -Understand "hearty key" as k_6. -Understand "hearty" as k_6. -Understand "key" as k_6. -The player carries the k_6. -The matching key of the c_3 is the k_6. -The description of txt_0 is "If you open and check this book, here it is the description: 'This is a book of all secret codes to manage different actions and functions inside the International Space Station. These codes are pre-authorized by the main control room at Earth unless it is mentioned.' On the second page of the book, you can find this: 'To open the hatch door you should have both two keys in the secured box. ATTENTION: you MUST have the outfit on you, before opening the hatch. Otherwise, your life is in fatal danger.'". -The printed name of txt_0 is "Secret Codes Handbook". -Understand "Secret Codes Handbook" as txt_0. -Understand "Secret" as txt_0. -Understand "Codes" as txt_0. -Understand "Handbook" as txt_0. -The txt_0 is in the c_6. -The txt_0 is unread. -The description of cpu_0 is "This is your personal laptop which is attached to the surface of the table. You can do regular things with this, like check your emails, watch YouTube, Skype with family,etc.Since you are here, we recommend you to check your emails. New missions are posted through emails.". -The printed name of cpu_0 is "laptop". -Understand "laptop" as cpu_0. -The cpu_0 is on the s_0. -The cpu_0 is unread. -The description of o_0 is "The bunch of sticked papers appears to be to fit in here". -The printed name of o_0 is "bunch of sticked papers". -Understand "bunch of sticked papers" as o_0. -Understand "bunch" as o_0. -Understand "sticked" as o_0. -Understand "papers" as o_0. -The o_0 is on the s_3. -The description of o_1 is "The lots of hanged notebooks seems well matched to everything else here". -The printed name of o_1 is "lots of hanged notebooks". -Understand "lots of hanged notebooks" as o_1. -Understand "lots" as o_1. -Understand "hanged" as o_1. -Understand "notebooks" as o_1. -The o_1 is on the s_3. -The description of o_2 is "The attached bags for mechanical tools is clean.". -The printed name of o_2 is "attached bags for mechanical tools". -Understand "attached bags for mechanical tools" as o_2. -Understand "attached" as o_2. -Understand "bags" as o_2. -Understand "for" as o_2. -Understand "mechanical" as o_2. -Understand "tools" as o_2. -The o_2 is on the s_3. - - -The player is in r_0. - -The quest0 completed is a truth state that varies. -The quest0 completed is usually false. - -Test quest0_0 with "" - -Every turn: - if quest0 completed is true: - do nothing; - else if The player is in r_0: - increase the score by 0; [Quest completed] - Now the quest0 completed is true; - -The quest1 completed is a truth state that varies. -The quest1 completed is usually false. - -Test quest1_0 with "" - -Every turn: - if quest1 completed is true: - do nothing; - else if The cpu_0 is unread and The d_0 is open and the player was in r_0 and The player is in r_1: - end the story; [Lost] - else if The d_0 is open and the player was in r_0 and The cpu_0 is read and The player is in r_1: - increase the score by 1; [Quest completed] - Now the quest1 completed is true; - -The quest2 completed is a truth state that varies. -The quest2 completed is usually false. - -Test quest2_0 with "" - -Every turn: - if quest2 completed is true: - do nothing; - else if The player carries the k_0: - increase the score by 1; [Quest completed] - Now the quest2 completed is true; - -The quest3 completed is a truth state that varies. -The quest3 completed is usually false. - -Test quest3_0 with "" - -Every turn: - if quest3 completed is true: - do nothing; - else if The player carries the k_2: - increase the score by 1; [Quest completed] - Now the quest3 completed is true; - -The quest4 completed is a truth state that varies. -The quest4 completed is usually false. - -Test quest4_0 with "" - -Every turn: - if quest4 completed is true: - do nothing; - else if The l_0 is worn in and The b_0 is pushed: - increase the score by 1; [Quest completed] - Now the quest4 completed is true; - -The quest5 completed is a truth state that varies. -The quest5 completed is usually false. -Every turn: - if quest5 completed is true: - do nothing; - else if The l_0 is worn out and The b_0 is pushed: - end the story; [Lost] - -The quest6 completed is a truth state that varies. -The quest6 completed is usually false. - -Test quest6_0 with "" - -Every turn: - if quest6 completed is true: - do nothing; - else if The player carries the k_5: - increase the score by 1; [Quest completed] - Now the quest6 completed is true; - -The quest7 completed is a truth state that varies. -The quest7 completed is usually false. - -Test quest7_0 with "" - -Every turn: - if quest7 completed is true: - do nothing; - else if The txt_0 is read: - increase the score by 1; [Quest completed] - Now the quest7 completed is true; - -The quest8 completed is a truth state that varies. -The quest8 completed is usually false. - -Test quest8_0 with "" - -Every turn: - if quest8 completed is true: - do nothing; - else if The l_0 is worn in: - increase the score by 1; [Quest completed] - Now the quest8 completed is true; - -The quest9 completed is a truth state that varies. -The quest9 completed is usually false. - -Test quest9_0 with "" - -Every turn: - if quest9 completed is true: - do nothing; - else if The player is in r_7: - increase the score by 1; [Quest completed] - Now the quest9 completed is true; - -Use scoring. The maximum score is 8. -This is the simpler notify score changes rule: - If the score is not the last notified score: - let V be the score - the last notified score; - say "Your score has just gone up by [V in words] "; - if V > 1: - say "points."; - else: - say "point."; - Now the last notified score is the score; - if score is maximum score: - end the story finally; [Win] - -The simpler notify score changes rule substitutes for the notify score changes rule. - -Rule for listing nondescript items: - stop. - -Rule for printing the banner text: - say "[fixed letter spacing]"; - say " ________ ________ __ __ ________ [line break]"; - say " | \| \| \ | \| \ [line break]"; - say " \$$$$$$$$| $$$$$$$$| $$ | $$ \$$$$$$$$ [line break]"; - say " | $$ | $$__ \$$\/ $$ | $$ [line break]"; - say " | $$ | $$ \ >$$ $$ | $$ [line break]"; - say " | $$ | $$$$$ / $$$$\ | $$ [line break]"; - say " | $$ | $$_____ | $$ \$$\ | $$ [line break]"; - say " | $$ | $$ \| $$ | $$ | $$ [line break]"; - say " \$$ \$$$$$$$$ \$$ \$$ \$$ [line break]"; - say " __ __ ______ _______ __ _______ [line break]"; - say " | \ _ | \ / \ | \ | \ | \ [line break]"; - say " | $$ / \ | $$| $$$$$$\| $$$$$$$\| $$ | $$$$$$$\[line break]"; - say " | $$/ $\| $$| $$ | $$| $$__| $$| $$ | $$ | $$[line break]"; - say " | $$ $$$\ $$| $$ | $$| $$ $$| $$ | $$ | $$[line break]"; - say " | $$ $$\$$\$$| $$ | $$| $$$$$$$\| $$ | $$ | $$[line break]"; - say " | $$$$ \$$$$| $$__/ $$| $$ | $$| $$_____ | $$__/ $$[line break]"; - say " | $$$ \$$$ \$$ $$| $$ | $$| $$ \| $$ $$[line break]"; - say " \$$ \$$ \$$$$$$ \$$ \$$ \$$$$$$$$ \$$$$$$$ [line break]"; - say "[variable letter spacing][line break]"; - say "[objective][line break]". - -Include Basic Screen Effects by Emily Short. - -Rule for printing the player's obituary: - if story has ended finally: - center "*** The End ***"; - else: - center "*** You lost! ***"; - say paragraph break; - say "You scored [score] out of a possible [maximum score], in [turn count] turn(s)."; - [wait for any key; - stop game abruptly;] - rule succeeds. - -Rule for implicitly taking something (called target): - if target is fixed in place: - say "The [target] is fixed in place."; - otherwise: - say "You need to take the [target] first."; - set pronouns from target; - stop. - -Does the player mean doing something: - if the noun is not nothing and the second noun is nothing and the player's command matches the text printed name of the noun: - it is likely; - if the noun is nothing and the second noun is not nothing and the player's command matches the text printed name of the second noun: - it is likely; - if the noun is not nothing and the second noun is not nothing and the player's command matches the text printed name of the noun and the player's command matches the text printed name of the second noun: - it is very likely. [Handle action with two arguments.] - -Printing the content of the room is an activity. -Rule for printing the content of the room: - let R be the location of the player; - say "Room contents:[line break]"; - list the contents of R, with newlines, indented, including all contents, with extra indentation. - -Printing the content of the world is an activity. -Rule for printing the content of the world: - let L be the list of the rooms; - say "World: [line break]"; - repeat with R running through L: - say " [the internal name of R][line break]"; - repeat with R running through L: - say "[the internal name of R]:[line break]"; - if the list of things in R is empty: - say " nothing[line break]"; - otherwise: - list the contents of R, with newlines, indented, including all contents, with extra indentation. - -Printing the content of the inventory is an activity. -Rule for printing the content of the inventory: - say "Inventory:[line break]"; - list the contents of the player, with newlines, indented, giving inventory information, including all contents, with extra indentation. - -Printing the content of nowhere is an activity. -Rule for printing the content of nowhere: - say "Nowhere:[line break]"; - let L be the list of the off-stage things; - repeat with thing running through L: - say " [thing][line break]"; - -Printing the things on the floor is an activity. -Rule for printing the things on the floor: - let R be the location of the player; - let L be the list of things in R; - remove yourself from L; - remove the list of containers from L; - remove the list of supporters from L; - remove the list of doors from L; - if the number of entries in L is greater than 0: - say "There is [L with indefinite articles] on the floor."; - -After printing the name of something (called target) while -printing the content of the room -or printing the content of the world -or printing the content of the inventory -or printing the content of nowhere: - follow the property-aggregation rules for the target. - -The property-aggregation rules are an object-based rulebook. -The property-aggregation rulebook has a list of text called the tagline. - -[At the moment, we only support "open/unlocked", "closed/unlocked" and "closed/locked" for doors and containers.] -[A first property-aggregation rule for an openable open thing (this is the mention open openables rule): - add "open" to the tagline. - -A property-aggregation rule for an openable closed thing (this is the mention closed openables rule): - add "closed" to the tagline. - -A property-aggregation rule for an lockable unlocked thing (this is the mention unlocked lockable rule): - add "unlocked" to the tagline. - -A property-aggregation rule for an lockable locked thing (this is the mention locked lockable rule): - add "locked" to the tagline.] - -A first property-aggregation rule for an openable lockable open unlocked thing (this is the mention open openables rule): - add "open" to the tagline. - -A property-aggregation rule for an openable lockable closed unlocked thing (this is the mention closed openables rule): - add "closed" to the tagline. - -A property-aggregation rule for an openable lockable closed locked thing (this is the mention locked openables rule): - add "locked" to the tagline. - -A property-aggregation rule for a lockable thing (called the lockable thing) (this is the mention matching key of lockable rule): - let X be the matching key of the lockable thing; - if X is not nothing: - add "match [X]" to the tagline. - -A property-aggregation rule for an edible off-stage thing (this is the mention eaten edible rule): - add "eaten" to the tagline. - -The last property-aggregation rule (this is the print aggregated properties rule): - if the number of entries in the tagline is greater than 0: - say " ([tagline])"; - rule succeeds; - rule fails; - - -An objective is some text that varies. The objective is "". -Printing the objective is an action applying to nothing. -Carry out printing the objective: - say "[objective]". - -Understand "goal" as printing the objective. - -The taking action has an object called previous locale (matched as "from"). - -Setting action variables for taking: - now previous locale is the holder of the noun. - -Report taking something from the location: - say "You pick up [the noun] from the ground." instead. - -Report taking something: - say "You take [the noun] from [the previous locale]." instead. - -Report dropping something: - say "You drop [the noun] on the ground." instead. - -The print state option is a truth state that varies. -The print state option is usually false. - -Turning on the print state option is an action applying to nothing. -Carry out turning on the print state option: - Now the print state option is true. - -Turning off the print state option is an action applying to nothing. -Carry out turning off the print state option: - Now the print state option is false. - -Printing the state is an activity. -Rule for printing the state: - let R be the location of the player; - say "Room: [line break] [the internal name of R][line break]"; - [say "[line break]"; - carry out the printing the content of the room activity;] - say "[line break]"; - carry out the printing the content of the world activity; - say "[line break]"; - carry out the printing the content of the inventory activity; - say "[line break]"; - carry out the printing the content of nowhere activity; - say "[line break]". - -Printing the entire state is an action applying to nothing. -Carry out printing the entire state: - say "-=STATE START=-[line break]"; - carry out the printing the state activity; - say "[line break]Score:[line break] [score]/[maximum score][line break]"; - say "[line break]Objective:[line break] [objective][line break]"; - say "[line break]Inventory description:[line break]"; - say " You are carrying: [a list of things carried by the player].[line break]"; - say "[line break]Room description:[line break]"; - try looking; - say "[line break]-=STATE STOP=-"; - -Every turn: - if extra description command option is true: - say ""; - try looking; - say ""; - if extra inventory command option is true: - say ""; - try taking inventory; - say ""; - if extra score command option is true: - say "[line break][score][line break]"; - if print state option is true: - try printing the entire state; - -When play ends: - if print state option is true: - try printing the entire state; - -After looking: - carry out the printing the things on the floor activity. - -Understand "print_state" as printing the entire state. -Understand "enable print state option" as turning on the print state option. -Understand "disable print state option" as turning off the print state option. - -Before going through a closed door (called the blocking door): - say "You have to open the [blocking door] first."; - stop. - -Before opening a locked door (called the locked door): - let X be the matching key of the locked door; - if X is nothing: - say "The [locked door] is welded shut."; - otherwise: - say "You have to unlock the [locked door] with the [X] first."; - stop. - -Before opening a locked container (called the locked container): - let X be the matching key of the locked container; - if X is nothing: - say "The [locked container] is welded shut."; - otherwise: - say "You have to unlock the [locked container] with the [X] first."; - stop. - -Displaying help message is an action applying to nothing. -Carry out displaying help message: - say "[fixed letter spacing]Available commands:[line break]"; - say " look: describe the current room[line break]"; - say " goal: print the goal of this game[line break]"; - say " inventory: print player's inventory[line break]"; - say " go

: move the player north, east, south or west[line break]"; - say " examine ...: examine something more closely[line break]"; - say " eat ...: eat edible food[line break]"; - say " open ...: open a door or a container[line break]"; - say " close ...: close a door or a container[line break]"; - say " drop ...: drop an object on the floor[line break]"; - say " take ...: take an object that is on the floor[line break]"; - say " put ... on ...: place an object on a supporter[line break]"; - say " take ... from ...: take an object from a container or a supporter[line break]"; - say " insert ... into ...: place an object into a container[line break]"; - say " lock ... with ...: lock a door or a container with a key[line break]"; - say " unlock ... with ...: unlock a door or a container with a key[line break]"; - -Understand "help" as displaying help message. - -Taking all is an action applying to nothing. -Check taking all: - say "You have to be more specific!"; - rule fails. - -Understand "take all" as taking all. -Understand "get all" as taking all. -Understand "pick up all" as taking all. - -Understand "take each" as taking all. -Understand "get each" as taking all. -Understand "pick up each" as taking all. - -Understand "take everything" as taking all. -Understand "get everything" as taking all. -Understand "pick up everything" as taking all. - -The extra description command option is a truth state that varies. -The extra description command option is usually false. - -Turning on the extra description command option is an action applying to nothing. -Carry out turning on the extra description command option: - Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] - Now the extra description command option is true. - -Understand "tw-extra-infos description" as turning on the extra description command option. - -The extra inventory command option is a truth state that varies. -The extra inventory command option is usually false. - -Turning on the extra inventory command option is an action applying to nothing. -Carry out turning on the extra inventory command option: - Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] - Now the extra inventory command option is true. - -Understand "tw-extra-infos inventory" as turning on the extra inventory command option. - -The extra score command option is a truth state that varies. -The extra score command option is usually false. - -Turning on the extra score command option is an action applying to nothing. -Carry out turning on the extra score command option: - Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] - Now the extra score command option is true. - -Understand "tw-extra-infos score" as turning on the extra score command option. - -To trace the actions: - (- trace_actions = 1; -). - -Tracing the actions is an action applying to nothing. -Carry out tracing the actions: - Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] - trace the actions; - -Understand "tw-trace-actions" as tracing the actions. - -The restrict commands option is a truth state that varies. -The restrict commands option is usually false. - -Turning on the restrict commands option is an action applying to nothing. -Carry out turning on the restrict commands option: - Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] - Now the restrict commands option is true. - -Understand "restrict commands" as turning on the restrict commands option. - -The taking allowed flag is a truth state that varies. -The taking allowed flag is usually false. - -Before removing something from something: - now the taking allowed flag is true. - -After removing something from something: - now the taking allowed flag is false. - -Before taking a thing (called the object) when the object is on a supporter (called the supporter): - if the restrict commands option is true and taking allowed flag is false: - say "Can't see any [object] on the floor! Try taking the [object] from the [supporter] instead."; - rule fails. - -Before of taking a thing (called the object) when the object is in a container (called the container): - if the restrict commands option is true and taking allowed flag is false: - say "Can't see any [object] on the floor! Try taking the [object] from the [container] instead."; - rule fails. - -Understand "take [something]" as removing it from. - -Rule for supplying a missing second noun while removing: - if restrict commands option is false and noun is on a supporter (called the supporter): - now the second noun is the supporter; - else if restrict commands option is false and noun is in a container (called the container): - now the second noun is the container; - else: - try taking the noun; - say ""; [Needed to avoid printing a default message.] - -The version number is always 1. - -Reporting the version number is an action applying to nothing. -Carry out reporting the version number: - Decrease turn count by 1; [Internal framework commands shouldn't count as a turn.] - say "[version number]". - -Understand "tw-print version" as reporting the version number. - -Reporting max score is an action applying to nothing. -Carry out reporting max score: - say "[maximum score]". - -Understand "tw-print max_score" as reporting max score. - -To print id of (something - thing): - (- print {something}, "^"; -). - -Printing the id of player is an action applying to nothing. -Carry out printing the id of player: - print id of player. - -Printing the id of EndOfObject is an action applying to nothing. -Carry out printing the id of EndOfObject: - print id of EndOfObject. - -Understand "tw-print player id" as printing the id of player. -Understand "tw-print EndOfObject id" as printing the id of EndOfObject. - -There is a EndOfObject. - diff --git a/textworld/challenges/spaceship/games/levelMedium.ulx b/textworld/challenges/spaceship/games/levelMedium.ulx deleted file mode 100644 index 672addb063e402847544ca90fc4064a378b965d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640000 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 %qtbjNvsW&W8(=Dm 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%0D#9w;JW2 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≶T-R#h6C(xr~s6QFSqdkpy8fEsKnb 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 textworld.Game: +def make_game_medium(settings: Mapping[str, str], options: Optional[GameOptions] = None) -> textworld.Game: + """ Make a Spaceship game of the desired difficulty settings. + + Arguments: + settings: Difficulty settings (see notes). + options: + For customizing the game generation (see + :py:class:`textworld.GameOptions ` + for the list of available options). + + Returns: + Generated game. + + Notes: + Difficulty levels are defined as follows: + * Level easy. + * Level medium. + * Level difficult. + + """ + kb = KnowledgeBase.load(target_dir=pjoin(os.path.dirname(__file__), 'textworld_data')) + options = options or GameOptions() + options.grammar.theme = 'spaceship' + options.kb = kb + options.seeds = g_rng.seed + + rngs = options.rngs + rng_map = rngs['map'] + rng_objects = rngs['objects'] + rng_grammar = rngs['grammar'] + rng_quest = rngs['quest'] + + if settings["level"] == 'easy': + mode = "easy" + options.nb_rooms = 4 + + elif settings["level"] == 'medium': + mode = "medium" + options.nb_rooms = 8 + + elif settings["level"] == 'difficult': + mode = "difficult" + options.nb_rooms = 8 + + metadata = {"desc": "Spaceship", # Collect information for reproduction. + "mode": mode, + "seeds": options.seeds, + "world_size": options.nb_rooms} + + # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + # Create the Game Environment + # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + gm = GameMaker(kb=kb, theme='spaceship') + + # ===== Sleep Station Design ======================================================================================= + sleep_station = gm.new_room("Sleep Station") + sleep_station.infos.desc = "This is a typical bedroom in spaceship; here, it is called sleep station. It is " \ + "small but comfortable to take a good rest after a day full of missions. However, " \ + "today your mission will start from here. Wait to be notified by a message. So, you " \ + "should find that message first." \ + " " \ + "BTW, don't forget that when the Hatch door is open, you should already have worn " \ + "your specially-designed outfit to be able to enter and stay at Hatch area; otherwise " \ + "you'll die! Yes! Living in space is tough." + + surf_0 = gm.new(type='s', name='vertical desk') # surf_0 is a table (supporter) in the Sleep Station. + surf_0.infos.desc = "This is not a regular table. The surface is installed vertically and your objects are " \ + "attached or hooked to it, why? Come on! we are in space, there is no gravity here." + sleep_station.add(surf_0) + + laptop = gm.new(type='cpu', name='laptop') + laptop.infos.desc = "This is your personal laptop which is attached to the surface of the table. You can do " \ + "regular things with this, like check your emails, watch YouTube, Skype with family,etc." \ + "Since you are here, we recommend you to check your emails. New missions are posted through " \ + "emails." + surf_0.add(laptop) + gm.add_fact('unread/e', laptop) + + # ===== US LAB Design ============================================================================================== + us_lab = gm.new_room("US LAB") + us_lab.infos.desc = "This is where Americans do their research on Space. In addition to all computers and " \ + "lab gadgets, you can find a couple of objects here which are useful during your mission. " \ + "Let's explore the room." + + box_a = gm.new(type='c', name="box A") + box_a.infos.desc = "This a regular box, keeps the electronic key to open box B. " + us_lab.add(box_a) + gm.add_fact("closed", box_a) + + key_0 = gm.new(type='k', name="electronic key") + key_0.infos.desc = "This key is an electronic key which unlocks box B. An electronic key is in fact a code and " \ + "opens those locks which are equipped with a keypad." + box_a.add(key_0) + + corridor_1 = gm.connect(sleep_station.south, us_lab.north) + door_a = gm.new_door(corridor_1, name="door A") + gm.add_fact("closed", door_a) + + # ===== Russian Module Design ====================================================================================== + russian_module = gm.new_room("Russian Module") + russian_module.infos.desc = "The Russian module is a typical space lab that you can expect, filled with a " \ + "lot of processing machines, test equipments and space drive cars, in fact for " \ + "repair and test. Since it is located at the center of International Space Station, " \ + "it is also important room for everyone. There are many other objects here and " \ + "there belongs to other astronauts, probably that's why here looks a bit messy. " \ + "There are some stuffs here you should pick, obviously if you can find them among " \ + "all this mess." + + surf_1 = gm.new(type='s', name='metal table') + surf_1.infos.desc = "This is a big metal table, a messy one, there are many things on it, it is difficult to " \ + "find what you want. However, there is just one item which is important for you. Try to " \ + "find that item." + russian_module.add(surf_1) + + box_b = gm.new(type='c', name="box B") + box_b.infos.desc = "This box is locked! sounds it carries important item... So, let's find its key to open it. " \ + "Wait... strange! the lock looks like a keypad!! Wait we've seen something similar to this " \ + "somewhere before." + surf_1.add(box_b) + gm.add_fact("locked", box_b) + gm.add_fact("match", key_0, box_b) + + push_button = gm.new(type='b', name="exit push button") + push_button.infos.desc = "This push button is a key-like object which opens door C." + gm.add_fact("unpushed", push_button) + box_b.add(push_button) + + corridor_2 = gm.connect(us_lab.south, russian_module.north) + door_b = gm.new_door(corridor_2, name="door B") + gm.add_fact("closed", door_b) + + # ===== Hatch Design =============================================================================================== + hatch = gm.new_room("Hatch") + hatch.infos.desc = "This area is like the entrance to the spaceship, so like home entrance with outer and " \ + "inner doors and a place that outfits are hooked. There are only two important differences: " \ + "first, if the outer door is open and you don't have outfit on you, you are dead!! No joke " \ + "here! So make sure that you open the door after wearing those cloths. Second, the door nob " \ + "to open the door is not neither on the door nor in this room. You should open the external " \ + "door from Russian Module! woooh so much of safety concerns, yeah?!" + + cloth = gm.new(type='l', name="outfit") + hatch.add(cloth) + gm.add_fact("takenoff", cloth) + gm.add_fact("clean", cloth) + + corridor_3 = gm.connect(hatch.west, russian_module.east) + door_c = gm.new_door(corridor_3, name="door C") + gm.add_fact("closed", door_c) + + # ===== Outside Spaceship (Space) Design =========================================================================== + outside = gm.new_room("Outside") + outside.infos.desc = "Here is outside the spaceship. No Oxygen, no gravity, nothing! If you are here, it means " \ + "that you have the special outfit on you and you passed the medium level of the game " \ + "successfully! Congrats!" + + corridor_4 = gm.connect(outside.north, hatch.south) + door_d = gm.new_door(corridor_4, name="door D") + gm.add_fact("locked", door_d) + gm.add_fact("pair", push_button, door_d) + + # ===== Player and Inventory Design ================================================================================ + gm.set_player(sleep_station) + + game = quest_design_medium(gm) + + # from textworld.challenges.spaceship import maker + # maker.test_commands(gm, [ + # 'check laptop for email', + # 'check laptop for email', + # 'open door A', + # 'go south', + # 'open box A', + # 'take electronic key from box A', + # 'open door B', + # 'go south', + # + # 'unlock box B with electronic key', + # 'open box B', + # 'push exit push button', + # + # 'open door C', + # 'go east', + # 'take outfit', + # 'wear outfit', + # 'go west', + # 'go east', + # 'go south', + # + # # 'check laptop for email', + # # 'check laptop for email', + # # 'open door A', + # # 'go south', + # # 'open box A', + # # 'take electronic key from box A', + # # 'open door B', + # # 'go south', + # # 'open door C', + # # 'go east', + # # 'take outfit', + # # 'wear outfit', + # # 'go west', + # # 'unlock box B with electronic key', + # # 'open box B', + # # 'push exit push button', + # # 'go east', + # # 'go south', + # ]) + + game.metadata = metadata + uuid = "tw-spaceship-{level}".format(level=str.title(settings["level"])) + game.metadata["uuid"] = uuid + + return game + + +def make_game_difficult(settings: Mapping[str, str], options: Optional[GameOptions] = None) -> textworld.Game: """ Make a Spaceship game of the desired difficulty settings. Arguments: @@ -332,13 +546,12 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None gm.set_player(starting_room) else: - # gm.set_player(us_lab) gm.set_player(sleep_station) - key_7 = gm.new(type='k', name="hearty key") - key_7.infos.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." - gm.add_fact("match", key_7, box_c) - gm.inventory.add(key_7) # Add the object to the player's inventory. + # key_7 = gm.new(type='k', name="hearty key") + # key_7.infos.desc = "This key is shaped like a heart, not a normal key for a spaceship, ha ha ha..." + # gm.add_fact("match", key_7, box_c) + # gm.inventory.add(key_7) # Add the object to the player's inventory. if settings["level"] == 'easy': game = quest_design_easy(gm) @@ -349,6 +562,14 @@ def make_game(settings: Mapping[str, str], options: Optional[GameOptions] = None elif settings["level"] == 'difficult': game = quest_design_difficult(gm) + # from textworld.challenges.spaceship import maker + # maker.test_commands(gm, [ + # 'check laptop for email', + # # 'check laptop for email', + # 'open door A', + # 'go south', + # ]) + game.metadata = metadata uuid = "tw-spaceship-{level}".format(level=str.title(settings["level"])) game.metadata["uuid"] = uuid @@ -389,29 +610,20 @@ def quest_design_medium(game): quests.append(Quest(win_events=[win_quest], fail_events=[])) # 3. Player is in Russian Module and take digital Key 1 and/or push the button - win_quest = Event(conditions={game.new_fact("in", game._entities['k_2'], game._entities['I'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) win_quest = Event(conditions={game.new_fact("pushed", game._entities['b_0']), game.new_fact("worn", game._entities['l_0'])}) quests.append(Quest(win_events=[win_quest], fail_events=[])) fail_quest = Event(conditions={game.new_fact("pushed", game._entities['b_0']), - game.new_fact("takenoff", game._entities['l_0'])}) + game.new_fact("takenoff", game._entities['l_0']), + game.new_fact("open", game._entities['d_2'])}) quests.append(Quest(win_events=[], fail_events=[fail_quest])) - # 4. Player is the Control Mo/dule and take Electronic Key 2 - win_quest = Event(conditions={game.new_fact("in", game._entities['k_5'], game._entities['I'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - - # 5. Player reads the Secret Code book at Control Module - win_quest = Event(conditions={game.new_fact("read/t", game._entities['txt_0'])}) - quests.append(Quest(win_events=[win_quest], fail_events=[])) - - # 6. Player is in Hatch room and wears the cloth + # 4. Player is in Hatch room and wears the cloth win_quest = Event(conditions={game.new_fact("worn", game._entities['l_0'])}) quests.append(Quest(win_events=[win_quest], fail_events=[])) - # 7. Player goes outside - win_quest = Event(conditions={game.new_fact("at", game._entities['P'], game._entities['r_7'])}) + # 5. Player goes outside + win_quest = Event(conditions={game.new_fact("at", game._entities['P'], game._entities['r_4'])}) quests.append(Quest(win_events=[win_quest], fail_events=[])) game.quests = quests @@ -420,13 +632,68 @@ def quest_design_medium(game): def quest_design_difficult(game): - return None + quests = [] + + # 1. Is the Player performing successful in the Sleeping Station + win_quest = Event(conditions={ + game.new_fact("at", game._entities['P'], game._entities['r_0']) + }) + quests.append(Quest(win_events=[win_quest], fail_events=[], reward=0)) + + fail_quest = Event(conditions={ + game.new_fact("event", game._entities['P'], game._entities['r_0']), + game.new_fact("at", game._entities['P'], game._entities['r_1']), + game.new_fact("open", game._entities['d_0']), + game.new_fact("unread/e", game._entities['cpu_0']), + }) + + win_quest = Event(conditions={ + game.new_fact("event", game._entities['P'], game._entities['r_0']), + game.new_fact("at", game._entities['P'], game._entities['r_1']), + game.new_fact("open", game._entities['d_0']), + game.new_fact("read/e", game._entities['cpu_0']), + }) + quests.append(Quest(win_events=[win_quest], fail_events=[fail_quest])) + + # 2. Player is in US LAB to find Electronic Key 1 + win_quest = Event(conditions={game.new_fact("in", game._entities['k_0'], game._entities['I'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + + # 3. Player is in Russian Module and take digital Key 1 and/or push the button + win_quest = Event(conditions={game.new_fact("in", game._entities['k_2'], game._entities['I'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + win_quest = Event(conditions={game.new_fact("pushed", game._entities['b_0']), + game.new_fact("worn", game._entities['l_0'])}) + quests.append(Quest(win_events=[win_quest], fail_events=[])) + fail_quest = Event(conditions={game.new_fact("pushed", game._entities['b_0']), + game.new_fact("takenoff", game._entities['l_0'])}) + quests.append(Quest(win_events=[], fail_events=[fail_quest])) + + # # 4. Player is the Control Mo/dule and take Electronic Key 2 + # win_quest = Event(conditions={game.new_fact("in", game._entities['k_5'], game._entities['I'])}) + # quests.append(Quest(win_events=[win_quest], fail_events=[])) + # + # # 5. Player reads the Secret Code book at Control Module + # win_quest = Event(conditions={game.new_fact("read/t", game._entities['txt_0'])}) + # quests.append(Quest(win_events=[win_quest], fail_events=[])) + # + # # 6. Player is in Hatch room and wears the cloth + # win_quest = Event(conditions={game.new_fact("worn", game._entities['l_0'])}) + # quests.append(Quest(win_events=[win_quest], fail_events=[])) + # + # # 7. Player goes outside + # win_quest = Event(conditions={game.new_fact("at", game._entities['P'], game._entities['r_7'])}) + # quests.append(Quest(win_events=[win_quest], fail_events=[])) + + game.quests = quests + + return game.build() -# g = make_game({'level': 'medium'}) +# g = make_game_medium({'level': 'medium'}) register(name="tw-spaceship", desc="Generate a Spaceship challenge game", - make=make_game, + make=make_game_medium, add_arguments=build_argparser) diff --git a/textworld/challenges/spaceship/textworld_data/logic/CPU.twl b/textworld/challenges/spaceship/textworld_data/logic/CPU.twl index c06cc8c1..6d6f8188 100644 --- a/textworld/challenges/spaceship/textworld_data/logic/CPU.twl +++ b/textworld/challenges/spaceship/textworld_data/logic/CPU.twl @@ -6,7 +6,8 @@ type cpu : o { } rules { - check/e :: $at(P, r) & $at(s, r) & $on(cpu, s) & unread/e(cpu) -> read/e(cpu); + check/e1 :: $at(P, r) & $at(s, r) & $on(cpu, s) & unread/e(cpu) -> read/e(cpu); + check/e2 :: $at(P, r) & $in(cpu, I) & unread/e(cpu) -> read/e(cpu); } constraints { @@ -25,7 +26,8 @@ type cpu : o { } commands { - check/e :: "check laptop for email" :: "checking email"; + check/e1 :: "check laptop for email" :: "checking email"; + check/e2 :: "check laptop for email" :: "checking email"; } code :: """ From cf62bab644bd3eb30fffb7dc8ad93da49f3aa110 Mon Sep 17 00:00:00 2001 From: HakiRose Date: Wed, 26 Feb 2020 14:28:47 -0500 Subject: [PATCH 13/13] changes on spaceship_game after rebasing --- textworld/challenges/spaceship/spaceship_game.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/textworld/challenges/spaceship/spaceship_game.py b/textworld/challenges/spaceship/spaceship_game.py index 57f0b5c8..ee9a7ac0 100644 --- a/textworld/challenges/spaceship/spaceship_game.py +++ b/textworld/challenges/spaceship/spaceship_game.py @@ -81,7 +81,8 @@ def make_game_medium(settings: Mapping[str, str], options: Optional[GameOptions] # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # Create the Game Environment # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - gm = GameMaker(kb=kb, theme='spaceship') + gm = GameMaker(options=options) + # gm = GameMaker(kb=kb, theme='spaceship') # ===== Sleep Station Design ======================================================================================= sleep_station = gm.new_room("Sleep Station")