Morphing
Morphing for the Non-Power-Ranger
Ginger’s Guide to Redesigning Your Face
Most characters will start out having just one description–“You see a small red fox.”–and stick with that one for weeks on end. Eventually, however, it dawns on one that it might be a good idea to change clothes, or perhaps bathe, or some ‘toon pours paint on you and you turn bright pink! Either way, thus appears the need to “morph”, or switch your character quickly between multiple descriptions. Characters who have more than one standard outfit, or who often switch to a nude or wet morph, will find morphing useful. Below are some of the easiest ways to set up a morphing program, organised at random:
The Basics of Descriptions
A “description”, as pertains to MUCKing, is whatever shows up when some other character looks at you. It can be anything from one line to six screens of text long, and it is stored in the _/de property on a character. It can be set and reset using the @description or @desc command:
@desc me=<text> Ex: @desc me=You see a fluffy red fox. @desc me=A pretty golden stallion.
You can also change the _/de property directly with @set me=_/de:<text>, but it is easier, and neater, to use the @desc command. The description property behaves exactly like any other property on your character(1).
Generally, a description property can only be roughly 700 characters long. However, some lunatics have gotten together and written reams of programs, which allow you to put nifty little codes in your description so that you can make longer descriptions. You can also format text (make paragraphs or lists) and even insert ASCII pictures in your descriptions.
The use of morphing programs comes about because, in general, you can only describe something in one way at a time. If your description says, “You see a fox wearing a pith helmet.”, anyone who looks at you will see you wearing a pith helmet, even if you are 600 miles underwater, in a mini-mall, or standing on the moon. Morph programs will allow you to make many separate descriptions (you wearing a pith helmet; you wearing a swimsuit and scuba gear; you wearing a “Mallrats” T-shirt; you wearing a spacesuit), and switch between them quickly when you move around on the MUCK.
(1)A thorough tutorial on properties and their functions, limitations and usage may be found on the MUCK itself by typing “help properties”.
Morphing by Hand (or Paw)
The simplest mode of morphing is by hand: simply rearranging your description whenever you need to change. You can, of course, change your description at any time by typing:
@desc me=<your new description>
Of course, if you change clothes a lot, this can get monotonous, because you’d have to type the full description out each time. This is where “propswitching” comes in. Just type the following line, exactly as you see it below, while on the MUCK:
@desc me={index:clothing,this}(2)
Now you can make multiple morphs as follows: for each change of clothes you wish to wear, set a property on yourself. Then whenever you wish to change clothes, you can simply set the value of the property clothing on yourself to the name of the property to whose morph you wish to change. This sounds complicated, but watch this example:
@desc me={index:clothing,this} @set me=blueshirt:You see a red fox wearing a blue shirt. @set me=redshirt:You see a red fox wearing a red shirt. @set me=clothing:blueshirt
In the first line, you’re setting up the description property. In the second and third lines, you’re setting up two different morphs by setting properties on yourself. The name of the property is the name of the morph; the text contained by the property is the description which will show when you switch to that morph. The morph in line two, for example, is named blueshirt, and the description which will show when you switch to that morph is:
You see a red fox wearing a blue shirt.
In the fourth line, you are switching to the blueshirt morph, by setting the value of the property “clothing” to “blueshirt”. If you wanted to switch to the redshirt morph, you would type:
@set me=clothing:redshirt
You can switch between the morphs as many times as you like, and it doesn’t matter what you call them. Property names can have spaces, too, so you could call them blue shirt and red shirt if you felt like it.(3)
ADVANTAGES: | DISADVANTAGES: |
|
|
(2)Information on {index} is available by typing “mpi index” while online.
(3)Or even kumquat, home on the range or We hold these truths to be self-evident, if that were the kind of thing that struck your fancy.
Triggur’s Morph Hammer
(Program by Triggur@FurryMUCK)
If it’s installed on your MUCK, help is available via morph #help. This is a very nifty menu-based critter–it’s a little crude to set up, but once it’s running, it’s the proverbial set-it-and-forget-it morph program. You’ll need to understand lsedit lists to get the basics, and it’s helpful if you know a little MPI (see my tutorial) as well, to get the most out of your morphs.
From the docs: (morph #help2)
To use this program, edit your current attributes (by hand or with PEDIT(4) to get exactly the form you want. Type morph #add and your current description, sex, species, scent, say and osay will be copied as a new morph. You will be expected to answer a few questions:
- First, the ‘command’ associated with this morph. This should be one word like ‘2leg’ or ‘mwolf’ or somesuch.
- Next the name of the morph. Only you will see this when you type morph #list.
- Finally, the text it should print when you change to that new morph.
To add another morph, simply edit your current description again and morph #add again. Lather, rinse, repeat. 🙂
WARNING: If your description is currently using @$desc (@6800 on Furry), the whole description will be _converted_ to a single MPI list. Also, be aware that when you change to a morph, your description will be overwritten. If you have multiple descriptions you want to make morphs for, be sure to MORPH #ADD them all *before* trying to test one of the new morphs. PLEASE DELETE YOUR OLD MORPHS!
….Basically, what happens in this is that you set yourself up completely, by hand, each time–no, no menus or anything like that; you set yourself up from scratch, exactly as you want your morph to appear. Then you type morph #add and Morph Hammer magically creates a morph for you. You then set yourself up by hand again and again, for each morph you wish, eventually, to have, and type morph #add for each one. Once you are done, you can just switch between the morphs you have created with morph or qmorph. You just have to set each morph up by paw first.
ADVANTAGES: | DISADVANTAGES: |
|
|
(4)PEDIT is one of the many player-editor programs available–others are editplayer and setup. These player editors vary from MUCK to MUCK–you might have to hunt to find one.
“@6800” $desc Program
(Program by Conrad Wong)
The $desc program is sometimes called @6800 because that is its database number on FurryMUCK, the original, and still the largest, furry-based MUCK. $desc is a complex MUF program which can be called in your description by prefacing your description with @6800 (on FurryMUCK or FurToonia) or @$desc:
@desc me=@6800 <text> @desc me=@$desc You see a fox wearing a red shirt. @desc me=@6800 This young vixen is wearing a flea collar.
$desc’s value lies in its commands, which can be inserted into the text of your description to arrange the text in special ways or to aid in morphing. The example below copies the {index:clothing,this} description from above
:
@desc me=@6800 %sub[%sub[clothing]]
You would morph using this setup the exact same way you did with the MPI description in the beginning: @set me=clothing:redshirt and whatnot.
$desc offers a little more precise formatting than simple properties, and a number of little technical toys that aren’t available in Morph Hammer(5). For example, the %rand[] tag will pick a line from an lsedit list at random. %time[] and %date[] will pick a line from a list according to the hour of day or the date, allowing you to have descriptions that vary with the time or the seasons. Complete docs for $desc are available with @view $desc. The following is the beginning, most useful part of the docs:
$desc is a program that you can use to make more complex messages on descriptions, success, fail, and drop messages. To do so, type this: @desc me=@$desc (description) The description is a normal text message, but may include special “tokens” which are translated by the $desc program to normal text.
For example, you might write this:
@desc me = @$desc A cute little fox with %sub[color] eyes. @set me = color:green
Then when someone looked at you, they would see:
A cute little fox with green eyes.
All tokens are of the form %token-name[parameters] and you may nest tokens, so that you may have descriptions which look like this:
@desc me = @$desc %sub[%sub[morph] %sub[clothes]
This would take the property name that you had stored in the property “morph”, and substitute the contents of that property. It would also take whatever you had in “clothes” and add that into the description.
You should also bear in mind that lists, when mentioned below, are lsedit lists, which may be created by doing this:
lsedit object = listname (first line of the list) (second line of the list) .... (last line of the list) .end
[Lsedit lists are just lists of properties spit out in order. This is useful for formatting, or inserting pictures into your descriptions. To get help, type lsedit me=temp, then type .h on a line by itself and hit enter.]
Common/useful $desc tags:
%sub[<match,>property] Example: %sub[color] %sub[me,species] %sub[here,night] %sub[#321,small]
%sub[] is used to take the contents of a property. It normally takes the property from the object that is looked at, but can be set to use properties from other objects, as shown above.
%rand[<match,>listname] Example: %rand[buttons] %rand[here,songs]
%rand[] takes one of the lines in a list at random. As with %sub[], it normally takes this from the object that is looked at, but can take properties from other objects. %rand[] differs in that it expects the name given to be the name of a list created with lsedit, not a property name.
%time[<match,>listname] Table: one item in list -- full day two items in list -- midnight to noon, noon to midnight three items -- midnight to 8 AM, 8 AM to 4 PM, 4 PM to midnight four items -- midnight to 6 AM, 6 AM to noon, noon to 6 PM, 6 PM to midnight six items -- midnight to 4 AM, 4 AM to 8 AM, 8 AM to noon, noon to 4 PM, 4 PM to 8 PM, 8 PM to midnight %date[<match,>listname] Table: one item in list -- full year two items in list -- January to July, August to December three items in list -- Jan. to Apr., May to Aug., Sept. to Dec. four items in list -- winter, spring, summer, fall twelve items in list -- monthly
%time[] selects one of the lines in a list, based on the time of the day. That is, the first line corresponds to just after midnight, the last line is before midnight, and all the lines in between are mapped over the day. %date[] is similar, but it does this over the year so that you can have descriptions which vary with the season.
%list[listname] Example: %list[desc]
This prints out the first part of the description before the %list[], then prints each element of the list on its own line, then resumes printing the rest of the description. This can be useful when you want to print pictures or lists of items. Note that %list[] cannot be used as an argument so something like %sub[%list[]] will simply look for a property named “%list[]”.
ADVANTAGES: | DISADVANTAGES: |
|
|
(5)Unless you know a great deal of MPI, that is. Morph Hammer can do a lot more when combined with MPI.
Whitefire’s gen-morph
(Program by Peter A. Torkelson)
This is the other of the original morphers, #17812 on FurryMUCK and #433 on FurToonia. It is a slightly more complex morpher than $desc or Muf-Morf. Its main advantage is not its ease of use but the fact that you can change any properties you like between morphs–including pinfo, whatis and page properties. The basic idea here is that each morph is called a “race”, even if all your morphs are of skunks. Your nude morph is a race, and so are each of your clothed morphs. You set a whole bunch of properties associated with each race, and when you switch to that particular race, all those properties are changed.
From the documentation:
To set yourself up add the following properties to your character:
_race:<curent race> This is the race you curently are. _race-<race>:yes This tells the program this race is OK to switch to. Keeps you from becoming an "oxtaur" by mistake. One for each race. _morph-<race>-desc:<text> The description to set for a particular race.
That’s the basics. Now create an @action attached to yourself, named anything, like “morph”, and then @link it to this program. To alter yourself, type morph [-][+]<race>[=<message>].
The prepended – requests the change be made silently.
The prepended + allows you to overide restrictions on morphing to/from certain races.
The optionally appended =<message> lets you overide the message gen-morph would normally print with one of your own.
FUN STUFF: Alternate prop locations: _morph_proploc:<dbref> Tells the program to look at this dbref for morph properties. Useful to keep clutter down on your character. _proploc:<dbref> Same as above. Transformation messages: _morph-<race1>-<race2>:<text> Prints a message when changing from race1 to race2. 'def' may be put in place of either. The message will be prepended with your name, and pronoun subs work [use %% to get subs on the new sex], as well as %oldrace and %newrace. _morph-def:<text> If none of the above are from the text from here is used. _morph-<race>-name:<name> Set the name for the %newrace and %oldrace substitutions. Sex changes: _morph-<race>-sex:<sex> Change the character's sex: property when morphing. _morph-def-sex:<sex> Default when morphing if there is not one for the race.. Misc: _morph-<race>-prop-<n>:<prop>[=<value>] This list allows you to change a set of properties when changing to a race. If you do not provide a <value> the prop is removed. _morph-def-desc:<text> Default description if there is no _morph-<race>-desc: for the race. _morph-<race>-<race>:no Disallow changing from a certain race to another directly. _morph-<alias>-alias:<race> Alias for a race, useful to make it typing it easier. Set by the program on you: _race-name: This is set to the 'full name' of the race you curently are. _race: Set to your new race when you morph.
This looks complex, and is. Here’s an illustration of creating a pair of morphs: a nude and a clothed, for a fox morph.
@set me=_race:clothed (puts you in the "clothed" morph) @set me=_race-clothed:yes @set me=_morph-clothed-desc:A fox in a Hawaiian shirt and loud plaid pants. @set me=_morph-clothed-name:clothed fox @set me=_race-nude:yes @set me=_morph-nude-desc:A naked fox. @set me=_morph-nude-name:nude fox @set me=_morph-clothed-nude:takes off %p clothes. @set me=_morph-nude-clothed:puts on %p clothes again.
To switch between the morphs, you would type morph nude to strip, morph clothed to put your clothes back on (naughty foxie!). The program will print out “Bob takes off his clothes.” when you strip, and “Bob puts on his clothes again.” when you get dressed–assuming your character name is Bob, that is. The desc properties can be up to 700 characters long, and can (yes!) contain MPI and program calls. The _morph-<race>-name properties are for the default morphing messages, which read something like “Bob changes from a <race name> to a <race name>”. The program replaces <race name> with the _morph-<race>-name: properties for each race, respectively.
The big disadvantage to this little wonder is that, when you type examine me=/, you are spammed to heck and back! That’s what that little proploc thing is for–you can put all these props on another object and not have to worry about them.
ADVANTAGES: | DISADVANTAGES: |
|
|
Chetar’s Muf-Morf!
(Program by Chetar@FurryFaire)
This is #50603 on FurToonia, and #170673 on FurryMUCK. The following are the @view docs, written by Chetar and edited for HTML and in some cases for clarity.
Purpose:
An easy to use morph program, providing seperate messages depending on new form and previous form. Built-in editing and setup. Compatible with Warwick’s “Say” and Mystique’s “Talk” for changing of say messages.
Installation:
@act morf;smorf;qmorf;eform;morfdefs;edesc;ldesc;sdesc=me @link morf=<#dbref of this program>
- Begin with eform <two letter form code>
- Set species, gender, change messages.
- If using Mystique Talk, setup Talk, Exclaim and Query
- If using Warwick Say, setup def say/osay.
- Add your first description with edesc <two lettercode-descname>
- Add more descriptions as needed, be sure nude descs are named <twolettercode-nude+moretext> if more than one nude
Command Summary:
morf <desc name> to change qmorf <desc name> to change quietly smorf to show current form edesc <desc name> to edit a description ldesc list all available descriptions and forms sdesc <desc name> to display a desc eform <twoletter form code> to edit form settings. morfdefs setup default settings for the program.
Example of installing a single form, two descriptions:
morfdefs set defaults and install @desc eform fl provide the program with the requested data edesc fl-clothed puts you in editor, type description edesc fl-nude type description
To put it a different way–@link an action to the program, and type morfdefs to set it up on yourself. The little two-letter codes are morph names, and can be any two letters you please. Typing eform <code> puts you into an editor, where you set up your say, osay, species, etc. The edesc command lets you make multiple descriptions to go with the say/osay/species properties you set up for the form…what this means is that you have a set of say/osay/species properties defined as a form:
FORM: fl FORM: ni say: wuff, say: erf, osay: wuffs, osay: erfs, species: fluff species: wolf
In that form, you can change between descs–you keep the say, osay, and species props while you change between descriptions. Thus, fl-nude would have the fl-form’s say/osay and the nude description, fl-clothed would have the fl-form’s say/osay and clothed desc, and the ni-clothed morph, if you made one with edesc ni-clothed, would have the ni-form’s say/osay and a different clothed morph.
ADVANTAGES: | DISADVANTAGES: |
|
|
MPI Macros
MPI is Satan’s system to learn, but once you’ve mastered the basics, you can pull some incredible stunts with your description. In the example above, you saw {index:clothing,this}, an MPI macro, used in a description. If you know some basic MPI(6), you can set up a smart little morphing system this way:
- Create an action called morph attached to yourself and linked to $nothing.
- Type @set morph=H, no matter how silly that sounds. This lets the action accept MPI programming.
- Type @succ morph={store:{&arg},morph,#<your dbref>}
- Type @desc me={eval:{list:{prop:morph,#<your dbref>}}}
- Create lsedit lists on yourself for each morph you’d like; for example, for a clothed morph called “clothed”, and a nude morph called “nude”, make two lists, one for each description, “clothed” and “nude”.
- Type @set me=morph:clothed.
- To switch between morphs, type morph <name of appropriate lsedit list>…for example, morph clothed and morph nude will switch between the “clothed” and “nude” lists on your character.
That is, of course, a very basic example, which doesn’t do anything more complex than, say, gen-morph. Once you get the hang of it, though, you can customise the MPI action however you please, adding @succs and @osuccs to the morph action to put out custom messages when you morph, making it possible for others to morph you, arranging your morphs so they are different depending on where you are and who you’re with.
That, and this is the more techno-geek solution, for us oldbies who were online for years before MPI was even invented. 🙂
ADVANTAGES: | DISADVANTAGES: |
|
|
(6)What’s MPI? Read this tutorial before you try to puzzle this out!
Other Morphing Programs
A number of crazed individuals have created their own versions of morphing programs, including room and exit (????) morphers. If they’ve been kind enough to provide such a program, it is usually listed under “plib” or “programs” online.
- pdc-morph.muf (by P. Damian Cugley): #3272 on FurToonia, #8813 on FurryMUCK
- This program is designed to be useful for making an object {such as a player} with a description that can be easily changed with one short command. The idea is to set up your object to use one of the properties-based general-description programs to generate a description; then all that this program needs to do is change some properties and print appropriate messages.
- gen-change (by Vulpis): #27531 on FurryMUCK
- A general morphing program, used to change properties from one value to another relatively quickly. Can be used on objects as well as players, and can change any properties, like gen-morph, but, again, is a little hard to set up. More aimed at morphing objects than players.
- improved_morph.pgm (by D. Maxwell): #11683 on FurryMUCK
- Features:
- Ability to change descriptions at will {of course}
- Customized messages for different ‘morphings’
- Storage of forms onto a separate object, if desired.
- Help screen for easy reference.
A quick note: This program works in conjunction with $desc.
Glossary
- Desc
- Also description. What others see when they look at you. Several lines of text, generally implying that you are a huge and muscular male or a lithe, demure female with extremely obvious secondary sexual characteristics. Your mileage in these areas, of course, may vary.
- Lsedit
- A program which allows you to precisely format text, keeping lists of properties and spitting them back out in order. (Good for ASCII pictures, descs with intricate formats or lists.) Help is obtainable by typing lsedit me=test, hitting enter, and then typing .h and hitting enter. To escape the editor, type .end on a line by itself and hit enter.
- Morph
- As a verb, to change between shapes, clothes, species, or whatnot. As a noun, one of those many shapes. For example, you can morph between being a fox and being an avocado, and if you change from your clothed desc to your nude desc you have morphed into a new description.
- MPI
- My Personal Insanity. There’s another translation for the acronym, but it’s not as appropriate. MPI is an in-server programming language that lets you insert commands directly into descriptions or other messages and do some pretty hefty things. Unfortunately, it’s just hell to learn. Try the tutorial.
- Osay
- The verb others see when you speak. The default is “says”. For example, in “Ginger wuffles, “Please stop poking me with that tomato.””, wuffles is the osay.
- Plib (Program Library)
- Simply an online listing of available programs. Can often be searched. Help is usually found with programs #help or plib #help. May not be installed on all MUCKs.
- Pronoun Subs(titutions)
- On a MUCK a lot of automated messages are spit out, from exits, rooms, and players. Some morph programs spit out automated messages when you switch from one form or another, too. These automated messages sometimes use pronouns, like him, her, or it, that change when you change gender between morphs. Pronoun substitution allows you to put little tokens (%s, %o) into the automated messages which will be read and replaced with the appropriate pronoun. For more help, get on the MUCK and type help subs.
- Property
- Basically, a place on your character to store a value. See the explanation on the MUCK under help properties.
- Proploc (Property Location)
- An object which you carry which stores properties for you. For example, gen-morph can get a little spammy when you examine yourself, because of all the properties you need to set to make it work. If you set up a proploc, you can keep those properties on some other object, and make your character less spammy.
- Say
- The verb you see when you speak. The default is “say”, thus the name. For example, in “You imply, “Would you like to rub my kumquat?””, the word imply is the say.
- Spam (Spammy)
- As a verb, to spam means to fill the screen with meaningless or exceedingly verbose text (much as I am doing here). As a noun, spam refers to that meaningless text. As an adjective, spammy means something that is behaving as a spam, filling your screen with stuff you don’t need or want to see.