CHICK.T

An Adult Interactive Fiction Devlopment Library

By NewKid

Introduction:

Chick.t and its related files combine to allow the prospective author to use a plug and play approach to the nuts and bolts of writing the sexual elements of AIF. Authors need only copy the template and do a search and replace from "Template" to "<Name>". Then they have but to create a GIGANTIC amount of thier own text to flesh out the female. Of course, this hardly makes for much of a game, but the author can concentrate on making the game, not reinventing the wheel that has been used in several very successful games.

Any comments or suggestions for future revisions to the program or this manual, as well as bug reports and grudging praise should be directed to NEWKID@KILLINGTIME.COM. Any insults or whining should be directed to Fuckoff@whitehouse.com....

Aknowledgements:

First and foremost, Chick.t makes extensive use of the excellent library Chatter.t by Suzanne Britton, who would probably be horrified by this implementation - we'll see. You must download this library to make things work. You also need Notall.t by Andrew Pontious. Numerous other bits and pieces of code have been pirated with abandon from other authors out there, some so long ago that I have forgotten where I got them. If you see me using your code, and want to mentioned in this context, please let me know! I also want to thank my beta testers and code gurus, you know who you are, for incurring carpal-tunnel syndrom from all the dope-slapping you have done to my forehead.


Getting Started:


Where to begin? Well, the following is only a suggestion, and is not meant to be a full dissertation on writn your entire game. Be sure you read all the usual sources, such as the following:

