Kastelle de Rhennes.pk3

Genre

Sections

Files

Author

Format

3D Online Gaming

30

2

Kyle Lance Proudfoot ©

.htm, .map, .pk3

 

 

 

 

 

 

 

 

 

 

 

KLP ET Gtk 1.4 Editor Hell File

Version: 3.0, stable, pure, unclean, less quarky.

Last editted by Kyle Lance Proudfoot aka MAZZSilber 23102004

This is the correct way to make an Enemy Territory .map file and the resulting .pk3 file so that you can host your own server with your own creative level in Wolfenstein. Hopefully, you find it hellfull, if not, well, go bite yourself!

Go to www.silverlingo.com for Wolfenstein: Enemy Territory download links.

This hellfile is a FREE help file for GTK-Radiant 1.4 stable version and is not associated with anyone else too...

                      "Really, I did it for me, myself, and I only!" says MAZZSilber.

GTK-Radiant 1.4 3D Level Editor is FREE too and can be downloaded from www.qeradiant.com . GTK-Radiant 1.4 can render 3D-Level's into .pk3 for Wolfenstein: Enemy Territory, Quake III and Return To Castle Wolfenstein.

In no way is this hellfile ANY kind of support and is NOT connected to ANY kind of support, either.

In no way am I, god, Kyle Lance Proudfoot, MAZZSilber accountable for Noobie's wrecking their own Computer's by using this hellfile which is a help file for an advanced FREE .map editor/design/development program called GTK-Radiant 1.4 stable version. Also this hellfile is primarily for Wolf: ET and secondarily for Quake III and Return To Castle Wolfenstein due to significant differences.

Since Wolfenstein: Enemy Territory and GTK-Radiant 1.4 3D Level Editor are both FREE already, we can even laugh harder at the f'in lame screaming whinin Noobies... smirk... Hahahahahaha... Hehehehehehehe... Of course, by the time it takes you to read anything on Internet... nothing is free... this is indeed a very time-consuming process called 3D-Level Design... woohoo... 'n the fogs roll back and forth apparently seemingly unending...

1) Installation:

Install a fresh copy of Wolfenstein ET Game + 1.02 update and

Gtk Radiant 1.4.0 Q3 ET RTCW Editor from www.qeradiant.com .

 

2) Folders & Files:

Create the correct folders in etmain folder: demos, levelshots, maps, models, profiles, sound, screenshots, scripts, textures

at the following sub-folders and files:

*See corresponding sections later in this hellfile for detailed explanations*

\demos\date-refnumber-yourmapname

at .dm_83 which is recorded while you jump around in your own host server by pressing, oops, the record-button...

\levelshots\yourmapname and yourmapname_cc and yourmapname_tracemap

at .tga ONLY, it is optional to put in a yourmapname.jpg,

\gfx\2d\compass and compass_mask and compass2

at .tga ONLY and is optional to put this gamefolder in your .pk3...

\maps\yourmapnamefolder\lm_#oflightsinmap and yourmapname

at .tga, .bsp, .objdata, .script, .prt, .srf, .bak and .map

DO NOT put .bak and .map into your .pk3...

\models\mapobjects\staticmodels, \models\mapobjects\downloadedmodels, \models\mapobjects\custommodels,

\models\mapobjects\animatedmodels

at misc_model's and game_models .md3, .skin, .jpg and .tga ONLY,

\screenshots\date-refnumber-yourmapname

at .jpg ONLY,

\scripts\yourmapname_textures.shader's and

\scripts\gamefolders.shader's in pak0.pk3

\scripts\scripts\yourmapname_yoursky&sun

\scripts\yourmapname

at .shader, .script, .txt, .proj, .def, .arena, .campaign ONLY

\sound\vo\yourmapname\allies\gamesounds and axis\gamesounds sub-folders for Voice's and/or

sound\yourmapnamecustomsounds\yoursounds.wav sub-folder for Sound Effect Sample's and/or

sound\yoursounds.wav

at 22050 Khz 16 bit mono .wav's ONLY,

\textures\yourmapname_textures\yourmapname

\textures\modelfolders\texturename

at .jpg's and .tga's ONLY,

NOTE: The textures in your \textures folder's may or may not need .shader's...

yourmapnamebackupdates\etmainfolders temp backup folder

at etmainfolders ONLY,

yourmapnamecompiledate\etmainfolders temp .pk3 folder

at .pk3 ONLY,

yourmapnamezipdate\.pk3 and help file

at .zip ONLY,

Samedriveletter\GTKRadiantfolder\junk

at .txt made from EACH render

It is not recommended to include your junk.txt in the .pk3, however is very useful...

Maps, models and scripts folders exist already at install.

Gtk Radiant 1.4 is case-sensitive and read-sensitive:

Everything in all gamefolders at install procedure need to be not read-only and small-case letters;

ONLY shortnames and descriptions can use head-case letters... No short or long dashes allowed...

HINT: Most definitely use underscores...

DO NOT use the New Project option to make or save your .proj and .map, at multiple bogies you're in hell alright!

General Procedure: Use the \etmain folders themself and

render into \maps folder and copy to a temp folder for the compilation of your .zip name-change to .pk3 file at which point you can make

a downloadable .zip file from the .pk3 and help file you have already made.

Save As immediately and frequently to etmain\maps\yourmapname.map by first changing the name of your previous save and not

replacing your previous .map's all the time or suffer cataclysmic irrecoverable failure at who shall I kill next...

It is not recommended to use the Auto Save option in Menu, Edit, Preferences, since such things are extremely disturbing...

 

3) Edit Preferences:

Edit your Preferences after starting GtkRadiant-1.4.0 from start menu and choosing

Wolfenstein: Enemy Territory. Adjust Movement and Rotational Velocity to 290 and 40-80.

Turn vertex editting splits face off. Turn load last project off. Turn load last map off. Turn Auto-Save

off. The rest of the default options are correct.

These ones are not in preference: Turn cubic clip camera

view in taskbar where the buttons are off. Turn snap-to-grid off in grid menu.

 

4) Terrain:

Use gtkgensurf in Plugins menu to create 6 func_group terrain entities. Save each Ground, Ceiling

and Wall seperately. If you encounter strange anomalies just restart the editor and gtkgensurf a

couple times. Basically if you select 0 Wall and save it, it will make a Wall facing 0 = on the X

direction left side facing to the X direction right side. 90 Wall = Y forward. Make sure you use a caulk

of similar colour witha much smaller file size than the actual surface of the func_group terrain entity

you are making.

When you have closed off your map with the 6 directions make sure it is not leaky. Leaky means you

have not completely sealed off the outside vacuum which will prevent your .map from compiling into

a .bsp file. You can test the leakiness of your .map with the BSP menu Q3Map2: (single) BSP -meta

compile option. If your .map is leaky you will get a hellful red Pointfile line showing you where the

leaks are in your map. I've experienced that if you make too many changes to base terrains leaks are

generated. Just stick to the six directions square box style unless you are very experienced, of

course.

Use the XZY button on your taskbar in combination with the 2D graphical display to greatly facilitate

usage of the editor. DO NOT use the camera view to move shit around. Shift+LeftClick to select

something in the camera view and then LeftClick while holding down between the red dotted lines of

the selected entities and brushes in the 2D view. RightClick while holding down to move up, down,

left, right in 2D view. Use Insert and Delete to zoom in and out on the 2D view.

The Extents12000 by 8000 in gtkgensurf is near max and will result in a loooooong compile time

with a normal P4, not to mention increasing the weight of your level resulting in lag.

Make all your terrain with a random seed of 1 and the terrain key selected in the Texture menu of

gtkgensurf.

Make all your terrain, thus func_groups with terrain key 1, structural.

DO NOT decimate.

 

5) Terrain Brushes & Texture's:

Make sure you have texturenames in .jpg and .tga in your etmain\textures\yourmapname_typeoftexturefolder.

Just loading textures from the Textures menu does not hell much if you don't have the actual file.

If you want one of the standard texture files already used from a level already made then open WinZip Classic and

Open a .pk3 file from the etmain folder which you can then extract to your etmain\textures folder.

Use Surface Inspector to Fit your sky texture without pressing done, apply or OK.

It is not recommended to Fit your sky, sun, ground or any textures considering how god-ugly it becomes, at foliage... laaaaaaag...

ONLY correctly prepared textures Fit well... at let's waste mo time, shall we? Teams! At 4 AM?? Ya, right...

Fit, having a Fit is even mo fun, is meant for doors, granny pictures, and get with the f'in theme & nostalgia already!

Make sure you chose 1 by 1 divisions for your sky terrain so that it 'fits' nicely.

DO NOT pick 1 by 1 division for ground terrain... stupid, duh-ass Noobies, how does that gensurf work again...

\textures\yourmapname_terrains\yourterrains

at .jpg and .tga files ONLY with corresponding .shader's in \script's folder,

\scripts\scripts\yourmapname_yoursky

at .shader ONLY with corresponding sky key in worldspawn brush,

\scripts\yourmapname_terrains\yourterrains

at .shader ONLY.

It is not recommended to turn on pain-in-the-ass landmines which in most level's imbalances game play considering all you have to do

is send 1 Engineer in who continuously surrounds the flag and/or objective with landmines, still haven't figured it out too, is lame.

NOTE: Atmospheric effects require a correctly functioning Command Map and most get turned off at low-sky configuration by

professional gamers to enhance performance and reduce laaaaaaaag...

NOTE: Due to the nature of sky and water brushes your sky and water textures can be .tga ONLY and

are referenced in your \scripts\yourmapname_terrains.shader files.

*See 9) Textures .Shader Files*

 

6) Required Entities & Spawnpoints:

The following entities are needed too to make a functioning level: 1 team_CTF_redspawn, 1

team_CTF_bluespawn, 1 Spectator Spawn, 1 team_WOLF_objective for Axis, 1 team_WOLF_objective for Allies,

1 info_player_deathmatch (for spectator spawn), worldspawn brush, \maps\yourmapname.script with

setautospawn "allied team_WOLF_objective description key/value" "allied"

setautospawn "axis team_WOLF_objective description key/value" "axis",

and a script_multiplayer with a correct game_manager sequence in maps\yourmapname.script is necessary so

the engine can read the scripting.

Place these in your .map by RightClicking on 2D view in the editor.

Make each spawn start_active and invulnerable by selecting each spawn seperately and then

pressing n on your keyboard and then checking the option boxes.

Give your Axis and your Allies Wolf obj each a description key with a unique name value. This is also

done by selecting each seperately and pressing N on your keyboard and typing in the appropriate

keys and values.

The info_player_deathmatch does not need anything.

To make more complicated maps you will eventually put a script_multiplayer in

maps/yourmapname.script which uses targetnames and scriptnames to activate various activities

such as blowing up a bridge.

The worldspawn holds information about various global key's/value's such as the environment. To make your

environmental conditions work you need a functioning Command Map.

Put in multiple spawnpoints for both allied and axis. Put only 1 Spectator Spawn point in.

 

7) Worldspawn Brush:

Create 1 more brush by LeftClicking on the 2D view and make different sized squares which you can then modify

with the Brush menu into other shapes. Gtk Radiant is a polygon editor and has

