Table of Contents

  1. General Map Making
    1. Map Numbers
    2. Doors
    3. Signs & books
    4. Placing Items
    5. Item drops
    6. Misc
  2. Quests
    1. Story Level
    2. Quest Entities
    3. Quest items
  3. NPCs
    1. Basics
    2. Dialogue
    3. Shops
    4. Actions
    5. Scripted Changes
  4. Monsters
    1. Monster Classes
  5. Cinematics
    1. Not Working
  6. Tools & Appendices
    1. Item code generator
    2. Constant & Special codes
    3. Name code generator

1. General Map Making

1.1. Map numbers

Every map has to have a map number, it's set on the impulse key of worlspawn. This was supposed to be for multiple save points originally, but that use has faded. Primarily now map numbers are used for player spawn points. If the player spawn point's 'worldtype' key matches the map number of the previous map, that is where the player will spawn. This, for example allows you to spawn by the sewer entrance when you come from the sewer map in curig2.

1.2. Doors

Making doors isn't as easy as Quake, but it's not as hard as regular hipnotic rotating stuff. The first thing you need to do is create your door brush(es). Attach them to the "rotate_object" entity.

Rotate object can have a few properties:

The next thing you need to do is either make a copy of your door, or it it's excessively detailed, a simple box shape roughly the same size will do. Then tie these brushes to func_blockwall. This entity is the blocking of the door unlike Hipnotic or Quake, doors in Prydon are on or off deals. Either the blockwall blocks the way, or it's impassible.

The blockwall can have the following values set:

Note that to set up story parameters (see Story Level on a door, set them on the func_blockwall. So in short, a door consists of these three entities: rotate_object, func_blockwall and info_null. Note that regular Quake doos aren't supported, in fact no moving BSP entities are supported. If you want some drop me a line and I'll see what I can do.

1.3. Signs & books

Signs are crossed between a door and an NPC. They can display a large amount of text or (more commonly) a single phrase when the cursor hovers over it. Using them is easy, simply make some brush(es) in your map into the classname "sign" (I normally don't use prefixes such as func_ etc, so it's just sign). Then set the netname key to what you want to say. netname is the universal 'mouse over text' field, by the way. If what you want to say is a lot bigger than one or two lines (at 40 characters each) then you'll need to make it a clickable sign. To do add a "message" field. Here you can put as much text (be sure to put an \n after 40 chars) as your map editor will allow. Since I use worldcraft and it's profoundly weird (I think it might be related to a QBSPe token limit also) I've also added the ability to extend the message across multiple fields. You can make another piece of the message on message1, another on message2 and another on message3.

Signs do not dynamically respond to story changes, they do however check the story level when the map starts, they just don't respond if the story level changes while on that map. See Story Level for more details.

1.4. Placing Items

There are four entities to place items directly into a level, the most basic of these is just "item". All other item placing entities just set up additional parameters and become 'item'. The other two are "shopitem", which has aditional code to make an item into a buyable object. The other two "magicitem" and "armoryitem" are shopitems with even more additional parms - however they also have special properities - they both will only spawn a specific class of item, magic shop stuff for magicitem and armory stuff for armoryitem.

The principle value for any item placement is the key "items" this can be any item code (see Item code generator.) In addition, and just like item drops, below, an item can have a "droprandom" field. Unlike drops, this should either be 1 or 0 since placed items do not have multiple inventory slots. droprandom is ignored on "magicitem" and "armoryitem", since these two are always randomized. Also any placed item can have a "menu" field, this will be the sale price of the item, if ever set the player must buy the object to pick it up. The "menu" field is automatically set tp the price of the item by the shopitem, armoryitem and magicitem entites.

"netname" operates something like a targetname on items, it tells Prydon Gate what 'shop' this item is part of. This is automatically set to 'wepshop' on armoryitems and 'magshop' on magicitems. You'll really only need to set this if you're creating customized shop items using the 'shopitem' entity.

Also worth noting is the first spawnflag on all items is an 'infinite flag'. Setting this means that when purchased or picked up, the item doesn't go away. This is used to create limitless supplies of arrows, spears, throwing knves, and potions in the towns. It's really irritating when someone buys the last potion, and this prevents that from ever happening.

So to recap, the "item" entity is what you should use for any generic item placement. If you want to place a specific sword by a dead body, say for example, then you'd place an item entity, grab the appropriate item code from the Item Code Generator and you'd be all set. If you wanted just any old sword, do essentially the same thing, grab a generic code from the item codes list and set droprandom to one.

"armoryitem" is the the entity you need to make 'blacksmith shops'. Put one of these in and with no real configuration you'll have a armor shop. The same rings true for magicitem.

"shoptiem" is what you need for making more advanced shops, or, recommended - a limitelss supply of heal potions. To make something like that, give the shopitem entity a items item code of 34 (taken from the list), set spawnflags to one, and viola!

1.4. Item drops

Most everything in Prydon Gate can drop items. Most notably: monsters (info_class,monster_spawn), npcs, chests and barrels. This section applies to all of them. To this end everything has an inventory, just like the player. The inventory is stored in a series of fields. "slot1", "slot2", "slot3", "slot4", "slot5", "slot6", "slot7", and "slot8". These fields can contain any item code (see Item code generator.). When killed or opened, the entity will drop all items in it's inventory. So you could easily drop just a golden axe by putting it's item code in the "slot1" field. Having the same items over and over can be a bit boring though, so there's a field called 'droprandom'. Droprandom is really a bitflags field. droprandom = 1 means to randomize slot1, droprandom = 2 means to randomize slot2, droprandom = 3 means to randomize both 1 and 2. Now if drop random is set to randomize slot 1 for example and there's no item code in slot1 (0). It will either create A) A completely random item or B) Nothing at all. Actually, with droprandom there's always a chance nothing will be created. The code is limited in the number of times it can reroll until it gets a valid item setup, and if it exceeds that, the item is essentially removed. What that means in layman's terms, don't randomize anything you're counting on being there.

