!***********************************************
!* *
!* This port by Adam Biltcliffe *
!* *
!* You may freely distribute this in any way *
!* provided its origin is not misrepresented *
!* *
!***********************************************
Global thirst;
Global canteen;
Global dist;
Global pdist;
Global bflag;
Global camel;
Global pdelay;
Global deadflag;
Array input -> 3;
[ ResetGameState;
thirst=4; ! Commands until dying of thirst
canteen=6; ! Drinks left
dist=0; ! Distance travelled
pdist=0; ! Distance pygmies travelled
bflag=0; ! Berber flag
camel=0; ! Camel stress
pdelay=0; ! Pygmy delay
deadflag=0;! End main loop flag
];
[ Main quitflag;
print " CAMEL^ Creative
Computing^ Morristown, New Jersey^^^";
print "Originally by the Heath Users Group. Ported to the^z-machine
by Adam Biltcliffe.^^Would you like instructions? ";
if (Yes()) {
print "^^Welcome to CAMEL. The object is to travel^200 miles across
the great Gobi desert.^A tribe of knock kneed pygmies will be
chasing you.^You will be asked for commands every so often.
^^^C O M M A N D S :
^#1 Drink from your canteen
^#2 Ahead, moderate speed
^#3 Ahead, full speed
^#4 Stop for the night
^#5 Status check
^#6 Hope for help^^^^
^You have one quart of water which will last you six drinks.
^You may renew your water supply completely at an oasis.
^You get half a quart if found by help.
^If help does not find you after command six, you lose.^";
}
quitflag=0;
while (quitflag==0) {
print "Good luck and good camelling !!^You are in the middle of the
desert at an oasis.^";
ResetGameState();
while (~~deadflag) {
if (dist>199) deadflag=2; else {
if (UpdateThirst()) {
MovePygmies(); ! In the original, the pygmies do not move
! while you are captive, but the text
! suggests that they are supposed to
if (~~deadflag) {
if (bflag) BerberTurn(); else NormalTurn();
}
}
}
}
switch (deadflag) {
1: print "You died in the desert.^";
switch (random(5)) {
1: print "The National Camels' Union is not attending
your funeral !!!^";
2: print "Your body was eaten by vultures and imported
cannibals !!!^";
3: print "The local sheik now uses your skull for a
change purse !!!^";
4: print "People with little intelligence should stay
out of the desert.^";
5: print "Turkeys should fly, not ride camels !!!!!!!^";
}
2: print "You win, a party is being given in your honour .......
^....... the pygmies are planning to attend .......^";
}
print "^^Want a new camel and a new game? ";
if (~~Yes()) { quitflag=1; "-----------------^ CHICKEN
^-----------------"; }
}
];
[ UpdateThirst;
thirst--;
if (thirst==1)
print "----------W A R N I N G---------- Get a drink^";
if (thirst<0) {
print "You ran out of water ..... sorry, chum !!!^";
deadflag=1; rfalse;
}
rtrue;
];
[ MovePygmies;
pdelay++;
if (pdelay>3) {
pdist=pdist+random(10)+1; ! Not quite the same as the
! original, but close enough
if (pdist>=dist) {
print "The pygmies have captured you. Camel and
people soup is^their favourite dish !!!!!^";
deadflag=3;
}
}
];
[ BerberTurn cmd;
print "#7 Attempt an escape^#8 Wait for payment^";
cmd=0; while (cmd==0) {
print "Your sub-command? ";
cmd=GetChar();
switch(cmd) {
'1': TakeDrink(); if (~~deadflag) BerberTurn(); ! The original
! didn't allow this, but I think it's only fair
'7': Escape();
'8': Wait();
}
}
];
[ Escape;
if (random(2)==1) {
bflag=0; "Congratulations, you successfully escaped !!!!";
}
deadflag=1; "You were mortally wounded by a pig stabber while escaping.";
];
[ Wait;
if (random(4)==1) {
bflag=0; "Your ransom has been paid and you are free to go.";
}
"The local sultan is collecting ....... just wait .......";
];
[ NormalTurn;
if (pdelay>3) print "The pygmies are ", dist-pdist, " miles behind you.^";
print "You have travelled ", dist, " miles altogether.^";
DoCommand();
];
[ DoCommand cmd;
cmd=0; while (cmd==0) {
print "What is your command? ";
cmd=GetChar();
switch(cmd) {
'1': TakeDrink(); if (~~deadflag) DoCommand();
'2': AheadModerate();
'3': AheadFull();
'4': RestNight();
'5': StatusCheck(); DoCommand();
'6': HopeForHelp();
}
}
];
[ TakeDrink;
canteen--;
if (canteen<0) {
thirst=0; UpdateThirst();
} else {
thirst=4;
"Better watch for an oasis !";
}
];
[ AheadModerate;
camel++;
if (camel>7) KillCamel(); else {
DoEvent();
if (~~bflag) {
dist=dist+random(10)-1;
"Your camel likes this pace.";
}
}
];
[ AheadFull;
camel=camel+3;
if (camel>7) {
KillCamel();
} else {
DoEvent();
if (~~bflag) {
dist=dist+(2*(random(10)-1));
"Your camel is burning across the desert sands.";
}
}
];
[ RestNight;
camel=0;
"Your camel thanks you !";
];
[ StatusCheck;
! Note that this no longer does an implicit drink as the original did
print "Your camel has ", 7-camel, " good days left.^You have ", canteen,
" drinks in your canteen.^You can go ", thirst, " commands without
drinking.^";
];
[ HopeForHelp;
if (random(10)==1) {
thirst=4; canteen=3;
"Help has found you in a state of unconsciousness.";
} else deadflag=1;
];
[ KillCamel;
deadflag=1;
"You dirty rapscallion ! You ran your poor camel to death !!";
];
[ DoEvent;
switch(random(1000)) {
1 to 50: Capture();
51 to 240: Oasis();
241 to 277: Sandstorm();
278 to 312: Injury(); ! Yes, this is 0.01% less likely than in
! the original. Sorry.
}
];
[ Capture;
print "Wild berbers hidden in the sand have captured you.^Luckily the
local sheik has agreed to their ransom-^demands ....... but
....... watch for the pygmies !!!^You have a new choice of
sub-commands:^";
bflag=1;
BerberTurn();
];
[ Oasis;
thirst=4; canteen=6;
"You have arrived at an oasis -------- Your camel is^filling your canteen
and eating figs.";
];
[ Sandstorm;
print "You have been caught in a sandstorm ..... good luck !^";
dist=dist+random(19)-10;
print "Your new position is ", dist, " miles so far !^";
];
[ Injury;
pdist++;
"Your camel hurt his hump.^Luckily the pygmies were footweary !!!";
];