home *** CD-ROM | disk | FTP | other *** search
- How to Write an Adventure
- Part 5
-
- Object Manipulation
-
- Of all the things required of an Adventure program, the most fundimental
- is the ability to manipulate objects in the environment. This is facilitated
- by two major routines... those triggered by the verbs "GET" and "PUT".
- The L(X) array determines in what room an object is placed. If L(1)=1
- then object #1 is located in Room 1 and so on. By simply changing the number
- in the propper L(X) element, we can easily change the location of the object.
- Let's say you want to GET KNIFE. The command parser determines that GET
- and KNIFE are both recognized words. The V value directs the program to a
- particular line of the program (Say 3000) where the GET routine is located.
- Let's see what happens next:
- At line 3000 we must first determine if the player is already holding the
- knife. If KNIFE was noun number 7, then N (noun counter) is equal to 7. (This
- was assigned in the command parser... remember?) So how do we know what the
- player is holding? Well, array L(X) holds the location of the object. If we
- assign the location -1 to anything being held, then there can never be any
- conflicts with where other things are located, right? So that is what we do.
- This means that to check and see if we are holding the object, we just have to
- check and see if L(N)=-1:
-
- 3000 IF L(N)=-1 THEN PRINT"You already have the ";N$;".":GOTO 1000
-
- If the OBJECT LOCATION is not -1, the test fails, and control falls to
- 3010 where we will test to see that the mentioned object can indeed be gotten.
- There are some objects that are either too large to be moved, or objects that
- need the presence of another object to move them. You can "filter out" these
- objects with a test like the one in 3010:
-
- 3010 IF N>28 THEN PRINT"The ";N$;" is too heavy to move.":GOTO 1000
-
- In this example, any noun with a count of less than 28 can actually be
- picked up. All nouns that are larger than 28 are considered to heavy to move.
- Next, we must check to see that the object mentioned is really in the
- room with us. This is also easy to check. Our current location is contained in
- variable L:
-
- 3020 IF L(N)<>L THEN PRINT"I don't SEE the ";N$;" here.":GOTO 1000
-
- L(N) contains the number of the room where the object IS, and L is OUR
- location.
- The case will arise when the posession of one object is necessary before
- another object can be gotten. The code in 3030 is an example:
-
- 3030 IF L(19)<>-1 AND N=20 THEN PRINT"I can't do that YET!":GOTO
- 1000
-
- In other words, if object 19 is not being held, then object 20 cannot be
- gotten. This can be turned around to check for ANYTHING, like a certain object
- being in another room or the like. You can cram as many of these tests in as
- you like (and have memory to accomodate!).
- Finally, you come to the moment of truth... All of the tests have been
- passed, and it's time to get the object:
-
- 3040 L(N)=-1:PRINT N$;" taken.":GOTO 1000
-
- Pretty slick, NO?
- PUTTING or DROPPING an object is even easier. The only thing you really
- have to check on is, "Do I HAVE the object". If you don't, say so. If you do,
- assign L(N)=L...that is...put the ojbect back into a room:
-
- 3100 IF L(N)<>-1 THEN PRINT"You don't HAVE the ";N$:GOTO 1000
- 3110 L(N)=L:PRINT N$;" dropped.":GOTO 1000
-
-
-
- ROOM ZERO
-
- There is a special room that we have not discussed yet, and this is as
- good a place to talk about it as any. That is Room Zero. You never assigned a
- room zero in your planning, but it is there. That is because all of your
- arrays begin with the "0" subscript. This room is a "holding tank" or "staging
- platform" for objects that are not needed until later in the adventure, or for
- objects that must change their form. It's easy to transfer objects too and
- from room Zero. Let's say that waving a wand changes a statue (N(12)) into a
- princess (N(13)). After you do all your testing to be sure the wand is there
- etc the code to do the change would look like this:
-
- 3240 L(12)=0:L(13)=L:PRINT"The wand did something!":GOTO 1000
-
- Just swap the objects out!!!!!! This is handy also for lighting lamps and
- so forth. Room Zero is also the place you send tasty food that get's eaten, or
- treasures that get stollen that you never plan to return to the adventurer.
-
-
- MOVING FROM ROOM TO ROOM
-
- You MUST have a way to get from one room to another. Usually you GO NORTH
- or whatever. The actual movement routine uses the D(X,Y) array to determine if
- the requested move is legal. This routine looks like this:
-
- 5000 IF D(N,L)<>0 THEN L=D(N,L):GOTO 1000
- 5010 PRINT"You cannot go in that Direction":GOTO 1000
-
- The D(X,Y) array contains the numbers of all the rooms that canned with
- the current room, room L. If the direction is zero, then no exit exists in
- that direction. If there IS an exit, then the room number in that array
- element becomes the new L number.
-
-
- HELP
-
- Many adventures offer hints to the adventurer. This is usually handled
- along the lines of "if he's in room # so and so, tell him this:
-
- 11000 ON L GOTO 11001,11002,11003,11004:GOTO 11005
- 11001 PRINT"Try EXAMINING THINGS":GOTO 1000
- 11002 PRINT"The wall appears climbable":GOTO 1000
- 11003 PRINT"Leave the apples alone!":GOTO 1000
- 11004 PRINT"Try pushing the button":GOTO 1000
- 11005 PRINT"Gee, I'm as confused as you are!":GOTO 1000
-
- Depending on the room number, the adventurer gets a meaningful message.
- If there is no helkp for a room, the routing should be to line 11005 where a
- general purpose "shrug" is displayed.
-
-
- EXAMINE
-
- Examine is handled just like Help. It tells more about a particular
- object. The only difference is, instead of keying on the room number, we must
- key first on the object, and then check to see if it is
- A) in the room
- B) on the adventurer
- Given an afirmative to either case, we display the help:
-
- 12000 IF L(N)<>L AND L(N)<>-1 THEN PRINT "I don't see it!": GOTO
- 1000
- 12010 IF N=8 THEN PRINT"It's an old rusted key!":GOTO 1000
-
-
- In turn, all items can be so handled, and in writing all of these
- routines, the adventure is fleshed out.
-
- The final chapter of our little tutoral will deal with enhancements, like
- game saves, inventories, and shorthand commands.
-
-
-
-
-
-
-
-
-