TADA Background Information - Parts IV and V
Putting pen to paper, scratching away in a torch-lit cloister, rough-hewn oaken planks support my tired body and spirit. I have a message to get to the masses. Pondering what that is, I realize it's been two revolutions around Sol since my last update.
Mysteries Abound
I'm still trying to figure out exactly in what way the programmer encoded room description information on the original disk images—I'm using faddenSoft's CiderPress tool to look at the information. I do have the full maps (including room description text) for levels one through six. Level seven has yet to be decoded. But this makes my job easier, thanks to Trajan. I went ahead and moved my original level one map to level eight, assuming I'll fill in information about level seven ("The House") one day.
Update: In the GBBS Pro documentation (I forget exactly where) it mentions text is compressed as it is written to disk.
I finally found an issue of Compute that had a program which effectively lets you split your BASIC programs into modules, as long as you keep the main module of the program in memory at all times, which are lines 1000-, and sub-modules which are lines 20-999—rather like Image BBS's +.files. If there's enough interest, the original intent of this game was to port it to Image BBS to give it "single-player/multi-user" capability, but it's obviously important to get the game working in BASIC first. Maybe I'll flesh out the "standalone" version to function as a editor and client, allowing the player to create things offline and upload them to the BBS later. That would be cool, having user-created maps.
[]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=[]
IV: Tools I Use
During the foreseeable future, the ANSI menu will likely be the most up-to-date; TheDraw (an DOS ANSI art editor) has this awesome block move feature that makes juggling menu commands a joy.
Rod Gasson's Browser 128 is handy for viewing the resulting work of art on my C128.
EditPad Pro for Windows has similar features for plain text files. I can use it to update my ASCII screens too, or use Craig Bruce's ZED on it.
Jeff Hoag's excellent C64List is an invaluable tool for putting together programs.
[]=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=[]
V. Developer's Notes, Basic Brain Dump
Having gotten on to IRC a few years ago, I joined channel #c-64, and shortly thereafter, #c64friends for Saturday night Commodore chat. It's been worth it, forging several long-standing friendships with folks there.
Between November 2006 and the beginning of 2007, I managed to write an assembly language INSTRing routine which naturally operates much more quickly than my BASIC version. There's a slight bug though; it returns the position of the match in I% just fine, after being called thusly:
10 SYS49152,"source string","match string"
but it will return the last position of the match on a multiple-character match. Whoops! I guess I should be glad it works at all, assembly numbskull that I am...
I think rather than trying to code the %-style substitutions in assembly, I'll try for just a simple SEQ file reader to start, maybe add word-wrap or paging later on.
What do I mean by %-style substitutions? Gleaned from both DOS batch files and Internet MUCKs (an undeniably large part of my online time), they work something like this:
Substitution |
Represents: |
%a (absolute) |
name's, his, hers, its |
%s (subjective) |
name, he, she, it |
%o (objective) |
name, him, her, it |
%p (possessive) |
name's, his, her, its |
%r (reflexive) |
name, himself, herself, itself. |
%n (player's name) |
name |
There are some additional substitutions I thought of: |
|
%f (weapon's "sound effect") - |
THUNK, CLANG, etc. [based on weapon class] |
%h (horse's name) |
[Oh, I've been riding on a horse with no name...] |
%m |
(monster's name) |
%w |
(player's weapon) |
%1 |
(ally 1's name) |
And ad infinitum. Beats string-splicing and garbage-collection. Ergo, this:
%n swings %p %w at the %m! %F - %s hits! The %m is vanquished!
could conceivably expand into something along these lines:
RATH swings his TWO-HANDED SWORD at the BASILISK! THUNK! - he hits! The BASILISK is vanquished!
August 1, 2004
Changed the terminology of "Builders" to "Architects." It sounds more "period."
TRACK will work on level 1-6, since maps are nice and square.
-
I've added MORE for controlling scrolling, hypothesizing this should be separate from Expert Mode. Except it's not perfect, it doesn't really count lines, it just gets called after a screen full of text (typically 25 lines) gets dumped onscreen. I don't have a counter that count words and stuff. I need a hook into the PRINT command, I suppose.
- I've thought about PUT
IN and TAKEFROM commands... how else will you put things in saddlebags? GIVETO HORSE just sounds kooky, unless you're feeding it.
Also, creating objects that can be "scenery"/"hidden",so you can create LOOKable objects, avoiding this pitfall (mostly it offends my sense of style):
Walking down this wind-swept corridor (owing to the gaping hole in the roof), you notice several piles of rubble which are neatly swept into conical piles off to the side of the main thoroughfare.
You see: RUBBLE, and PILES.
Um... sure gives away the EXAMINEable items, doesn't it? That's no fun. (Also, I hope someone can offer critique on my writing style. People on MUCKs say it's good.) I guess that'd be easy enough to do, thinking about it. This should use some of the code and reasoning behind the HIDE command. Characters should be able to create scenery objects which may be hidden (EXAMINEable or LOOKable as details in the room), not showing up in the "Objects here are:" line.
On the other hand, they may have a normal object (a dagger) they want to hide behind a bookcase. In a wide open area, there may not be anything to hide an object under/behind/in. Should the room have a flag/scale for its "hidability"rating? Also maybe places where things can be hidden: under, behind, etc? Or should that task fall to flags on the object - supporter (stand or set things on), transparent (look in), container (put things in)... um, I'd have to look up the rest of the flags from Graham Nelson's inform6.org site, I really like that site. You know, I had to Google for "parts of speech" before I could think of the word "preposition"... Sad.
I'm thinking SEARCH would be a better "anti-action" than to enter HIDE again to find hidden items. With DIG it makes sense to use a verb that works both ways, I guess.
Thieves are good at searching for hidden stuff, of course. And they have a higher percentage of noticing things "out of the corner of their eye" if in "plain sight."And you should always be able to find your own stuff (so it's got to be tagged with who hid it) unless your Intelligence is <5 let's say, just to throw some arbitrary restrictions in for laughs. Maybe enter HIDE BOOKCASE if BOOKCASE is a scenery object. HIDE would list all HIDEable places in the room and let you pick. I'm thinking DIG and HIDE should end up using the same index file as to what's dug or hidden... it wouldn't make sense to have two files on the off chance that someone had an item buried AND hidden in the same room...
- Heck, I'd love the whole object tree notion, that of "modern" text adventure. How to implement it though is another story, at least for me. Oh,and Z-machine 5-bit ZSCII. Yum. Encryption, and better-than-nothing compression.
- How about a LASTON command to see when your (most/least) favorite character was last awake?
- Whenever an object is RECYCLEd, it should go into a Lost and Found area so as to have a "second chance" at getting it back if you mistakenly RECYCLE something you didn't want to. Maybe you get ten days or something,until it's irrevocably destroyed. That thought just popped into my head.
- And there should be a "free object slots" file, probably just a SEQ file, so the game doesn't have to search from object #1 each time someone CREATEs something. Or better yet, have record #1 of "e.t.objects" contain the next "free" record. Duh.
- Dang, the Aragain Falls area on Level 1 bugs me. I would like a "movealong" feature to "push" you through the rooms without giving you a chance to enter any commands... just be swept away by the water. Of course, the "entrance" square (forget which room at the moment) should check to see whether you're carrying the RUBBER DINGHY.. can't body-surf down it. I know, I spoil everyone's fun.
- Hey, did I ever make sure there's just one exit from each room as you fall downwards? Oh, maybe calling FLEE code would help? Maybe have a %- sub, %W, that waits a few seconds, like IMAGE BBS's £W (wait) command? (In that case, why not have one room with all the lines of the description of falling downwards? The world may never know.)
- Can't forget Guild dues at the beginning of each month. Have an autopay plan? Almost mistyped that as "autopsy." :)
- Oratory skills! I finally have a use for the Auditorium. :) You get to build your skills (by going back there multiple times) in creating puppet characters, which could conceivably be used for entertainment, or providing clues to parts of the game. One early concept was borrowed from Jeeves, a butler (I think he was a penguin?) on Brazilian Dreams, an online haven that is no more. Would be real simple:
>SAY JEEVES, ANSWER PHONE
Jeeves reaches into his tuxedo-plumage and withdraws an old style hand-crank phone. "Hello?" he squawks into the receiver, cocking his head curiously at the caller on the other end of the line. "It's for you," he notes, winging the handset in your direction.
[I'm not sure if you'd actually end up with the phone in your inventory or not... it'd be kinda funny if you did. :)] Be pretty simple to implement. Could even be just a SEQ file. Maybe even have a vocabulary command that lists all the stuff he responds to. Have operands in the file that mix replies, choosing random ones for variety. Make him respond to particular characters. Three fictitious examples:
(Character is RATH)
>SAY JEEVES, HELLO
JEEVES waves enthusiastically to his master!
(Character is ROSE)
>SAY JEEVES, HELLO
JEEVES smiles brightly to his mistress, and kisses her hand. "Good %d, milady."
[%d may translate into time of day, of which there are six words used.]
(Character is ARABELLA, a constant troublemaker in the Brazilian Bistro)
>SAY JEEVES, HELLO
JEEVES looks nonplussed, his feathers ruffled."What do [you] want?" he grouses, the last inkling of civility hiding somewhere between his feet, making the normally jovial Emperor penguin seem cold and distant. But perhaps that's just a case of nature vs. nurture.
>ORDER HAM AND EGGS
(This brings to mind the idea of characters creating actions other than those listed on any of the menus. In this case I'd assume there was a READ MENU option available, and ORDERing something costs money - perhaps doubly so if you're a troublemaker...) -- oops, wait, ORDER conflicts with the command used to re-arrange allies' tactical positions... PURCHASE, instead? BUY. Even better, shorter on the ol' fingerbones.
JEEVES scowls, moving behind the oak-topped bar. "%N, my master has commanded me to be polite to his friends, but I do not feel you fall into that category. Here's your slop. Now we have a really great shoo..." You get the feeling he's not [exactly] quoting Ed Sulivan, before he starts whapping you with his wings. "Beat it before I bite you!"
It would be interesting to see whether puppet characters can give you real items; perhaps they can use a separate index file, a smaller one... An old man could give you a scroll with instructions for a quest, Jeeves above could wander off to another room when he gets tired of incessant actions,maybe even bring reinforcements ;) Probably be too hard to code though. It'd be hilarious if Jeeves poisoned the ham and eggs :)
Castle password, how's someone going to get that, and what's the goal of getting INTO the castle? So far it's just a boring place. Think, McFly, think...
Well, geez, I'm bright, the solution to the "why Vinney vs the bank? Aren't they redundant?" question has been staring me in the face... because the bank ONLY caters to members of guilds! HOW long ago did I write that? Another case of "can't see the forest for the trees."
Note to self: Self, considering the amount of work you have yet to do,let's not keep adding work, hmm? Okay, I guess I don't have to have every single feature for this release...
Haw haw. And I thought coding a file reader would be easy. I've just about licked the %-sub problem. Chatted with FuzzyFox (he wrote AutoGraph) and he wondered why I doing DEYs all over the place...
I have this coded in BASIC already, mind you. It knows to look up variables and such, whereas the ML routine...
- doesn't, and goes off into lala land when it loses its place in the string. Solution? I'm sure it's to use a location other than $FB-$FF. LDA #$INDEX or some such.
- FuzzyFox mentioned some routine that I was using clobbers one of those locations, or the Y register or something. I need to look at the chat log again.
- is too hard-coded - it needs to know about BASIC variables. Thank goodness for an issue (not sure which one) of Loadstar's BITS columns, where Mike Maynard discusses how to retrieve values of strings in BASIC from ML. I bet you a plugged nickel this is the same routine the VARPTR routine I'm using is based on... So if I'd just sit down and try coding a bit... :)
Ooh! Ooh! Here's an idea:
%!p (the opposite gender for those flirtatious monster[ette]s)
or maybe just %P (capital) to make it easier to parse... dunno. I like the !'s usefulness in signifying NOT. Of course this will make sense only with certain substitutions.
The %m flutters %p eyelashes at you."Gosh, er, hi, %N!"
The GNOME flutters her eyelashes at you."Gosh, er, hi, RATH!"
Waitasec, what am I thinking... too tired... %p should get set to the gender of the calling object... shouldn't it? How about making £ (the British pound sign) interchangeable with %? Or instead adds More Neat Stuff(tm)? Dubious. End of transmission.
Leave a Comment
You must be signed-in to post comments.Responses