therefore the limitations of such.

Give this brush a mapscoordsmins key and a mapscoordsmaxs key. These two determine the

Extents of your .map which you already chose in gtkgensurf.

Mapscoordsmins is the top-left point of the 2D view: -X, Y.

Mapscoordsmaxs is the bottom right point of the 2D view: X, -Y.

Unfortunately, the absolute value of |X| + |-X| = |Y| + |-Y| . This means drop the minus signs and the

2 X's have to equal the 2 Y's resulting in a perfect square. To simplify matters just take the largest

Extent and put that value into all the mapcoordsmins and mapcoordsmaxs key values. While you're

at it don't get caught in the crossfire...

Note: If surfaceparms hit your worldspawn brush then you will NOT get your textures on those objects which

are related to such, primarily the sky becomes night, your gun turns all black & orange, etc.

 

8) -Vis Data:

Your -vis should equal less than 100000 -vis to start!

Your -vis should NEVER equal more than 200000 -vis to end!

Your -vis should be equal to average 100000 -vis through developing and rendering your .map!

6000 by 3000 is +- 30000 -vis. This value

appears after choosing BSP Q3Map2 -vis compile switch. This -vis will only get larger and

recommended is to use as much detail brushes as possible and as thin structural brushes as

possible. Try not to fuck around with your terrain too much.

 

9) Texture .Shader File's:

Shift + Left Click opens .shader file associated with texture.

If a brush is NOT in your .map then your .scripts, .shaders will NOT look for them.

Your \scripts\yourmapname_textures.shader files are combined with .jpg and .tga textures and

are the primary actions of the Wolf: ET game engine modifying various models, brushes and textures in

your level after render & compilation. This way you can add shit to your map and

later completely modify such things as i.e. animations, sky and water Visual Effect's by scripting ONLY.

(A) Sky:

\textures\yourmapname_yourskyfolder\yourmapname_sky.tga

\scripts\yourmapname_yourskyfolder\yourmapname_yourskyfolder.shader

\scripts\scripts\yourmapname_yourskyfolder.shader with sky key and value in worldspawn brush;

likewise for your sun. Your sun key in your worldspawn is scripts\yourmapname_yourskyfolder;

There is no extension because it is an object reference.

The sky uses .tga ONLY and these .tga's are best copied from pak0.pk3 unless, of course,

you can make your own correct .tga's with a program like Fireworks and FreeHand from Macromedia Studio.

//The following text is copied into your yourmapname_sky.shader file with the correct naming conventions.

//Last editted by Kyle Lance Proudfoot copyright 20032004

textures/kastellederhennes_generic/kr_sky
{
qer_editorimage textures/kastellederhennes_generic/kr_sky.tga
q3map_lightrgb 0.8 0.9 1.0
q3map_skylight 85 3
q3map_sun 1 .95 .9 200 210 28
skyparms - 200 -
surfaceparm nodlight
surfaceparm noimpact
surfaceparm nolightmap
surfaceparm sky
{
map textures/kastellederhennes_generic/kr_sky.tga
rgbGen identity
}
{
map textures/kastellederhennes_generic/kr_sky.tga
blendfunc blend
rgbGen identity
tcMod scroll 0.0005 0.00
tcMod scale 2 1
}
}


textures/kastellederhennes_generic/kr_moon_sun
{
qer_editorimage textures/kastellederhennes_generic/kr_moon_sun.tga
q3map_lightrgb 0.8 0.9 1.0
q3map_skylight 85 3
q3map_sun 1 .95 .9 200 210 28
skyparms - 200 -
surfaceparm nodlight
surfaceparm noimpact
surfaceparm nolightmap
surfaceparm sky
{
map textures/kastellederhennes_generic/kr_moon_sun.tga
rgbGen identity
}
{
map textures/kastellederhennes_generic/kr_moon_sun.tga
blendfunc blend
rgbGen identity
tcMod scroll 0.0005 0.00
tcMod scale 2 1
}
}

//Make sure you choose .tga textures which are uniform and in the spirit of Wolf: ET; no bright warm colours.

//Make your .map box which closes your .map from the vacuum with structural brushes or it will leak.

//Use as thin as possible brushes for your 5 sky brushes; these need to be on your ground terrain with no gaps.

//Effectively, you hereby need no caulk brushes for your sky brushes saving double work.

(B) Water:

qer_editorimages like The Command Post is how water functions. Next to the example below which I used, look for the new correct and

up-to-date .script, .tga, and .shader files at which point you have to make terrain brushes, like the sky, and place at a min of 3 of them all

on the same position and put on a .tga texture at each step before cloning the next brush for a total of 3 brushes:

\textures\yourmapname_yourwaterfolder\yourmapname_water.tga

\textures\yourmapname_yourwaterfolder\yourmapname_water_2.tga

\textures\common\nodrawwater.tga

\scripts\yourmapname_yourwaterfolder\yourmapname_yourwaterfolder.shader

//The following text is copied into your yourmapname_water.shader file with the correct naming conventions.

// Last editted by Kyle Lance Proudfoot copyright 08042004

textures/liquids_sd/siwa_water
{
qer_editorimage textures/liquids_sd/siwa_water.tga
qer_trans .5
waterfogvars ( 0.11 0.13 0.15 ) 0.2
surfaceparm water
surfaceparm trans
surfaceparm nomarks
cull disable
nocompress
nopicmip
nofog
{
map textures/liquids_sd/siwa_water.tga
blendFunc blend
alphaFunc GE128
depthWrite
rgbgen identity
tcmod scale 0.5 0.5
tcmod scroll -.02 .001
fog on
}
}

textures/liquids_sd/siwa_water_2
{
qer_editorimage textures/liquids_sd/siwa_water.tga
qer_trans .5
waterfogvars ( 0.11 0.13 0.15 ) 0.2
surfaceparm water
surfaceparm trans
surfaceparm nomarks
cull disable
nocompress
nopicmip
nofog
{
map textures/liquids_sd/siwa_water.tga
blendFunc blend
alphaFunc GE128
depthWrite
rgbgen identity
tcmod scale 0.5 0.5
tcmod scroll -.02 .001
fog on
}
}

textures/common/waternodraw
{
qer_editorimage textures/common/waternodraw.tga
qer_trans .75
surfaceparm nodraw
surfaceparm water
}

//There are a total of 5 textures with 3 Sections in yourmapname_water.shader file.

//The Sections yourmapname_water and yourmapname_water_2 1st lines without file extensions

//have 2 _water.tga's, 2 _ripplewater.tga's and 1 _descriptionwater.tga with file extensions.

//The 3rd Section is the yourmapname_nodrawwater with a single 1st line without file extension and

//a single content line with extension.

//Total Sections therefore in yourmapname_water.shader are 11.

//How you make your water brushes will be discussed later.

 

Note: If surfaceparms hit your worldspawn brush then you will NOT get your textures on those objects which

are related to such, primarily the sky becomes night, your gun turns all black & orange, etc.

If this happens to you then just remove the script temporarily; you don't need to render again.

 

(C) Common Textures & .Shaders:

Common textures are game brushes such as a ladder combined with your brushes to provide basic game mechanics;

some common textures call up the worldspawn brush when pressing 'N' on your keyboard and other one's need to be

Menu, Selection, Connect Entities where pressing 'N' calls up the key's and value's, like a misc_model and game_model.

 

(D) Map Functions In .Shader's:

In most cases qer_editorimage is in textures\common. Qer_editorimage applies it's map functions to the specified texture on the

head-line in the .shader and needs the specified path of your .tga file.

 

(E) Animated Special Effect's In Shader's:

Animated sky & water is created with .tga's ONLY in the .shader's. Et_entities.def in \scripts can be hellful. The actual helpfiles in

Wolfenstein: ET Designer's Reference could be more hellful due to their excessive complexity, and most hellful is opening pak0.pk3

and looking at the goldrush.map and goldrush.shader since goldrush.map comes with the install.

 

Models:

Make ALL your Model's detail, or you won't be able to render, and reinforce walk-thruables with small detail brushes of the same texture

or adding detail's to the model which will block bullets and movement. Place the small detail brushes carefully so they don't cause the

models to leak. If you have gmax12fullfreeversion and make ALL your own models, is a ridiculous time-consuming process, then

you don't have to worry about this.

A) etmain\models\mapobjects\models\yourmodel.md3 and

etmain\models\mapobjects\models\yourmodelskin.skin and

etmain\models\mapobjects\models\yourmodeltexture.jpg and

etmain\models\mapobjects\models\yourmodeltexture.tga for animated models

are the folder's where your .md3, .skin, .jpg's/.tga's files are located.

Understood under the term models are misc_models and game_models which follow the same rules.

EACH of your models must have valid .map positioning, .shader's, .skin's and .jpg's/.tga's.

Unless your model is animated use .jpg's since .tga's are much larger mb files.

Some models such as the MG42 and other custom models load fully texturized, yum; most do not.

One can make custom models with a program like gmax12 which happens to be FREE at this time, too.

It is recommended to first use existing models in the \etmain\models\mapobjects\model's folders:

Unlike other copyrighted shit in level making if you get a model with install and/or download you can use it!

EACH Model you insert in your .map by RightClicking on 2D View and correctly position with no brush overlaps

needs to have a valid .skin:

\models\mapobjects\model\sub-folder\yourmodelskin.skin is placed in the model itself by

pressing the 'N' button on your keyboard and typing in Key: skin and

Value: models/mapobjects/model/sub-folder/yourmodelskin.skin .

When you place models in  your .map Save As and ReLoad your .map with BSP Monitoring on:

You now get a nice list that flashes by goin' WARNING: Activate shader failed for 'texturename', at which point

Noobie freaks out.

DON'T Panic, this is a good sign: Use the names in the BSP Mon Log and give your choice of textures.jpg the same

names in your model folder: \models\mapobjects\model\yourmodeltextures.jpg and if it's animated .tga, of course.

Really, hullo Noobie, K.I.S.S. with .jpg's...

If you don't see any WARNING: Activate shader failed for 'texturename's then the misc_model is NOT usable,

except game_models which do the same thing but do not mean the same thing, duh.

Models use skin's and/or textures on different parts of the body of the model depending which part of

your brain the model maker wanted to fuck up...

Example: body_soldier.skin works often with Player Skins.

 

B) etmain\textures\yourmapname_typeoftexture\yourtexture.jpg or

etmain\textures\yourmapname_typeoftexture\yourtexture.tga for animated

are the folder's where your textures .jpg and .tga files are located.

Your .jpg and .tga files do have a limitation on their format and are best made in an advanced graphical editor:

256 X 256, 512 X 512, 128 X 128, 128 X 64, 64 X 64 are your best picture format choices.

Hint: Reopen your textures once more in your picture editor and sharpen picture...

 

C) etmain\scripts\yourmapname_typeoftexture\yourmapname_typeoftexture.shader

is the folder where your scripts .shader files are located.

The following .shader text works with many skins, .jpg, and .tga textures:

models/mapobjects/model/yourtexture
{
cull none
implicitMap -
}

If you have done A) to C) correctly then you will see GTK-Radiant 1.4 is indeed a WYSIWYG program meaning

when you reload your .map you should see all your models with nice & pretty textures!

