<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.soldat.pl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zakath</id>
		<title>Soldat Community Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.soldat.pl/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Zakath"/>
		<link rel="alternate" type="text/html" href="https://wiki.soldat.pl/index.php/Special:Contributions/Zakath"/>
		<updated>2026-05-06T07:23:20Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.soldat.pl/index.php?title=Map&amp;diff=256</id>
		<title>Map</title>
		<link rel="alternate" type="text/html" href="https://wiki.soldat.pl/index.php?title=Map&amp;diff=256"/>
				<updated>2013-02-16T13:11:48Z</updated>
		
		<summary type="html">&lt;p&gt;Zakath: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A '''map''' is a file that Soldat uses to recognize a level (e.g., ctf_B2b.PMS). These maps, with the ''.PMS'' filetype extension, can be generated with [[:Category:Mapping_Tools|Map makers]]. In versions [[1.05b]] and earlier, the extension ''.PMP'' was used.&lt;br /&gt;
&lt;br /&gt;
==General Components==&lt;br /&gt;
&lt;br /&gt;
Maps consist of [[polygons]], [[scenery]], [[colliders]], [[waypoints]] (for [[bots]]), [[spawnpoints]], and [[bonuses]].&lt;br /&gt;
&lt;br /&gt;
==Properties==&lt;br /&gt;
&lt;br /&gt;
Maps also contain properties, which include weather, footstep sound, jet fuel, and background color.&lt;br /&gt;
&lt;br /&gt;
==Types==&lt;br /&gt;
&lt;br /&gt;
There are many types of maps in Soldat. In order to differentiate what gametypes a map supports, their filenames are prefixed with a 3 letter code, followed by an underscore, then the name of the map, as follows:&lt;br /&gt;
* [[:Category:Normal Maps|Normal maps]] (for [[Deathmatch]], [[Pointmatch]], [[Teammatch]] and [[Rambomatch]]. No prefix is used for these maps.)&lt;br /&gt;
* [[:Category:Capture the Flag Maps|Capture the Flag maps]] (Uses the prefix ctf_)&lt;br /&gt;
* [[:Category:Infiltration Maps|Infiltration maps]] (Uses the prefix inf_)&lt;br /&gt;
* [[:Category:Hold the Flag Maps|Hold the Flag maps]] (Uses the prefix htf_)&lt;br /&gt;
* [[:Category:Climbing Maps|Climbing maps]] (Uses the prefix kz_ ctf_kz_ ctf_ and many more)&lt;br /&gt;
* [[:Category:Race Maps|Race maps]] (Uses the prefix ctf_rce_ or ctf_)&lt;br /&gt;
* [[:Category:Various Maps|Various maps]] (Either use the prefix var_ or none at all)&lt;br /&gt;
* [[:Category:Dodgeball Maps|Dodgeball Maps]] (Either use the prefix DB_ or none at all)&lt;br /&gt;
* [[:Category:Trenchwars|Trenchwars Maps]] (Either tw_ or ctf_tw_ prefix)&lt;br /&gt;
&lt;br /&gt;
==File Structure==&lt;br /&gt;
&lt;br /&gt;
Here is the physical structure of the map file. The text below, saved in a file, is usable in Hex Workshop 4.23 to view the components of the map. With a small amount of work, it is possible to convert it to working C++ code or, with a little more work, to convert it to another language.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Soldat PMS file format structure defenition file for Hex Workshop&lt;br /&gt;
by: Chrisgbk&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
//#include &amp;quot;standard-types.hsl&amp;quot; // All the standard deftypes (shown below for clarity)&lt;br /&gt;
&lt;br /&gt;
typedef          char    CHAR ;&lt;br /&gt;
typedef signed   __int8  BYTE ;&lt;br /&gt;
typedef          BYTE    byte ;&lt;br /&gt;
typedef unsigned __int8  UBYTE ;&lt;br /&gt;
typedef          UBYTE   ubyte ;&lt;br /&gt;
typedef unsigned __int16 WORD ;&lt;br /&gt;
typedef          WORD    word ;&lt;br /&gt;
typedef unsigned __int16 USHORT ;&lt;br /&gt;
typedef          USHORT  ushort ;&lt;br /&gt;
typedef          short   SHORT ;&lt;br /&gt;
typedef unsigned __int32 DWORD ;&lt;br /&gt;
typedef          DWORD   dword ;&lt;br /&gt;
typedef          long    LONG ;&lt;br /&gt;
typedef unsigned __int32 ULONG ;&lt;br /&gt;
typedef          ULONG   ulong ;&lt;br /&gt;
typedef signed   __int64 QUAD ;&lt;br /&gt;
typedef          QUAD    quad ;&lt;br /&gt;
typedef unsigned __int64 UQUAD ;&lt;br /&gt;
typedef          UQUAD   uquad ;&lt;br /&gt;
typedef          float   FLOAT ;&lt;br /&gt;
typedef          double  DOUBLE ;&lt;br /&gt;
&lt;br /&gt;
#pragma maxarray(10000) // default max array size is 128(to protect from corrupt data), need this&lt;br /&gt;
#pragma byteorder(little_endian) // Intel&lt;br /&gt;
&lt;br /&gt;
#pragma enumsize(1) // 1 byte&lt;br /&gt;
#pragma pack(1)&lt;br /&gt;
// note: since #pragma pack(4) isnt supported by hex workshop, I had to pad everything manually&lt;br /&gt;
// it may be wise to do it this way, even if your compiler supposrt this pragma, due to uncertanties over how a given compiler will allign the members of the data structures.&lt;br /&gt;
&lt;br /&gt;
typedef enum TRUEFALSE {&lt;br /&gt;
	FALSE = 0,&lt;br /&gt;
	TRUE&lt;br /&gt;
} BOOL; // just... yeah&lt;br /&gt;
&lt;br /&gt;
#pragma hide() // don't make these structs visible in Hex Workshop&lt;br /&gt;
&lt;br /&gt;
typedef enum POLYTYPE {&lt;br /&gt;
	ptNORMAL = 0,&lt;br /&gt;
	ptONLY_BULLETS_COLLIDE,&lt;br /&gt;
	ptONLY_PLAYERS_COLLIDE,&lt;br /&gt;
	ptNO_COLLIDE,&lt;br /&gt;
	ptICE,&lt;br /&gt;
	ptDEADLY,&lt;br /&gt;
	ptBLOODY_DEADLY,&lt;br /&gt;
	ptHURTS,&lt;br /&gt;
	ptREGENERATES,&lt;br /&gt;
	ptLAVA,&lt;br /&gt;
	ptALPHABULLETS,&lt;br /&gt;
        ptALPHAPLAYERS,&lt;br /&gt;
	ptBRAVOBULLETS,&lt;br /&gt;
        ptBRAVOPLAYERS,&lt;br /&gt;
        ptCHARLIEBULLETS,&lt;br /&gt;
        ptCHARLIEPLAYERS,&lt;br /&gt;
        ptDELTABULLETS,&lt;br /&gt;
        ptDELTAPLAYERS,&lt;br /&gt;
        ptBOUNCY,&lt;br /&gt;
        ptEXPLOSIVE,&lt;br /&gt;
        ptHURTFLAGGERS,&lt;br /&gt;
        ptFLAGGERCOLLIDES,&lt;br /&gt;
        ptNONFLAGGERCOLLIDES,&lt;br /&gt;
        ptFLAGCOLLIDES&lt;br /&gt;
} PMS_POLYTYPE;&lt;br /&gt;
&lt;br /&gt;
typedef enum DRAWBEHIND {&lt;br /&gt;
	dbBEHIND_ALL = 0,&lt;br /&gt;
	dbBEHIND_MAP,&lt;br /&gt;
	dbBEHIND_NONE&lt;br /&gt;
} PMS_DRAWBEHIND;&lt;br /&gt;
&lt;br /&gt;
typedef enum SPECIALACTIONS {&lt;br /&gt;
	saNONE = 0,&lt;br /&gt;
	saSTOP_AND_CAMP,&lt;br /&gt;
	saWAIT_1_SECOND,&lt;br /&gt;
	saWAIT_5_SECONDS,&lt;br /&gt;
	saWAIT_10_SECONDS,&lt;br /&gt;
	saWAIT_15_SECONDS,&lt;br /&gt;
	saWAIT_20_SECONDS&lt;br /&gt;
} PMS_SPECIALACTIONS;&lt;br /&gt;
&lt;br /&gt;
typedef enum WEATHERTYPE {&lt;br /&gt;
	wtNONE = 0,&lt;br /&gt;
	wtRAIN,&lt;br /&gt;
	wtSANDSTORM,&lt;br /&gt;
	wtSNOW&lt;br /&gt;
} PMS_WEATHERTYPE;&lt;br /&gt;
&lt;br /&gt;
typedef enum STEPSTYPE {&lt;br /&gt;
	stHARD_GROUND = 0,&lt;br /&gt;
	stSOFT_GROUND,&lt;br /&gt;
	stNONE&lt;br /&gt;
} PMS_STEPSTYPE;&lt;br /&gt;
&lt;br /&gt;
#pragma enumsize(4) // 4 byte&lt;br /&gt;
&lt;br /&gt;
typedef enum SPAWNTEAM {&lt;br /&gt;
	stGENERAL = 0,&lt;br /&gt;
	stALPHA,&lt;br /&gt;
	stBRAVO,&lt;br /&gt;
	stCHARLIE,&lt;br /&gt;
	stDELTA,&lt;br /&gt;
	stALPHA_FLAG,&lt;br /&gt;
	stBRAVO_FLAG,&lt;br /&gt;
	stGRENADES,&lt;br /&gt;
	stMEDKITS,&lt;br /&gt;
	stCLUSTERS,&lt;br /&gt;
	stVEST,&lt;br /&gt;
	stFLAMER,&lt;br /&gt;
	stBERSERKER,&lt;br /&gt;
	stPREDATOR,&lt;br /&gt;
	stYELLOW_FLAG,&lt;br /&gt;
	stRAMBO_BOW,&lt;br /&gt;
	stSTAT_GUN&lt;br /&gt;
} PMS_SPAWNTEAM;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_VECTOR {&lt;br /&gt;
	FLOAT x;&lt;br /&gt;
	FLOAT y;&lt;br /&gt;
	FLOAT z;&lt;br /&gt;
} PMS_VECTOR;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_COLOR {&lt;br /&gt;
	UBYTE blue;&lt;br /&gt;
	UBYTE green;&lt;br /&gt;
	UBYTE red;&lt;br /&gt;
	UBYTE alpha;&lt;br /&gt;
} PMS_COLOR;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_HEADER {&lt;br /&gt;
	LONG version;&lt;br /&gt;
} PMS_HEADER;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_OPTIONS {&lt;br /&gt;
	UBYTE nameLen;&lt;br /&gt;
	CHAR name[nameLen];&lt;br /&gt;
	CHAR nameFiller[38-nameLen];&lt;br /&gt;
	UBYTE texLen;&lt;br /&gt;
	CHAR texture[texLen];&lt;br /&gt;
	CHAR textureFiller[24 - texLen];&lt;br /&gt;
	PMS_COLOR bgColorTop;&lt;br /&gt;
	PMS_COLOR bgColorBottom;&lt;br /&gt;
	LONG jetAmount;&lt;br /&gt;
	UBYTE grenades;&lt;br /&gt;
	UBYTE medikits;&lt;br /&gt;
	PMS_WEATHERTYPE weather;&lt;br /&gt;
	PMS_STEPSTYPE steps;&lt;br /&gt;
	LONG randID;&lt;br /&gt;
} PMS_OPTIONS;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_VERTEX {&lt;br /&gt;
	FLOAT x;&lt;br /&gt;
	FLOAT y;&lt;br /&gt;
	FLOAT z;&lt;br /&gt;
	FLOAT rhw;&lt;br /&gt;
	PMS_COLOR color;&lt;br /&gt;
	FLOAT tu;&lt;br /&gt;
	FLOAT tv;&lt;br /&gt;
} PMS_VERTEX;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_POLYGON {&lt;br /&gt;
	PMS_VERTEX vetex[3];&lt;br /&gt;
	PMS_VECTOR perpendicular[3];&lt;br /&gt;
	PMS_POLYTYPE polyType;&lt;br /&gt;
} PMS_POLYGON;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_SECTOR {&lt;br /&gt;
	WORD polyCount;&lt;br /&gt;
	WORD polys[polyCount];&lt;br /&gt;
} PMS_SECTOR;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_PROP {&lt;br /&gt;
	BOOL active;&lt;br /&gt;
	UBYTE filler1;&lt;br /&gt;
	WORD style;&lt;br /&gt;
	LONG width;&lt;br /&gt;
	LONG height;&lt;br /&gt;
	FLOAT x;&lt;br /&gt;
	FLOAT y;&lt;br /&gt;
	FLOAT rotation;&lt;br /&gt;
	FLOAT scaleX;&lt;br /&gt;
	FLOAT scaleY;&lt;br /&gt;
	UBYTE alpha;&lt;br /&gt;
	UBYTE filler2[3];&lt;br /&gt;
	PMS_COLOR color;&lt;br /&gt;
	PMS_DRAWBEHIND level;&lt;br /&gt;
	UBYTE filler3[3];&lt;br /&gt;
} PMS_PROP;&lt;br /&gt;
/*&lt;br /&gt;
found out that these are already defined ^_^&lt;br /&gt;
&lt;br /&gt;
typedef struct tagDOSTIME {&lt;br /&gt;
	WORD second  : 5;  &lt;br /&gt;
	WORD minute : 6;    &lt;br /&gt;
	WORD hour    : 5;   &lt;br /&gt;
} DOSTIME;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagDOSDATE {&lt;br /&gt;
	WORD day  : 5;  &lt;br /&gt;
	WORD month : 4;    &lt;br /&gt;
	WORD year    : 7;   &lt;br /&gt;
} DOSDATE;&lt;br /&gt;
*/&lt;br /&gt;
typedef struct tagPMS_TIMESTAMP {&lt;br /&gt;
	DOSTIME time;&lt;br /&gt;
	DOSDATE date;&lt;br /&gt;
} PMS_TIMESTAMP;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_SCENERY {&lt;br /&gt;
	UBYTE nameLen;&lt;br /&gt;
	CHAR name[nameLen];&lt;br /&gt;
	CHAR nameFiller[50-nameLen];&lt;br /&gt;
	PMS_TIMESTAMP timestamp;&lt;br /&gt;
} PMS_SCENERY;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_COLLIDER {&lt;br /&gt;
	BOOL active;&lt;br /&gt;
	UBYTE filler[3];&lt;br /&gt;
	FLOAT x;&lt;br /&gt;
	FLOAT y;&lt;br /&gt;
	FLOAT radius;&lt;br /&gt;
} PMS_COLLIDER;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_SPAWNPOINT {&lt;br /&gt;
	BOOL active;&lt;br /&gt;
	UBYTE filler[3];&lt;br /&gt;
	LONG x;&lt;br /&gt;
	LONG y;&lt;br /&gt;
	PMS_SPAWNTEAM team;&lt;br /&gt;
} PMS_SPAWNPOINT;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPMS_WAYPOINT {&lt;br /&gt;
	BOOL active;&lt;br /&gt;
	UBYTE filler1[3];&lt;br /&gt;
	LONG id;&lt;br /&gt;
	LONG x;&lt;br /&gt;
	LONG y;&lt;br /&gt;
	BOOL left;&lt;br /&gt;
	BOOL right;&lt;br /&gt;
	BOOL up;&lt;br /&gt;
	BOOL down;&lt;br /&gt;
	BOOL jet;&lt;br /&gt;
	UBYTE path;&lt;br /&gt;
	PMS_SPECIALACTIONS specialAction;&lt;br /&gt;
	UBYTE c2;&lt;br /&gt;
	UBYTE c3;&lt;br /&gt;
	UBYTE filler2[3];&lt;br /&gt;
	LONG numConnections;&lt;br /&gt;
	LONG connections[20];&lt;br /&gt;
} PMS_WAYPOINT;&lt;br /&gt;
&lt;br /&gt;
#pragma show()&lt;br /&gt;
&lt;br /&gt;
struct PMS_FILE {&lt;br /&gt;
	PMS_HEADER header;&lt;br /&gt;
	PMS_OPTIONS options;&lt;br /&gt;
	LONG polygonCount;&lt;br /&gt;
	PMS_POLYGON polygon[polygonCount];&lt;br /&gt;
	LONG sectorDivision;&lt;br /&gt;
	LONG numSectors;&lt;br /&gt;
	//PMS_SECTOR sector[(numSectors*2)+1][(numSectors*2)+1]; // unlike VB/Delphi, can't define the lower bound; only the length. -25 to 25 is the same as 0 to 50, or length of 51 ((2*25)+1)&lt;br /&gt;
	PMS_SECTOR sector[((numSectors*2)+1)*((numSectors*2)+1)]; // same as above, but as a single flat array. Use whatever you feel most comfortable with.&lt;br /&gt;
	LONG propCount;&lt;br /&gt;
	PMS_PROP prop[propCount];&lt;br /&gt;
	LONG sceneryCount;&lt;br /&gt;
	PMS_SCENERY scenery[sceneryCount];&lt;br /&gt;
	LONG colliderCount;&lt;br /&gt;
	PMS_COLLIDER collider[colliderCount];&lt;br /&gt;
	LONG spawnpointCount;&lt;br /&gt;
	PMS_SPAWNPOINT spawnpoint[spawnpointCount];&lt;br /&gt;
	LONG waypointCount;&lt;br /&gt;
	PMS_WAYPOINT waypoint[waypointCount];&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>Zakath</name></author>	</entry>

	</feed>