User Tools

Site Tools


maps:map_making_guide

Map Making Guide

Without Maps, there would be nowhere to put monsters now would there. Map making is a rewarding task but there are some things to be aware of…

Map Guide

This is a guide on what is an acceptable map and what is unacceptable. Only acceptable maps will be put in the official Crossfire map distribution. Please use the latest release of Gridarta when making maps to contribute.

Directory Structure

  • Maps contained within a city/town should be placed in the city/town directory in the maps tree.
  • If a quest is started from a city/town then it should be placed in the city/town directory.
  • The dungeons directory would be for non-quests that are not linked to a specific city/town region and that are just experience grinds.
  • The quests directory should be used if the quest is not linked to a specific city/town.

Regions

Maps that are not wilderness should be assigned a region. Current defined regions are:

  • wilderness
  • world
  • creation
  • highway
  • greenway
  • scorn
  • scorncounty
  • streetsofscorn
  • scornarena
  • scornoldcity
  • navar
  • brest
  • darcap
  • darcapcircus
  • wolfsburg
  • santodominion
  • lakecountry
  • portjoseph
  • pupland
  • ancientpupland
  • nurnberg
  • lonetown
  • stoneville
  • firevolcano
  • azumauindo
  • dream
  • citydeclouds
  • euthville
  • narcopin
  • whalingoutpost
  • threesisters
  • marksel
  • butakisfortress

Entrances and Exits

  1. Check that all exits lead where they are supposed to. Unless there is a specific reason an exit leads only one direction (like a trap door or perhaps a teleporter), players should be able to exit back from where they came from right when they enter the map.
  2. One way exits/entrances should only be used on objects in which it is obvious it is one way. A house is not an obvious one way entrance. Remember, players may not have the three hours of time it takes to find the exit after being trapped in a map (a work around for this can be have the trap lead to a safe place with no exit which contains a save bed. Thus, the player could save and come back at a later time to find the exit.)

Hallways, Roads, Paths, etc.

  1. Try to make sure the maps are multi player accessible. In towns, this means the road should be at least a couple squares wide, buildings should not be trapped in corners in which case one character standing in front blocks access, etc.
  2. Try to make corridors in dungeons or mazes a few squares wide -especially if there is only a single path. If it is a maze with several different paths, single width corridors are acceptable. The main problem here are big labyrinths in which only one monster attacks at a time, and which there is only 1 or two routes. If two players enter such a map, the one that went in first will be in the lead the entire time.
  3. Avoid spiral or single path mazes that just have monsters lining the corridor. These are not very good for multiple players, not particularly interesting (map just consists of killing all the monsters), and tend to be an easy and safe way to gain experience.

Don't Put

  1. Do not create weapons or other items with the attack_type godpower or protection/resistance to godpower
    1. In order to maintain the challenge level of Crossfire, the attacktype godpower is used. Since it's possible to gain resistances and protection to all all other attack_types certain monsters have godpower which will cause damage to player character. I know, it doesn't seem fair - but it's no fun when the game is easy, either.
  2. Extremely valuable treasure right next to the entrance, or nearby. Players should need to work to get treasure. If the treasure is fairly worthless (food, or non magical items), this would be acceptable.But a character should not be able to pop in, pick up a potion, spell book,or a lot of diamonds, and then pop out again, without ever meeting monster.
  3. Don't put monsters of high experience points near to entrance where they are trapped as this might allow low level players to boost their experience high by using some weapons or spells from distance, but without danger. For example find a trapped troll and get wand of fireball.
  4. Monsters on top of other monsters. A troll should not be sitting on top of an oriental dragon. The only exception to this would be if a monster could be on top of another monster (making sense) and hiding it at the same time. A troll on top of an oriental dragon does not make sense (could not fit), nor can the troll hide the oriental dragon. Using tricks like these which are only applicable due to display limitations is something that should not be done, nor should the player need to click on every monster he encounters to see if something is below it. (As a side note, doing this will tend to lock the monsters into position, making them unable to move.)
  5. Large groups of monsters that can be killed quickly with spells. A fairly popular tactic to make high level maps is just to put 30 dragons (or other tough monsters) in a big room. Do not do this. All the player needs to do is cast a dozen ice storms, and quickly gets millions of experience. Likewise, it is unlikely that any more than 2 or 3 large (multi square) monsters will be able to attack a player or party at once - the remaining 25 will be blocked from doing anything. This then makes it so that having 30 dragons is not any tougher than having 3.