[(:-)]

Hint: Make a list of the textures which appear in your BSP Monitoring when you open your .map and

make sure you can checkmark each texture twice.

Note: Game_model skins appear ONLY after render, at which point you do see them after wards for heavy medics...

 

D) Note: For Health & Ammo Cabinets, Command Posts, Axis/Allied Build Crates and Players Skins you will need to

extract the appropriate .skin's from pak0.pk3 to your corresponding folder and

add the correct lines to \maps\yourmapname.script file.

*See 23) Command Post's*

*See

 

E) Ground Foliage:

It is recommended to do your Foliage at the very end of your development process.

 

Hint: Use goldrush.map and goldrush.script and other scripts of the textures that load correctly as examples.

 

10) Arena File:

Create a scripts\yourmapname.arena file:

{
map "yourmapname" // this is the exact name of your bsp file.
longname "Your Map Name" // long name which is the name that will show up in menus.
type "wolfmp" // don't change this, there's only one game type in ET.
timelimit 24// default round limit given in minutes.
axisRespawnTime 30// Axis respawn time in seconds.
alliedRespawnTime 30// Allied respawn time in seconds.
lmsbriefing "This is great fun!" // lame briefing.
briefing "This is even more fun!" // briefing.
axiswintext "They bite, we are great!" // Axis win the round.
alliedwintext "We bit, they ran!" // Allies win the round.


// Gives geographic location of your map in the ET loading map. The (0,0) position is top-left

Play around with values to see which you prefer.

mapposition_x 366
mapposition_y 899
}

11) Campaign File:

Create a scripts\yourmapname.campaign file.

{
name "yourmapname" // the name of your campaign in your host server game menu.
shortname "yourmapname campaign" // the name of your campaign in game voting menu.
description "This is a really amazin' campaign!" // displayed when loading the campaign.
maps "yourmapname;oasis;fueldump" // each is .bsp file name, seperated by a semicolumn.
mapTC 374 374 // do not change... it's a fixed value.
type "wolfmp" // do not change... there's one campaign game type in ET.
}

 

12) Tracemap:

Create a scripts\yourmapname.script file.

levelshots/yourmapname_cc_automap
{
nopicmip
nocompress
nomipmaps
{
clampmap levelshots/yourmapname_cc.tga
depthFunc equal
rgbGen identity
}
}

levelshots/yourmapname_cc_trans
{
nopicmip
nocompress
nomipmaps
{
clampmap levelshots/yourmapname_cc.tga
blendfunc blend
rgbGen identity
alphaGen vertex
}
}

Later when you are actually in your level on your host server open your console with the ~ on your keyboard and create a Command Map, which is a tracemap:

\g_gametype 2

\sv_pure 0

\devmap yourmapname \\On map reload open the console again and type in the next step.

\developer 1 \\ignore error messages and type in the next step.

\generatetracemap \\your tracemap is automatically placed in the etmain\maps folders.

Resulting:

maps\4 yourmapname.srf files

maps\4 yourmapname.prt files

maps\4 yourmapname.bsp files

maps\4 yourmapname.bak files

yourmapname_tracemap.tga 256 x 256 red

This yourmapname_tracemap.tga shows placement of all important feature of your level.

There are blue, red, green tracemaps sized 256 x 256 resulting.

For your Command Map take the tracemap.tga, resize it to 512 x 512, give it colour, and save it as

yourmapname_cc.tga into your \levelshots folder. This picture can be +/- 500kb considering it represents all the

distinguishing features in your level as read by the Wolf ET game engine and is necessary before you can officially

present your level via your Wolf ET server on Internet.

13) Objective Info File:

Create a maps\yourmapname.objdata file.

wm_mapdescription allied "Allies must win."
wm_mapdescription axis "Axis want to win."
wm_mapdescription neutral "This map wins."


wm_objective_short_axis_desc 1 "Axis must succeed at objective 1."
wm_objective_short_axis_desc 2 "Axis must succeed at objective 2."
wm_objective_short_axis_desc 3 "Axis must succeed at objective 3."                                             
wm_objective_short_axis_desc 4 "Axis must succeed at objective 4."

wm_objective_short_allied_desc 1 "Allies must succeed at objective 1."
wm_objective_short_allied_desc 2 "Allies must succeed at objective 2."
wm_objective_short_allied_desc 3 "Allies must succeed at objective 3."                                          wm_objective_short_allied_desc 4 "Allies must succeed at objective 4."

Allied and Axis must have same # of Objectives.

14) Script File:

Create a maps\yourmapname.script file.

The following fully describes how to correctly make explosivable & constructible objectives as Primary Objectives and

has scripting for a Neutral Command Post, too.

//Your Map Scripting

//Map: Your Map Name

//Last editted by yourname copyright

game_manager
{
spawn
{

setautospawn "kralliedwolfen" "allied"
setautospawn "kraxiswolfen" "axis"

//variables when objectives are completed.

accum 1 set 0
accum 2 set 0
accum 3 set 0
accum 4 set 2
accum 5 set 0

//standard time settings for the map.
wm_axis_respawntime 20
wm_allied_respawntime 15
wm_number_of_objectives 5
wm_set_round_timelimit 30

//example each team has 5 objectives.

//5 0 means 5 objectives for team 0 which is Axis.

//5 1 means 5 objectives for team 1 which is Allied.

wm_set_main_objective 5 0
wm_set_main_objective 5 1

//0 means not completed yet.

// wm_objective_status <objective number> <team> <objective status>.
wm_objective_status 1 1 0
wm_objective_status 1 0 0
wm_objective_status 2 1 0
wm_objective_status 2 0 0
wm_objective_status 3 1 0
wm_objective_status 3 0 0
wm_objective_status 4 1 0
wm_objective_status 4 0 0
wm_objective_status 5 1 0
wm_objective_status 5 0 0

//mode stopwatch of defending team.
wm_set_defending_team 0

//If time expires, -1 is a draw.
wm_setwinner 0

}
}

//The "scriptname" is the key where "yourmap_description_bridge" is the value of the key.
//Entity with "bridge" scriptname is destroyed and sets variables,
//so the game manager knows when objectives are completed.
//Bridge go Boom!

kr_primary_bridge_blow
{
spawn
{
wait 200

constructible_class 3 //Spawn the bridge as a dynamitable-only objective.
}

death
{

accum 1 set 0
trigger game_manager objective1

wm_announce "Axis have destroyed The Primary Bridge."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgedes"

wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_dynplanted2"

wm_teamvoiceannounce 0 "kastellederhennes_axis_hq_dynplanted2"
// *---------------------------------------------------------------------------------*

wm_objective_status 1 0 1
wm_objective_status 1 1 0
}
}

//This part builds the primary bridge after bein blown... by the Allied at hint detail is not too expensive.

krprimbridgebuild
{
spawn
{
wait 360
trigger krprimbridgebuild setup

constructible_class 3
}

trigger setup
{
setstate krprimbridgebuild_materials default
setstate krprimbridgebuild_materials_clip default
setstate krprimbridgebuild_flag default


setstate krprimbridgebuild_krprimbridgebuilt invisible
}

buildstart final
{
setstate krprimbridgebuild_materials default
setstate krprimbridgebuild_materials_clip default
setstate krprimbridgebuild_flag default


setstate krprimbridgebuild_krprimbridgebuilt underconstruction
}

built final
{
setstate krprimbridgebuild_materials invisible
setstate krprimbridgebuild_materials_clip invisible
setstate krprimbridgebuild_flag invisible


setstate krprimbridgebuild_krprimbridgebuilt default

wm_announce "The Primary Bridge is now constructed by the Allies."

// *----------------------------------- vo ------------------------------------------*
wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_bridgeconst"

wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
// *---------------------------------------------------------------------------------*
}

decayed final
{
setstate krprimbridgebuild_materials default
setstate krprimbridgebuild_materials_clip default
setstate krprimbridgebuild_flag default


setstate krprimbridgebuild_krprimbridgebuilt invisible
}

death
{
setstate krprimbridgebuild_materials default
setstate krprimbridgebuild_materials_clip default
setstate krprimbridgebuild_flag default


setstate krprimbridgebuild_krprimbridgebuilt invisible

wm_announce "The Primary Bridge is now destroyed by the Axis."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"

wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_bridgedam"

wm_teamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedam"
// *---------------------------------------------------------------------------------*

wm_objective_status 1 1 1
wm_objective_status 1 0 0
}

trigger remove
{
setstate krprimbridgebuild_toi invisible
setstate krprimbridgebuild_materials invisible
setstate krprimbridgebuild_materials_clip invisible
setstate krprimbridgebuild_flag invisible
setstate krprimbridgebuild_krprimbridgebuilt invisible

// *----------------------------------- vo ------------------------------------------*
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"

wm_removeteamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedes"
wm_removeteamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedes"
// *---------------------------------------------------------------------------------*

remove
}
}

kr_primary_bridge_blows
{
spawn
{
wait 200

constructible_class 3 //Spawn the bridge as a dynamitable-only objective.
}

death
{

accum 1 set 0
trigger game_manager objective1

wm_announce "Axis have destroyed The Primary Bridge too."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgedes"

wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_dynplanted2"

wm_teamvoiceannounce 0 "kastellederhennes_axis_hq_dynplanted2"
// *---------------------------------------------------------------------------------*

wm_objective_status 1 0 1
wm_objective_status 1 1 0
}
}

krprimbridgebuild2
{
spawn
{
wait 360
trigger krprimbridgebuild2 setup

constructible_class 3
}

trigger setup
{
setstate krprimbridgebuild2_materials default
setstate krprimbridgebuild2_materials_clip default
setstate krprimbridgebuild2_flag default


setstate krprimbridgebuild2_krprimbridgebuilt2 invisible
}

buildstart final
{
setstate krprimbridgebuild2_materials default
setstate krprimbridgebuild2_materials_clip default
setstate krprimbridgebuild2_flag default


setstate krprimbridgebuild2_krprimbridgebuilt2 underconstruction
}

built final
{
setstate krprimbridgebuild2_materials invisible
setstate krprimbridgebuild2_materials_clip invisible
setstate krprimbridgebuild2_flag invisible


setstate krprimbridgebuild2_krprimbridgebuilt2 default

wm_announce "The Primary Bridge is now constructed by the Allies."

// *----------------------------------- vo ------------------------------------------*
wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_bridgeconst"

wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
// *---------------------------------------------------------------------------------*
}

decayed final
{
setstate krprimbridgebuild2_materials default
setstate krprimbridgebuild2_materials_clip default
setstate krprimbridgebuild2_flag default


setstate krprimbridgebuild2_krprimbridgebuilt2 invisible
}

death
{
setstate krprimbridgebuild2_materials default
setstate krprimbridgebuild2_materials_clip default
setstate krprimbridgebuild2_flag default


setstate krprimbridgebuild2_krprimbridgebuilt2 invisible

wm_announce "The Primary Bridge is now destroyed by the Axis."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"

wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_bridgedam"

wm_teamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedam"
// *---------------------------------------------------------------------------------*

wm_objective_status 1 1 1
wm_objective_status 1 0 0
}

trigger remove
{
setstate krprimbridgebuild2_toi invisible
setstate krprimbridgebuild2_materials invisible
setstate krprimbridgebuild2_materials_clip invisible
setstate krprimbridgebuild2_flag invisible
setstate krprimbridgebuild2_krprimbridgebuilt2 invisible

// *----------------------------------- vo ------------------------------------------*
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"

wm_removeteamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedes"
wm_removeteamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedes"
// *---------------------------------------------------------------------------------*

remove
}
}


