Appendix D: Tips, Tricks and Tutorials
The death yell that occurs when a player or bot falls into the void or fog of death is triggered by the falling character passing through a trigger multiple (should be no less than 32 units thick) that is targeted on a target_speaker. If you look at q3DM17 and find a target speaker, you will see that it plays the falling to death sound of the player who activates the trigger. Put that sound in your own target_speaker.
Apply a mirror texture to brush (it will only work on brushes, not curve patches). Next, place a misc_portal_surface entity within 64 units of the mirror and at roughly eye level for the character. Because a mirror shows all that it can "see" the mapmaker needs to take special care that his mirror doesn't see so much of the map that it affects game performance.
Rules: A mirror should not be able to see another mirror or portal surface. This means no mirror mazes or mirror facing each other to produce infinite reflections.
- Make the brush that contains your pulsing pad texture. It can be set in the floor or raised up on separate brush.
- Make a trigger_push brush entity that is smaller than the pad (the id triggers are usually octagonal).
- Create a target_position entity and move it to the height and location you want. The target position is both the aiming point for the trigger_push and the highest point (apex) of the assisted jump.
- Hi-light the trigger first, then the target_position (order is important).
- Press CTRL + k to connect the two entities (pointing the first at the second).
- Compile and test it. The first compile needs to be a full or fast vis. If you need to make adjustments to the target_position, you only need to use an entities compile.
Lining Up the Pad Texture
The combination of shader keys that make the jump pad pulsing texture work can be tricky to line up. Try the following methods if your own attempts bring no joy.
- Make the brush that will be your pad (128x128 units).
- Apply the pad texture. If it doesn't line up, turn off the lock texture feature and move the pad until it lines up perfectly.
- Lock the texture and move the brush into position.
If that doesn't work:
- Build your brush in place.
- Apply the pad texture so that several corners of the pad circle are visible.
- Compile a regioned area with the jump pad in it.
- At least one of the pad circles should have a pulsing circle in it.
- Back in the editor, slide the pad circle with the active pulse so it fills the pad.
- Recompile. It should work now.
Target the trigger_push that you put above the pad at a target_position. The player will accelerate until he reaches the target. Physics does the rest.
Note: The center point of the target must be higher than the center point of the trigger_push.
- Create all the entities you want the player to spawn with when he enters the arena, and make sure they are somewhere within the enclosed space of the map.
- Add a "target_give" entity somewhere in the world.
- Create all the spawn spots you want to be in your map.
- Select the "target_give" entity.
- Select one of the "give on spawn in" entities.
- Hit Ctrl-K in the editor to link the two items together.
- Repeat steps 4 through 6 until the target_give is linked to all the entities you wish the player to spawn into the world with.
- Select a spawn spot
- Select the target_give entity
- Hit Ctrl-K in the editor to link the two entities together.
- Repeat steps 8 through 10 until all the spawn spots are linked to the target_give entity.
- Compile the map
- Set g_gametype to tournament mode and set fraglimit of 1.
- Get a bunch of your friends to connect into your server and have fun playing a "Rocket Arena" style game =)
An alternate use of target_give is how I used it in q3dm10 to create the "power tube" that gives you health and armour. The tube has a trigger_multiple with a wait of 0.5, linked to a target_give which is linked to a small health and an armour shard.
This is the shader script taken from the sky.shader that I used to make a test sky box months and months ago.
In baseq3, make an 'env' folder.
Put your skybox art in here and use this naming convention:
[skyname]_lf.tga
[skyname]_rt.tga
[skyname]_ft.tga
[skyname]_bk.tga
[skyname]_up.tga
[skyname]_dn.tga
- Make a directory in your quake3 folder with the following path:
quake3/baseq3/textures/[mymapname]
- Make a directory in your quake3 folder with the following path:
- Make a script document called [mymapname].shader
- Make a script document called shaderlist.txt
In shaderlist.txt put [mymapname] on the first line and close the document.
//******************************************************* //* Sample environment box shader //******************************************************* textures/[mymapname]/[skyname]01 { qer_editorimage textures/[mymapname]/[skyname] surfaceparm noimpact surfaceparm nolightmap surfaceparm sky q3map_sun 0.933333 0.541176 03.13725 60 160 11 q3map_surfacelight 100 //lots of diffuse light skyparms - 512 - sky env/[skyname] // the following stuff lays clouds over the skybox map which you may not want with a city skyline //{ // map textures/skies/dimclouds.tga // // tcMod turb 0 0.001 0.5 0.001 // tcMod scale 3 3 // tcMod scroll 0.01 0.01 // blendFunc GL_ONE GL_ONE_MINUS_SRC_COLOR // depthWrite //} //{ // map textures/skies/pjbasesky.tga // blendfunc GL_ONE GL_ONE // tcMod scroll -0.01 -0.01 // tcMod scale 5 5 //} //}
The shooters; shooter_rocket, shooter_grenade, and shooter_plasma all fire a single projectile when they are triggered by an event.
- Make a shooter entity (rocket, grenade or plasma)
- Give it a facing (1 to 360 degrees), or,
- Target it at a target_position.
- Give it a random value (potential degrees off target)
- Create an Activator. Make a trigger multiple or target an entity at the shooter. When the trigger is entered or the entity is taken, the, shooter is activated.
- If you want a shooter to fire multiple times, target the activator on two or more target_delays. Set the delay time to a different value for each (if using a trigger multiple, the WAIT value on the trigger should be greater than the longest delay on the target_delay). Target each target_delay on the shooter.