Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

"Chaos in the Monastery" (First demo version)

by cavac (Parson)
on Jul 05, 2012 at 20:47 UTC ( [id://980155]=perlmeditation: print w/replies, xml ) Need Help??

As you know, i'm working on a small text adventure that plays out in this very monastery. At the moment, this is nothing more than a proof on concept with a dozen or so rooms and two puzzles.

Due to my broken arm (plus painkillers) the work is going very slowly and code quality rather low. But i thought i'd give you a small preview anyway:

Here's the updated game engine (file PMAdventures.pl):

#!/usr/bin/env perl use strict; use warnings; use MIME::Base64; my $gamefile = shift @ARGV; if(!defined($gamefile) || !-f $gamefile) { die("Usage: perl PMAdventures.pl gamefile"); } # Main game variables my $location = ''; my $oldlocation = ''; my (%rooms, %objects, %synonyms); my %mlevels = ( -100=> 'Pennance required', 0 => 'Initiate', 20 => 'Novice', 50 => 'Acolyte', 90 => 'Sexton', 150 => 'Beadle', ); my $xp = 0; open(my $ifh, '<', $gamefile) or die($!); my @lines = <$ifh>; close $ifh; my $completefile; if($lines[0] =~ /B64GAMEFILE/) { shift @lines; $completefile = decode_base64(join('', @lines)); } else { $completefile = join('', @lines); } eval($completefile) or die($@); while(1) { #print the room description if($location ne $oldlocation) { $oldlocation = $location; print "\n\n"; print $rooms{$location}->{name}, "\n"; print '=' x length($rooms{$location}->{name}), "\n\n"; if(!defined($rooms{$location}->{visited}) || !$rooms{$location +}->{visited}) { $rooms{$location}->{visited} = 1; print $rooms{$location}->{description}, "\n"; } print "You see:\n"; foreach my $key (sort keys %objects) { if($objects{$key}->{location} eq $location) { print " ", $objects{$key}->{short}, "\n"; } } print "There are exits in this direction(s): ", join(',', sort + keys %{$rooms{$location}->{exits}}), "\n"; } # Ask the player what to do print "What next: "; my $cmd = <>; # Primitively clean up the input chomp $cmd; $cmd = lc $cmd; $cmd =~ s/(\s+)/\ /g; $cmd =~ s/^\ //; $cmd =~ s/\ $//; next if($cmd eq ''); # Apply synonyms foreach my $key (keys %synonyms) { my $repl = $synonyms{$key}; $cmd =~ s/$key/$repl/; } print "(DEBUG) I heard '$cmd'\n"; # allow the player to finish if($cmd =~ /(quit|exit)/i) { print "Goodbye.\n"; last; } # We don't like nice users. Just state what you want! if($cmd =~ /please/i) { print "I don't know how to please!\n"; next; } # Force re-displaying the room description if($cmd eq 'look') { $oldlocation = ''; $rooms{$location}->{visited} = 0; next; } # Wanna take us to another room? if(defined($rooms{$location}->{exits}->{$cmd})) { # Check to see if its a code section, else just move # the player to that room if(ref($rooms{$location}->{exits}->{$cmd}) eq 'CODE') { $rooms{$location}->{exits}->{$cmd}->(); } else { $location = $rooms{$location}->{exits}->{$cmd}; } next; } # The inventory command if($cmd eq 'inventory') { print "Your open pocket reveals:\n"; foreach my $key (sort keys %objects) { if($objects{$key}->{location} eq 'inventory') { print " ", $objects{$key}->{short}, "\n"; } } } # Look for a simple two-verb command if($cmd =~ /(\w+)\ (\w+)/) { my ($verb, $thing) = ($1, $2); # Check if the object exists if(!defined($objects{$thing})) { print "Sorry, the programmer never invented a $thing!\n"; next; } # Ok, next, let's see if the object is in reach if($objects{$thing}->{location} ne 'inventory' && $objects{$th +ing}->{location} ne $location) { print "You can't see $thing anywhere near you!\n"; next; } # Allow "describe" action if($verb eq "describe") { print $objects{$thing}->{long}, "\n"; next; } # Check if it is an allowed action for this object if(!defined($objects{$thing}->{actions}->{$verb})) { print "You can't do that to $thing\n"; next; } # First of all, if the action is a sub, execute it and be done + with it. if(ref($objects{$thing}->{actions}->{$verb}) eq 'CODE') { $objects{$thing}->{actions}->{$verb}->(); next; } # Inventory-related actions if($verb eq 'take') { if($objects{$thing}->{location} eq 'inventory') { print "You already have that in your magic pocket!\n"; next; } $objects{$thing}->{location} = 'inventory'; print $objects{$thing}->{actions}->{$verb}, "\n"; next; } if($verb eq 'drop') { if($objects{$thing}->{location} ne 'inventory') { print "You can't find that object anywhere within your + vast magic pocket!\n"; next; } $objects{$thing}->{location} = $location; print $objects{$thing}->{actions}->{$verb}, "\n"; next; } # Uhm, ok, this seems to be a text-printing-only action, like +reading a sign print $objects{$thing}->{actions}->{$verb}, "\n"; next; } # Scratch head and try again if(rand(100) > 50) { print "Sorry, could you state that more clearly?\n"; } else { print "I'll just stand around scratching my head instead...\n" +; } } sub getCurrentMLevel { foreach my $key(reverse sort{$a <=> $b} keys %mlevels) { if($xp >= $key) { return $mlevels{$key}; } } return "EE has encountered an internal error."; } sub getNextMLevel { foreach my $key(sort{$a <=> $b} keys %mlevels) { if($xp < $key) { return ($key- $xp, $mlevels{$key}); } } return "EE has encountered an internal error."; } sub showScore { print "You have $xp XP (", getCurrentMLevel(), ")\n"; return; } sub gainScore { my ($gain) = @_; my @x = ('It tastes just like chicken.', 'You are a unique snowflake.', 'As if it mattered.', 'Non-refundable.', 'Are you shure you want to do this?', ); $xp += $gain; if($gain > 0) { print "You gained $gain XP. ", $x[ rand @x ], "\n"; my ($diff, $nl) = getNextMLevel(); print "You have $diff points until next level: $nl\n"; } elsif($gain < 0) { print "You LOST $gain XP!\n"; } else { print "Your XP remains unchanged.\n"; } return; }

And here's the game file, base64 encoded to prevent spoilers (chaos_in_the_monastery_demo.b64):

B64GAMEFILE IyBGaXJzdCwgcHJpbnQgYSBzaW1wbGUgaW50cm8gdG8gdGhlIGdhbWUKcHJpbnQgPDwnRU +5ESU5U Uk8nOwoiQ2hhb3MgaW4gdGhlIE1vbmFzdGVyeSAoRGVtbyBWZXJpb24pIgo9PT09PT09PT +09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQoKWW91IGFyZSBzaXR0aW5nIGluIHlvdXIgb2 +ZmaWNl LCBidWdmaXhpbmcgYSB2ZXJ5IG9sZAptb2R1bGUgeW91IHdyb3RlIHdoZW4geW91IHdoZX +JlIHN0 aWxsIGEgbm92aWNlLgoKU3VkZGVubHksIHlvdSBoYXZlIHRoaXMgc3RyYW5nZSBmZWVsaW +5nIGFz IGlmIHNvbWV0aGluZwpoYXMgZ29uZSB0ZXJyaWJseSB3cm9uZy4gWW91ciBjb21wdXRlci +BzY3Jl ZW4gZ29lcyBibGFuawpmb3IgYSBzZWNvbmQgYW5kIHRoZW4gZGlzcGxheXMgYSBiaWcgd2 +Fybmlu ZyBzaWduLiBJbiB0aGUKZGlzdGFuY2UsIHlvdSBoZWFyIHdlaXJkIGEgc291bmQsIHNvbW +V0aGlu ZyBsaWtlICJaT09PSU5HISIuCkVORElOVFJPCnByaW50ICJcblxuUHJlc3MgRU5URVIiOw +pteSAk eWFkYSA9IDw+OwpwcmludCAiXG5cblxuIjsKCiRsb2NhdGlvbiA9ICdvZmZpY2UnOwojJG +xvY2F0 aW9uID0gJ2VudHJhbmNlJzsKCiMgc3lub25teW1zIChyZWdleCByZXBsYWNlbWVudHMgb2 +4gY29t bWFuZCBpbnB1dCkKJXN5bm9ueW1zID0gKAogICAgc2NvcmUgICA9PiAicmVhZCBzY29yZW +NhcmQi LAogICAgJ15uJCcgICA9PiAgIm5vcnRoIiwKICAgICdecyQnICAgPT4gICJzb3V0aCIsCi +AgICAn XmUkJyAgID0+ICAiZWFzdCIsCiAgICAnXnckJyAgID0+ICAid2VzdCIsCiAgICBleGFtaW +5lID0+ ICJkZXNjcmliZSIsCiAgICAnXnhcICcgICA9PiAiZGVzY3JpYmUgIiwKICAgICdeaSQnIC +AgPT4g ImludmVudG9yeSIsCiAgICAnXmwkJyAgID0+ICJsb29rIiwKICAgIG5vZGVyZWFwZXIgID +0+ICJy ZWFwZXIiLAogICAgcG9rZXIgICA9PiAiY2FyZHMiLAogICAgcGxheSAgICA9PiAidXNlIi +wKKTsK CiMgZGVmaW5lIHNvbWUgcm9vbXMgdG8gaGF2ZSwgdWgsIHJvb20gdG8gcnVuIGFyb3VuZA +ojIFRo ZXNlIGFyZSBwdXJlbHkgc3RhdGljIG9iamVjdHMKJXJvb21zID0gKAogICAgJ29mZmljZS +cgID0+ IHsKICAgICAgICBuYW1lICAgID0+ICdZb3VyIG9mZmljZScsCiAgICAgICAgZGVzY3JpcH +Rpb24g PT4gIllvdSBhcmUgaW4geW91ciBvZmZpY2UuIEl0IGlzIHJhdGhlciBzbWFsbCwgYnV0IG +l0IGlz IHlvdXIgb3duLlxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgb25seSBleG +l0IGlz IHRocm91Z2ggdGhlIGRvb3IgaW4gdGhlIG5vcnRoLiIsCiAgICAgICAgZXhpdHMgICA9Pi +B7CiAg ICAgICAgICAgICdub3J0aCcgID0+IHN1YiB7CiAgICAgICAgICAgICAgICAgICAgcHJpbn +QgIlRo ZSBzZWN1cml0eSBsb2NrIG9mIHlvdXIgZG9vciBoYXMgYmVlblxuIiwKICAgICAgICAgIC +AgICAg ICAgICAgICAgICAicmVtb3RlbHkgYWN0aXZhdGVkIVxuIjsKICAgICAgICAgICAgICAgIC +AgICBw cmludCAiRW50ZXIgdW5sb2NrIHBpbjogIjsKICAgICAgICAgICAgICAgICAgICBteSAkcG +luID0g PD47CiAgICAgICAgICAgICAgICAgICAgY2hvbXAgJHBpbjsKICAgICAgICAgICAgICAgIC +AgICBp ZigkcGluIGVxICI4OTA4MTMiKSB7ICMgY2F2YWMncyBob21lIG5vZGUgaWQKICAgICAgIC +AgICAg ICAgICAgICAgICAgJGxvY2F0aW9uID0gJ2hhbGwxJzsKICAgICAgICAgICAgICAgICAgIC +AgICAg cHJpbnQgIlRoZSBkb29yIG9wZW5zIHdpdGggYSBzYXRpc2ZpZWQgaHVtbSBhbmQgbGV0XC +dzIHlv dSB0aHJvdWdoLiIKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgIC +AgICAg ICAgICAgICBwcmludCAiQSB2ZXJ5IGxvdWQgc2VjdXJpdHkgYWxhcm0gcGllcmNlcyB5b3 +VyIGVh cnMuXG4iOwogICAgICAgICAgICAgICAgICAgICAgICBzbGVlcCg3KTsKICAgICAgICAgIC +AgICAg ICAgICAgICAgcHJpbnQgIllvdXIgZWFycyBhcmUgcmluZ2luZy5cbiI7CiAgICAgICAgIC +AgICAg ICAgICAgICAgIHNsZWVwKDQpOwogICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiVG +hlIGFs YXJtIHN0b3BzLlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoNCk7CiAgIC +AgICAg ICAgICAgICAgICAgICAgIHByaW50ICJOb3RoaW5nIGVsc2Ugc2VlbXMgdG8gaGFwcGVuLl +xuIgog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgfSwKIC +AgIH0s CiAgICAnaGFsbDEnICA9PiB7CiAgICAgICAgbmFtZSAgICA9PiAnSGFsbCBvZiB0aGUgQ2 +FtZWwn LAogICAgICAgIGRlc2NyaXB0aW9uID0+ICJZb3UgYXJlIGluIHRoZSBzb3V0aGVybiBwYX +J0IG9m IHRoZSAnSGFsbCBvZiB0aGUgQ2FtZWwnLiBcbiIgLgogICAgICAgICAgICAgICAgICAgIC +AgICAi SXQgaXMgbmFtZWQgYWZ0ZXIgdGhlIGZhbW91cyBwZXQgVGhlIENyZWF0b3IgTGFycnkgbm +V2ZXIg aGFkLlxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgd2FsbHMgaGF2ZSBhIG +Rpc3Rp bmN0aXZlIGNhbWVsLWxpa2UgcGF0dGVybiwgc28gaGF2ZSB0aGVcbiIgLgogICAgICAgIC +AgICAg ICAgICAgICAgICAiZmxvb3IgYW5kIHRoZSBjZWlsaW5nLiBUaGUgaGFsbHdheSBzZWVtcy +B0byBz dHJldGNoIGZvciBtaWxlc1xuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJtaWxlcy +B0byB0 aGUgbm9ydGguXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgIkp1c3Qgc291dGggb2 +YgeW91 IGlzIHlvdXIgb2ZmaWNlLiBPbmUgb2YgdGhlIGJlc3QgbG9jYXRpb25zIGluIHRoZVxuIi +AuCiAg ICAgICAgICAgICAgICAgICAgICAgICJtb25hc3RlcnkuIE9uIHRoZSBlYXN0IHlvdSBjYW +4gc2Vl IHRoZSBlbnRyYW5jZSB0byB5b3VyIGZyaWVuZHNcbiIgLgogICAgICAgICAgICAgICAgIC +AgICAg ICAib2ZmaWNlLCB0aGUgTm9kZVJlYXBlclxuIiwKICAgICAgICBleGl0cyAgID0+IHsKIC +AgICAg ICAgICAgc291dGggICAgPT4gJ29mZmljZScsCiAgICAgICAgICAgIG5vcnRoICAgID0+IC +doYWxs MicsCiAgICAgICAgICAgIGVhc3QgICAgPT4gJ3JlYXBlcm9mZmljZScsCiAgICAgICAgfS +wKICAg IH0sCiAgICAncmVhcGVyb2ZmaWNlJyAgPT4gewogICAgICAgIG5hbWUgICAgPT4gJ1RoZS +BOb2Rl UmVhcGVycyBvZmZpY2UnLAogICAgICAgIGRlc2NyaXB0aW9uID0+ICJZb3Ugd291bGQgZX +hwZWN0 IHNvbWVvbmUgd2l0aCB0aGUgam9iIHRpdGxlICdOb2RlUmVhcGVyJyB0byBoYXZlIGFcbi +IgLgog ICAgICAgICAgICAgICAgICAgICAgICAicmF0aGVyIGdsb29teSBvZmZpY2UuLi4gYW5kIH +lvdSB3 b3VsZCBiZSB3cm9uZy4gTGFyZ2Ugd2luZG93cywgdGFubmluZ1xuIiAuCiAgICAgICAgIC +AgICAg ICAgICAgICAgICJsYW1wcywgZGVjayBjaGFpcnMgYW5kIHRoZSBzb3VuZCBvZiB3YXZlcy +BicmVh a2luZyBnZW50bHkgb24gdGhlIGJlYWNoXG4iIC4KICAgICAgICAgICAgICAgICAgICAgIC +AgInR1 bm5lbGVkIHRocm91Z2ggaGlkZGVuIHNwZWFrZXJzIGhhdmUgdHVybmVkIHRoaXMgb2ZmaW +NlIGlu dG8gYSBnb29kXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgImltaXRhdGlvbiBvZi +BhIHRy b3BpY2FsIGJlYWNoIHJlc29ydC4gU29tZW9uZSBoYXMgZ29uZSBzbyBmYXIgYXMgdG8gaW +1wb3J0 XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgImEgZmV3IHRydWNrbG9hZHMgb2YgYm +VhY2gg c2FuZCBmcm9tIHRoZSBiYWhhbWFzIHRvIGNvdmVyIHRoZSBmbG9vci5cbiIgLgogICAgIC +AgICAg ICAgICAgICAgICAgICAiVGhlIGV4aXQgaXMgaW4gdGhlIHdlc3QsIGNhbW91ZmxhZ2VkIG +FzIGVu dHJhbmNlIHRvIGEgY2x1YmhvdXNlLlxuIiwKICAgICAgICBleGl0cyAgID0+IHsKICAgIC +AgICAg ICAgd2VzdCAgICA9PiAnaGFsbDEnLAogICAgICAgIH0sCiAgICB9LAoKICAgICdoYWxsMi +cgID0+ IHsKICAgICAgICBuYW1lICAgID0+ICdIYWxsIG9mIHRoZSBDYW1lbCcsCiAgICAgICAgZG +VzY3Jp cHRpb24gPT4gIlRoaXMgc3BvdCBpcyBrbm93biBhcyB0aGUgT2FzaXMuIEl0IGhhcyB0aG +Ugb25s eSB3YXRlciBmb3VudGFpblxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJpbiB0aG +Ugd2hv bGUgbmV0d29yayBvZiBoYWxsd2F5cy5cbiIgLgogICAgICAgICAgICAgICAgICAgICAgIC +AiRWFz dCBvZiB5b3UgaXMgdGhlIGdvbGRlbiBmb3VudGFpbiBvZiByZWZyZXNobWVudC4gSW4gdG +hlIHdl c3QgaXNcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAidGhlIGZhbW91cyAnUmVnaX +N0cnkg UG9ydGFsJyB0aGF0IHdpbGwgbGVhZCB5b3UgaW50byB0aGUgJ0hhbGx3YXlcbiIgLgogIC +AgICAg ICAgICAgICAgICAgICAgICAib2YgV2lzZG9tJy4gVGhlICdIYWxsIG9mIHRoZSBDYW1lbC +cgc3Ry ZXRjaGVzIGZ1cnRoZXIgdG8gdGhlIG5vcnRoXG4iIC4KICAgICAgICAgICAgICAgICAgIC +AgICAg ImFuZCBzb3V0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGV4aXRzIC +AgPT4g ewogICAgICAgICAgICBzb3V0aCAgICA9PiAnaGFsbDEnLAogICAgICAgICAgICBub3J0aC +AgICA9 PiAnaGFsbDMnLAogICAgICAgICAgICBlYXN0ICAgID0+IHN1YiB7CiAgICAgICAgICAgIC +AgICBw cmludCAiWW91IGhlYXIgYSBsb3VkIFpPSU5HLlxuIjsKICAgICAgICAgICAgfSwKICAgIC +AgICAg ICAgd2VzdCAgICA9PiAnaGFsbDQnLAogICAgICAgIH0sCiAgICB9LAogICAgJ2hhbGwzJy +AgPT4g ewogICAgICAgIG5hbWUgICAgPT4gJ0hhbGwgb2YgdGhlIENhbWVsJywKICAgICAgICBkZX +Njcmlw dGlvbiA9PiAiVGhpcyBpcyB0aGUgbW9zdCBub3J0aGVybiBwYXJ0IG9mIHRoZSBoYWxsLl +xuIiAu CiAgICAgICAgICAgICAgICAgICAgICAgIkV4Y2VwdCBmb3IgYSBzaW5nbGUgR3JhZmZpdG +kgb24g dGhlIHdhbGwgdGhhdFxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgInJlYWRzICdWIH +doZmcg eXJuZWFycSBub2JoZyBFQkcxMyEnLCBub3RoaW5nXG4iIC4KICAgICAgICAgICAgICAgIC +AgICAg ICAiYnJlYWtzIHRoZSBtb25vdG9ueSBvZiB0aGUgY2FtZWwgcGF0dGVybiBvbiBldmVyeV +xuIiAu CiAgICAgICAgICAgICAgICAgICAgICAgImF2YWlsYWJsZSBzdXJmYWNlLlxuIiAuCiAgIC +AgICAg ICAgICAgICAgICAgICAgIkluIHRoZSBzb3V0aCB0aGUgaGFsbCBzdHJldGNoZXMgZm9yIG +1pbGVz IHVudGlsIHNvbWV3aGVyZVxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgImJleW9uZC +B0aGUg dmlzaWJsZSBob3Jpem9uIGl0IGVuZCBpbiB5b3VyIG9mZmljZSdzIGRvb3IuXG4iIC4KIC +AgICAg ICAgICAgICAgICAgICAgICAiVG8gdGhlIG5vcnRoIGlzIHRoZSBtYWluIGVudHJhbmNlIG +9mIHRo ZSBtb25hc3RlcnkuIiwKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgZXhpdH +MgICA9 PiB7CiAgICAgICAgICAgIHNvdXRoICAgID0+ICdoYWxsMicsCiAgICAgICAgICAgIG5vcn +RoICAg ID0+ICdlbnRyYW5jZScsCiAgICAgICAgfSwKICAgIH0sCiAgICAnZW50cmFuY2UnICA9Pi +B7CiAg ICAgICAgbmFtZSAgICA9PiAnR3JlYXQgRW50cmFuY2UnLAogICAgICAgIGRlc2NyaXB0aW +9uID0+ ICJZb3UgYXJlIHN0YW5kaW5nIGF0IHdvcmxkIGZhbW91cyBFbnRyYW5jZSBvZiB0aGVcbi +IgLgog ICAgICAgICAgICAgICAgICAgICAgICAibW9uYXN0ZXJ5LiBUaGUgaW1tZW5zZSBHYXRlcy +Aob3Bl biAyNC83IG9mIGNvdXJzZSlcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAicmVhbG +x5IG1h a2VzIG9uZSB3b25kZXIgaG93IG11Y2ggb2FrIGZvcnJlc3QgaGFkXG4iIC4KICAgICAgIC +AgICAg ICAgICAgICAgICAgImJlZW4gY3V0IGRvd24gdG8gbWFrZSBpdC4gVG8gdGhlIHNvdXRoIH +lvdSBj YW4gc2VlIHRoZVxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICInSGFsbCBvZiB0aG +UgQ2Ft ZWwnIGFuZCB0byB0aGUgbm9ydGggYmVnaW5uaW5nIG9mIHRoZVxuIiAuCiAgICAgICAgIC +AgICAg ICAgICAgICAgICJwYXRoIGRvd24gdGhlIG1vdW50YWluLlxuIiAuCiAgICAgICAgICAgIC +AgICAg ICAgICAgICJBIGJpZyBpbmZvc2NyZWVuIGZhY2VzIHRoZSBnYXRlcywgYWx3YXlzIHVwZG +F0aW5n IHRvXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgInNob3cgdGhlIGxhdGVzdCBTb1 +BXIHF1 ZXN0aW9uLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgZXhpdHMgIC +A9PiB7 CiAgICAgICAgICAgIHNvdXRoICAgID0+ICdoYWxsMycsCiAgICAgICAgICAgIG5vcnRoIC +AgID0+ ICdlbmRvZndvcmxkJywKICAgICAgICB9LAogICAgfSwgICAgCgogICAgJ2VuZG9md29ybG +QnICA9 PiB7CiAgICAgICAgbmFtZSAgICA9PiAnRW5kIG9mIHRoZSBXb3JsZCcsCiAgICAgICAgZG +VzY3Jp cHRpb24gPT4gIkFzIHlvdSBzdGFuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoIG +Rvd24g dGhlXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAibW91bnRhaW4geW91IHJlYWxpem +UgdGhh dCB0aGUgd2FybmluZyB3YXMgdHJ1ZS4gVHllXG4iIC4KICAgICAgICAgICAgICAgICAgIC +AgICAi cmVhbGx5IGRpZCBicmVhayB0aGUgbW9uYXN0ZXJ5IHRoaXMgdGltZS4gVGhlIHBhdGhcbi +IgLgog ICAgICAgICAgICAgICAgICAgICAgICJzdWRkZW5seSBzdG9wcyBhZnRlciBhIGZldyBtZX +RlcnMg YW5kIGJleW9uZCB0aGF0XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAicG9pbnQgaX +MuLi4g bm90aGluZy5cbiIgLgogICAgICAgICAgICAgICAgICAgICAgICJcbiIgLgogICAgICAgIC +AgICAg ICAgICAgICAgICJSZWFsbHksIGp1c3QgcGxhaW4gZW1wdHksIG5vdGhpbmduZXNzLiBOby +B0cmVl cyxcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICJubyBwYXRoLCBjZXJ0YWlubHkgbm +8gbW91 bnRhaW4uIEp1c3QsIHdlbGwsIG5vdGhpbmcuXG4iIC4KICAgICAgICAgICAgICAgICAgIC +AgICAi VGhlIG9ubHkgcGF0aCBsZWZ0IGZyb20gaGVyZSBpcyBzb3V0aCwgYmFjayBpbnRvIFxuIi +AuCiAg ICAgICAgICAgICAgICAgICAgICAgInRoZSBtb25hc3RlcnkuXG4iLAogICAgICAgICAgIC +AgICAg ICAgICAgICAKICAgICAgICBleGl0cyAgID0+IHsKICAgICAgICAgICAgc291dGggICAgPT +4gJ2Vu dHJhbmNlJywKICAgICAgICB9LAogICAgfSwgICAgCgogICAgJ2hhbGw0JyAgPT4gewogIC +AgICAg IG5hbWUgICAgPT4gJ0hhbGx3YXkgb2YgV2lzZG9tJywKICAgICAgICBkZXNjcmlwdGlvbi +A9PiAi WW91IGFyZSBpbiB0aGUgZWFzdGVybW9zdCBwYXJ0IG9mIHRoZSBIYWxsd2F5IG9mXG4iIC +4KICAg ICAgICAgICAgICAgICAgICAgICAgIldpc2RvbS4gVGhpcyBoYWxsIHNwYW5zIHRoZSBlbn +RpcmUg bGVuZ3RoIG9mIHRoZVxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgICJtb25hc3Rlcn +kuIEZs b29yLCB3YWxscyBhbmQgY2VpbGluZyBhcmUgYmVhdXRpZnVsbHlcbiIgLgogICAgICAgIC +AgICAg ICAgICAgICAgICAiZGVjb3JhdGVkIGluIGxpZ2h0IGJyb3duIG1hcmJsZSB3aXRoIGNyeX +N0YWxp bmVcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAiaW5sYXlzLiBFYXN0IG9mIHlvdS +BpcyB0 aGUgJ1JlZ2lzdHJ5IFBvcnRhbCcgdGhhdCBsZWFkc1xuIiAuCiAgICAgICAgICAgICAgIC +AgICAg ICAgICJ5b3UgYmFjayB0byB0aGUgSGFsbCBvZiB0aGUgQ2FtZWwsIHNvdXRoIG9mIHlvdS +BpcyB0 aGVcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICAib2ZmaWNlIG9mIHRoZSBTaXRlRG +9jQ2xh biB3aGlsZSBub3J0aCBpZiB0aGUgU3VwZXJTZWFyY2hcbiIgLgogICAgICAgICAgICAgIC +AgICAg ICAgICAiYWRtaW5pc3RyYXRvcnMgb2ZmaWNlLlxuIiwKICAgICAgICAgICAgICAgICAgIC +AgICAg CiAgICAgICAgZXhpdHMgICA9PiB7CiAgICAgICAgICAgIGVhc3QgICAgPT4gJ2hhbGwyJy +wKICAg ICAgICAgICAgICAgIHdlc3QgICAgPT4gc3ViIHsKICAgICAgICAgICAgICAgIGlmKCRvYm +plY3Rz e3ZvdGVzfS0+e2xvY2F0aW9ufSBlcSAibm93aGVyZSIpIHsKICAgICAgICAgICAgICAgIC +AgICBw cmludCAiQSBiZWFyZHkgZ3V5LCBzdHJhbmdlbHkgZW5vdWdoIHdlYXJpbmdcbiIgLgogIC +AgICAg ICAgICAgICAgICAgICAgICAgICJhIFRpbmtlciBCZWxsIGZhaXJ5IGNvc3R1bWUsIHJ1c2 +hlcyBw YXN0XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAieW91IGFuZCBzdHVmZnMgc2 +9tZXRo aW5nIGludG8geW91ciBwb2NrZXQuXG4iOwogICAgICAgICAgICAgICAgICAgIHNsZWVwKD +EyKTsK ICAgICAgICAgICAgICAgICAgICBwcmludCAiV2hhdCB0aGUuLi4/XG4iOwogICAgICAgIC +AgICAg ICAgICAgIHNsZWVwKDUpOwogICAgICAgICAgICAgICAgICAgICRvYmplY3Rze3ZvdGVzfS +0+e2xv Y2F0aW9ufSA9ICJpbnZlbnRvcnkiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgIC +AgICAg JGxvY2F0aW9uID0gJ2hhbGw1JzsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbm9ydG +ggICA9 PiBzdWIgewogICAgICAgICAgICAgICAgcHJpbnQgIllvdSBzdWRkZW5seSBmZWVsIGEgaG +VhZGFj aGUuXG4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzb3V0aCAgID0+IHN1YiB7Ci +AgICAg ICAgICAgICAgICBwcmludCAiWW91IHN1ZGRlbmx5IGFjY2VsZXJhdGUgYmFja3dhcmQgYW +5kIFxu IiAuCiAgICAgICAgICAgICAgICAgICAgICAic21hY2sgYWdhaW5zdCB0aGUgd2FsbCBiZW +hpbmQg eW91LlxuIjsKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfSwKCiAgICAnaGFsbD +UnICA9 PiB7CiAgICAgICAgbmFtZSAgICA9PiAnSGFsbHdheSBvZiBXaXNkb20nLAogICAgICAgIG +Rlc2Ny aXB0aW9uID0+ICJUaGUgSGFsbHdheSBvZiBXaXNkb20gc3RyZXRjaGVzIGVhc3QgYW5kIH +dlc3Qg b2YgeW91LlxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgIkluIHRoaXMgcGFydCwgbG +FyZ2Ug cGFpbnRpbmdzIG9mIHRoZSBtb25hc3RlcnkgZm91bmRlcnNcbiIgLgogICAgICAgICAgIC +AgICAg ICAgICAgICJsaW5lIHRoZSB3YWxsLlxuIFNvdXRoIG9mIHlvdSBpZiB0aGUgamFuaXRvcn +MgYnJv b20gY2xvc2V0LFxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgInRvIHRoZSBub3J0aC +BpcyB0 aGUgZW50cmFuY2UgdG8gdGhlIG1lZGl0YXRpb24gY2hhbWJlci5cbiIsCiAgICAgICAgIC +AgICAg ICAgICAgICAgIAogICAgICAgIGV4aXRzICAgPT4gewogICAgICAgICAgICBlYXN0ICAgID +0+ICdo YWxsNCcsCiAgICAgICAgICAgIHdlc3QgICAgPT4gJ2hhbGw2JywKICAgICAgICAgICAgbm +9ydGgg ICA9PiBzdWIgewogICAgICAgICAgICAgICAgcHJpbnQgIllvdSBmZWVsIGNvbGQuXG4iOw +ogICAg ICAgICAgICB9LAogICAgICAgICAgICBzb3V0aCAgID0+IHN1YiB7CiAgICAgICAgICAgIC +AgICBw cmludCAiU29tZW9uZSBzYXlzICdLTkFBQUFBUkNLJ1xuIjsKICAgICAgICAgICAgfSwKIC +AgICAg ICB9LAogICAgfSwKICAgIAogICAgJ2hhbGw2JyAgPT4gewogICAgICAgIG5hbWUgICAgPT +4gJ0hh bGx3YXkgb2YgV2lzZG9tJywKICAgICAgICBkZXNjcmlwdGlvbiA9PiAiTm9ybWFsbHksIH +RoaXMg cGFydCBvZiB0aGUgSGFsbHdheSBvZiBXaXNkb21cbiIgLgogICAgICAgICAgICAgICAgIC +AgICAg ICJ3b3VsZCBiZSBhbiBpbXBvcnRhbnQganVuY3R1cmUgd2l0aGluIHRoZSBtb25hc3Rlcn +ksXG4i IC4KICAgICAgICAgICAgICAgICAgICAgICAiQnV0IGV4Y2VwdCBmb3IgdGhlIGV4aXQgdG +8gdGhl IGVhc3QsIGV2ZXJ5IGV4aXQgaXNcbiIgLgogICAgICAgICAgICAgICAgICAgICAgICJibG +9ja2Vk IGJ5IHNjYWZmb2xkaW5nLiBZb3UgbWlnaHQgYmUgYWJsZSB0byBzcXVlZXplXG4iIC4KIC +AgICAg ICAgICAgICAgICAgICAgICAidGhyb3VnaCB0byB0aGUgd2VzdGVybiBwYXJ0IG9mIHRoZS +BIYWxs d2F5LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgZXhpdHMgICA9Pi +B7CiAg ICAgICAgICAgIGVhc3QgICAgPT4gJ2hhbGw1JywKICAgICAgICAgICAgd2VzdCAgICA9Pi +BzdWIg ewogICAgICAgICAgICAgICAgcHJpbnQgIllvdSBoZWFyIGEgYm9vbWluZyB2b2ljZSBzYX +lpbmdc biI7CiAgICAgICAgICAgICAgICBwcmludCAiICoqVEhJUyBBUkVBIElTIE5PVCBBVkFJTE +FCTEUg SU4gVEhJUyBERU1PICoqXG4iOwogICAgICAgICAgICAgICAgc2xlZXAoNSk7CiAgICAgIC +AgICAg ICAgICBwcmludCAiWW91IGhhdmUgdGhlIGZlZWxpbmcgdGhhdCBzb21lb25lIGdyYWJzIH +lvdVxu IiAuCiAgICAgICAgICAgICAgICAgICAgICAiYnkgdGhlIGhhaXIgYW5kIHB1bGxzIHlvdS +BiYWNr Li4uXG4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICAjbm9ydGggICA9PiBzdWIgew +ogICAg ICAgICAgICAjICAgIHByaW50ICJTb21lb25lIHNheXMgJ0tOQUFBQUFSQ0snXG4iOwogIC +AgICAg ICAgICAjICAgICRsb2NhdGlvbiA9ICdyb2JvdHJvb20nOwogICAgICAgICAgICAjfSwKIC +AgICAg ICAgICAgI3NvdXRoICAgPT4gJ3JvYm90cm9vbScsCiAgICAgICAgfSwKICAgIH0sCiAgIC +AKICAg IAopOwoKIyBQdXQgc29tZSBzdHVmZiBpbiB0aGF0IHJvb20uIAolb2JqZWN0cyA9ICggIC +AgCiAg ICAndm90ZXMnICA9PiB7CiAgICAgICAgbG9jYXRpb24gPT4gJ25vd2hlcmUnLAogICAgIC +AgIHNo b3J0ICAgPT4gJ2Egc3RhY2sgb2Ygdm90ZXMnLAogICAgICAgIGxvbmcgICAgPT4gJ1lvdX +IgZGFp bHkgcXVvdGEgb2Ygdm90ZXMuIFVzZSB0aGVtIHdpc2VseS4nLAogICAgICAgIGFjdGlvbn +MgPT4g ewogICAgICAgICAgICB0YWtlICAgID0+ICdZb3UgcHV0IHRoZSB3b29kZW4gdGFibGUgaW +4geW91 ciBtYWdpYyBwb2NrZXQuJywKICAgICAgICAgICAgZHJvcCAgICA9PiAnWW91IGNhcmVmdW +xseSBw dXQgZG93biB0aGUgdGFibGUuJywKICAgICAgICB9LAogICAgfSwKICAgICdpbmZvc2NyZW +VuJyAg PT4gewogICAgICAgIGxvY2F0aW9uID0+ICdlbnRyYW5jZScsCiAgICAgICAgc2hvcnQgIC +A9PiAn YSB2ZXJ5IGxhcmdlIGluZm9zY3JlZW4nLAogICAgICAgIGxvbmcgICAgPT4gJ1RoaXMgaX +MgdGhl IHdvcmxkIGZhbW91cyAiVGhlIE1vbmFzdGVyeSBHYXRlcyIgaW5mb3NjcmVlbi4nLAogIC +AgICAg IGFjdGlvbnMgPT4gewogICAgICAgICAgICB0YWtlICAgID0+IHN1YiB7CiAgICAgICAgIC +AgICAg ICBwcmludCAiTm8hIFRoaXMgaXMgYSBVTiBQcm90ZWN0ZWQgSGlzdG9yaWNhbCBMYW5kbW +FyayFc biI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlYWQgICAgPT4gc3ViIHsKICAgIC +AgICAg ICAgICAgIHByaW50ICJUaGUgc2NyZWVuIGN1cnJlbnRseSByZWFkczpcblxuIjsKICAgIC +AgICAg ICAgICAgIHByaW50U09QVygpOwogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LA +ogICAg J21vZHVsZXMnICA9PiB7CiAgICAgICAgbG9jYXRpb24gPT4gJ29mZmljZScsCiAgICAgIC +Agc2hv cnQgICA9PiAnYSBidW5jaCBvZiBBQ01FIG1vZHVsZXMnLAogICAgICAgIGxvbmcgICAgPT +4gJ1Ro aXMgaXMgeW91ciB0cmVhc3VyZWQgc3RhY2sgb2YgdXNlZnVsbCBBQ01FIG1vZHVsZXMuJy +wKICAg ICAgICBhY3Rpb25zID0+IHsKICAgICAgICAgICAgdGFrZSAgICA9PiBzdWIgewogICAgIC +AgICAg ICAgICAgcHJpbnQgIllvdSBwdXQgdGhlIG1vZHVsZXMgaW50byB5b3VyIG1hZ2ljIHBvY2 +tldC5c biI7CiAgICAgICAgICAgICAgICAjIHJlcGxhY2UgIm1vZHVsZXMiIHdpdGggdGhlIGluZG +l2aWR1 YWwgbW9kdWxlcwogICAgICAgICAgICAgICAgJG9iamVjdHN7bW9kdWxlc30tPntsb2NhdG +lvbn0g PSAibm93aGVyZSI7CiAgICAgICAgICAgICAgICAkb2JqZWN0c3tibGVhY2h9LT57bG9jYX +Rpb259 ID0gImludmVudG9yeSI7CiAgICAgICAgICAgICAgICAkb2JqZWN0c3tidXRmaXJzdH0tPn +tsb2Nh dGlvbn0gPSAiaW52ZW50b3J5IjsKICAgICAgICAgICAgICAgICMgYWxzbywgbGV0IHRoZS +Bub3Rl IHdpdGggdGhlIHBpbiBhcHBlYXIKICAgICAgICAgICAgICAgICRvYmplY3Rze25vdGV9LT +57bG9j YXRpb259ID0gIm9mZmljZSI7CiAgICAgICAgICAgICAgICBwcmludCAiQSBzbWFsbCBub3 +RlIGZh bGxzIHRvIHRoZSBmbG9vci5cbiI7CiAgICAgICAgICAgICAgICBnYWluU2NvcmUoNSk7Ci +AgICAg ICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnbm90ZScgID0+IHsKICAgICAgIC +Bsb2Nh dGlvbiA9PiAnbm93aGVyZScsCiAgICAgICAgc2hvcnQgICA9PiAnYSBzbWFsbCBub3RlJy +wKICAg ICAgICBsb25nICAgID0+ICdBIHNtYWxsIHBpZWNlIG9mIHBhcGVyIHdpdGggc29tZSBudW +1iZXJz IG9uIGl0LicsCiAgICAgICAgdW5yZWFkICA9PiAxLAogICAgICAgIGFjdGlvbnMgPT4gew +ogICAg ICAgICAgICB0YWtlID0+ICJUYWtlbi4iLAogICAgICAgICAgICBkcm9wID0+ICJJZiB5b3 +UgaW5z aXN0Li4uIiwKICAgICAgICAgICAgcmVhZCA9PiBzdWIgewogICAgICAgICAgICAgICAgcH +JpbnQg Ijg5MDgxM1xuIjsKICAgICAgICAgICAgICAgIGlmKCRvYmplY3Rze25vdGV9LT57dW5yZW +FkfSkg ewogICAgICAgICAgICAgICAgICAgICRvYmplY3Rze25vdGV9LT57dW5yZWFkfSA9IDA7Ci +AgICAg ICAgICAgICAgICAgICAgZ2FpblNjb3JlKDIpOwogICAgICAgICAgICAgICAgfQogICAgIC +AgICAg ICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ3Njb3JlY2FyZCcgID0+IHsKICAgICAgIC +Bsb2Nh dGlvbiA9PiAnaW52ZW50b3J5JywKICAgICAgICBzaG9ydCAgID0+ICd5b3VyIHNjb3JlY2 +FyZCcs CiAgICAgICAgbG9uZyAgICA9PiAnVGhpcyBwbGFzdGljIGNhcmQgZGlzcGxheXMgeW91ci +BjdXJy ZW50IHNjb3JlIGFuZCBsZXZlbC4nLAogICAgICAgIGFjdGlvbnMgPT4gewogICAgICAgIC +AgICBy ZWFkID0+IHN1YiB7CiAgICAgICAgICAgICAgICBzaG93U2NvcmUoKTsKICAgICAgICAgIC +AgfSwK ICAgICAgICB9LAogICAgfSwKICAgICdibGVhY2gnICA9PiB7CiAgICAgICAgbG9jYXRpb2 +4gPT4g J25vd2hlcmUnLAogICAgICAgIHNob3J0ICAgPT4gJ3RoZSBcJ2JsZWFjaFwnIG1vZHVsZS +csCiAg ICAgICAgbG9uZyAgICA9PiAnQUNNRTo6QmxlYWNoIHJlbW92ZXMgYWxsIHRob3NlIHVuc2 +lnaHRs eSBjaGFyYWN0ZXJzLicsCiAgICAgICAgYWN0aW9ucyA9PiB7CiAgICAgICAgICAgIGRyb3 +AgICAg PT4gc3ViIHsKICAgICAgICAgICAgICAgIHByaW50ICJZb3UgbWlnaHQgbmVlZCB0aGF0IG +xhdGVy LlxuIjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdXNlICAgID0+IHN1YiB7CiAgIC +AgICAg ICAgICAgICBwcmludCAiKioqKioqKipkbyBzb21ldGhpbmcqKioqKioqKioqKipcbiI7Ci +AgICAg ICAgICAgIH0sCiAgICAgICAgfSwKICAgIH0sCiAgICAnYnV0Zmlyc3QnICA9PiB7CiAgIC +AgICAg bG9jYXRpb24gPT4gJ25vd2hlcmUnLAogICAgICAgIHNob3J0ICAgPT4gJ3RoZSBcJ2J1dG +ZpcnN0 XCcgbW9kdWxlJywKICAgICAgICBsb25nICAgID0+ICdBQ01FOjpCdXRGaXJzdCBsZXRcJ3 +MgeW91 IGRvIHNvbWV0aGluZyBidXQgZmlyc3Qgc29tZXRoaW5nIGVsc2UuJywKICAgICAgICBhY3 +Rpb25z ID0+IHsKICAgICAgICAgICAgZHJvcCAgICA9PiBzdWIgewogICAgICAgICAgICAgICAgcH +JpbnQg IllvdSBtaWdodCBuZWVkIHRoYXQgbGF0ZXIuXG4iOwogICAgICAgICAgICB9LAogICAgIC +AgICAg ICB1c2UgICAgPT4gc3ViIHsKICAgICAgICAgICAgICAgIHByaW50ICIqKioqKioqKmRvIH +NvbWV0 aGluZyoqKioqKioqKioqKlxuIjsKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgfS +wKICAg IAogICAgJ2Jvb2snICA9PiB7CiAgICAgICAgbG9jYXRpb24gICAgPT4gJ2ludmVudG9yeS +csCiAg ICAgICAgc2hvcnQgICA9PiAnYSBwb2NrZXQgYm9vaycsCiAgICAgICAgbG9uZyAgICA9Pi +AnSXRc J3MgdGhlIFBlcmwgcmVndWxhciBleHByZXNzaW9uIHJlZmVyZW5jZSBndWlkZSBwb2NrZX +QgYm9v ay4nLAogICAgICAgIHJlYWRjb3VudCA9PiAwLAogICAgICAgIGFjdGlvbnMgPT4gewogIC +AgICAg ICAgICB0YWtlICAgID0+IHN1YiB7CiAgICAgICAgICAgICAgICBwcmludCAiWW91IGp1bX +AgdXAg YW5kIGRvd24gaW4gam95IVxuIjsKICAgICAgICAgICAgICAgIGdhaW5TY29yZSgyKTsKIC +AgICAg ICAgICAgfSwKICAgICAgICAgICAgZHJvcCAgICA9PiBzdWIgewogICAgICAgICAgICAgIC +AgcHJp bnQgIllvdXIgbW9vZCBzdWRkZW5seSBjaGFuZ2VzIGZvciB0aGUgd29yc2UgOi0oXG4iOw +ogICAg ICAgICAgICAgICAgZ2FpblNjb3JlKC0yKTsKICAgICAgICAgICAgfSwKICAgICAgICAgIC +AgZHJv cCAgICA9PiAnWW91ciBtb29kIHN1ZGRlbmx5IGNoYW5nZXMgZm9yIHRoZSB3b3JzZSA6LS +gnLAog ICAgICAgICAgICByZWFkICAgID0+IHN1YiB7CiAgICAgICAgICAgICAgICAkb2JqZWN0c3 +tib29r fS0+e3JlYWRjb3VudH0rKzsKICAgICAgICAgICAgICAgIGlmKCRvYmplY3Rze2Jvb2t9LT +57cmVh ZGNvdW50fSA8IDUpIHsKICAgICAgICAgICAgICAgICAgICBwcmludCAiWW91IHN1ZGRlbm +x5IGZl ZWwgbXVjaCBzbWFydGVyLlxuIiwKICAgICAgICAgICAgICAgICAgICBnYWluU2NvcmUoNS +k7CiAg ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHByaW50ICJZb3 +Uga25v dyBpdCBieSBoZWFydC5cbiI7CiAgICAgICAgICAgICAgICAgICAgZ2FpblNjb3JlKDApOw +ogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ3 +NjcmVl bicgID0+IHsKICAgICAgICBsb2NhdGlvbiAgICA9PiAnb2ZmaWNlJywKICAgICAgICBzaG +9ydCAg ID0+ICdhIGNvbXB1dGVyIHNjcmVlbicsCiAgICAgICAgbG9uZyAgICA9PiAnVGhlIHNjcm +VlbiAo YSBiaWcgYXNzIDI1IiBDUlQpIGRpc3BsYXlzIGEgYmlnIHdhcm5pbmcgc2lnbiB3aXRoIG +JpZyBy ZWQgbGV0dGVycyEnLAogICAgICAgIGFjdGlvbnMgPT4gewogICAgICAgICAgICB0YWtlIC +AgID0+ CiAgICAgICAgICAgICAgICBzdWIgewogICAgICAgICAgICAgICAgICAgIHByaW50ICJPay +wgaSds bCB0cnkuLi5cbiI7IHNsZWVwKDIpOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbX +kgJGdy dW50IChxd1tHcnJyciBIcnJtbW1wZmZmIEhoaGhoaEhIaGhoaCBQZmZmZmZybW1tbCBLbm +5ubm5u bm5ubm91b3VvdW9vdW5ubm5dKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IC +IkZ3J1 bnQuLi4uLlxuIjsgc2xlZXAoMyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIC +AgICAg ICAgICAgIHByaW50ICJTb3JyeSwgaSdtIGp1c3Qgbm90IHN0cm9uZyBlbm91Z2ghXG4iOw +ogICAg ICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVhZCAgICA9PiAiSXQgc2F5czpcbiIgLg +ogICAg ICAgICAgICAgICAgICAgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iLg +ogICAg ICAgICAgICAgICAgICAgICAgICIqIFRZRSBCUk9LRSBUSEUgTU9OQVNURVJZISAqXG4iLg +ogICAg ICAgICAgICAgICAgICAgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iLg +ogICAg ICAgICAgICAgICAgICAgICAgICJcbiIuCiAgICAgICAgICAgICAgICAgICAgICAgIkFmdG +VyIGEg cmVjZW50IHVwZGF0ZSB0byB0aGUgbW9uYXN0ZXJpZXMgc291cmNlIGNvZGUsXG4gIi4KIC +AgICAg ICAgICAgICAgICAgICAgICAid2UgYXJlIHN1ZmZlcmluZyBzbGlnaHQgcHJvYmxlbXMgd2 +l0aCB0 aGUgc3BhY2V0aW1lXG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAiY29udGludXVtLi +BXaGVu IHlvdSBsZWF2ZSBhIHJvb20sIHlvdSBtaWdodCBiZVxuIiAuCiAgICAgICAgICAgICAgIC +AgICAg ICAgInRyYW5zcG9ydGVkIHRvIHNvbWV3aGVyZSB5b3UgZGlkbid0IGV4cGVjdCB0byBlbm +QgdXAu XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAiKFdoaWNoIGluY2x1ZGVzIHRoZSByb2 +9tIHlv dSBqdXN0IGxlZnQpLiBTeW1wdG9tcyBpbmNsdWRlLFxuIi4KICAgICAgICAgICAgICAgIC +AgICAg ICAiYnV0IGFyZSBub3QgbGltaXRlZCB0bzogaGVhZGFjaGVzLCBiZWVpbmcgc21hc2hlZC +BhZ2Fp bnN0XG4iIC4KICAgICAgICAgICAgICAgICAgICAgICAiYSB3YWxsLCBpcnJpdGF0aW9uLC +BkZWF0 aCwgY29uZnVzaW9uLCBkZWphIHZ1LCB1c2luZyBsZWV0c3BlYWtcbiIgLgogICAgICAgIC +AgICAg ICAgICAgICAgICJhbmQgYW4gdXJnZSB0byBwbGF5IHRoaXMgZ2FtZSBhZ2FpbiBhbmQgYW +dhaW4g YW5kIGFnYWluLlxuIiAuCiAgICAgICAgICAgICAgICAgICAgICAgIlxuIiAuCiAgICAgIC +AgICAg ICAgICAgICAgICAgIkZvciB5b3VyIHNhZmV0eSwgeW91ciBkb29yIGhhcyBiZWVuIGxvY2 +tlZCBi eSByZW1vdGUgY29tbWFuZC5cbiIsCiAgICAgICAgfSwKICAgIH0sCiAgICAKICAgICMgUH +V6emxl IGluIHJlYXBlcnMgb2ZmaWNlCiAgICAnY2FyZHMnICA9PiB7CiAgICAgICAgbG9jYXRpb2 +4gPT4g J2VuZG9md29ybGQnLAogICAgICAgIHNob3J0ICAgPT4gJ3BsYXlpbmcgY2FyZHMnLAogIC +AgICAg IGxvbmcgICAgPT4gJ0EgcGFjayBvZiBjYXJkcy4gWW91IHJlYWxseSBlbmpvaXkgYSBuaW +NlIGdh bWUgb2YgcG9rZXIuJywKICAgICAgICBhY3Rpb25zID0+IHsKICAgICAgICAgICAgdGFrZS +A9PiAi WW91IHBpY2sgdXAgdGhlIHBhY2sgb2YgcGxheWluZyBjYXJkcy4iLAogICAgICAgICAgIC +Bkcm9w ID0+ICJZb3UgcGxhY2UgdGhlIHBhY2sgb2YgY2FyZHMgb24gdGhlIGZsb29yLiIsCiAgIC +AgICAg ICAgIHVzZSA9PiBzdWIgewogICAgICAgICAgICAgICAgaWYoJGxvY2F0aW9uIG5lICdyZW +FwZXJv ZmZpY2UnKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIllvdSBzaHVmZmxlIHRoZS +BjYXJk cywgZ2V0IGJvcmVkIGFuZCBwdXQgdGhlbSBiYWNrLlxuIjsKICAgICAgICAgICAgICAgIH +0gZWxz aWYoJG9iamVjdHN7c2N5dGhlfS0+e2xvY2F0aW9ufSBuZSAicmVhcGVyb2ZmaWNlIikgew +ogICAg ICAgICAgICAgICAgICAgIHByaW50ICJUaGUgTm9kZVJlYXBlciBoYXMgbm90aGluZyBsZW +Z0IHRv IGxvb3NlLlxuIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIC +AgICAg cHJpbnQgIllvdXIgZnJpZW5kIE5vZGVSZWFwZXIgYWdyZWVzIHRvIGEgcXVpY2sgZ2FtZS +BvZlxu IiAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9rZXIuIE5vdCBmaXZlIG1pbn +V0ZXMg bGF0ZXIgeW91IGdldCBhIFJveWFsIGZsdXNoLlxuIiAuCiAgICAgICAgICAgICAgICAgIC +AgICAg ICAgICAiSGUgaGFuZHMgeW91IGhpcyBzY3l0aGUgYXMgY29sbGF0ZXJhbCB1bnRpbCBoZS +BjYW5c biIgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldCB0byBhbiBBVE0uXG4iOw +ogICAg ICAgICAgICAgICAgICAgIGdhaW5TY29yZSgxMyk7CiAgICAgICAgICAgICAgICAgICAgJG +9iamVj dHN7c2N5dGhlfS0+e2xvY2F0aW9ufSA9ICJpbnZlbnRvcnkiOwogICAgICAgICAgICAgIC +AgfQog ICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9LAogICAgJ3NjeXRoZScgID0+IHsKIC +AgICAg ICBsb2NhdGlvbiA9PiAncmVhcGVyb2ZmaWNlJywKICAgICAgICBzaG9ydCAgID0+ICdhIH +NjeXRo ZScsCiAgICAgICAgbG9uZyAgICA9PiAnVGhlIE5vZGVSZWFwZXJzIFNjeXRoZScsCiAgIC +AgICAg YWN0aW9ucyA9PiB7CiAgICAgICAgICAgIGRyb3AgPT4gc3ViIHsKICAgICAgICAgICAgIC +AgIGlm KCRsb2NhdGlvbiBuZSAncmVhcGVyb2ZmaWNlJykgewogICAgICAgICAgICAgICAgICAgIC +RvYmpl Y3Rze3NjeXRoZX0tPntsb2NhdGlvbn0gPSAkbG9jYXRpb247CiAgICAgICAgICAgICAgIC +AgICAg cHJpbnQgIlRoZSBzY3l0aGUgY2xhdHRlcnMgdG8gdGhlIGZsb29yLlxuIjsKICAgICAgIC +AgICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIk5vdCB1bnRpbCBOb2 +RlUmVh cGVyIHBheXMgaGlzIHBva2VyIGRlcHQgdG8geW91LlxuIjsKICAgICAgICAgICAgICAgIH +0KICAg ICAgICAgICAgfSwKICAgICAgICAgICAgdGFrZSA9PiBzdWIgewogICAgICAgICAgICAgIC +AgaWYo JGxvY2F0aW9uIG5lICdyZWFwZXJvZmZpY2UnKSB7CiAgICAgICAgICAgICAgICAgICAgJG +9iamVj dHN7c2N5dGhlfS0+e2xvY2F0aW9ufSA9ICJpbnZlbnRvcnkiOwogICAgICAgICAgICAgIC +AgICAg IHByaW50ICJZb3UgcGljayB1cCB0aGUgc2N5dGhlLlxuIjsKICAgICAgICAgICAgICAgIH +0gZWxz ZSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnQgIllvdXIgZnJpZW5kIE5vZGVSZWFwZX +Igd29u J3QgbGV0IHlvdSB0b3VjaCBpdC5cbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgIC +AgIH0s CiAgICAgICAgfSwKICAgIH0sCiAgICAncmVhcGVyJyAgPT4gewogICAgICAgIGxvY2F0aW +9uID0+ ICdyZWFwZXJvZmZpY2UnLAogICAgICAgIHNob3J0ICAgPT4gJ3RoZSByZWFwZXInLAogIC +AgICAg IGxvbmcgICAgPT4gJ1lvdXIgZnJpZW5kLCB0aGUgTm9kZVJlYXBlci4nLAogICAgICAgIG +FjdGlv bnMgPT4gewogICAgICAgICAgICB0YWxrID0+ICdIZSBpZ25vcmVzIHlvdSBjb21wbGV0bH +kgYW5k IGNvbnRpbnVlcyB0byBkcmluayBoaXMgbWFydGluaS4nLAogICAgICAgIH0sCiAgICB9LA +opOwoK c3ViIHByaW50U09QVyB7CiAgICAjIHNoYW1lbGVzc2x5IGNvcGllZCBmcm9tIGh0dHA6Ly +9wZXJs bW9ua3Mub3JnLz9ub2RlPTExNjc1OSAoYnkgc3VhdmVhbnQpCiAgICBteSBAeCA9ICgKIC +AgICAg ICBbJ1N1YmplY3Q6ICddLAogICAgICAgIFsnTmVlZCBoZWxwJywgJ05vb2IgcXVlc3Rpb2 +4nLCAn Q2FuIHlvdSBmaXggdGhpcz8nLCAnaG93IHRvIHN0YXJ0PycsICdORUVEIFVSR0VOVCBIRU +xQJ10s CiAgICAgICAgWyJcbiJdLAogICAgICAgIFsgJ0hlbGxvJywgJ0dyZWV0aW5ncycsICdIaS +csICcn LCAnV2hhdFwncyB1cCcsICdIb25vcmVkIE1vbmtzJywgJ1VtbW0nIF0sCiAgICAgICAgWy +JcbiJd LAogICAgICAgIFsKICAgICAgICAgICAgJ215IHRlYWNoZXIgYXNzaWduZWQgdXMgYScsCi +AgICAg ICAgICAgICdJIHdhcyB3b25kZXJpbmcsIGlmIEkgd2FudGVkIHRvLCBob3cgd291bGQgSS +B3cml0 ZSBhJywKICAgICAgICAgICAgJ0kgaGF2ZSBubyBjbHVlIHdoZW4gdG8gc3RhcnQsIEkgbm +VlZCB0 byB3cml0ZSBhJywKICAgICdVUkdFTlQhIFVSR0VOVCEhIFVSR0VOVCEhISBJIG5lZWVlZW +QgaGVs cCB3aXRoIHRoaXMuIENhbiBzb21lb25lIHRlbGwgbWUgaG93IHRvIHdyaXRlIG9yIGdpdm +UgbWUg c29tZSBjb2RlIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyBvZicKICAgICAgICBdLAogICAgIC +AgIFsn IGZpbml0ZSBhdXRvbWF0YS4gJywgJyBzdGF0ZSBtYWNoaW5lLiAnLCAnIHRva2VuIHBhcn +Nlci4g J10sCiAgICAgICAgWwogICAgIlRoZSByZXF1aXJlbWVudHMgY2FuIGJlIGZvdW5kIGF0IH +RoaXMg VVJMOlxuICBodHRwOi8vd3d3Lm15c2tvb2wuZWR1L2hvbWV3b3JrL2RvX2l0X3lvdXJzZW +xmL2Fz c2lnbm1lbnQxLmh0bWwiLAogICAgJ0l0IG11c3QgYmUgYWJsZSB0byBwcm9jZXNzIHVwIH +RvIF9f UkFORF9fIHN0YXRlcyBvdmVyIHRoZSBhbHBoYWJldCBpbmNsdWRpbmcgMSwzIGFuZCA3Li +BSdW4g dGhlc2UgdGVzdCBzdHJpbmdzIGFnYWluc3QgaXQuLi4gMTMzNyAzMTMzNyAxMzN0IGFuZC +BzdVgj ci4nLAogICAgJ0l0IG5lZWQgdG8gZG8gc29tZXRoaW5nIHdpdGggc3RhdGVzIGFuZCBhbi +BhbHBo YWJldCwgYnV0IElcJ20gbm90IGdvb2Qgd2l0aCBnZW9ncmFwaHkgc28gcmVhbGx5IG5lZW +QgaGVs cCEnLAogICAgICAgICAgICAnJywKICAgICdUaGUgY29kZSBJIGhhdmUgc3RhcnRlZCBsb2 +9rcyBs aWtlIHRoaXM6ICNpbmNsdWRlIDxzdGRpby5oPiAgdm9pZCBtYWluKCkgeyBwcmludGYoIk +hlbGxv IFdvcmxkXG4iKTsgfS4uLiBpZiBhbnlvbmUgY2FuIHRlbGwgbWUgd2hlcmUgdG8gZ28gZn +JvbSBo ZXJlIEkgd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0LicKICAgICAgICBdLAogICAgIC +AgIFsi XG4gICAgICAgICAgICAgICAgIl0sCiAgICAgICAgWwogICAgICAgICAgICAnVGhhbmsgWW +91JywK ICAgICAgICAgICAgJ09oLCBhbmQgSSBuZWVkIHRoaXMgYnkgRnJpZGF5JywKICAgICAgIC +AgICAg J1BsZWFzZSBwbGVhc2UgUExFRUVaIScsCiAgICAgICAgICAgICcnLAogICAgICAgICAgIC +AnVGhh bmsgeW91IGZvciB0aGlzIHdvbmRlcmZ1bCBzaXRlIScsCiAgICAgICAgICAgICdJIHNlbm +QgeW91 IHRoaXMgZmlsZSBpbiBvcmRlciB0byBoYXZlIHlvdXIgYWR2aWNlJywKICAgICAgICAgIC +AgJ2Ns dWVsZXNzIG5ld2JpZScsCiAgICAgICAgICAgICdwZWFybCB1c2VyJwogICAgICAgIF0sCi +AgICAg ICAgWyJcbiJdCiAgICApOwogICAgZm9yIChAeCkgewogICAgICAgIG15IEB5ID0gQCRfOw +ogICAg ICAgICRfID0gJHlbIHJhbmQgQHkgXTsKICAgICAgICBzL19fUkFORF9fL2ludChyYW5kKD +MwKSkv Z2U7CiAgICAgICAgcHJpbnQ7CiAgICB9CiAgICAKICAgIHJldHVybjsKfQoKCjE7Cg==

Just run the game as perl PMAdventures.pl chaos_in_the_monastery_demo.b64

If you want to see the game file in plain text, just remove the first line and run it through a base64 decoder of your choice.

Sorry for any bad spelling, broken formatting and missing code examples. During a slight disagreement with my bicycle (which i lost), i broke my left forearm near the elbow. I'm doing the best i can here...

Replies are listed 'Best First'.
Re: "Chaos in the Monastery" (First demo version)
by GrandFather (Saint) on Jul 06, 2012 at 05:26 UTC

    For "distribution" I'd just tack the game file to the end of the script after a __DATA__ line, omit the command line stuff and replace the file open/read/close with a <DATA> read. (In fact, that's just what I did to have a play.)

    True laziness is hard work
Re: "Chaos in the Monastery" (First demo version)
by choroba (Cardinal) on Jul 05, 2012 at 21:40 UTC
    It seems to work. Remninds me of the old good days, wasted playing similar games :-)
      The time was not wasted -- we played games on the machines to verify that the last batch of Vendor 'Maintenance Fixes' hadn't introduced a new bug! NetHack and Colossal Cave were our tools of choice.

      ----
      I Go Back to Sleep, Now.

      OGB

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlmeditation [id://980155]
Approved by Old_Gray_Bear
Front-paged by Arunbear
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (4)
As of 2024-03-28 07:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found