//Entity with "yourmapnamedescriptionbridge" scriptname is destroyed and sets variables
//so the game manager knows when objectives are completed.
//This one is essentially the same as the above for The Secondary Bridge.

kr_secondary_bridge
{
spawn
{
wait 200

constructible_class 3 //Spawn the bridge as a dynamitable-only objective.
}

death
{
accum 2 set 0
trigger game_manager objective2

wm_announce "Axis have destroyed The Secondary Bridge."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgedes"

wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_dynplanted2"

wm_teamvoiceannounce 0 "kastellederhennes_axis_hq_dynplanted2"
// *---------------------------------------------------------------------------------*

wm_objective_status 2 0 1
wm_objective_status 2 1 0
}
}

krsecondarybridge
{
spawn
{
wait 360
trigger krsecondarybridge setup

constructible_class 3
}

trigger setup
{
setstate krsecondarybridge_materials default
setstate krsecondarybridge_materials_clip default
setstate krsecondarybridge_flag default


setstate krsecondarybridge_krsecondarybridged invisible
}

buildstart final
{
setstate krsecondarybridge_materials default
setstate krsecondarybridge_materials_clip default
setstate krsecondarybridge_flag default


setstate krsecondarybridge_krsecondarybridged underconstruction
}

built final
{
setstate krsecondarybridge_materials invisible
setstate krsecondarybridge_materials_clip invisible
setstate krsecondarybridge_flag invisible


setstate krsecondarybridge_krsecondarybridged default

wm_announce "The Secondary Bridge is now constructed by the Allies."

// *----------------------------------- vo ------------------------------------------*
wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_bridgeconst"

wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
// *---------------------------------------------------------------------------------*
}

decayed final
{
setstate krsecondarybridge_materials default
setstate krsecondarybridge_materials_clip default
setstate krsecondarybridge_flag default


setstate krsecondarybridge_krsecondarybridged invisible
}

death
{
setstate krsecondarybridge_materials default
setstate krsecondarybridge_materials_clip default
setstate krsecondarybridge_flag default


setstate krsecondarybridge_krsecondarybridged invisible

wm_announce "The Secondary Bridge is now destroyed by the Axis."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"

wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_bridgedam"

wm_teamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedam"
// *---------------------------------------------------------------------------------*

wm_objective_status 2 1 1
wm_objective_status 2 0 0
}

trigger remove
{
setstate krsecondarybridge_toi invisible
setstate krsecondarybridge_materials invisible
setstate krsecondarybridge_materials_clip invisible
setstate krsecondarybridge_flag invisible

setstate krsecondarybridge_krsecondarybridged invisible

// *----------------------------------- vo ------------------------------------------*
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_hq_bridgecon"

wm_removeteamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedes"
wm_removeteamvoiceannounce 0 "kastellederhennes_axis_hq_bridgedes"
// *---------------------------------------------------------------------------------*

remove
}
}

kr_rad_tower
{
spawn
{
wait 200

constructible_class 3 //Spawn the Radio Tower as a dynamitable-only objective.
}

death
{

accum 3 set 0
trigger game_manager objective3

wm_announce "Allies have destroyed The Radio Tower."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 0 "kastellederhennes_axis_condestruct"

wm_teamvoiceannounce 0 "kastellederhennes_axis_condestruct"

wm_teamvoiceannounce 1 "kastellederhennes_allies_condestruct"
// *---------------------------------------------------------------------------------*

wm_objective_status 3 0 1
wm_objective_status 3 1 0
}
}

krradtower
{
spawn
{
wait 360
trigger krradtower setup

constructible_class 3
}

trigger setup
{
setstate krradtower_materials default
setstate krradtower_materials_clip default
setstate krradtower_flag default


setstate krradtower_krradtowered invisible
}

buildstart final
{
setstate krradtower_materials default
setstate krradtower_materials_clip default
setstate krradtower_flag default


setstate krradtower_krradtowered underconstruction
}

built final
{
setstate krradtower_materials invisible
setstate krradtower_materials_clip invisible
setstate krradtower_flag invisible


setstate krradtower_krradtowered default

wm_announce "The Radio Tower is now constructed by the Axis."

// *----------------------------------- vo ------------------------------------------*
wm_teamvoiceannounce 0 "kastellederhennes_axis_conconstruct"

wm_removeteamvoiceannounce 0 "kastellederhennes_axis_conconstruct"
wm_removeteamvoiceannounce 0 "kastellederhennes_axis_conconstruct"
// *---------------------------------------------------------------------------------*
}

decayed final
{
setstate krradtower_materials default
setstate krradtower_materials_clip default
setstate krradtower_flag default


setstate krradtower_krradtowered invisible
}

death
{
setstate krradtower_materials default
setstate krradtower_materials_clip default
setstate krradtower_flag default


setstate krradtower_krradtowered invisible

wm_announce "The Radio Tower is now destroyed by the Allies."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 1 "kastellederhennes_allies_conconstruct"

wm_teamvoiceannounce 1 "kastellederhennes_allies_condestruct"

wm_teamvoiceannounce 0 "kastellederhennes_axis_condestruct"
// *---------------------------------------------------------------------------------*

wm_objective_status 3 0 0
wm_objective_status 3 1 1
}

trigger remove
{
setstate krradtower_toi invisible
setstate krradtower_materials invisible
setstate krradtower_materials_clip invisible
setstate krradtower_flag invisible

setstate krradtower_krradtowered invisible

// *----------------------------------- vo ------------------------------------------*
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_conconstruct"
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_condestruct"

wm_removeteamvoiceannounce 0 "kastellederhennes_axis_condestruct"
wm_removeteamvoiceannounce 0 "kastellederhennes_axis_condestruct"
// *---------------------------------------------------------------------------------*

remove
}
}

hidden_back_wall
{
spawn
{
wait 200

constructible_class 3 //Spawn the Hidden Back Wall as a dynamitable-only objective.
}

death
{

accum 3 set 0
trigger game_manager objective3

wm_announce "Allies have found the French Servants."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 0 "kastellederhennes_axis_condestruct"

wm_teamvoiceannounce 0 "kastellederhennes_axis_condestruct"

wm_teamvoiceannounce 1 "kastellederhennes_allies_condestruct"
// *---------------------------------------------------------------------------------*

wm_objective_status 4 0 1
wm_objective_status 4 1 0
}
}

krhiddenbackwall
{
spawn
{
wait 200
trigger krhiddenbackwall setup

constructible_class 3
}

trigger setup
{
setstate krhiddenbackwall_materials default
setstate krhiddenbackwall_materials_clip default
setstate krhiddenbackwall_flag default


setstate krhiddenbackwall_krsecondarybridged invisible
}

buildstart final
{
setstate krhiddenbackwall_materials default
setstate krhiddenbackwall_materials_clip default
setstate krhiddenbackwall_flag default


setstate krhiddenbackwall_krhiddenbackwalld underconstruction
}

built final
{
setstate krhiddenbackwall_materials invisible
setstate krhiddenbackwall_materials_clip invisible
setstate krhiddenbackwall_flag invisible


setstate krhiddenbackwall_krhiddenbackwall default

wm_announce "The Hidden Back Wall is now constructed by the Axis."

// *----------------------------------- vo ------------------------------------------*
wm_teamvoiceannounce 0 "kastellederhennes_axis_conconstruct"

wm_removeteamvoiceannounce 0 "kastellederhennes_axis_conconstruct"
wm_removeteamvoiceannounce 0 "kastellederhennes_axis_conconstruct"
// *---------------------------------------------------------------------------------*
}

decayed final
{
setstate krhiddenbackwall_materials default
setstate krhiddenbackwall_materials_clip default
setstate krhiddenbackwall_flag default


setstate krhiddenbackwall_krhiddenbackwall invisible
}

death
{
setstate krhiddenbackwall_materials default
setstate krhiddenbackwall_materials_clip default
setstate krhiddenbackwall_flag default


setstate krhiddenbackwall_krhiddenbackwalld invisible

wm_announce "The Hidden Back Wall is now destroyed by the Allied."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 0 "kastellederhennes_axis_conconstruct"

wm_teamvoiceannounce 0 "kastellederhennes_axis_condestruct"

wm_teamvoiceannounce 1 "kastellederhennes_allies_condestruct"
// *---------------------------------------------------------------------------------*

wm_objective_status 4 0 0
wm_objective_status 4 1 1
}

trigger remove
{
setstate krhiddenbackwall_toi invisible
setstate krhiddenbackwall_materials invisible
setstate krhiddenbackwall_materials_clip invisible
setstate krhiddenbackwall_flag invisible

setstate krhiddenbackwall_krhiddenbackwalld invisible

// *----------------------------------- vo ------------------------------------------*
wm_removeteamvoiceannounce 0 "kastellederhennes_axis_conconstruct"
wm_removeteamvoiceannounce 0 "kastellederhennes_axis_conconstruct"

wm_removeteamvoiceannounce 1 "kastellederhennes_allies_condestruct"
wm_removeteamvoiceannounce 1 "kastellederhennes_allies_condestruct"
// *---------------------------------------------------------------------------------*

remove
}
}

// The "wagon" is destroyed and sets variables so the game manager knows when objectives
//
// are completed.
//
//{
//wm_objective_status 3 1 1
//wm_announce "Allies have destroyed the gas tank"
//accum 1 set 1
//trigger game_manager checkgame
//}
//
// The following 2 functions check if the Allied or Axis won the game using the variables
//
//accum 1 & accum 2.
//
//trigger checkgame
//{
//accum 1 abort_if_not_equal 1
//wm_setwinner 1
//wait 1500
//wm_endround
//}
//
//trigger checkgame2
//{
//accum 2 abort_if_not_equal 1
//wm_setwinner 0
//wait 1500
//wm_endround
//}
//
//
// "For the first time the flag is captured." This trigger was made by Marko.
//
//trigger al
//{
//accum 3 abort_if_not_equal 2
//alertentity axisspawn
//accum 3 set 0
//}
//
//trigger ax
//{
//accum 3 abort_if_not_equal 2
//alertentity alliedspawn
//accum 3 set 1
//}
//
//
//
//depending on who captures the flag, one of the following functions
//
//activates an alertentity function which toggles the spawn points and makes the capturing
//
//team spawn at the flag.
//
//trigger flagblue
//{
//trigger game_manager al
//
//wm_objective_status 2 1 1
//wm_objective_status 2 0 0
//
//accum 3 abort_if_not_equal 0
//
//alertentity alliedspawn
//alertentity axisspawn
//wm_announce "Allies capture the forward spawn."
//accum 3 set 1
//}
//
//trigger flagred
//{
//trigger game_manager ax
//
//wm_objective_status 2 0 1
//wm_objective_status 2 1 0
//
//accum 3 abort_if_not_equal 1
//
//wm_announce "Axis capture the forward spawn."
//alertentity alliedspawn
//alertentity axisspawn
//accum 3 set 0
//}
//
//
//}
//
//