{ http://www.tela.bc.ca/tela/tads/authoring/ }

This page has links to most of the classic works on adventure authoring, either TADS specific or general. They are good. Read them.

{ http://www.zipcon.net/~myco/i-f/waif/WAIF.html }

This is the excellent Writing Adult Interactive Fiction, by Rap. It contains much that is wise and sage, as well as a bunch of other dirvel that was not inspired by my writings....

There is a lot of other stuff out there as well.

Also, the best place to go to discuss coding AIF is usenet newsgroup alt.games.xtrek. Much good general coding help can be found at rec.arts.int-fiction, but they get stuffy sometimes about the heave and throb.....

OK, you want to write a game using Chick.t! Get on with it.

Before you start typing line one, have a pretty good idea what the game is going to be about. What are the major challenges to be overcome, what is the desired outcome, and who are the NPCs(Non-Player Characters) who will populate your world. At least one of these should be a hot lady, of course, or why are you reading this?

Once you get a good outline written out, there are four phases to writing a game using chick.t. They will definitely overlap each other, but they will usually happen in this very rough order:

  1. Layout the world, i.e. make the map. It is pretty easy, and gives a sense of accomplishment that helps keep you going.
  2. Rough out chick(s). Choose what clothes she will need/wear, and write all the description text.
  3. Furnish the world. Put in all the objects, toys, and obstacles needed to make things interesting. This is usually the hardest phase for me, because it requires the most heavy lifting codewise.
  4. Flesh out (heh, heh) the chick(s). Chart out the arousal chain (see below) and write the sex scenes.

Ta Da! You have a game. Find a few good beta testers and toughen up your hide. They will hopefully tear your grammar and spelling apart, poke holes in your logic, and describe many bugs in your code, most of which will make you feel stupid for creating, and a few of which will make you tear out your hair fixing. Spend a significant fraction of the time you took to develop the game of fixing it. Release it and bask.

How Chicks Work:

Objects that make up a chick:

Chick:

Chicks will likely be the largest objects in your game. They are precoded to handle a large range of actions which fall generally into the sexlike interaction between Chicks and Players or even other Chicks. It is easy to expand their horizons. Consult the chatter.t manual for information on how to add topics for her to discuss/learn about and custom actions of any nature for the player to command her to do.

The first thing to understand about a chick is how to code appearance. This appears complicated at first, but follow the examples at first, and you will soon learn it as second nature. Building a cohesive paragraph from little pieces can actually work, if you keep in mind where in the paragraph each piece will come.

The factors which regulate most of the pre-coded behavior of chicks are issexready and arousal. issexready is a boolean value, which indicates whether or not she is even viewing the player as a potential sexual partner at all yet. The first check for all sexual actions and requests looks at issexready first, and returns NotReady or NotReadyAsk. For instance, if you sat down next to a woman on the bus and asked her for a hummer, you would receive a NotReadyAsk response. Depending on the character, and how mean you are, the response from a NotReadyX response could be rather nasty. If she issexready, then each action has some sort of arousal threshold, such as blowthresh, and we will check to see if her arousal, a numeric value, is equal to or greater than that Xthresh. If so, execute the corresponding description function, in this case blowdesc. If she is not aroused enough, issue the NotReady or NotReadyAsk method. For instance, let's say the player did a girl's dishes and fixed the washing machine, thus letting her relax, and making her grateful to him. If this is enough to open her eyes to his obvious physical attractiveness (issexready := true;) she is still unlikely to let him jam his face between her legs right off, so her NotEnough method should be executed if he tried. NotEnoughX routines should be at least different, and probably less harsh in tone than NotReadyX routines should be.

arousal is not an index of her actual physical arousal, but is foremost a measure of her progression along her personal track of what she'll do or allow you to do. There are other uses for arousal as well. For instance, a chick might be willing to let you fuck her at a relatively low arousal, but she won't really enjoy it that much (and thus provide a higher score or provide other benefits, sexual or otherwise) until at a much higher arousal level. Code this into the corresponding Xdesc method. For an example of this, see Ideal High, the sex scene in your dorm room.

You should probably not just increment arousal directly, but use the chicks arouse function.

See the comments in chick.t for how to use this function. Similarly, increase the score via her score function.

Kissing is handled in a special fashion. If SRReq4Kiss is set to nil, the the game will omit a check for issexready in chick.verDoKiss. You can use this to allow a chaste sort of kiss, or one that starts out that way and maybe even results in issexready being set to true. Use your imagination.

The disavows (NotReady, NotEnough, etc.) issued by the chick are important, and should probably be custom written for each chick, in order to give her a personality distinct from other chicks in your game. Most disavows for all objects default back to the base for the chick, but these can be custom written as well, to add even more depth to her character.

Quotes. For HTML-enabled games, you may wish to have each actor speak in a unique color. To open quotes, embed the oq method in the string. To close quotes, embed cq.

Diana: Chick

Xdesc = "<<self.oq>>Wow! I'd better turn into my secret identity!<<self.cq>> exclaims Diana. ";

oq and cq in bodyparts and clothing redirects to location and owner respectively, for convenience sake. So FrancineBreasts.oq redirects to Francine.oq. Obviously, this is the chick talking, not her boobs. (I guess that if you want her to have talking boobs, you should override the redirect code....)

When writing gropedesc, fuckdesc, even blowdesc, and jackdesc, you need to be aware of a number of things. In most cases, you will need to make sure that these methods are aware of location of all parties involved, and how they are clothed. Be careful, as this can create a lot of complexity and a lot of work for the author! See the code for A Night With Beverly for a sense for how big a job this can become. Acts will be very different standing up, or lying down, or in a tub, or in a car, etc. Xdescs can change due to clothing worn, they can remove or open clothing, they can arouse and score differently depending on these or any other factor you desire.

There are lots of ways to simplify this process, and some are illustrated in the example, others are not.

Those that are not shown in the example are not because they would preclude illustrating more complex actions. You can simplify clothing issues most easily by simply giving her less items to wear (yay!), or setting up the arousal chain to ensure that she is not wearing anything before she will do a lot of sex acts, reducing the work needed to write those routines. Simplify location issues by restricting where you could conceivably have sexual interactions with this female.

A few that are shown in the example. Simply ignore position in a brief description, or simplify based on clothed or not, ignoring clothed by what ("You grope her <<Chick.topless ? "luscious naked" : "fabric covered">> breasts."). Use the same description for an act in different but similar locations, i.e. intercourse on the bed and the couch. Have her take the initiative to combine acts in certain circumstances, i.e. Beverly turns both fellatio and cunnilingus into a two-way sport under certain circumstances.

Bodyparts:

All chicks have the following body parts: Hair, Mouth, Back, Breasts, Pussy, Ass, and Legs. There are pointers in the main chick object (hairname, mouthname, backname, breastsname, pussyname, assname, legsname) which must be set to the appropriate bodypart for that specific chick. There must be a unique object of each class for each chick.

Bodyparts usually act the same. Most can be groped and sucked. For most, massaging them redirects to groping them. For most, kissing them redirects to sucking them. Breasts and Asses can be fucked, if you so desire, and fucking the Pussy redirects to fucking the chick.

The only description you need write for each bodypart is chickdesc. This is a single quoted string which describes the part when it is not affected by ChickClothing items. Please note that the chickdescs for Breasts and Asses can be used in constructing the ldesc for the main chick, and you should exercise extra care in writing them. I usually start Breasts.chickdesc with her proper name in its first mention, and use pronouns for the first mention in Ass.chickdesc.

Parts like Hair, Back, and Legs often will have methods for chickdesc. You may wish, if you are energetic, to change them based on clothing worn. Hair might change depending on if she is wet or dry, or if she has gotten issexready and let down her hair. Possibilites are practically endless.

Please note the special handling available for sextoys and items used as sextoys. The syntax is available for Put <something> in <Breasts or Pussy or Ass or Mouth>. To enable an object for this usage, give that object an appropriate Xdesc, and add it to the bodypart's insertlist.

ChickAnnexes:

The chick object can get HUGE. You will note in the Beverly example that there is an object called BeverlyAnnex, which holds some of the longer methods from the Beverly object itself. I do this because giant objects with long text methods can choke the complier. Hopefully you will not need to use many annexes, but if your game gets too big for the compiler, this is the way out.

Clothing:

Note that in many cases garments could be constructed using more than one class. For example, if you were doing the opening scene of the movie Barbarella, the space suit could be either Outerwear or Foundation, and it all comes off at once, and there is nothing underneath. A bikini top could either be a Top or a UFoundation, if she is not going to have other clothing.

Only one of any given class of ChickClothing can be worn at any given time, and each item can only be worn by a single chick, as detailed by the owner attribute. But what about a chick who has a Big Fluffy Towel (Foundation) and a Tube Top and Cutoff Jeans? No way the towel goes under them! Two solutions: Make the Towel an Outerwear, but this is stupid, who wears a towel over clothes? Two, put Tube Top and Jeans in Towel's cantwearwith list. And put Towel in TT and Jeans's cantwearwith lists. The engine prevents a garment from being worn with anything in its cantwearwith list.

There MUST always be a garment of the appropriate type set in each chick for the pointers: outerwearname, topname, Fname, UFname, bottomname, and LFname. This does not mean that you must CREATE a garment of each type. Placeholder garments exist with names such as defaultX. Do not use these items for anything, they are there solely to keep my cumbersome code from crashing. These default garments are set in the chick class, so just remove the mention from the template.

Two important attributes are isworn and isopen. Garments will be included in descriptions and otherwise treated properly when isworn is true. The offstrip flag is set when removing the garment should not be allowed in a public arena. For example, she ought to be able to remove an overcoat in a restaurant, but probably not her blouse! (Note, be careful with this. If ALL she is wearing is that overcoat, then you'll need to write some custom code!) Note that whenever you issue a moveInto command to a garment, its isworn is automatically set to nil. This is the case, even if you are moving it into the chick! Be careful. There is a utility method defined for chickClothing called wear. This moves the garment into its owner AND sets isworn to true. It also sets isopen to nil, so be careful for garments that are not to be closed!. isopen determines whether or not a garment is currently concealing what it is meant to conceal. examples of a garment being isopen would be an unbuttoned shirt, a skirt hiked up to the hips, a bikini top pulled to the sides, exposing the tits, a front open bra that is unfastened. If a garment does not open, set isopenable to nil. Make sure that there is a notopendesc defined, or let the default come into play. You can choose a special openword for text descriptions of how a garment does or does not open. The openstrip is set to true when merely opening a garment is a strippinglike act and should not be allowed in public. (Public locations are ones where isstriplace is set to nil.) Note that when a garment executes a doWear routine, isopen is automatically set to nil. If you want it worn but not closed, then you must set isopen to true in the weardesc.

The description strings for ClothingItems are as follows:

Foundations have the special strings:

These allow the player to code seperate descriptions for torso and hips area. This matters if she is for instance wearing a bodysuit under jeans, where only the top is visible, or under a sweatshirt, where only the bottom is visible.

It is up to the author how much to customize putOnDesc, openupdesc, and takedesc, etc.. opendesc and takedesc take actor as a attribute, allowing the player to perform these actions, as well as the chick. For simplicity's sake, putOnDesc does not have an argument reflecting the actor, as the system does not allow for the player putting garments on the chicks.

In the interests of realism, you may wish to modify the offdesc for garments to reflect their location. For example: Betsy has a dress with red and white stripes and a blue polkadot bodice. If the player takes it off, it is moved into Betsy's uberloc. The offdesc should be a method which reflects this, i.e. if (self.location = room) 'The dress is lumped on the floor'. Whereas if Betsy takes it off, she hangs it up over a pole in a corner of the room, and the offdesc should be different: if (self.location = pole) 'The dress hangs on a pole in the room, starry blue in the upper corner, with red and white stripes sweeping downward. Gee that\'d make a great flag....'

Garments have the attributes of groperedirect and suckredirect. The will usually be no need to alter these variables, as when you grope a top, it will usually mean that you are groping the breasts, for instance. The author can override these as desired.

Note that isVisible and isReachable are given special handling for garments that can be worn other garments. This can create some tricky situations that may require custom handling, so be careful. An example would be a mid-thigh length overcoat worn with trousers. The program will not describe the trousers, nor will they return as reachable or visible. To properly correct this, the author should modify the coat's chickdesc to reflect whether the trouser leg stick out the bottom, and he or she should also modify the trousers' isReachable and isVisible methods. As you can see this is cumbersome, so take care in how your creative vision takes you.

Other Garments:

Of course, women wear other clothing items beyond those covered by the ChickClothing classes. Chick.t does not explicitly handle such things as shoes, stockings, hats, and jewelry. The main reason for this is that for the most part, these garments do not affect the important body parts or the chick's ldescString. If you want to use these garments, it is easy, however. I usually make them into Decorations. This keeps the player from interacting with them directly, and you can modify the appropriate ldescStrings (such as Hair in the case of a hat) to reflect whether or not the other garment is worn. You could alternately use the base clothingItem class for these garments, allowing the player to interact with, or even wear them. Just be aware that you should modify the affected body parts to change description is the garment is worn. There are many ways to implement garments that are either plot devices or decorations. The library does not implement a default way of handling them in order not to limit the author.

Giving a Chick Personality:

Personality is very important in making Chicks interesting and real, unless the Chick in question is some kind of Fembot programmed to be a mindless fucking machine. The author should take care to write for himself a little sketch of each Chick's personality in the initial planing stages. If you get a brilliant new idea later, you can always change her then. Use that personality to build the Chick from the beginning.

Unless you have a really good reason to go against stereotype, reflect her personality in her appearance: A bimbo is unlikely to be brunette, with buck teeth, small tits, and big hips. The mousy nerd is not going to have teased platinum blonde hair, 38DD hooters and two-hour-a-day-thighmaster-habit legs. Don't give me any crap about steroetypes and people you know in real life - You want to help make the character real to the player, so play to their expectations. The same goes for clothes. The beautiful but downtrodden and neglected housewife is not going to wear Bill Blass gowns and pushup bras. I know they do on Skinemax, but the plot in such movies is an excuse to show her in those garments, in AIF, the plot needs to be as cohesive as possible to hold the player.

Similarly, take into account who she is when writing sex scenes. A slutty chick is going to present more raunchy sex, or be more demanding. A mature woman will be more sophisticated or experienced. A virgin should not act like the author of the Kama Sutra. A rescued victim should be more submissive and eager to please, etc.

There are a number of tools provided by the library to aid in projecting the Chick's personality to the player. expression and expressionString can be used to display her current emotional state. expressionString should return a string which will come at the end of her ldesc which should reflect her emotional state. The author is invited to be creative in using the expressionString for other uses as well. expression is provided as a convenience to the author as a storage place to keep information used to determine expressionString, but you could ignore it and generate expressionString from other factors. For instance the fair damsel might be haughty when first encountered, then terrified when captured by the dragon, then grateful when rescued, then positively matrimonial once she has expressed that gratitude....

Another method is the gawkresponse method. Anytime something is examined, the program will check every chick that is present, passing her gawkresponse ( thing ). By default, this will return nil, but if you like, you can code in a response for her to the player examining this. Use this to allow a chick to get angry, blush, or preen if she is stared at by the player, depending perhaps on her mood. Alternatively, she might make some comment about a piece of artwork that might be helpful. Thanks to Rap, btw, who originally came up with this little gem because he wanted some way to have the chick get pissed if you kept staring at her tits.

The Deamon routine is very valuable, both for atmosphere and for gameplay. Rather than being a daemon in the TADS sense of the world, it is a function which is run for every actor in global.daemonlist (see sexextras.t, move this from std.t. to sexextras before release!) after all deamons and fuses. We do it this for two reasons: 1] By setting the order of actors in daemonlist, we can control the order of Daemon execution. 2] We can pass to the function what the actor, verb, etc. were for the command.

A flag called skipDaemon is provided. Set this true for a chick and her Daemon will not execute that turn. This flag will also reset to nil every turn. Use this anytime you print a result that will not skip the Daemon by ordinary means, and it will help you out. Most of the code for suppressing the daemon is sex acts are tried/executed, is Chick is actor, etc are in the Daemon for each chick (see Beverly). This is because you may wish in certain circumstances to have the daemon perform some act in these circumstances. Use your imagination, but examples might be: A nympho who will become increasingly boared if the player keeps fumbling around with feeling her up and eventually just jump his bones. Or the Chick might be a genie and will disappear back in her bottle after every three "wishes" the player has her perform.....

The orginal and primary use for Daemon is to provide atmosphere. For people will just sit around doing nothing. Use the function to have the actor do little bits of "stage business" occasionally. There is code in the example to show that you probably ought not have him/her do such things when affected by the player's actions. For chicks, the stage business might be different depending on issexready, arousal, expression, etc. More than just atmosphere can be done with the Daemon as well, such as following the player around, or acting on her own. The virginal chick mentioned above might run away after a number of turns, a racer might continue along the course if not stopped, our slutty chick might just go ahead and perfom a random sex act on the player if he ignores her too long! A security guard might grow bored and look for ways to entertain herself if she is left along long enough..... See the Beverly example for more discussion on how to implement Daemons.

The Player:

The Me character, contained in player.t is much less defined than the Chick class. The only bodypart implemented is the penis, and it is rudimentary, used as much as a technical artifice to allow various syntaxes as for anything else. The average AIF hero is constantly sporting eight inches of stainless steel, so for most cases, you can just leave this alone. Feel free to come up with some brilliant erection code if you need it for the purposes of your game. Me, I am more interested in the circumstantial and emotional barriers to sex, rather than physiological. Clothing is much less complex the chick implemementation as well. Although more than one item of clothing can be worn at once, only one of PlayerClothing class can be worn. It is this piece of clothing that is used to determine Me.nude. Should you wish to have some piece of clothing keep the player from being "nude" when worn, but otherwise not act as PlayerClothing, then put it in clotheslist.

Rooms and Doors

There are several modifications to how you need to create rooms and doors, put in place to make sure that certian actions are kept in appropriate places.

Rooms have the following variables:

Nested rooms inherit their locations flags and strings above, but you can of course override this.

Why are there three different location action flags? Here are some examples. A disco would certainly be isdanceplace = true, and even issexplace (groping, or even more under the right lighting conditions, etc.), but not is stripplace. A nude beach would be isstriplace, but not issexplace, and maybe not isdanceplace, depending on the culture. The possibilities are endless, and that is the rub. Be careful about setting these three atributes to true, as sure as you're reading this, players will try it all everywhere they are near a Chick. If you set a room's attribute to true, and make it possible for a chick to reach the appropriate arousal level while in that room, you'll need an Xdesc that handles the situation. See comments on managing possibilites to keep finishing your game a realistic goal.

Doors are replaced by mydoor. This modification was made to allow for checks on nudity when travelling between rooms. You need only one mydoor between two rooms. It is a floating item which exists in the two locations in its locationlist, which must be explicitly set at creation.

Doors have the following important variables that the author should at least keep in mind when creating:

Do not set an ldesc directly for mydoors. Instead create a single quoted ldescString, to which a comment on whether the door is open or closed will be appended.

NPC Interaction (Threesomes, Lesbianism, etc.):

Before we get too far into this part I wish to issue a warning and some advice.

WARNING: Implementing chick.t-type actions between chicks may be fairly easy to code, but results in an exponential increase in the writing necessary to make the game work!

My advice is to avoid such scenes altogether, or make them possible in very limited circumstances. The Rochelle and Monique chicks in Generic New York Apartment Building were each approximately the size of any three or four others I have written. Menage-a-trois sex is one of those deadly winding paths that can doom a project to eternal "in progress" status.

Of course, this is some excellent fantasy material, so I did my best to make sure that it is easily implemented. Just say I didn't warn you.

"OK, NewKid, you warned me. Now how do I do it? I have infinite free time and an imagination as fertile as the soil in Seattle Slew's paddock. I am writing a game in which the climactic(heh) scene is an orgy involving the player and the entire female cast of Baywatch, past and present."

Sigh.

Ok, as indicated, the coding part is pretty simple. Say you want to allow the player to instruct C.J. to eat Donna's pussy. Couldn't be easier. DonnaPussy.suckdesc should have an additional case, in which it describes what happens if the actor is CJ. In the description, you should also keep in mind what you want the player, or even, say, Caroline, to do as CJ eats out Donna. There might even be different versions depending on who else is around.

What's so hard about this? Well, you are also going to need to code for Donna returning the favor to CJ, so now both chicks' pussys' suckdescs have doubled in size. Assuming Caroline also is into this, then three chicks will TRIPLE in size. And so on. Also, keep in mind, that once you let chicks get issexready around each other, you have to AT LEAST provide for a disavow for each actor who could potentially be ordered to commit EVERY act they could to her.

There are a few other things to keep in mind. Only the recipient's arousal will be checked automatically. So if Donna is hot enough, the suckdesc WILL evaluate, even if C.J. is only at arousal 1! You may wish to put in a secondary check in the Xdesc to ensure that the actor is hot enough as well.

THIS MANUAL IS A WORK IN PROGRESS.

SHOULD YOU WISH ADDITIONS, PLEASE EMAIL THE AUTHOR AT NEWKID@KILLINGTIME.COM

Good coding!


APPENDIX.

Command List:

The Chick.t suite of libraries accepts a very wide range of actions and syntaxes. Here are most that I can think of:

Doesn't look like a lot, and is certainly not enough to make a whole game out of. Use your creativity to make the rest of the world an interesting place to interact with!