Map tags

(the tags are applicable to trunk maps only)

The Crossfire Mapper tool can take advantage of special tags in the lore field to logically link maps together and display their information in a summed way.

The following tags can be used:

  • @def quest name: defines a quest with the specified name. Note that this does not link the map to the quest thus defined
  • @quest quest name: links the map to the quest with the specified name
  • @end: end of one of the previous tags. You can omit it if the text extends until the end of the lore field

The text from the tag to the end marker is free-form, though it should be HTML (as this is what mapper generates). Basically, @def is meant to describe the quest in detail, including rewards and such, while @quest is intended to specify where to find items or NPCs or such.

General Suggestions

  • If you want to make a high level map, instead of tossing a lot of monsters on it, take existing monsters and make them tougher. Increase their hit points, level (which then means spells they use do more damage), add immunities or protections, remove vulnerabilities, change attack types, etc. Try not to totally change the characteristics of a known monster - a normal dragon should still be dragon like. Also, remember to adjust experience that the monster gives.
  • Try to keep the treasure in line with the difficulty. 5 potions should not be given out for defeating orcs or gnolls (even if there are a lot of them), but if you need to defeat several dragons to get to the potions, that is fine. Likewise, if it is likely a lot of spells would be needed to defeat the monster, and those spells have a chance of destroying the items, then perhaps a few extra items to take this into consideration not a bad idea.
  • If use of a specific skill/class/spell is needed to complete the map, that should be stated near the map entrance. How clearly this is stated depends on the circumstance. There is probably no good way other than to state that a skill is needed, but, stating, for example, that a spell caster of XX level might be sufficient, with the assumption that a spell caster of that level would have the spell. It is safe to assume that all characters can fight, but magic use (especially certain spells) should not be assumed, and thus should be stated. The reason for this is that it can be frustrating to wander into some map, complete most of it, but find out you can't finish the map because you lack some skill or spell.
  • Also, don't put in hidden rooms requiring dimension door if the only real way to know about them is pure luck or looking at the map. If you want to do something like that, at least put some clues in.
  • If a certain skill makes a map easier, it is not necessary state that.

Features to Avoid

  1. A map should be designed so that a character can never be trapped in a room (except via other player interaction.) A character should never be forced to dimension door or word of recall out of a map because some gate closed behind him. For a character without these spells, being trapped means death. A simple method around this is put a lever on both sides of the door. If the door is opened by special actions (saying things, dropping things), just put the lever on the hard to get side of the gate.
  2. If a map requires simultaneous use of multiple players to solve the map, put a sign or message so players know. Such maps would be those that require manipulation of levers or buttons in certain sequences in order to get through gates.
  3. Don't make ends of maps require multiple users. This ruins that map for single players (not able to complete it), and makes a map that requires multiple players for only a small portion.
  4. Try not to make the maps too many levels deep. To get to the goal, it should not require a 6 hour continuous sitting, as the player works through each map to get to the next. Multi-level maps are fine - just don't over do it. One way to do this is to have several maps with a key or other special item at the end. The final map could have the various battles, and then a series of gates/altars that uses up these keys.

Shops

  1. Do not put super stores in any towns or villages you create. With the growing number of maps, players can already make a trip to all the different towns to try and find certain items. A one stop shop of every conceivable item is not interesting. A good maximum size is about the same size of the shops in the starting village.
  2. Also, making six magic shops of that size and putting them in the same town is not any better than one large magic shop. If you want to have specialized shops, then make each shop smaller. If you just want one shop that sells every type of item (magic, armor, weapons, food, etc), then a large shop is permissible.
  3. Make sure the entire interior the shop is covered with tiles. Likewise, do not put shops that lead to areas without going over one of the magic doormats. A player should never be able to get an unpaid item out of a shop, whether by exiting without going over the magic doormat, or through the use of spells.