//wagon
//{
//spawn
//{
//wait 200
//
//constructible_class 3// spawn the wagon as a dynamitable-only objective
//}
//
//death
//{
//trigger game_manager objective2
//}
//}
//
//gate1
//{
//spawn
//{
//wait 200
//
//constructible_class 3
//}
//
//death
//{
//wm_announce "Allies have breached the trainyard buildings gate."
//
//}
//}
//
//gate2
//{
//spawn
//{
//wait 200
//
//constructible_class 3
//}
//
//death
//{
//wm_announce "Axis have breached the river buildings gate."
//
//}
//}
//
//
// This is activated when a team captures the forward spawn flag.
//
//oldcityflag
//{
//trigger axis_capture
//{
//trigger game_manager flagred
//}
//
//trigger allied_capture
//{
//trigger game_manager flagblue
//}
//}
//
//
//
//
//

 

//Note: Some Value's in scripts are in the configuration of your pure Server too; script entries override server entries

which should be identical, except for that one server configuration option which allows override principles... lol.

//Note: Value's of Object's which is also Value's of Key's in GTK-Radiant 1.4

//Don't forget to leave no gaps in spacing in your letter and line spacing.

//

// The following 2 functions check if the Allied or Axis won the game using the variables

//accum 1 & accum 2.

trigger checkgame
{
accum 1 abort_if_not_equal 1
wm_setwinner 1
wait 1500
wm_endround
}

trigger checkgame2
{
accum 2 abort_if_not_equal 1
wm_setwinner 0
wait 1500
wm_endround
}

15) BSP Render:

Make sure you restart the editor with the correct files in the correct folders. See 16).

Compile your final .map into a .bsp file using the BSP Q3Map2 menu Final with the -samples 2

switch. DO NOT use -bounce 8. Your .map file gets compiled into the etmain/maps folder generating

various files, the most important of which is the .bsp file.

Make sure you have no multimedia programs still running when opening GTKRadiant 1.4 Editor and when

compiling. Be careful your Computer has enough memory to carry out EVERY function at ANY time.

If not sure, get more RAM, restart Windows and/or GTK-Radiant 1.4, entering a new clean session.

DON'T sit in ANY spawnpoints, entities, brushes, lights and/or terrains while rendering; it is NOT recommended.

DO sit in the Open Air... woofy... stinky, winky...

Note: DON'T render final until your BSP Monitoring log is clear of WARNING: 'if it's not this it's that'

cause horrible quantities and qualities of Time will be added to your render Time; normally it takes only about

10 Minutes with P4 2.0 GHZ 256 MB RAM Computer to render at +/-100000 -vis data dependant on how much is new.

 

16) Required File's & Folder's:

The correct final minimum combination is:

levelshots\yourmapname_tracemap.tga .

maps\yourmapname.bsp, maps\yourmapname.objdata, maps\yourmapname.script .

maps\yourmapname.prt, maps\yourmapname.srf are generated by the compile and are useful for

recompiling.

models\mapobjects\flag\flag_allied.md3, models\mapobjects\flag\flag_axis.md3 are acquired by

logging on to a server and downloading the etpro package.

scripts\yourmapname.arena, scripts\yourmapname.campaign, scripts\yourmapname.script .

scripts\shaderlist.txt, scripts\et_entities.def, scripts\*.SHADER files are very useful can also be

editted and are installed with the Wolfenstein: Enemy Territory game installation.

scripts\yourmapname_texturename.script is used to apply parming and scripting to your textures which is

necessary in combination with many misc_models, game_models, water, sky, ground and other textures which

you want to modify. In these and many other cases a yourmapname_texturename.script is necessary for

the correct functioning of such objects.

textures\yourtexture.tga, textures\yourtexture.jpg, textures\ripped.rip.

 

 

17) .pk3 File Compilation:

Copy everything in 15) to another location and use WinZip Classic New Archive to make a

yourmapname.zip file. Change the yourmapname.zip file to a yourmapname.pk3 file. Copy the

yourmapname.pk3 to the etmain folder. You are now ready to start your own host server if you

correctly made the files and folders and correctly used Gtk Radiant 1.4 Wolfenstein: Enemy Territory

3D Level Editor and gtkgensurf not to mention many other 3D programs you can waste valuable

minutes of your ever ebbing life energy into the misty fog!! Glug!

 

 

18) Internet Upload:

To publish on Internet throw the .pk3 file back into a .zip file and presto you're ready to go.

Try to include a help file somewhere.

 19) Brushes & Textures:

Make sure you have texturenames in .jpg and .tga in your etmain\textures\yourmapname_typeoftexturefolder.

Just loading textures from the Textures menu does not hell much if you don't have the actual file.

If you want one of the standard texture files already used from a level already made then open WinZip Classic and

Open a .pk3 file from the etmain folder which you can then extract to your etmain\textures folder.

(A) Texture Editting:

To line up texturing with already existing texturing, don't clone, draw a new brush and

Menu, Textures, Surface Inspector, Axial: GTKRadiant 1.4 lines your textures automatically up for you.

DO NOT leave protruding edges or non-flat surfaces.

Think of game play more than historical accuracy in Wolfenstein: ET.

Make each brush which blocks movement solid and detail.

Your textures must be hi-res and realistic: Choose correct colour combinations which are in Wolf ET levels already.

Stick with the flavour of the game; bright and warm colours are NOT in the spirit of Wolf ET. Think wolfish...

The following surfaceparms are available: default = stonesteps, grasssteps, woodsteps, snowsteps, roofssteps,

glasssteps, gravelsteps, metalsteps, landmine. Put in your .shader files. Use examples in pak0.pk3 by opening

with WinZip.

Note: ONLY the goldrush.map is up-to-date with the GTK Radiant 1.4 Editor and the other files are

meant to be used as examples anyway. Twy twoo be a wittle owiginal n not wip all the twime... ok?

Create .shader file by saving yourmapname.txt and renaming the extension to .shader and

yourmapname can be added to shaderlist.txt.

There can be references in shaderlist.txt to shaders not in \scripts folder used by game and editor themselves.

Note: ONLY yourmapname can be added to shaderlist.txt and NOTHING else. Good BS, or what? Munch, munch...

DO use examples in pak0.pk3 in \etmain folder with WinZip.

DON'T copy anything from other maps made by other level designers for fear of author copyright's and protection.

DO, however, most certainly use shared resources from Wolf ET found in your game folders!

Make sure to Menu, Textures, Surface Inspector, Axial for aligned multi brushes or

Fit 1 X Width and 1X Height or other X combinations for modifying textures.

Use Menu, Textures, Surface Inspector, Axis, Fit, ShiftLeftArrow, ShiftRightArrow, ShiftDownArrow, ShiftUpArrow &

much zooming to play with position's of texture's.

 

B) Brush Editting:

Add <allied> and <axis> to maps\yourmapname.script . When creating the brushes in your map DO NOT touch

the worldspawn brush which was the 1st brush.

When scaling, rotating, flippin' make sure you have the correct XZY view. Scale first.

A good thickness for brush is standard .5 and .2 of original created size and scale down or up depending on needs.

Watch out with dragging. Get close up to the brush in 2D view, otherwise you will most likely side stretch it.

If you do side stretch a brush by accident then choose Undo in the Edit menu.

Be careful you don't undo too many actions or your every brush will be selected by accident.

DO NOT keep Win Explorer or \etmain folder files open when saving. GTKRadiant 1.4 Editor loads the files at startup;

to activate your scripts, .skins just close all windows and reload your .map file.

It is possible to add textures using Surface Inspector by typing in the correct path but is recommended to

add your textures in 3D View and scripts. Some textures, of course, don't need scripting. K.I.S.S.

Cloning is good for symmetry.

The editor remembers your last brush and at which height it was.

It is recommended to use 2D XY view to create your brush by LeftClicking and hold on 2D view and drawing

your 3D rectangular shape. To make other shapes go to Brush menu after selecting brush.

To fine position something line the 2nd brush up to 1 corner by super zooming in the 2D view and

moving in on the 3D view at Menu, Edit, Preferences, 3D View, Movement Velocity at a slower speed and

with Menu, Grid, snap-to-grid turned off and line it up.

Rotate brushes by Menu, Selection, Rotate, Arbitrary or 90 degrees.

Move brushes by Left Clicking in 2D View for precise placement with your zooming in and out buttons,

LeftClicking and hold in 3D View for larger, faster rough movements, otherwise you'll get split hairs...

from side stretches... leading too bad planes... and drank so much tea already in my hyper for life T-Junctions...

To remove you must remake brush or clone again or what is a very useful trick is copy from older map,

GTK-Radiant 1.4 remembers the position of the same brushes!! Had to, grrrr, do this many times with light's

blastin through my brushes... Ruf! Split T-Junctions are read in render in BSP-Meta and can ONLY be

manually removed including no indicator whatsoever as to the location of your split T-Junctions. De Mazzel!

Bad brushes are a total pain in the ass and read as 'WARNING: Flipped triangles, (co-ads X, Y, Z)' in

render BSP-Meta; they can ONLY be manually removed, so be careful. Wrecked T-Junctions are worse...

Your correct process to follow is to choose Menu, Misc, Find Brush, Brush # 0-X and delete each of em!

For models choose Menu, Misc, Find Brush, Entity # 0-X and delete each of em!

Delete EVERY last one of em until you can open .map without gettin fucked in the head.

GTK-Radiant 1.4 go through each of your Brushes and Entities step-by-step eliminating so you might have

to do several BSP-Meta's... Ya, you can Bitch Off! too... really.

Don't Forget to Save As after EACH BSP-Meta render!

Bad brushes combine with degenerate planes when made incorrectly; generally speaking making an

overcomplicated brush with all kinds of whacky angles will give you degenerate planes, bad brushes, and the

nightmare of every level editor horrible wrecked nihilistic destroyed T-Junctions. K.I.S.S.

So be careful! These damaged brushes are recognized by you in the 2D and 3D View's by gaps between

Edges and/or Vertices of Brushes and Models...

To get these WARNING: signs turn both Menu, Edit, Preferences, BSP Monitoring, BSP Monitoring and

Stop compile at leak on. It is recommended to ALWAYS keep your BSP Monitoring on.

Example: Through a couple of my learning steps I turned BSP Monitoring off because I suffered timeouts

in the render process with it on. Later I had to do a lot of work fixing bad brushes which were missed...

Ow, my pawwww... ahhh...

A cute way to make different curves is to X Y scale from previous curves. [(:-)]

An acceptable curved staircase is difficult to make; experiment with your own possibilities!

Make EACH brush which does NOT block movement non-solid and detail.

Make structural brushes ONLY in a couple corners for the fun of it...

Try not to be the total bi-polar klutz from hell that I sometimes am...

Turn Don't clamp plane points in Edit menu, Preferences off for texture fine tuning. Turn it on for 3D brush editting;

mostly it is of course turned on depending on your tastes.

To fine tune too, use Menu, Selection, Drag Edges or Vertices.

GTKRadiant 1.4 stable version is very fine tuned allowing you to edit with great accuracy; so take the time and

