1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
sub outsideRoom () {
startMusic ('outside/music.xm', 0, 0);
addOverlay ('outside/room.tga', 0, 0);
setFloor ('outside/room.flo');
setScale (200, 150);
setZBuffer ('outside/room.zbu');
addScreenRegion (notice, 140, 272, 165, 299, 140, 300, NORTH);
addScreenRegion (exit, 52, 284, 96, 358, 83, 344, WEST);
addCharacter (duck, 200, 350, costume (
anim ('outside/duck.duc', 0, 1, 2, 2, 1, 0, 3, 3),
NULL,
anim ('outside/duck.duc', 4, 5, 5, 4, 3, 4, 3, 5, 4, 3)
));
if (lastRoom == insideRoom) {
addCharacter (ego, 34, 346, makeEgoAnim ());
moveCharacter (ego, 83, 344);
} else {
addCharacter (ego, 420, 400, makeEgoAnim ());
say (ego, "Here we are, then... the source code for the verb coin example!");
say (duck, "Does that mean people can change what I say?");
say (ego, "Er, I suppose so...");
say (duck, "Uh-oh. I have a bad feeling about this.");
}
}
objectType exit ("tunnel") {
event oneCursor = arrowEast;
event onlyAction {
if (! beenInRoom) {
say (ego, "This tunnel is here to show off object types with only one action.");
say (ego, "As you probably noticed, clicking it doesn't make the verb coin appear.");
}
forceCharacter (ego, 34, 346);
gotoRoom (insideRoom);
}
}
objectType notice ("notice") {
event lookAt {
say (ego, "It says \"WELCOME TO SLUDGE VERSION 1.3\".");
say (ego, "It goes on for paragraphs. It's all very dull and boring.");
}
event pickUp {
say (ego, "Why would I need to carry a notice around with me?");
}
}
var duckCounter = 0;
objectType duck ("orange duck") {
speechColour 255, 150, 0;
event lookAt {
say (ego, "I hate it when lazy coders just reuse graphics from their other games.");
turnCharacter (ego, SOUTH);
say (ego, "I'm brand new, of course. Ahem.");
}
event talkTo {
# If we've never spoken to the duck before, let's have a little
# automated bit first...
if (duckCounter == 0) {
say (ego, "Quack?");
say (duck, "Ooh, you speak Duck?");
say (ego, "Not really. That's the only phrase I know.");
duckCounter = 1;
}
# We want to do this again and again and again...
loop {
# Build up a set of choices, based on what we've said so far...
if (duckCounter == 1) addSpeechChoice ("So what are you doing here?", 1);
if (duckCounter > 1) addSpeechChoice ("Tell me about this \"Out Of Order\" thing, then.", 2);
if (duckCounter == 2) addSpeechChoice ("I don't really go for computer games much.", 3);
# These are different lines of text, but they both have the same effect... a return value of 4
if (duckCounter == 3) addSpeechChoice ("You know, you're very irritating. Very.", 4);
if (duckCounter == 4) addSpeechChoice ("Who am I kidding? You ARE irritating.", 4);
# This one is always added
addSpeechChoice ("Well, I've got stuff to do...", 0);
# Now pause until the player picks one
var reply = getSpeechChoice (ego);
# Which one did they pick?
if (reply == 0) {
# This was the QUIT choice, in case you hadn't guessed
say (duck, "In this demo? You'll be lucky!");
# So now we want to escape from the function...
return;
} else if (reply == 1) {
say (duck, "Waiting for \"Out Of Order\" - sounds like it's going to be great.");
say (ego, "What's that? Never heard of it.");
say (duck, "Some computer game. I've heard I'm going to make a small cameo.");
say (ego, "Wow! A star is... er, hatched.");
duckCounter = 2;
} else if (reply == 2) {
say (duck, "What about it?");
# Let's have another interactive bit here
addSpeechChoice ("Does it feature better conversations than this?", "Are you saying I'm lousy company?");
addSpeechChoice ("Is it going to be huge?", "It consists of 30 rooms so far... huge enough for you?");
addSpeechChoice ("Er... nothing. it doesn't matter.", "OK. Whatever.");
# In each case, the value returned from getSpeechChoice is the duck's reply
# So let's just make the duck say whatever it returns...
say (duck, getSpeechChoice (ego));
# OK, so that little interactive bit is always the same, but with a few if statements
# it could change depending on what the player has picked before, or even depending on
# things in other parts of the game...
} else if (reply == 3) {
say (duck, "You don't know what you're missing.");
say (ego, "Oh yes I do. RSI.");
say (duck, "Ah yes, text adventures and Super Mega Wonder Hurdler 1985.");
say (duck, "Those were the days...");
duckCounter = 3;
} else if (reply == 4) {
say (duck, "What? WHAT?");
# OK, this bit's crowbarred into here to demonstrate choices which the ego
# doesn't automatically say... in this case, the return value is what the
# ego should say instead.
addSpeechChoice ("I said, YOU'RE VERY IRRITATING.", "I said...");
addSpeechChoice ("Jeez! Are you deaf as well as clinically insane?", "Jeez! Are you...");
addSpeechChoice ("A few spring rolls, though... soy sauce... noodles...", "A few spring...");
# With the parameter NULL, getSpeechChoice returns without making anything talk
say (ego, getSpeechChoice (NULL));
say (duck, "Grrrr!");
say (ego, "Yow!");
say (ego, "Nice ducky. Good ducky. Only kidding.");
duckCounter = 4;
}
}
}
event walkToPerson {
moveCharacter (ego, 180, 370);
turnCharacter (ego, NORTH);
}
}
|