Sample Code From Text-Adventure Game Platforms
secretGeek .:dot Nuts about dot Net:.
home .: about .: sign up .: sitemap .: secretGeek RSS

Sample Code From Text-Adventure Game Platforms

I'm using the occasional snippet of spare time I don't have to write a 'platform' for constructing Wiki-based Adventure Games (more). It's a kind of -- and I shiver in horror at the term -- a Domain Specific Language.

So, when you're inventing a Domain Specific Language for writing Wiki-based Adventure Games... I guess it's a good idea to acknowledge:

a) You're gonna suck at it and

b) it's been done before.

So, I guess it's time to consult the classics.

Thanks to a post from _why, i've learnt about Scumm, the Script Creation Utility for Maniac Mansion.

Here's a snippet of ScummC provided by _why:

object carolObj {
name = "Indigenous lifeform";
verb(int vrb,int objA,int objB) {
case TalkTo:
zobTalkToCarol();
return;
case LookAt:
if( ! knowsCarol ) {
egoSay("A large carbon based mammal, it seems.");
waitForMessage();
}
else {
egoSay("It is Carol, one of the local lifeforms.");
waitForMessage();
}
return;
case Smell:
egoSay("This creature has an overwhelming pungent smell.");
return;
case Move:
egoSay("The lifeform is surprisingly sturdy, I don't believe I can use force.");
return;
}
}

Well that's very nice.

Sierra

Now, how about that megalith of adventure games from the 1980s, Sierra Online?

Sierra used an interpreter called AGI (adventure game interpreter) to make such classics as Leisure Suit Larry and King's Quest.

(Leisure Suit Larry is a kind-of formative game for my entire character and personality. In case you didn't realise this, I thought I'd spell it out now.)

Here's a code snippet:

