The Builders F.A.Q.

CoffeeMud 5.8

This FAQ is a supplement to the Installation Guide, Game Builders Guide and the Archon's Guide included in this package. This FAQ was written and compiled by Jeremy Vyska and Bo Zimmerman with assistance from many of the helpful members of the CoffeeMud Yahoo Group.

[ ]{#questions}

[ ]{#answers}

[What should I know to run a CoffeeMud?]{#q00}

Well, for starters, if you're going to run it on your computer and you don't know how to setup a firewall with port forwarding, you will have a tough time (and our group isn't really a network support group, so we're not top-notch at helping folks with their network troubles).

Secondly, if you plan to do anything clever, different, or otherwise doing anything that isn't using what is within the system already, you will either need to know some basic Java coding OR be able to bribe a Java savvy friend with beer.

You should also have some idea about what you want to have in your game. Yes, I know this sounds obvious, but it gets overlooked. CoffeeMud supports Fantasy based games, so you will want to bear that in mind. In progress is support for Sci-Fi games, but it is a work in progress that is in its early stages.

[Can I add Northeast, southwest, etc? What supports it?]{#q01}

Yes, haven't you read the INI help descriptions yet? DIRECTIONS=7 can be changed to DIRECTIONS=11, thereby enabling Northeast, Northwest, southeast, and southwest.

[Where do suggestions, questions, and bugs go?]{#q02}

Well, best bet for questions, suggestions, and bugs is to email coffeemud@yahoogroups.com. Many times people will expand on suggestions or have fixes for bugs for you pretty quickly.

[Does CoffeeMud support Remorting?]{#q03}

Yes, in its own way. Here is the HELP REMORT entry:

Remorting requires careful planning and, if you don't have the benefits of certain Druidic chants, lots of time. Remorting is done through your children. Children are created by using the MATE social with a member of the opposite sex while the both of you are suitably undressed. If pregnancy occurs in the female, birth will occur some 10 mud-months following this. The child should remain in the mothers inventory until it can walk, which occurs 9 mud- months following birth. If the child is Christened by a Cleric with a player legal name, and if the child remains as a follower of either the father or the mother until it grows up, it will become a player, which occurs 18-27 mud-months after birth. If the child does not remain an active follower, or if it is never Christened, it will grow up to be a mob, or perhaps not grow up at all! Should the named child grow up, the child will cease to be a following mob, and become a player which can be logged-in as. The child may be a mixed breed of the mother and father if one of them is a Human and the other is not. Racial benefits will be split between the mother and father, though children will have a bonus to their maximum stats when they become a player, making them a good choice for playing!

If you are looking for that traditional remort concept revolving around classes, it is not supported. But you can accomplish that through setting the INI CLASSYSTEM=MULTI, then do a bit of code changing within your class files. For example, you might have 'Super Wizard' or something. In that class file:

public boolean qualifiesForThisClass(MOB mob, boolean quiet)
{
 if((mob.charStats().getClassLevel("Wizard")<30)
 &&(mob.charStats().getClassLevel("Power Wizard")<30))
 {
 if(!quiet)
 mob.tell("You aren't a master of wizardry yet.");
 return false;
 }
 return true;
}

In that case, the player would have to have 30 levels in both "Wizard" and "Power Wizard" to qualify for the "Super Wizard" CharClass.

[How can I localize CoffeeMud to translate it into other human languages?]{#q37}

Getting CoffeeMud 100% translated will be difficult, but here's a quick way to get you the first 90% of the way there.  

First, copy the input parser file [resources/parser_en_TX.properties]{style="font-style: italic;"} into the same folder will a different language name, such as [resources/parser_fr_CA.properties]{style="font-style: italic;"} for Canadian French.  

Next copy the output translation file [resources/translation_en_TX.properties]{style="font-style: italic;"} and rename the copy, just like you did with the input parser file.

Open up coffeemud.ini file, find the entries for LANGUAGE= and COUNTRY= and change them accordingly.

Open up your copy of [resources/parser_??_??.properties]{style="font-style: italic;"} and scroll down until you see [command-word-processor] and a line underneath it which says[ #autoignore 9999]{style="font-weight: bold;"}.  Remove the hash mark # so that it says [autoignore 9999]{style="font-weight: bold;"}.  Save the file, we will edit it again later.

Open up your copy of [resources/translation_??_??.properties]{style="font-style: italic;"} and scroll down until you see [session-translation] and a line underneath it which says[ #autoignore 9999]{style="font-weight: bold;"}.  Remove the hash mark # so that it says [autoignore 9999]{style="font-weight: bold;"}.  Save the file, we will edit it again later.

Now log into your mud as your Archon and start entering commands. As you enter commands and do things, the parser and translation files will fill up with unlocalized strings that it encounters.  Early versions of this deature won't capture EVERY string, only those designated as localizeable, but eventually every string will be handled.  When you are satisfied you've seen every string and entered every command you want to localize, you can stop and let your users take care of the rest.

Last step (for now at least), is to re-open your parser and translation property files and find the two sections we modified earlier.  You will see that those sections have been filled with a whole much of lines like this: IGNOREWHOLE "You are now speaking @x1." IGNOREWHOLE "WIMPY" You want to change those lines to REPLACEEXACT commands, while being careful to maintain case sensitivity, like this: REPLACEEXACT "You are now speaking @x1." WITH "Que vous parlez @x1." REPLACEEXACT "WIMPY" WITH "MAUVIETTE"

You can keep the AUTOIGNORE 9999 command at the bottom of the list, and it will continue to add any new strings it encounters which were missed the first time around.

After this, it gets easy, but tedious -- you'll need to localize all the faction files (alignment.ini), all the help files, text files, lists.ini, and all the other loose files.

For everything that the above does not catch, CoffeeMud supports other languages through a translation system which utilizes regular expressions.  Again, read through the files resources/parser_en_TX.properties and resources/translation_en_TX.properties.  The former translates text entered by the user, the later translates text sent TO the user.  Experimenting with these features will get you there, one phrase at a time.

[Does CoffeeMud have a Building Port?]{#q04}

No, there is no separate port for world content creation. All building tools are on-line realtime. It is easy to export and import areas, so you can run more than one copy. This can be essential if you are also making coding changes, which can be activated more quickly by rebooting your mud than with online code reloads.

[Does CoffeeMud have any other combat options besides normal, queue, and manual?]{#q05}

Yes, CoffeeMud supports a turn-based combat system, though it could use some feedback.  The way it work is that every player or mob that is in combat must wait their turn before they can perform actions.  During their turn, any ticking effects (such as poisons or temporary shields) will resume ticking.  Each player or mob can only perform as many actions as they have action points, which is as normal, though more painfully obvious when using the turn-based system.

[What databases can CoffeeMud work with?]{#q06}

Anything JDBC or ODBC friendly. It comes with a flat file system called FakeDB so you don't have to setup a database if you want. However, products like MySQL and HSQLDB make the system run much faster.

[How do Clans work?]{#q07}

First, you need to use the clancreate command to create a new clan, during which you can give your clan a name, and decide how the officers will be structured (tyrannically all the way to democratically). You have to get at least MINCLANMEMBERS amount of new members before it will activate you (Set in the INI file). Activation means you will be visible in the listing, can buy land for the clan, can have clan bank accounts, and can hire mobs, as well as have politics with others.

Once you've made your clan, people can 'clanapply' to the clan. Of course, the person has to be at least level MINCLANLEVEL (Set in the INI file). 'clanapply' can be done even if you're the only one online. Clan bosses can set qualifications to the clan with the 'clanqual' command and both bosses and lieutentants will see new applicants in their 'clandetails' screen, at which point, they can 'clanaccept' or 'clanreject' the player (regardless of online status). Clan bosses can also 'clanassign' people roles, such as treasurer, lieutentant, or even boss. Clan bosses and lieutentants may, at any time, 'clanexile' a member - as well as members can 'clanresign'

Once you're accepted into a clan, you can use the clantalk channel to talk to your clan, as well as use the 'Clan Home' and 'Clan Donate' spells. The 'clanhome' location and the 'clandonate' location can be set by bosses using the 'clanhomeset' and 'clandonateset' commands. Clan morgues can be designated with the 'clanmorgueset' command. Bosses and treasurers may deal with any Clan bankers and Clan Postmen in your game. If MINCLANMEMBERS don't at least login in DAYSCLANDEATH days, then the clan will be purged automatically.

[What does Hunger/Thirst/Fatigue affect?]{#q08}

Neglecting to eat or drink can put a player into a state of hunger or thirst respectively. Failing to sleep for days on end can cause fatigue. Each of these will lower attack rating, armor rating, and damage capabilities. Hunger and Thirst will also decrease the rate at which hit points, movement, and mana are regained. Lastly, remaining Hungry or Thirsty for too long will result in death, though there will be plenty of warnings from the system before it happens.

[Can I make rooms available for players to purchase? Can players have homes?]{#q09}

Yes. And there are a ton of ways to do it. The most common way is to create a special Area for player homes, put some rooms in it which you want to be for sale, and then add either Prop_RoomForSale, Prop_RoomsForSale or Prop_LotsForSale to each room as a property. Then, in the same area (but not in one of your rooms for sale!), put a shopkeeper that sells either Clan Homes/Land or Player Homes/Land. This will force the shopkeeper to keep an updated inventory of titles to rooms available for sale.

[How can I make mobs talk/answer questions?]{#q10}

Luckily, a great document has already been provided for the useful things which can be accomplished with the MudChat behavior. Here it is.

[How do player Tattoos work?]{#q11}

Tattoo's are intended to act as miscellaneous flags which players may obtain, like a quest point. These tattoo's can then be checked for as requirements to enter rooms or exits using Prop_ReqTattoo, or using Prop_ReqEntry. Prop_HaveZapper and Prop_WearZapper can also be used to check for tattoos.

An example would be like this: The completion of a specific quest occurs when Gunther defeats the evil sorcerer Nunder and enters his inner chamber (where all the treasure is hidden). Entering this inner chamber automatically grants Gunther a Tatto called "NUNDERKILLER" because Prop_TattooAdder was on the room as a property. Now, elsewhere in the realm is the second quest where Nunder's apprentice has escaped with an ancient artifact and is up to no good. However, to even ENTER the area where Nunder's apprentice is operating, the system (via the Prop_ReqTattoo property on this other Area) requires that Gunther already have the "NUNDERKILLER" Tattoo. If Gunther had not defeated Nunder, he would not be allowed into the realm of Nunder's apprentice.

[How do I make poisonous drinks?]{#q12}

The best way to "mix a drink" is to make a GenPotion item, and add the relevant Poison_* as the potion spell effect. Another way is to make a GenDrink item, add the Poison_ as an effect.

[How do I make other Archons?]{#q13}

Using your existing Archon, issue the command "create item ManualArchon". Then have your other player get the manual and read it.

[How do I make materials that the Common Skills can use?]{#q14}

Make sure you create a GenResource, GenLiquidResource, or GenFoodResource item. Only items of this sort will be recognized as raw materials by the common skills.  This can be more easily be done by entering CREATE 100 CORN, etc..

[Why don't my aggressive mobs attack me?]{#q15}

Aggressive mobs don't attack Archons, or anyone else with CMDROOMS or ORDER security privileges.

[Why don't my mobile/patrolling mobs move?]{#q16}

Mobile mobs will not move if an Archon, or anyone else with CMDROOMS or ORDER security privileges is the in the same room as them.

[How do I import CoffeeMud areas (*.cmare)?]{#q17}

Check out the IMPORT command. Logged in as your Archon, enter AHELP IMPORT.

[How do I import ROM/Circle/other areas (*.are)?]{#q18}

Check out the IMPORT command. Logged in as your Archon, enter AHELP IMPORT.

[Why isn't my variable equipment working?]{#q19}

Equipment which is placed on a mob and designated as variable will not disappear so long as an Archon, or anyone else with CMDROOMS or ORDER security privileges is the in the same room as them.

[How do I make a Classless version of CoffeeMud?]{#q20}

The CoffeeMud.ini file has a parameter called DISABLE. If CLASSES is added to the disable parameter, then CoffeeMud will skip the class selection process at logon, and automatically set the player to the normally dormant class called "PlayerClass". This class, by default, qualifies for all skills. If you'd like to have the PlayerClass qualify for only a certain subset of skills, you will need to either modify PlayerClass.java, or create a new GenCharClass called "PlayerClass" and give it your own set of skills to qualify for. If you want, you can create certain races for which there is no character class by setting the CLASSLESS flag within your GenRace or custom coded Race.

This will also skip the class selection process for new players, and automatically select a class which (despite the DISABLE flag) the race qualifies for. See StdRace.java for how to code the classless() flag in races. See the section on GenCharClasses above for information on racial class qualifying.

[How do I make a Levelless version of CoffeeMud]{#q21}

The CoffeeMud.ini file has a parameter called DISABLE. If LEVELS is added to the disable parameter, then CoffeeMud will not allow any player to gain or lose levels, either magically or through normal means, despite any experience points that may be gained or lost. Individual classes and races can also be designated as being "levelless" through either coding custom classes and races, or through the GenRace/GenCharClass creation process. See StdRace.java or StdCharClass.java for how to code the classless() flag in java. See the section on GenCharClasses or GenRaces above for information on how to do it through that interface. Note that adding LEVELS to the DISABLE flag does not prevent gaining or losing experience, but just the leveling consequences.

[How do I make a Levelless AND Experience Pointless version of CoffeeMud?]{#q22}

A. The CoffeeMud.ini file has a parameter called DISABLE. If EXPLESS and LEVELS are added to the disable parameter, then CoffeeMud will not allow any player to gain or lose experience points or levels, either magically or through normal means. Individual classes and races can also be designated as being "levelless" and "expless" through either coding custom classes and races, or through the GenRace/GenCharClass creation process. See StdRace.java or StdCharClass.java for how to code the classless() and expless() flags in java. See the section on GenCharClasses or GenRaces above for information on how to do it through that interface.

[How do I make a Raceless version of CoffeeMud?]{#q23}

The CoffeeMud.ini file has a parameter called DISABLE. If RACES is added to the disable parameter, then CoffeeMud will skip the race selection process at logon, and automatically set the player to the normally dormant class called "PlayerRace". Individual classes can also be designated as being "raceless" through either coding custom classes , or through the GenCharClass creation process. See StdCharClass.java for how to code the raceless() flag in java. See the section on GenCharClasses above for information on how to do it through that interface.

[How do delete all the stock class or races and make my own?]{#q23}

The CoffeeMud.ini file has a parameter called DISABLE. If STDRACES and/or STDCLASSES is added to the disable parameter, then CoffeeMud will not allow players to create characters using any of the Java-coded races and/or classes. You can also just go into the com/planet_ink/coffee_mud/CharClasses or com/planet_ink/coffee_mud/Races directory and delete the Fighter.* files or Dwarf.* files as well. Whichever way you choose to go, you'll need some races and/or classes to replace the ones you are leaving out.  You can do this through the MUDGrinder or the command line.  Check the Builders Guide for information on generic Classes, and the Archon's Guide for information on generic Races.  If you use the DISABLE flag route, remember that it will also keep players from choosing any of your own Java-coded classes or races as well.  If you need to add races back in, consider converting them to "generic" versions from the MUDGrinder or command line. 

Another way to make a standard race or class unavailable for players to choose is by converting the race to generic, and then changing the Availability to either "Unavailable" or "Skill Only".

[How do I make an item that never loses Condition?]{#q24}

There are a couple of ways. One is to place Chant_Unbreakable on the item as permanent Effect. Another way is to change the items Magical Ability score, and turn on its Is Magical disposition flag on. This will make the item more resistant to mundane damage.

[How can I make food that doesn't rot?]{#q25}

The only kinds of food that rot are those from the class GenFoodResource, which are materials FLESH or VEGETATION. The easiest way to make food that doesn't spoil then is to make it out of GenFood instead of GenFoodResource, or to change its material from FLESH or VEGETATION to something else. Another way is to make the resource magical by turning on its Is Magical disposition flag.

[Whats coming down the road for CoffeeMud?]{#q26}

Some day in the distant future, CoffeeMud will support three different genres representing three different KINDS of games. One will be the Fantasy game that it supports now, which involves the improvement of a player character through skills and leveling. Another will be a Technical/Science Fiction game involving the accumulation of wealth and power in outer space and in other ways. A third will be a Modern/Fantasy Hero game involving players pitting their wits against each other in engine-moderated contests. The Hero game will feature super heroes and villains.

[Whats with the Space Ship Stuff?]{#q27}

See the answer to the next question.

[Whats with the Heroics and Technical settings on Areas, Classes, and Races?]{#q28}

See the answer to the next question.

[Whats with the Electronics stuff?]{#q29}

See the previous question on whats coming down the road for CoffeeMud. The answer to the last question is no -- none of it works yet, but it will some day.

[How do I make a mob that doesn't rejuv after he is killed?]{#q30}

Setting a mobs REJUV setting to 0 will prevent him from automatically resetting. Not saving him in the room he started in will make this permanent across engine reboots.

[Does CoffeeMud have an Overland Map ability?]{#q31}

Yes, there are two ways. The easiest is to set AWARERANGE in coffeemud.ini to something higher than 0. The other way is to check out the Regional Awareness skill. It is restricted in the base distribution, but can easily be made generally available to all players. 

If you want to do this programmatically, just open up the file resources/skills/allqualifylist.txt and add a line like:

list therein:

1 Skill_RegionalAwareness

If you want to do this through the MUDGrinder, you'll have to modify each and every one of your character classes, and qualify them all for Skill_RegionalAwareness.

[How do I make a particular resource available for Foraging/Chopping/etc in a particular room?]{#q32}

Check out the ResourceOverride behavior.

[Can players have their own shops?]{#q33}

Yes, in several different ways. One is for the player to gain the Marketeering skill. This allows them to become shopkeepers, sell their goods, and set prices for their goods. Another is to "purchase" a ShopKeeper-type mob being sold with the property Prop_Retainable. A mob sold with that property will take up permanent residence at the players home, and sell the items that are given to them. Money made in this way will go to a bank account (see StdBanker) held by the owner of the property. A third way is through Conquest. If the player belongs to a Clan, and that clan conquers an Area which has the Conquerable Behavior on it, the shopkeepers therein will become beholden to the leaders of that clan, selling any items they give to them.

[Can clans buy healers and such?]{#q34}

Yes. Put a healer mob up for sale at a shop. The healer mob should have the appropriate behaviors and skills to make them a healer (such as Healer, or NiceAbilities behaviors) and the Prop_Retainable property. That last will make it so that the player is forced to pay the mob for his services, and makes sure that the mob is saved at the players home.

[How can my players sell their raw gathered resources?]{#q35}

Create a shopkeeper that sells hides, lumber, metal, rocks or some combination of those. Next, if you like, use Shop Item Pricing to make resources (-javaclass +GenResource +GenFoodResource +GetLiquidResource) more valuable than normal.

[How can I have a command like ROM's "SCAN" for seeing in multiple rooms?]{#q36}

Give every class the skill "Spell_Farsight" or "Skill_RegionalAwareness", depending on what you are after.  Farsight lets them see into adjacent rooms.  Regional Awareness lets them get see the gist of the entire outdoor area with little graphic characters.

[How can I delete Player Classes I don't want?]{#q36}

From the MUDGrinder or Command Line, you simply need to modify each class you don't want and convert them into a Generic Class (GenClass).  This will allow you to alter their availability to Never be available.

[How can I delete Player Races I don't want?]{#q37}

From the MUDGrinder or Command Line, you simply need to modify each race you don't want and convert them into a Generic Race (GenRace).  This will allow you to alter their availability to Never be available, or available only from skills.