be patient because it is an advanced editting tool. Personally, I, Kyle Lance Proudfoot, give GTKRadiant 1.4

stable version a 9.5 at max'ed out mark. Woohoo. [(:-)]

Pressing 'N' on your keyboard with a selected, hi!-lighted brush will call up for most brushes the worldspawn brush;

it is possible to drag a value into another field in the editor.

 

C) Hollow structure:

1) Create square Brush.

2) Change Brush to desired Cone, Sphere or Arbitrary-Sided. DO NOT choose Curve, it makes

horrible MAX_Patch_Planes, after compile you discover it...

3) Make structural or detail.

4) Save .map .

5) Repeat steps 1-3 on the same spot in your map or Clone.

6) Adjust size of 2nd Brush to a little bit smaller than 1st Brush.

7) Choose CSG Subtract in taskbar Buttons.

8) Delete 2nd Brush which is still highlighted.

9) Now you have a Hollow structure which is accepted by the program.

However, it is NOT recommended to make hollow structures... smirk... to do later high Patch surface data.

 

20) Lights:

Add plenty of Light's! Minimum is Light 20, linear, _color 1.000000 1.000000 1.000000.

Maximum light is Light 400, non-linear, _color 1.000000 1.000000 1.000000.

Make all your Light's detail !!

There is no limit to the # of Light's you can put in your .map!

Use min Light key's/value's for inside next to walls. Use max Light key's/value's for outside next to terrain.

Try to keep the lights away from brushes. Lights must be overlapping 3rd ring to highlight surfaces.

To eliminate 'your-in-the-spotlight-woo!' effects just add more lights too...

DON'T overlap the 2nd ring of your lights. If you still experience transparent brushes then you are forced to use

an expensive model, thicken the problem brush or rebuild the whole brush considering it could have gotten

wrecked by incorrect placement of your lights, which is good BS too... So far it seems light 50 works well with

detail brushes at proximity and light 20 in cramped quarters.

DO use 3D camera view to move lights; using 2D will side-stretch lights.

DO NOT use lights you are uncertain of; delete all old, light >300, and lights which have already wrecked a brush

need to be reduced drastically in intensity or deleted and the whole brush needs to be replaced.

Detail brushes are less effected by your bad light placement.

Try to make creative lighting combinations which work since you are making art too.

Cloning is good for symmetry.

Dlight is good for looped sounds. Careful of the sound radius since overlapping sounds is too funny...

 

21) Models:

In most cases not specifying the value of an object reverts to default.

In most cases specifying a value of a key of a model without the appropriate yourmapname.script file or

yourmapname_model.script file will simply be ignored when starting your .pk3 in the Wolf: ET server itself.

Sub-folders in models\mapobjects\model\subfolders have an axis folder and allied folder with the .skin files.

The model .jpg and/or .tga texture files are in the models\mapobjects\model sub-folder.

In Return To Castle Wolfenstein folder of the GTKRadiant 1.4 install these extra models are available and are

compatible with the editor: architecture, book, chandelier, coat, electronics, flag, furniture, light, plants, undead,

vehicles, xlab. There are copies of the same .md3 files in the electronics, furniture, light, plants and vehicles when

comparing between Wolfenstein: Enemy Territory and Return To Castle Wolfenstein. Also when playing online you

download files automatically into your \etmain folders which will also add models that can be used in your map.

The angle for Models line up with the 2D view.

Models use primarily skins, not textures. The textures work in combination with the valid .skin files and

correct scripting otherwise you will see the 'shader missing' texture on your models.

If a Model is leaky try moving it a little so it doesn't overlap anything.

Unfortunately, Models are expensive in -vis data unless you make them detail, which you should.

However, models will add a lot of megabytes to your level and require a more powerful server;

there is no limit to the # of models you can add to your level and there is a limit of 18 func_con's in GTK 1.4 .

Rotate models by pressing 'N', degrees; Models enter your map at 360 degrees.

Move models by LeftClicking and hold in 3D View.

 

22) Command Post:

A) The Command Post is a game_model.

The Command Post's in Wolf: ET are secondary objectives.

The Command Post is a mandatory requirement for an Objective Wolf: ET Level, otherwise it's DM ONLY...

The Command Post is the most difficult part of your level.

However, the Wolf: ET game engine reads it as a secondary objective, which is unique.

You have to no less, sic, copy and place without 1 millimeter off position the 3 models of the command post

with all of it's components, extract all the necessary files from pak0.pk3 to their correct folders and

check all the correct keys and values specific for your .map in your .map and the .shader file

into your whole weekend before it blinks happily away at, oops, I used exclamation marks for the Voice's...

The Neutral Command Post, the ONLY possibility, can be directly copied from goldrush.map provided

you can select the whole Command Post framework successfully in 1 go... pffffff.... wahahahahaaaaaa...

In other words, pour yourself lots of coffee, make sure you have enough free memory, and good luck!!

You then open your .map and choose Menu, Edit, Paste at which point it of course seeing your .map

as an entirely new unrecognized .map places it somewhere far away from where you actually want to have

your Command Post which should be a nicely lit, roomy, happy Area before you tear the rest of your hair out...

Drag it with the 3D View ONLY or you immediately side-stretch your model and have to start over cause no undo.

Once, ALLAH, the correct brushes are correctly placed without overlapping anything you can do...

 

B) etmain\models\mapobjects\radios_sd\3 .md3's and 3 .skin's is 10 Command Post files extracted from pak0.pk3

which are the following:

1 compostalliedopen.md3 and 1 compostalliedopen.skin

1 compostneutralclosed.md3 and 1 compostneutralclosed.skin

1 compostaxisopen.md3 and 1 compostaxisopen.skin

1 trigger_objective_info for compostneutralclosed.md3

1 func_constructible for compostaxisopen.md3

1 func_constructible for compostalliedopen.md3

1 script_mover for the clip brushes.

1 origin brush for EACH of the previous 4 on top of at same location.

1 info_null_camera for objective.

1 info_null for location of objective on command map.

1 Neutral clip brush completely around the compostneutralclosed.md3

1 Allied clip brush completely around EACH part of compostalliedopen.md3

1 Axis clip brush completely around EACH part of compostaxisopen.md3

 

C) The above objects have the following keys and values:

compostalliedopen.md3 has _rs 1, classname game_model, origin (X,Y,Z),

models/mapobjects/radios_sd/compostalliedopen.md3, skin models/mapobjects/radios_sd/compostalliedopen.skin,

angle 0-360, modelscale 1.5, targetname allied_compost_built_model, scriptname allied_compost_built_model.

 

compostneutralclosed.md3 has _rs 1, classname game_model, origin (X,Y,Z),

models/mapobjects/radios_sd/compostneutralclosed.md3, skin

models/mapobjects/radios_sd/compostneutralclosed.skin,

angle 0-360, modelscale 1.5, targetname neutral_compost_closed_model,

scriptname neutral_compost_closed_model.

 

compostaxisopen.md3 has _rs 1, classname game_model, origin (X,Y,Z),

models/mapobjects/radios_sd/compostaxisopen.md3, skin models/mapobjects/radios_sd/compostaxisopen.skin,

angle 0-360, modelscale 1.5, targetname axis_compost_built_model, scriptname axis_compost_built_model.

 

trigger_objective_info around the models and not the origin brushes and info_null_camera has

targetname neutral_compost_toi, scriptname neutral_compost_toi, classname trigger_objective_info,

track 'You are near... 'the yourcommandpostname'', target neutral_compost_built, objflags 96,

shortname 'yourcommandmapcommandpostname', spawnflags is_commandpost.

 

Axis func_constructible has targetname neutral_compost_built, scriptname axis_compost_built,

classname func_constructible, spawnflags axis_constructible.

 

Allied func_constructible has targetname neutral_compost_built, scriptname allied_compost_built,

classname func_constructible, spawnflags allied_constructible.

 

script_mover origin brush is selected with all the clip brushes and converted into a script mover by

RightClicking in 2D View on the center of the selected brushes and choosing  script, script_mover and

has targetname neutral_compost_closed_clip, scriptname neutral_compost_closed_clip,

classname script_mover, spawnflags choose your own.

Note: Here you can see an object can have the same targetname and scriptname, if correct.

 

The origin brushes are for fixation of location otherwise you'll get funny 'magic door' effects,

the actual brush appearing half between actual co-ordinates and the middle of your level.

The 4 origin brushes used with the Command Post are converted into the 2 func_constructibles,

the 1 script_mover with ALL the clip brushes, and 1 trigger_objective_info the same as the toi box...

 

The info_null_camera is positioned above the Command Post in Open Air targeting the info_null which is

inside the bottom left empty part of the 3 Command Posts which occupy essentially the same location and

has origin (X,Y,Z), classname info_null_camera, target info_null targetname, objective objective #.

 

The info_null is targeted by the info_null_camera and determines the fixed location of the model with objective

in your level and has origin (X,Y,Z), classname info_null, targetname 'yournullinfonamelamebrain'.

 

The clip brushes use the \textures\common\clip or the purplish woodclips which come with the copy from

goldrush.map. The neutral clip is easier cause it is one piece. The clips for the Axis and Allies .md3's have to

all be selected and copied from goldrush.map in cramped quarters or made anew...

 

// ================================================
// ============ NEUTRAL COMMAND POST ==============
// ================================================

allied_compost_built
{
spawn
{
wait 400
trigger allied_compost_built setup

constructible_class 2
}

trigger setup
{
setchargetimefactor 1 soldier 1
setchargetimefactor 1 lieutenant 1
setchargetimefactor 1 medic 1
setchargetimefactor 1 engineer 1
setchargetimefactor 1 covertops 1
sethqstatus 1 0
}

buildstart final
{
setstate allied_compost_built_model underconstruction
setstate neutral_compost_closed_clip invisible
setstate neutral_compost_closed_model invisible
}

built final
{
setstate allied_compost_built_model default
setstate neutral_compost_closed_clip invisible
setstate neutral_compost_closed_model invisible

trigger allied_compost_built_model enable_allied_features

enablespeaker allies_compost_sound
}

decayed final
{
setstate allied_compost_built_model invisible
setstate neutral_compost_closed_clip default
setstate neutral_compost_closed_model default
}

death
{
setstate allied_compost_built_model invisible
setstate neutral_compost_closed_clip default
setstate neutral_compost_closed_model default

trigger allied_compost_built_model disable_allied_features

disablespeaker allies_compost_sound
}
}

