Here is the PolyEd How To Guide on making a level.
Basically I will put a few points in to get you started, and the rest is all butchered qspecs.. my thanks and appologies to Niklata, Oliver Montunay, and the others.
First get an unpacker and unpack everything with the bsp extension.
unpack the gfx.wad.
Put all bsp files in id1/maps directory.
put the gfx.wad in id1 directory.
get makewad2, if you can't find it anywhere else, you can find it in qconvert.
put makewad2 in your id1 directory and run it. Now you should have a quaketex.wad.
Second, get Qbsp, Light, & Vis stuff. They will all be in a qbsp package... try cdrom.com in the qbsp_pak_tools section. Get the ones for registerd version, and get either the DOS or the windows ones. Make sure they are for the registered version.
Make a map, f3 to save a map file, and then at a dos prompt do this:
qbsp mymap {this will build it}
light mymap {this will put the proper light sources in the right places}
vis mymap {this will optomize kind of}
then copy the resulting bsp file to your id1/maps directory. What? you don't have a maps directory? Well just make one. Now go into quake, pull down the console and type: map mymap.
cool, huh?
Notes on map making:
This is not like doom. You arn't building sectors, you're putting walls together, walls that have thickness. Think of it as big slabs. And remember, 4 walls are not enough to make a room, You must not forget to put a cieling and a floor in.
The following specs will guide you in making those flickering lights and teleport devices and all the other cool stuff.
----------------------------------------
Quake MAP Specs
Last Updated: 8/22/96 8:52PM EST
Info on entities/maps and maintenance by Niklata (Nicholas Dwarkanath)
Coordinate System:
Quake uses a standard right-handed (X,Y,Z) coordinate system. If you're not familiar with the reference of "right-handed" to a coordinate system, it basically provides a tactile and visual discription of the mechanics of the system. If you point your fingers towards the positive x-axis and bend your fingers so that your knuckles face the positive y-axis, your thumb will point towards the positive z-axis:
^ z+
|
|
|
|
|------------> y+
/
/
/
/
<
x+
Some entities also need to have an angle tag that tells the direction it is facing. The values possible are listed below:
0-359: Normal Angle (zero == east)
-1: Up
-2: Down
Brushes:
Brushes are one of the two primary components of a MAP file. Each brush defines a solid region. Brushes define this region as the intersection of four or more planes. Each plane is defined by three noncolinear points. These points must go in a clockwise orientation:
1--2----------------->
|
3
|
|
|
|
|
,
x_off - Texture x-offset (must be multiple of 16)
y_off - Texture y-offset (must be multiple of 16)
rot_angle - floating point value indicating texture rotation
x_scale - scales x-dimension of texture (negative value to flip)
y_scale - scales y-dimension of texture (negative value to flip)
Many entity/brush combinations can be put into a map file. All MAP files must contain with a worldspawn entity, usually as the first entry. This entry defines all of the normal brushes that make up the structure of the level. There should be only one worldspawn entity per MAP file. Here's the syntax of the worldspawn class:
"classname" "worldspawn" // Tells Quake to spawn the world
"wad" "DIRPATH" // tells what graphics (texture) WAD2 file to use.
"message" "TITLE" // The title of the level
"worldtype" "#" // Describes time of environment (changes appearance/name of keys)
// 0 == Medieval (medieval)
// 1 == Runic (metal)
// 2 == Present (base)
"sounds" "#" // Tells the CD player which track to play.
"light" "#" // Default light level
Entities are the second major component of Quake MAP files. An entity is basically a bit like a thing, but they also function as triggers and as pathmarkers.
"speed" "#" // Forward velocity of the monster jump
"height" "#" // How high the monster jumps
"angle" "#" // Angle towards which the monster jumps
An invisible brush?:
"classname" "func_illusionary"
Traps/Things harmful to you:
Triggerable Nail-firing trap:
"classname" "trap_spikeshooter"
"angle" "#" // Angle the trap fires at
"targetname" "t#" // Trap's trigger name
"spawnflags" "#" // ??? 1024 works
Constant Nail-firing trap:
"classname" "trap_shooter"
"angle" "#" // Angle the trap fires at
"spawnflags" "#" // ??? 1024 works
"wait" "#" // Time between shots
Fireballs:
"classname" "misc_fireball"
"speed" "#" // Tells how fast the fireball moves
Miscellaneous:
Pushes the player in a direction:
"classname" "trigger_push"
"speed" "#" // Force of the push
"angle" "#" // Direction player is pushed towards (-1=up -2=down, other=normal)
Cameras for the intermission screen:
"classname" "info_intermission"
"mangle" "X Y Z" // location the camera looks at
"angle" "#" // angle of the camera
Setting difficulty level (attaches to brush):
"classname" "trigger_setskill"
"message" "#" // Skill level to change to.
Lightning used to kill the boss of shareware. I'll figure out how to use
it later... I pretty much know how, I just want to test it before I
put it here :). From the testing I've done, the lightning produced will
not damage a player, however. It probably triggers a script to give the
boss character damage.
"classname" "event_lightning"
"origin" "X Y Z" // location of lightning (origin?)
"targetname" "t#" // It's trigger name
Level Structures
Moving Platforms:
Creating a moving platform isn't that difficult. Here's an example:
"classname" "func_train"
"sounds" "1"
"speed" "128"
"target" "t1dest1"
"targetname" "t1"
(attach it to brush)
Now you define each of the path_corners it will travel to. When it reaches
a path_corner, it will float to the next path_corner defined in the target
tag of the path_corner. The platform will start at the path_corner pointed
to by the platform's target tag. It will continue the loop indefinitely
and it will go through walls to get to its destination. Here's its path_corners
would look like:
"classname" "path_corner"
"targetname" "t1dest1"
"target"" "t1dest2"
"classname" "path_corner"
"origin" "0 128 0"
"targetname" "t1dest2"
"target"" "t1dest1"
Monsters and Triggers:
Have you been wondering how you can get events to trigger when a monster dies, as first
seen in E1M2 with the demons? Well, it's not too difficult. When you attach a
target tag to a monster, the monster's death will trigger the event. I believe
(not tested) that if other monsters have a targetname tag the same as a monster
with the target tag, the target event will only occur when all monsters with
a matching targetname tag are dead. The monster with the target tag need not
have the targetname tag.
How to use trigger_count:
The trigger_count class is quite an interesting trigger. You know of the area in E1M1 where you have to hit the three switches to open the door? Well, that's done using a trigger_counter. Each of the buttons you hit has its target property set so it points to a trigger_counter. The trigger_counter has its count tag set to three. Each time a switch is hit, the trigger_counter's count property will decrement by one. When it reaches zero, it will open the door. Each button can only be triggered once as it has a wait of -1. Here's an example given to me by Remco Stoffer:
"classname" "func_door"
"targetname" "door2"
"target" "light1"
"angle" "-1"
"wait" "-1"
"sounds" "4"
"message" "press all buttons"
"classname" "trigger_counter"
"count" "3"
"targetname" "door1"
"target" "door2"
"wait" "-1"
"classname" "func_button"
"angle" "0"
"wait" "-1"
"target" "door1"
"classname" "func_button"
"angle" "0"
"wait" "-1"
"target" "door1"
"classname" "func_button"
"angle" "0"
"wait" "-1"
"target" "door1"
Teleporting Monsters:
Unlike in Doom-Engine games, you can precisely teleport monsters into new locations in Quake. To do so, you must first create a out of reach area for the monsters to reside in. Give this area a trigger_teleport tag and assign a targetname tag to it. Create a teleport_destination where you want the monster to appear. Now, you must create a trigger whose target property points to the trigger_teleport's targetname. When this trigger is activated, the monster in the room will teleport to the teleport_destination. Make sure that there is only one monster per room and one room per teleport_destination. Otherwise, when the teleport is triggered, all the monsters will telefrag each other (like what happens in E1M7 when you win).
Properties of Buttons:
The behavior of buttons can be altered in many ways. By default, buttons are activated by pressing them (moving near them). Buttons can be made shootable by giving them a health tag. Unless you want to have to shoot the button tons of times, set the health tag to "1". If you want to have the button flash when you shoot it, you must include all of the button animation textures in the level. You can just put them on brushes outside the level.
Quake is ⌐1996 id Software. Some information about entities was obtained from the Unofficial Quake Specs, a truly awesome reference guide to Quake editing.
Disclaimer: This document is provided as is and may not be perfect. I do not guarentee the validity of any of the information in it. I will not be held liable or responsible for any damages caused from use or misuse of the information contained within this document.