Mission Filestructure
Choosing a PK4 filename
It is important to come up with a unique filename for your mission's PK4 file, as the filename is used by the in-game mission manager to distinguish the packages: it is best to choose a PK4 name that has not been used by other released missions.
Furthermore, do not use international characters or symbols for the filename. Alphanumeric only (A-Z, a-z and 0-9).
Please do not include version information in the filename. Future updates must have the same filename to properly update via the in-game installer.
- ../darkmod/fms/levelname.pk4
- This is your mission file, containing everything required to play your mission. It is a .zip file with its extension renamed .pk4.
- The internal directory structure is listed on this page.
Mission PK4s
Each TDM mission must be packaged in a PK4 file (a PK4 is just a renamed ZIP archive). The PK4 contains all the files needed to run the mission, including map, cm, aas, proc files, textures, models, scripts, defs, xdata, etc. The contents of the PK4 resemble the folder structure as found in the main darkmod/ directory: textures go into textures/, .def files go to def/ and so on.
Mimimum content of a pk4
At the very minimum, a PK4 archive needs to contain the compiled map and two text files:
maps/outpost.map maps/outpost.proc maps/outpost.cm maps/outpost.aas32 darkmod.txt startingmap.txt
Easy to see, the above example list of files is based on a mission called outpost. The two text files are needed to display your mission in the "New Mission" dialog in TDM's main menu. See their description below.
Content of a pk4
/credits.txt //please insert to continue /darkmod.txt //title info /list.txt //this directory listing /readme.txt //readme /startingmap.txt //this level /dds/ /dds/textures /dds/textures/darkmod /dds/textures/darkmod/custom_texture.dds //i'm not sure the difference /dds/textures/darkmod/decals/ //between these paths /dds/textures/darkmod/decals/custom decal.dds //as it seems like it should /dds/textures/darkmod/decals//building_facades //work wherever you /dds/textures/darkmod/decals//building_facades/levelname_eg.window.dds //put the dds files in here (tidiness' sake)? /levelname/customtexturemaps.dds
/def/custom_AI_head_and_skin.def //these are def files that /def/custom_AI_head_and_skin2.def //i have ripped from /def/custom_AI_inc_props.def //various missions /def/custom_npc_model_inherit_custom_ai.def //that might prove useful /def/tdm_ai_custom_ai.def //in the future /def/tdm_lod_custom_level_of_detail_for_model.def //for specific functions. /env //contains skybox *unknown format /envskybox.* (lwo?) /fonts/fontimage_<size>.dat //<size> is pica/pts. *unsure where refered in .xd?
/guis/custom_readable_slab.gui //guis for readables /guis/mainmenu_briefing.gui //briefing screen. Can find extended version by Sotha via fidcal's (http://www.fidcal.com /DarkModContributions/guis/briefings/briefing_button.zip ) /guis/mainmenu_custom_defs.gui //shop / [item] persistence over campaign / advanced briefing & debrief, eg, start points / replacement/music[voiceover] / video (wiki documentation). /guis/assets /guis/assets/briefingX.tga //briefing background /guis/assets/generic_loading_bar1.tga //level load bar /guis/assets/levelname_loading.tga //loading background /guis/assets/next_arrow.tga //briefing arrows (as referred by briefing.gui) /guis/assets/previous_arrow.tga /guis/assets/stop_cross.tga /guis/assets/game_maps/map_of_levelname.tga //in-game level map /guis/assets/game_maps/map_of_levelname_icon.tga //icon for level map /guis/hud /guis/hudcustom_hud.tga //hud changes (no hud.gui?) /guis/hud/inventory_icons /guis/hud/custom_inv_item.tga //extra inventory icons /splash/levelname_loading.tga //what it says - think the image dimensions either 640x480 or 512x512, origin is top left corner /map /map/map_of_levelname.gui //points from game to tga (unsure if can tga can be compressed to dds for smaller d/l)
/lights/custom_light_colour.tga //light shaders /lights/custom_light_nocolour.tga /maps/levelname.aas_rat //dmap output (richard gere and lemmiwinks). /maps/levelname.aas32 //required to play game /maps/levelname.cm /maps/levelname.map /maps/levelname.proc /maps/levelname.script /materials /materials/custom_ai.mtr //material files for several /materials/custom_light.mtr //purposes, definition to include /materials/custom_map.mtr //new textures, light, game map, /materials/custom_obj_lod.mtr //models, fixes, behaviour, etc... /materials/frobhighlight_textures_example.mtr /materials/ghost_collision_draw_fix.mtr /materials/levelname (new textures.surfaces).mtr /materials/levelname_light_textures.mtr /materials/levelname_textures (modified textures).mtr /materials/levelname_video.mtr /materials/stolen_AI_base_WS1ghost.mtr // I nicked this one as example of custom.mtr /materials/models /materials/models/darkmod /materials/models/darkmod/decorative //3DSMax / Blender / DR exported .ase files here /materials/models/darkmod/category //all ase requires definition through material (.mtr) and parent to (.skin). /materials/models/darkmod/category/custom_model.ase /materials/models/darkmod/loot/custom loot model.ase /materials/models/darkmod/misc/system/skybox_model.lwo //lightwave model/mesh - references texture where? (unclear pointer) - 2D or 3D as with source vtf but to lwo instead? https://developer.valvesoftware.com/wiki/Skybox_(2D) / https://developer.valvesoftware.com/wiki/Making_3D_Skyboxes /weapons/custom_weapon(nonplayer).lwo /levelname/custom_model.ase /md5 //md5 mesh depot /md5/chars/body/npc/custom_npc_body.md5mesh /heads/npc/custom_npc_head.md5mesh /particles/ /particles/customparticle.prt //particle info - can be created /particles/tdm_alter_existing_particle.prt //using in-game console /script /script/custom_ai.script //script files here /script/levelname.script /script/tdm_ai_event.script /script/tdm_custom_scripts.script /skins //skins link textures to .ase models - appears similar in function to: http://www.misfitcode.com /misfitmodel3d/olh_quakemd3.html#textures which would allow .png substitute [stegosploit] /skins/custom_ai.skin /skins/custom_loot.skin /skins/custom_obj_model.skin /skins/tdm_replace_model_texture.skin /skins/texture for model.skin /skins/zombie_replacement.skin /sound //sound shader replacement pointers /sound/doorsounds.sndshd /sound/effects.sndshd /sound/footsteps.sndshd /sound/music.sndshd /sound/voices.sndshd /sound/effects/ //the sound files themselves /sound/effects/custom.effect.ogg /sound/effects/footsteps /sound/effects/footstepscustomstep.surface.ogg /sound/effects/music /sound/effects/musiclevelmusic.ogg /sound/effects/voices /sound/effects/voices/charvoice.ogg /sound/effects/voices/conversation.ogg /strings/fm //each translation requires new /strings/fm/de.lang //repack. Game items must be named /strings/fm/eng.lang //#str or look-up-replaced using... /strings/fm/es.lang //i forgot the name... /strings/fm/pyc.lang //ebatc /textures /textures/darkmod/ //new textures go here. /textures/darkmod/custom texture.jpg //normals and other maps must /textures/darkmod/custom texture.tga //be packaged as .dds - unclear on optimal dimension or resolutions (512x512 appears fine for tiling surface). /textures/decals/ /textures/decals/blood //alpha channel. 24 or 32bit only - appears black / loses alpha transparency if not. /textures/decals/blood/custom_blood.jpg // jpegs do not contain alpha channels, but appears to retain EXIF - possible intrusion risk via stegosploit [untested]. /textures/decals/blood/custom_blood.tga // even if game does not allow for intrusion, JS or other access of file may run, RAT, embedded. /textures/decals/dirt/dirt/custom_dirt.jpg // malicious level design: https://conference.hitb.org/hitbsecconf2015ams/wp-content/uploads/2015/02/D1T1-Saumil-Shah-Stegosploit-Hacking-with-Pictures.pdf /textures/decals/dirt/custom_dirt.tga // considering older engine, perhaps worth test for guard in VM. /levelname/customtexture.jpg /levelname/customtexture.tga /video/levelname_briefing.roq //format for in-game video (encoder: ftp://ftp.idsoftware.com/idstuff/quake3/tools/roq.zip / decoder: https://github.com/i...client/cl_cin.c) /video/levelname_credits.roq /xdata /xdata/briefing.xd //text only briefing - use gui for moving image, timed sequence, etc... /xdata/levelname.xd //readables data