1.5. Misc

2. Quests

2.1. Story Level

Story level is the basic quest mechanism in the game. The game encodes a global story level and remembers it from map to map. There's actually two active story lines at any given time, the main story line and the 'optional quest story line'. The spawning or locking of everything is compared against the story value. If lower than the story_min key on something the object is locked or not spawned, if greater than or equal to story_max, the same. This results in a odd configuration. a story min of 2 and story_max of 3 means only level 2. It was an initial mistake in the code and it has just carried over. Sorry. Note: NPCs, monsters, barrels and most other ents are not spawned. Doors & chests, are locked. If an object isn't spawned due to story constraints.

The story level can be controlled with two entities, the "storyup" entity can be used to advance the plot by it's 'lip' key or if lip is not specified, by 1. This entity is less useful than the other story control entity, storyset, but it's still supported since it was the first story entity I designed.

storyset sets the story level to whatever the lip key says. It has two spawnflags as well, the first spawnflag indicates that the story set is to ignore the mask for optional quest/main story quest, and take whatever combined value the lip is set to. This could be used to clear the side quest while advancing the main plot. Or anything like that. In short it sets the progress of both storylines simultaneously if the first spawnflag is on. The second spawnflag tells Prydon Gate to clear the selected storyline. Since storyset with a lip of 0 is considered illegal, you need to specify story level 1 for either the main or optional quest and set the second spawnflag if you want 0.

3. NPCs

4. Monsters

5. Tools

These are a few Javascript tools needed for editing Prydon Gate maps. You must have a javascript capable browser and have Javascript enabled.

6.1. Item code generator

This generates item codes for placing items or for item drops. Set up the item the way you want and use the code number in the map.
PrefixItemSuffixQty/DurMAX
Identified
Item code:

6.2. Constant & Special Codes

When using drop random there's a number of item codes that may come in handy. These item codes are essentially the bare value of an item, and allows the randomizer to fill in the details.
NameValue
Cloth1
Aketon2
Chain Mail3
Plate Mail4
Dirk5
Dagger6
Sabre7
Rapier8
Broadsword9
Club10
Mace11
Staff12
Scepter13
Hatchet14
Axe15
War Axe16
Short Bow17
Long Bow18
War Bow19
Knives20
Buckler21
Shield22
Aegis23
Skull Cap24
Helm25
Great Helm26
Boots27
Greaves28
Amulet29
Spears30
Arrows31
>Gold32
Lesser Heal Potion33
Heal Potion34
Greater Heal Potion35
Lesser Mana Potion36
Mana Potion37
Greater Mana Potion38
Elixir39
Book40
Scroll41
Scroll of Identify42
Quest item codes.

Note: 1024 is used by Curse of Korweh for The Eye of Kor.

6.3. Name Code

This creates name codes for creating monsters and/or quest items. You do not need this for NPCs or Bosses, as they use plain text. There's a maximum length of 9 characters. I realize this is kinda limiting, but TOO BAD.
NameCode

6.4. Storyline Values

StageNumberStageNumber
Main Story #11Optional Story #116
Main Story #22Optional Story #232
Main Story #33Optional Story #348
Main Story #44Optional Story #464
Main Story #55Optional Story #580
Main Story #66Optional Story #696
Main Story #77Optional Story #7112
Main Story #88Optional Story #8128
Main Story #99Optional Story #9144
Main Story #1010Optional Story #10160
Main Story #1111Optional Story #11176
Main Story #1212Optional Story #12192
Main Story #1313Optional Story #13208
Main Story #1414Optional Story #14224
Main Story #1515Optional Story #15240