allied_compost_built_model
{
spawn
{
wait 400
setstate allied_compost_built_model invisible
}

trigger enable_allied_features
{
setchargetimefactor 1 soldier 0.75
setchargetimefactor 1 lieutenant 0.75
setchargetimefactor 1 medic 0.75
setchargetimefactor 1 engineer 0.75
setchargetimefactor 1 covertops 0.75
sethqstatus 1 1

wm_announce "Allied Command Post constructed. Charge speed increased."

// *----------------------------------- vo ------------------------------------------*
wm_teamvoiceannounce 0 "axis_hq_compost_constructed_allies"

wm_teamvoiceannounce 1 "allies_hq_compost_constructed"

wm_removeteamvoiceannounce 1 "allies_hq_compost_construct"
// *---------------------------------------------------------------------------------*

wm_objective_status 5 0 2
wm_objective_status 5 1 1
}

trigger disable_allied_features
{
setchargetimefactor 1 soldier 1
setchargetimefactor 1 lieutenant 1
setchargetimefactor 1 medic 1
setchargetimefactor 1 engineer 1
setchargetimefactor 1 covertops 1
sethqstatus 1 0

wm_announce "Axis team has destroyed the Allied Command Post."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 0 "axis_hq_compost_construct"

wm_addteamvoiceannounce 1 "allies_hq_compost_construct"

wm_teamvoiceannounce 0 "axis_hq_compost_construct"

wm_teamvoiceannounce 1 "allies_hq_compost_damaged"
// *---------------------------------------------------------------------------------*

wm_objective_status 5 0 0
wm_objective_status 5 1 0
}
}

axis_compost_built
{
spawn
{
wait 400
trigger axis_compost_built setup

constructible_class 2
}

trigger setup
{
setchargetimefactor 0 soldier 1
setchargetimefactor 0 lieutenant 1
setchargetimefactor 0 medic 1
setchargetimefactor 0 engineer 1
setchargetimefactor 0 covertops 1
sethqstatus 0 0
}

buildstart final
{
setstate axis_compost_built_model underconstruction
setstate neutral_compost_closed_clip invisible
setstate neutral_compost_closed_model invisible
}

built final
{
setstate axis_compost_built_model default
setstate neutral_compost_closed_clip invisible
setstate neutral_compost_closed_model invisible

trigger axis_compost_built_model enable_axis_features

enablespeaker axis_compost_sound
}

decayed final
{
setstate axis_compost_built_model invisible
setstate neutral_compost_closed_clip default
setstate neutral_compost_closed_model default
}

death
{
setstate axis_compost_built_model invisible
setstate neutral_compost_closed_clip default
setstate neutral_compost_closed_model default

trigger axis_compost_built_model disable_axis_features

disablespeaker axis_compost_sound
}
}

axis_compost_built_model
{
spawn
{
wait 400
setstate axis_compost_built_model invisible
}

trigger enable_axis_features
{
setchargetimefactor 0 soldier 0.75
setchargetimefactor 0 lieutenant 0.75
setchargetimefactor 0 medic 0.75
setchargetimefactor 0 engineer 0.75
setchargetimefactor 0 covertops 0.75
sethqstatus 0 1

wm_announce "Axis Command Post constructed. Charge speed increased."

// *----------------------------------- vo ------------------------------------------*
wm_teamvoiceannounce 0 "axis_hq_compost_constructed"

wm_teamvoiceannounce 1 "allies_hq_compost_constructed_axis"

wm_removeteamvoiceannounce 0 "axis_hq_compost_construct"
// *---------------------------------------------------------------------------------*

wm_objective_status 5 0 1
wm_objective_status 5 1 2
}

trigger disable_axis_features
{
setchargetimefactor 0 soldier 1
setchargetimefactor 0 lieutenant 1
setchargetimefactor 0 medic 1
setchargetimefactor 0 engineer 1
setchargetimefactor 0 covertops 1
sethqstatus 0 0

wm_announce "Allied team has destroyed the Axis Command Post."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 0 "axis_hq_compost_construct"

wm_addteamvoiceannounce 1 "allies_hq_compost_construct"

wm_teamvoiceannounce 0 "axis_hq_compost_damaged"

wm_teamvoiceannounce 1 "allies_hq_compost_construct"
// *---------------------------------------------------------------------------------*

wm_objective_status 5 0 0
wm_objective_status 5 1 0
}
}

//Ignore the FIXME's messages at .map load.

//In comparison to other .shader files the command post uses actual game object names so you will have difficulty making your own names up for the command post unless you can superbly fly bipolar cross-eyed and is not recommended...

 

23) X-plosiv Bridges:

A) Explosive brushes work in combination with constructible brushes and

the Axis and Allied Build Crates which are both game_models.

Explosive Bridges and other explosive Wolf: ET game actions are primary objectives.

 

Step 1: Explosive Objective.

Make multiple brushes equal to each other for the vehicle path of your bridge. Select ANY one of them which are

wide enough to prevent a Wolf Player from jumping across RightClick on centre of it in 2D View and

convert it into a func_explosive. Preferably you have water underneath your bridge...

Your func_explosive has the following keys and values:

type rock Pressing 'N' gives you other types.

noise sound/world/stonefall.wav Pressing 'N' gives you other typefall.wav options.

health 0 If you place higher values in this one then grenades and other shit can damage it.

mass at a max of 800 This generates more debris at higher value where weir 600+ is reasonable.

classname func_constructible,

scriptname yourmapname_description_object,

dmg 100+ from centre,

targetname auto after Menu, Selection, Connect 2 Entities,

spawnflags lowgrav is fun.

Note: Your func_constructible entity is connected to trigger_objective_info entity later at toi first selected.

 

Step 2: Trigger_Objective_Info.

Place completely around your func_explosivable in the area's you want the dynamite to be placable plastic.

Make this brush with the \textures\common\trigger texture and detail.

target auto gen after Menu, Selection, Connect 2 Entities,

classname trigger_objective_info,

track You are near... 'the objectname',

objflags = # of objective,

spawnflags allied_objective if blowable by Axis, axis_objective if blowable by Allied, schwwwing...

shortname boombridge This name appears in your commandmap when game is loaded in server.

 

Step 3: Connect 2 Entities.

Select trigger_objective_info brush first and second the func_explosive brush so it knows

which is the target and which is targetname.

 

Step 4: YourMapName.Script.

Type the following lines into maps\yourmapname.script and depending how you setup up your aunty

objectives in your \maps\yourmapname.objdata file you might need to slightly modify it:

//The "scriptname" is the key where "yourmap_description_bridge" is the value of the key.
//Entity with "bridge" scriptname is destroyed and sets variables,
//so the game manager knows when objectives are completed.
//Bridge go Boom!

yourmapname_bridge_boom
{
spawn
{
wait 200

constructible_class 3 //Spawn the bridge as a dynamitable-only objective.
}

death
{

accum 1 set 0
trigger game_manager objective1 //These two notify game of completed bridge explosive objective.

wm_announce "Axis have destroyed the bridge." //This is what is said at bridge go boom.

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 0 "yourmapname_axis_hq_bridgedestroyed"

wm_teamvoiceannounce 1 "kastellederhennes_allies_hq_dynamitedefused"
// *---------------------------------------------------------------------------------* //0 is axis, 1 is allied, other's from pak0.pk3

wm_objective_status 1 0 0
wm_objective_status 5 1 0
}
} //These two notify both axis and allied teams of completed objectives.

 

//This part builds the primary bridge after bein blown... by the Allied at hint detail is not too expensive.

yourmapnamebridgebuild
{
spawn
{
wait 360
trigger yourmapnamebridgebuild setup

constructible_class 3
}

trigger setup
{
setstate yourmapnamebridgebuild_materials default
setstate yourmapnamebridgebuild_materials_clip default
setstate yourmapnamebridgebuild_flag default


setstate yourmapnamebridgebuild_yourmapnamebridgebuilt invisible
}

buildstart final
{
setstate yourmapnamebridgebuild_materials default
setstate yourmapnamebridgebuild_materials_clip default
setstate yourmapnamebridgebuild_flag default


setstate yourmapnamebridgebuild_yourmapnamebridgebuilt underconstruction
}

built final
{
setstate yourmapnamebridgebuild_materials invisible
setstate yourmapnamebridgebuild_materials_clip invisible
setstate yourmapnamebridgebuild_flag invisible


setstate yourmapnamebridgebuild_yourmapnamebridgebuilt default

wm_announce "The bridge is now constructed by the Allies."

// *----------------------------------- vo ------------------------------------------*
wm_teamvoiceannounce 1 "yourmapname_allies_hq_bridgeconstructed"

wm_removeteamvoiceannounce 1 "yourmapname_allies_hq_bridgeconstruct"
wm_removeteamvoiceannounce 1 "yourmapname_allies_hq_bridgeconstruct"
// *---------------------------------------------------------------------------------*
}

decayed final
{
setstate yourmapnamebridgebuild_materials default
setstate yourmapnamebridgebuild_materials_clip default
setstate yourmapnamebridgebuild_flag default


setstate yourmapnamebridgebuild_yourmapnamebridgebuilt invisible
}

death
{
setstate yourmapnamebridgebuild_materials default
setstate yourmapnamebridgebuild_materials_clip default
setstate yourmapnamebridgebuild_flag default


setstate yourmapnamebridgebuild_yourmapnamebridgebuilt invisible

wm_announce "The bridge is now destroyed by the Axis."

// *----------------------------------- vo ------------------------------------------*
wm_addteamvoiceannounce 1 "yourmapname_allies_hq_bridgeconstruct"

wm_teamvoiceannounce 1 "yourmapname_allies_hq_bridgedamaged"

wm_teamvoiceannounce 0 "yourmapname_axis_hq_bridgedamaged"
// *---------------------------------------------------------------------------------*

wm_objective_status 1 0 0
wm_objective_status 5 1 0
}

trigger remove
{
setstate yourmapnamebridgebuild_toi invisible
setstate yourmapnamebridgebuild_materials invisible
setstate yourmapnamebridgebuild_materials_clip invisible
setstate yourmapnamebridgebuild_flag invisible
setstate yourmapnamebridgebuild_yourmapnamebridgebuilt invisible

// *----------------------------------- vo ------------------------------------------*
wm_removeteamvoiceannounce 1 "yourmapnamebridgebuild_allies_hq_bridgeconstruct"
wm_removeteamvoiceannounce 1 "yourmapnamebridgebuild_allies_hq_bridgeconstruct"

wm_removeteamvoiceannounce 0 "yourmapnamebridgebuild_axis_hq_bridgedestroyed"
wm_removeteamvoiceannounce 0 "yourmapnamebridgebuild_axis_hq_bridgedestroyed"
// *---------------------------------------------------------------------------------*

remove
}
}

//Look at EACH line and EACH part of each line and after about 7 hours you should get it... Hullo!

 

However, I can tell ya that _toi is trigger_objective_info,  _materials is the actual Build Crate model,

_materials_clip are your \textures\common\clip brushes which must surround EACH part of model, like compost,

don't breathe compost, _flag is the seperate flag model which is in pak0.pk3 too,

yourmapnamebridgebuild is scriptname of func_explosivable brush,

_yourmapnamebridgebuilt is targetname of func_explosivable brush,

wm_objective_statue 1-18, 0 or 1, 0 ONLY. 18 is at a max of 18 func_constructibles per .map,

0 or 1 is Axis or Allied, and 0 refers to the top of yourmapname.script file where number of objectives are listed.

The other scripting commands should be obvious; careful you change each part exactly correctly to

corresponding files from pak0.pk3 and check your spelling twice after copying the above into yourmapname.script .

When you are done entering your own map-specific values to yourmapname.script place

2 info_null_camera's and 2 info_null's, both above the Build Crates and both above the func_explosive brush

which is the 1st part of the above 2 part script for esplosive bridge objectives...

What this tells you is that your func_constructible brush occupies the identical position