if (said("look","door")) {
if (posn(ego,0,120,159,167)) {
print("These doors are strongly built
to keep out unwanted visitors.");
}
else {
print("You can't see them from
here.");
}
}

(example from: Making adventure games with AGI)

GrimE

GrimE is a game engine written in scripting language LUA, touted as "the successor to SCUMM, preserving some of that engine's features" (according to the big 'pedia.)

I haven't found a sample or a good starting resource -- so if you find one, please send it along.

Agast

Also under the wikipedia category of Adventure Game Engines, I found AGAST

Here's a morsel of agast scripting...

"For example, here's an event that is triggered when the player looks at his goldenmop:

event Lookat <> GoldenMop
{
EGO:
"It's my trusty golden mop."
"I got that years ago for saving the galaxy."
}

(later)

var TalkedToGiantLizard;

event Talkto -> GiantLizard
{
if TalkedToGiantLizard {
"Since he won't talk to me, I won't talk to him either."
}
else {
"Hi up there, Gozira!"
delay 10;
"He probably can't hear me, or he doesn't speak English."
TalkedToGiantLizard = true;
}
}

Wintermute

Wintermute (from dead-code) -- how awesome.

Here's an example of scripting for wintermute, (taken from here)

on "first"
{
Game.Msg("Do something after the first choice.");
}

on "second"
{
Game.Msg("Do something after the second choice.");
}

on "third"
{
Game.Msg("Do something after the third choice.");
dlgObject.removeIcon("second");
}

ZIL

Zil? Zork Implementation Language of course! What else would you implement Zork in?

And it's time for lisp-like languages to bring a close to this article ;-)

Here's what the definition of the Living Room from Zork I looks like:

<ROOM LIVING-ROOM
(LOC ROOMS)
(DESC "Living Room")
(EAST TO KITCHEN)
(WEST TO STRANGE-PASSAGE IF CYCLOPS-FLED ELSE
"The wooden door is nailed shut.")
(DOWN PER TRAP-DOOR-EXIT)
(ACTION LIVING ROOM-F)
(FLAGS RLANDBIT ONBIT SACREDBIT)
(GLOBAL STAIRS)
(THINGS <> NAILS NAILS-PSEUDO)>

(from 'Zil [pdf]')

(And how's this for an intriguing name for a pdf [from the ZIL entry at wikipedia] "How to Fit a Large Program Into a Small Machine")

Okay. That's about all I wanted to share. I think the similarities and differences are telling. You see common concepts like "ego" and character manipulation. You see different styles.

I'd like to make some pompous over-reaching statement that text adventure games encompass every deep complex issue of software engineering. That a platform that allows efficient construction of games would need to be a shining example of superb software craftsmanship, with all the right buzzword compliance to drag our industry into a new era of productivity.

But I think Douglas Crockford (inventor of Json) distills the soul of a great computer game, in his very entertaining article 'The Expurgation of Maniac Mansion, :

  1. meet people,
  2. kill people,
  3. take their money,
  4. buy more weapons.

And, indeed, This is the chief pattern I want to enable with my wiki adventure game. Mercenary. Ruthless. Vile. And most of all: good clean fun.

My head is sore. I must lie down now.





'Don2' on Fri, 02 May 2008 11:53:42 GMT, sez:

your indenting is all screwed up in places!

you should've used syntax highlighting to make it all much clearer.



'lb' on Fri, 02 May 2008 11:56:02 GMT, sez:

Don2 -- I don't have time for that kind of detail.

And there's no imaginable tool that would correctly implement syntax highlighting for all those crazy little languages.



'Wunar' on Fri, 02 May 2008 16:16:18 GMT, sez:

I'm a bit surprised that you missed "Inform 7", in which adventures are written in awesomely sweet and smooth natural language, and looks much more useful than (slightly dreadful) coder-invented line noise ;)

So, check it out.



'lb' on Sat, 03 May 2008 03:05:59 GMT, sez:

@Wunar -- I've got Inform 7 on my computer and I've tried writing in it a few times. It really annoys me actually -- i find the 'natural' language is very stilted to write in: it promises flexibility but is really less flexible than most programming languages.



'Don2' on Sat, 03 May 2008 03:40:26 GMT, sez:

EPIGRAMS IN PROGRAMMING (from Alan J Perlis), number 93:

"When someone says 'I want a programming language in which I need only say what I wish done,' give him a lollipop."



'lb' on Sat, 03 May 2008 03:41:43 GMT, sez:

Nice Don2, nice. I prefer this quote --

John McCarthy (from http://en.wikiquote.org/wiki/John_McCarthy) --

"It's possible to program a computer in English. It's also possible to make an airplane controlled by reins and spurs."



'Don2' on Sat, 03 May 2008 03:58:47 GMT, sez:

How about this:

"Projects promoting programming in natural language are intrinsically doomed to fail."
(Edsger Dijkstra)



'Wunar' on Sun, 04 May 2008 02:37:44 GMT, sez:

Quotes, eh?

“Those who say it can't be done are usually interrupted by others doing it.”
James Arthur Baldwin.



'Janeway' on Sun, 04 May 2008 10:18:09 GMT, sez:

@Wunar -- he linked to Inform 7 in the previous articles




name


website (optional)


enter the word:
 

comment (HTML not allowed)


All viewpoints welcome. But the right to delete any post for any reason is reserved. Don't make me do it. Comments may be republished, emailed to your loved ones or printed and used as toilet paper. Who reads this legal bit anyhow?

TimeSnapper is a life analysis system that stores and plays-back your computer use. It makes timesheet recording a breeze, helps you recover lost work and shows you how to sharpen your act.

TimeSnapper won last year's Developer Competition at Larkware.com, and is used by over 10,000 people.

Articles

What To (Really) Do If You Find Out Your Parents Are Using Vista (redux) What To (Really) Do If You Find Out Your Parents Are Using Vista (redux)
What To Do If You Find Out Your Parents Are Using Vista What To Do If You Find Out Your Parents Are Using Vista
Sample Code From Text-Adventure Game Platforms Sample Code From Text-Adventure Game Platforms
TimeSnapper 3.0 -- an interactive, bubbling cauldron of possibilities TimeSnapper 3.0 -- an interactive, bubbling cauldron of possibilities
The laptop compubody sock The laptop compubody sock
Everything that's bad for you is suddenly good for you! Everything that's bad for you is suddenly good for you!
Everything I know about Code Reviews I learnt from Star Wars (and JCooney) Everything I know about Code Reviews I learnt from Star Wars (and JCooney)
Syntax highlighting of strings Syntax highlighting of strings
Google AppEngine: evil virus or viral evil? Google AppEngine: evil virus or viral evil?
Workflow software: I'm calling the bluff. Workflow software: I'm calling the bluff.

Archives .: secretGeek :: Complete Archives :.
25 steps for building a Micro-ISV 25 steps for building a Micro-ISV
3 minute guides -- babysteps in new technologies: powershell, JSON, watir, F# 3 Minute Guide Series
Top 10 SecretGeek articles Top 10 SecretGeek articles

Downloads

TimeSnapper -- Automated Screenshot Journal TimeSnapper.com    
Version 2.5: with password protection

ShinyPower (help with Powershell) ShinyPower
Now at CodePlex

Next Action NextAction
Managing the top of your mind



[powered by Google] 

Thai Erawan, Brisbane Restaurant, delicious thai food in paddington Thai Erawan, Brisbane Restaurant
World's Simplest Code Generator (html edition) World's Simplest Code Generator
Gradient Maker -- a tool for making background images that blend from one colour to another. Forget photoshop, this is the bomb. Gradient Maker
How to be depressed How to be depressed
You are not inadequate.



Recommended Reading

The Best Software Writing I
The Business Of Software (Eric Sink)


Recommended blogs

Jeff Atwood
Reginald Braithwaite
Joseph Cooney
Phil Haack
Scott Hanselman
Julia Lerman
Joel Pobar
Eric Sink
Joel Spolsky
Des Traynor

Aggregated Links

programming.reddit.com
dzone
dot net kicks

Human Link Machines

interesting finds
a continuous learner's weblog
arjan's world
n links today
new and notable
morning coffee
learning .net
weekly link post
(my del.icio.us account)

LinkedIn profile
 
home .: about .: sign up .: sitemap .: secretGeek RSS .: © Leon Bambrick 2006 .: privacy

home .: about .: sign up .: sitemap .: RSS .: © Leon Bambrick 2006 .: privacy