Map Layout and Placement Suggestions

  1. Don't make maps which require high level characters that low level characters can wonder into without warning. Put a warning sign nearby,or gates or doors so the player can see they are in over their head, instead of instantly getting toasted the second they enter the map.
  2. The structure of the map should make sense. That is to say, if you enter a house, the house should then not have a tower or a door to a shop inside. In other words, if a map has an exit to another map,that exit should make sense (ie, another level, tunnels, dungeons all make sense. However, another building the size of the original does not make sense.
  3. Try to keep the difficulty throughout the map(s) about the same.The first monster in the map should not be the most difficult monster, nor should the last monster be orders of magnitude more difficult than anything before it.
  4. It is very frustrating to play a map, killing most every monster without much difficulty, only to find the last monster invincible to the character that just made it through the rest of the map just fine.
    1. It is reasonable to have the monsters increase in difficulty. Also, if the map has no quest or end goal, then having a very difficult monster around is not unreasonable, as long as it does prevent the player from progressing to the next map.
  5. Do not place directors with bullet, lightning, fireball, etc. that are a loop or continuous. Example: Do not have two directors, each facing each other, with a bullet wall firing into them at the side.
  6. Having numerous directors is fine. But make sure that eventually, there will be an exit/detonation point for the fired spell. Having loops that go for over typically bring the game to a halt, as the objects just multiply and the game consumes more and more CPU time.

Technical Map Hints

  • If you are creating a new archetype, it only needs to go into the general archetype distribution if it has a unique image associated with it, or it has general use (a new monster). Something that uses already existing image can be set up in the map file itself (through setting various variables).
  • When modifying an existing archetype into a new one (either new face or new type), use the archetype that has the most variables in common.Thus, if you want to create a monster called a boulder, it is probably best to take a monster of some sort and change its face instead of taking the existing boulder archetype and changing its type, hit points, speed,etc.
  • Changing color is no longer possible in maps - instead, a new face and image must be created, and then put in the standard distribution.The archetype collection script will automatically pull out face information from archetype files.
  • Try to keep maps readable by other people who might edit them. Thus, instead of modifying a woods space so it also acts as an exit, just put an invisible exit under the woods space. This has the same functionality, but it makes it much easier for other players to see what this space does. (Side note - if you want it so that players actually need to apply the space to enter, you will need to change the face of the exit for this to work. If you do this, you should also accompany it with a magic mouth.)
  • Don't be too intimidated about writing new code if there is something you would like to be able to do and it isn't currently supported. If you are not the code writing type, make a suggestion. Worst case is it gets ignored. But many times, someone has written code because a mapmaker had some idea which just was not possible at the time (ie, the apartment in the starting town required an expansion/change of the unique item code.) On the other hand, please don't ask for new code and then bail out before adding a map that uses the new feature since that tends to make a developer less likely to want to write code the next time someone asks.

Map Difficulty Level

FIXME - needs better organization; draft & work in progress

  • Make sure you set the difficulty field in the map attributes to something meaningful. Crossfire will calculate a default difficulty, but its formula is hardly ideal.
  • The difficulty of a map determines how magical the treasure will be (and some treasure types won't show up unless the map has a certain difficulty level.)

Map Difficulty Level Factors

Base Line
  • Check and see what level monsters are that are already in the map
  • Compare that with the map spoilers on the Crossfire website
  • Consider nearby maps (For instance, Port Joseph is considered a low level map region while Ancient Pupland is a high level map region)
  • If the map has no monsters, generally speaking the level should be 1, but the follow exceptions may apply:
    • Any time there is random items (weapons, scrolls, food) on the map, a level should be set appropriately
    • Any time there are traps in a room, a level should be set appropriately
    • A treasure room should have a difficulty level set to something approximate to the related map set
Factors that INCREASE Difficulty
  • Monsters with multiple attack types
    • Especially dangerous: acid and draining and poison attacks
  • Monsters or traps with large area of effect spells or damage attacks (fireball or rune of fire)
  • A mixed group of monsters - see all other points related to monster placements
  • Monsters with very damaging spells such as comet, meteor swarm, frost nova, ball lightning and holy word line of spells (holy word, banishment, etc.)
  • Large group of monsters that can swarm a player
    • This prevents them from escaping or leaving the map
    • This allows the player to take damage or be attacked from eight sides
    • This renders many spells useless because they will damage the caster (fireball, snowball)
  • Traps (bullet wall, lightning wall) that can not be disarmed or disabled
    • Some traps are far more dangerous to certain classes (Rune of Magic Draining for wizards) and at certain levels (Rune of Death) for all classes
  • Monsters with numerous protections or resistances
    • Protection from the elemental attacks can make the task especially hard for fireborn and some dragon players
  • Monsters that can summon other monsters (elementals, pets, cult monsters, animate weapons)
  • Floors that can cause damage, such as lava (fire damage) or swampland (death from drowning)
  • Monster has the attack_type godpower (players have no protection against this)
  • Monsters that can replicate without generators (mice, slime)
  • Numerous generators that can replenish a monster population quickly
    • Generators that are unreachable by the player
  • Maps that are no_magic (no wizard/mage type spells will work, see also Grey Area about Spell Restrictions)
  • Maps with unholy ground (no cleric/priest prayer magic will work, see also Grey Area about Spell Restrictions)
Factors that DECREASE Difficulty
  • Single monster (unless it is a highly tweaked, aka “boss monster”)
  • Hallways that make movement difficult for opposing monsters - such as a large dragon behind a doorway
  • Monsters with vulnerabilities to multiple attack types
  • Single type or race of monster located in a map (see also the Grey Area about Undead monsters)
Grey Areas in Regards to Difficulty

They Grey Areas are special cases or scenarios which can work for against the player character. Here's a partial list of factors that need consideration on a per case basis:

  • Single space hallways - can work for or against the player & monsters
    • Player - can only be attacked from one direction
    • Monster - certain spells are even more deadly (large lightning bolt, confusion) since the player has no way to avoid them
  • Large and open rooms
    • Area of effect spells can work for and against players and monsters
      • Player can kill lots of monsters with a single spell casting
      • Monsters can kill other monsters with a single spell casting
      • Player could get caught and take damage from numerous spells cast at the same time and is unable to escape in time
  • Undead monsters
    • They are immune to disease - this would normally increase the difficulty level
    • They are vulnerable to Holy Word spells and many cases Fire too - this would normally decrease the difficulty level
  • Spell Restrictions
    • This can work in favor of the player (monsters can't cast spells either)
    • Or against the player (can't use prayers or spells or both)
  • Floors that slow movement
    • Can work for and against the player, but can also be overcome easily by using levitation
    • Can make the map harder by populating the map with flying monsters when the player has no access to levitation
  • Darkness
    • This can make it harder for the player to see contents in a map
    • Carrying a light source may make them draw more attention from aggressive monsters
    • Could make it easier for the player if monsters have limited dark vision

Other Suggestions

The following are various suggestions for making good or interesting maps. A map that does not need to follow all these hints to be accepted, but following these hints will make for more interesting or playable maps.

  • Try to create only small maps. If you have a large map in mind, try to see if you can possibly split it up into several separate sections, and place those sections in different maps. Many small maps use much less memory than one large map since Crossfire doesn't yet support swapping of portions of maps. Also, with small maps, the time to load and store becomes so short that it's impossible to notice. In this context, small means about 32×32, though it's actually the number of objects in the map that count.
  • What is potentially more critical than the size of the map is the number of objects (memory usage), and live objects (CPU usage, as each needs to be actively managed).
  • Remember that with large maps, all generators crank out monsters whenever anyone is on it. This could mean that a lot of monsters have been generated before a player even gets to the area where they are being created.
  • Related to this: If a map contains multiple levels, make multiple maps. Many times, if the level is small, the mapmaker may think I will just put all the levels on one larger map. This makes the map a little less readable to others. Also, things like magic mapping and dimension door can lead to unexpected results.
  • Make a plot! A map without a plot becomes just another mindless “Kill all”. For instance, create a story which explains why there are NPC's here and monsters there, fragment the story up and put bits and hints of it in various worktables (books) and NPC-conversations.
  • If you are going to make a mindless kill-them-all map, at least put some reward in the map that can only be accessed after all the monsters have been killed. The only thing worse than a hack-and-slash map is one that you get nothing out of.
  • Avoid maps where all the monsters are lined up and can only attack you one at a time. This just makes an easy (and relatively safe) way for a character to gain experience and treasure, while not being especially interesting or challenging.
  • A good idea for the rewards at the end of quests are specific items (luggage, spell book of some otherwise not available spell, special weapon, spell crystal, etc.) It is much more interesting to put a specific item instead of something like a random artifact. Feel free to mutate or otherwise change existing artifacts to create your own.
    • This has two advantages: one, the player will get to know where certain items are. Having to search endlessly for a specific item gets tedious. Two, it reduces the incentive to keep repeating the quest (repeating quests is not inherently bad). If the reward is a random artifact, a player may very well keep repeating the quest until the item he looks for comes up. By doing specific items, this will not happen.
  • Make puzzles! Use all those different object types: buttons, handles,doors, altars, pedestals, triggers, timed gates, etc… Hide special “keys” needed to get further in special places, and use text-puzzles to describe where they are hidden and how they must be used. The possibilities are endless! Remember, you can also hide buttons under floors, making it more difficult for the character to find the trigger points. At the same time, try not to make puzzles that have no clues so that players never realize there is a puzzle on the map.
  • Do not make too many big labyrinths. Making of labyrinths is (too) easy with a map editor as you just select auto-joining and make zig-zags with the mouse. But the results of these are quite tiring. If you make ones, try bring some unique aspect into it.
    • Related: Don't make maps where the only way to find something is examination of each and every wall. For example, don't have a big map with lots of walls, but the key to moving onward is to find the weak wall and pass through it. Nor should big mazes full of invisible walls be made where the way to get through it is just by going in some direction, finding out you can't move anymore in that direction, go some other one, etc. * Give the NPC's information! An NPC's knowledge about hidden treasure surely makes it interesting to have a conversation with it.
  • Feel free to add traps, but be careful to not make them too deadly without adequate warning.
  • Do not mix the monsters too badly. Let there be at least some logic behind why they are grouped in a single room. Undead together with undead, for instance, but not together with kobolds… Big dragons usually don't live together with mice… Fire-immune creatures generally dislike ice-immune creatures.
    • Also, limit use of monsters that multiply rapidly (mice, slimes). A map that is easily overwhelmed with these creatures quickly becomes useless and frustrating.
  • Give your maps a meaningful name (like John's tower, level 1). This way, these can be used instead of the map paths in the highs. Also, in terms of the actual file name, try to use numeric level identifiers (ie, maze.1, maze.2, … instead of maze.first, maze.second,etc.) The number in the name helps map levels sort a little bit nicer in the directory.
  • Try to make the map so that it links in with the existing world. Most people want to make their own continent, which is then accessed by ship or other fast means. While convenient, this creates many island continents. The problem with this is that any feeling of relation is lost (where is that island continent), and it makes item searching in shops very easy - if you can access half a dozen shops quickly and safely by taking boats, you have a decent chance of finding the item you want.
  • Also, it seems that when most people start making maps, the first thing they do is create a new town or village. There are already a lot of towns and villages out there. If you are just going to create a few new buildings, instead of going to the effort and time of creating your own island with at own, just create the buildings, and plug them into one of the existing towns or the terrain someplace. Many of the towns right now have many unused buildings.

Map Contributions

Once a map has been created, you have the option of contributing it back to the Crossfire project. Here are a few ways on doing that.

NOTE In all cases, compress the map file(s) first by using either WinZip (for .zip files) or tar (for .tgz files) as this helps to save bandwidth, disk space and overall time to “handle” the files.

Creating a "diff"

There are all kinds of technical reasons for using a “diff” file to merge in file updates. The biggest reason is it gives the person working with your map changes an easy to read a file comparison to see what has changed, exactly. One needs Subversion (SVN) installed and set up before attempting to create a diff.

SVN diff from the command line:

$ svn diff > patchfile

This runs a comparison (or difference) between your local files to what is in place in the Crossfire Subversion repository at SourceForge. It is advisable to use a descriptive name for the patchfile, as that is just an example.

Next, use the tar command to compress the patchfile.

$ tar czvf mypatchfile.tgz patchfile

This takes the contents of patchfile and compresses it into mypatchfile.tgz

The command to uncompress said file is

$ tar xzvf mypatchfile.tgz

Remember, c = compress while x = extract

FIXME - Document how to create a diff against SVN using TortoiseSVN and TortoiseMerge

Once you have a diff or patch file, see the options below for submitting them or making others aware of your new map or map updates.

Submit the map as a "patch" on SourceForge

  1. Follow the online instructions for submitting the patch - please be thorough on filling out the online submit form
    • Keep in mind there is a maximum file size for the file upload (around 200KB) so you may need to submit multiple patches or make the maps available via other means (personal web area, etc.)
    • Please check back to the Patch page for any follow up questions and feedback in regards to your map(s)
maps/map_making_guide.txt · Last modified: 2018/04/03 12:12 by karl