as your func_explosive brush!

You can cleary see yourmapname_bridge_boom is a different scriptname than yourmapnamebridgebuild.

The confusing part is your func_constructible has the scriptname yourmapnamebridgebuild and

the targetname yourmapnamebridgebuilt, with a 't' or other small difference in the last part of the objectname.

Whereas, your func_explosivable has the scriptname yourmapname_bridge_boom and

the targetname is auto generated by the Menu, Selection, Connect Entities.

Now you are ready to tackle the Axis and/or Allied Build Crates.

 

B) The Axis and Allied Build Crates.

Make sure your func_constructible is identical in all ways to your func_explosive brush and at same location!

Hint: Place your func_constructible 1 tiny stipple vertically off of func_explosive at max zoom without

allowing any visible lines to show between your axial texture brushes of the other parts of your bridge.

trigger_objective_info:

classname trigger_objective_info

scriptname yourmapnamebridgebuild_toi

targetname yourmapnamebridgebuild_toi

target yourmapnamebridgebuilt

track the Axis or Allied Build Crates

shortname Axis or Allied Build Crates

spawnflags is_objective

objflags # of this objective in \maps\yourmapname.objdata

 

cmarker_crates.md3

classname game_model

models/mapobjects/cmarker/cmarker_crates.md3

models/mapobjects/cmarker/allied_crates.skin

origin (X,Y,Z)

 

cmarker_crates.md3:

classname game_model

models/mapobjects/cmarker/cmarker_flag.md3

models/mapobjects/cmarker/allied_cflag.skin

modelscale .4

origin (X,Y,Z)

frames 10 - 40 is acceptable

fps This depends of course how bloody rapid you want your laugh hard flag to animate...

start This is the startframe

targetname yourmapnamebridgebuild_flag

scriptname yourmapnamebridgebuild_flag

angle Press 'N' and choose angle.

spawnflags start_animate

 

1 origin brush above the Build Crates and clip brushes completely around EACH part of Build Crates are

all selected and turned into a func_static entity similar to the Command Post; this is necessary for mirroring.

GTK-Radiant 1.4 3D-Level Editor makes a mirror of the folders & files & constructibles in your .map.

 

\textures\common\clip.tga:

classname func_static

targetname yourmapnamebridgebuild_materials_clip

target yourmapnamebridgebuild_toi

 

\textures\common\origin.tga:

classname func_static

targetname yourmapnamebridgebuild_materials_clip

target yourmapnamebridgebuild_toi

 

Finally, add an info_null_camera and an info_null in the same way as before = 0.

 

Note: So long as your scripting is correct the actual skins for game_models don't need textures anywhere in your

\etmain\yourmapfolders... saving plenty of mb's in your compile; it is recommended to delete unused files.

 

24) General Guidelines:

When I am online in my Host Server playing Wolf: Enemy Territory in ANY level I consider it to be Open Warfare and

will Kick, Ban and/or Ban Forever your ass for ANY reason I see appropriate and

following the Rule's of The Free Show:

*See fuckinreadme.txt and fuckinreadmeII.txt and fuckinreadmeIII.txt*

DON'T Brag... I, god, Kyle Lance Proudfoot, MAZZSilber will Kick a Member for Braggin.

DON'T Dis ANY Member's level... Get Kicked by me, god, for Dissin a Member's level.

DON'T Know Too Much... If it is evident and I perceive a Member Know's Too Much then

I will Kick the Member for blatantly Cheating.

DO NOT TK... get Kicked automatically for a TK vs own Wolf Team read by my Computer.

DO NOT Camp... get Kicked automatically by Standard Time-Out of 2 minutes for non-activity.

DO NOT Lag... get Kicked automatically by 201+ ping at a min of 2 Minutes.

DO NOT Cheat... get Kicked automatically at a max of 2 Minutes when my Computer reads a Member Cheating and

the most recent update of Punkbuster Wolf: ET Client is NOT downloaded and installed at the beginning of a

Wolf Battle Session and if a Punkbuster Client does NOT download and install the most recent update of

Punkbuster Wolf: ET Client

in a Battle Session of The Free Show.

DO Call A Vote... Calling A Vote is following the configuration of my Computer and is evident in-game play.

Cheat = Cheating = Know Too Much = Know's Too Much = Knowing Too Much.

Wolf Team = Battle Gru.

Wolf Session = Wolf Battle Session.

Wolf: ET = Wolf: Enemy Territory.

Vote = Call A Vote.

Kick = Kick = get Kicked = Kicked.

Ban = Ban = get Banned = Banned.

I recommend keeping Wolf: ET to Kicks ONLY, however I, myself, shall probably Ban Member's too...

F'in Campers... Good Game!!

 

 

 

25) A Couple Mistakes...:

In no particular order:

(A) If you get 'Program Error' window with termination of Wolf: ET Host Server while loading a .pk3 level then it's because

yourmapname_tracemap.tga is not correct in \map folder.

 

(B) If continued damaged brushes at hell then change location of brushes at a min of 1 meter, am, sic, forced to modify the concept

somewheat... should help... is now 6 AM in the mourning... will pass out any second now... am goin' to pass out now...

 

"One of 3 things is goin' to happen here: Either it's gonna work, I'm gonna pass out, or my Computer will blow up!" says MAZZSilber.

"At 60X retries through the mandatory trial & error process, gee, damn, it looks great!" says MAZZSilber.

"Ya, it was worth it alright at unacceptable delays, postponement, and, oops, cancelled again..." says MAZZSilber.

"Ya, so, therefore rip how COD looks... wippin' good!" says MAZZSilber.

 

(C) T-Junctions at damaged surfaces/edges/vertexes of brushes remains completely mystifying at I don't remember back then, with

layered brushes on top of each other, with no way to find, with a ridiculous & absurd quantity of extra time added to each render, with a

cute coincidence of 13 T-Junctions in my junk.txt, with an actual quantity of 26 T-Junctions not findable trying to blow up my Computer.

A common cause of T-Junctions in your brushes is making brushes. T-Junctions can also come from poorly done CSG Substracts

when you put holes like windows & doors into existing brushes.

To eliminate your T-Junctions, if you can find 'em, is thicken your suspect brushes.

Sometimes making suspect brushes structural, turning BSP Monitoring off, rendering, re-opening .map with BSP Monitoring turned

back on will light 'em up! This is tricky though and good luck, really. Haven't quite figured out how to solve T-Junctions, tears my hair

out, but is worth it considering the render time needed for fixing them in unclean .map's = unending hell.

 

(D) If you get those god-awful god-ugly orange screens at Wolf: ET program startup Main Menu all the time it's because everytime it's

because of incorrect .shader's... look it's punishment enough to feel stupid everytime, giving me night-blindness, nausea, and instant

despicable hate for another orange-screen just adds insult to injury...

 

(E) Screensaver does not f'up GTK Radiant 1.4 allowing for enought memory, of course.

 

(F) Character length for file is at a max of 27 characters, about... 'n,

65 characters in a path description is... too long... about...

 

(G) If you can't solve your .map/render/compile/folder/file problems, since it all has to line up to the last letter, then just go back to Last

Known Good .map/compile/folder/file and Copy. Deleting new shit which you just added, always being the cause relative to a previous

correct procedure with no mistakes, and then copying from older .map's which automatically puts the previous brushes into exactly

the same position with Paste into your newer .map is totally f'in amazin'! This way you can always recover at roll 'em back, and trying to

solve a lot of problem's is a waste of time, can be applied to your whole Wolf: ET game folder!

To recover from bad .map's with copies back to your game folders make sure no file is read-only and copy from folder contents.

The .srf and .prt files need to be the latest or try deleting them and BSP-Meta at 1st step, one set ONLY of .srf and .prt work or au-revoir...

 

(H) Yes, you can .zip your whole Wolf: ET game folder... just don't zip any .zip's...

 

(I) It is possible to put the mouse into the 2D View: Try escapin' or somethin.

 

(J) Make sure there is no extra spacing between lines in ALL your scripts. DON'T change the installed script's unless you know what

you're doing or au-revoir!

 

(K) Change all your textures to 128x128 at a max size, saving you plenty of kb's... practically nihil brushes need larger at Menu,

Textures, Surface Inspector, Axial.

 

(L) Memory is your most important Allie in 3D-Level making. GTK-Radiant functions completely normally at a min of 256 RAM on a small

partition at a min of 1200MB - 1800MB non-cross partition swap file with 2K Professional. It is recommended at a min of 512 RAM

considering the size and poor condition of most computer partitions... If your system is hampering a little wait at a min of 2 Minutes

before & after render's. In other word's without sufficient memory you will fry your computer by rendering.

 

(M) It is not recommended to turn your Anti-Virus or system scan's off while using the program since if you play the game on Internet,

and go Internet, and render, and duh...

 

(N) If light radiusi go beyond the boundaries of your .map as indicated in the worldspawn brush render-time will also increase.

 

(O) The best way to deal with ugly orange-screens, smirk, is to put a .pk3 in you know works and check your most recent .shader files.

 

(P) Don't use sprites in Wolf: ET! Just don't.

 

(Q) Don't save your .map if your 3D Camera is sitting in a brush, model, and/or light = leaky head brain at duh...

 

(R) Wrecked brushes can in nightmare scenarios be caused by wrecked area's of your .map and must be removed by changing your

concept somewhat and the location of every brush wrecked:

Tiny fuckin' fragments are a total nightmare and are invisible, create leaks & wrecked brushes, turning the transparent & ugly, adding

absurd & ridiculous quantities of hell-time to render-time.

 

26) Making Your Demo:

Simply press the record button on your keyboard and you film everything! The demo gets automatically put into demos folder.

 

27) Screenshots:

Click happily away at every surprize! corner as you lean around edges and shoot your opponent, woo!

 

28) Repairing & Cleaning Up Your .map:

Your most important tool here is to turn Edit, Preferences, BSP Monitoring on...

If you get time-out's while rendering it's most likely cause you have too many structural brushes but you can still read the same log of

your render in X:\GTK-Radiant1.4\junk.txt...

To properly debug, GTK Rad 1.4, do a render with BSP Monitoring turned OFF and try changing suspect brushes between

solid/structural & detail/solid, then turn BSP Monitoring back ON.

In debugging, it depends where your Camera is while saving...

Tiny f'in fragments are a total nightmare and are invisible, create leaks & wrecked brushes, turning the transparent & ugly, adding

absurd & ridiculous quantities of hell-time to render-time.

29) Host Server:

Your folders and files must be Pure to run a pure Server or your surfaceparms get ripped up again at nifty Noobie night battle...

ONLY game files and your files with correct extensions are referenced.

30) Kastelle de Rhennes Wolf: ET Level Download:

I'll be adding more shit to this once I spit the bullets out, the silver ones were yummy.

Keep on blastin' ! ([:-)]

Written by: Kyle Lance Proudfoot aka MAZZSilber

MAZZSilber: cklpcc@xs4all.nl

Kastelle de Rhennes Wolfenstein: Enemy Territory level:

kastellederhennes.zip is downloadable from www.silverlingo.com

Version: 3.0, 23102004, stable, pure, unclean, less quarky.

[(:-)] all rights reserved.