DEADSOFTWARE

Triggers: Add DamageKind to TRIGGER_DAMAGE
[d2df-sdl.git] / src / mapdef / mapdef.txt
index ed2f95d74f709b412fe5d864aec61204f6be759c..f2fcf7827b23237eda1e1f577b75221626614d78 100644 (file)
@@ -1,32 +1,33 @@
 // yes, this file serves both as format description and as template for code generation
-// the engine will use this description to populate the corresponding records from MAP*.pas
-// also, the engine will keep the loaded map as a list of these structures
+// the engine will use this description to parse legacy binary map format
 
 // notes:
-//   field without offset is not in binary format
-//   fields with `writedefault` won't be written when they contain default values
-//   fields with `internal` won't be written to any file ever (and won't be read)
-//   `ubyte` is unsigned byte, and `byte` is signed byte
-//   all strings are in utf-8
-//   struct with `header` flag will contain all other structs and it's own fields
-//     as top-level entities
-//   in binary, `size` is two ushorts
-//   `as xy` will use `X` and `Y` for points
-//   `as txy` will use `tX` and `tY` for points
-//   `as wh` will use `Width` and `Height` for size
-//   `as twh` will use `tWidth` and `tHeight` for size
-//   `as monsterid`: special hack for triggers: monster record number+1 in binary (so 0 means "none")
-
+//  * field without offset is not in binary format
+//  * fields with `writedefault` will be written even if they contain default values
+//  * fields with `internal` won't be written to any file ever (and won't be read)
+//  * `ubyte` is unsigned byte, and `byte` is signed byte
+//  * all strings are in utf-8
+//  * struct with `header` flag will contain all other structs and it's own fields as top-level entities
+//  * in binary, `size` is two ushorts
+//  * `as xy` will use `X` and `Y` for points
+//  * `as txy` will use `tX` and `tY` for points
+//  * `as wh` will use `Width` and `Height` for size
+//  * `as twh` will use `tWidth` and `tHeight` for size
+//  * `as monsterid`: special hack for triggers: monster record number+1 in binary (so 0 means "none")
+//  * `binblock` and `offset` (and `[]` arrays) are used to parse legacy binary format
 
 ////////////////////////////////////////////////////////////////////////////////
 // main blocks
 "map" size 452 bytes header binblock 7 {
-  "name" type char[32] offset 0 writedefault;
-  "author" type char[32] offset 32 default "";
-  "description" type char[256] offset 64 default "";
-  "music" type char[64] offset 320 default 'Standart.wad:D2DMUS\ПРОСТОТА';
-  "sky" type char[64] offset 384 default 'Standart.wad:D2DSKY\RSKY1';
+  "name" type char[32] offset 0 writedefault tip "map name";
+  "author" type char[32] offset 32 default "" writedefault tip "map author";
+  "description" type char[256] offset 64 default "" writedefault tip "map description";
+  "music" type char[64] offset 320 default 'Standart.wad:D2DMUS\ПРОСТОТА' writedefault tip "music resource";
+  "sky" type char[64] offset 384 default 'Standart.wad:D2DSKY\RSKY1' writedefault tip "sky resource";
   "size" type size offset 448 as wh writedefault;
+  // not in binary
+  // temporary, for lighting experiments
+  "light_ambient" type color default (0 0 0 255) tip "ambient light for the whole level";
 }
 
 "texture" size 65 bytes binblock 1 {
   "keys" type ubyte offset 19 bitset Key default KEY_NONE;
   //WARNING: "trigdata" MUST be defined before "type", and "type" MUST be named "type" (for now, can be changed later)
   "triggerdata" type trigdata[128] offset 20; // the only special nested structure
+  //DO NOT USE! experimental feature! will be removed!
+  "exoma_init" type string default "" tip "will be called on trigger creation";
+  "exoma_think" type string default "" tip "will be called on each think step";
+  "exoma_check" type string default "" tip "will be called before activation";
+  "exoma_action" type string default "" tip "will be called on activation";
 }
 
 
@@ -169,6 +175,7 @@ enum EffectAction {
   EFFECT_FIRE, // 3
 }
 
+//WARNING! max allowed items types is 127
 enum Item {
   ITEM_NONE, // 0
   ITEM_MEDKIT_SMALL, // 1
@@ -282,6 +289,7 @@ enum TriggerShot {
   TRIGGER_SHOT_BFG, // 12
   TRIGGER_SHOT_EXPL, // 13
   TRIGGER_SHOT_BFGEXPL, // 14
+  TRIGGER_SHOT_FLAME, // 15
   //
   TRIGGER_SHOT_MAX = MAX,
 }
@@ -369,6 +377,20 @@ bitset Key {
   KEY_BLUETEAM, // 16
 }
 
+enum HitType {
+  HIT_SOME, // 0
+  HIT_ROCKET, // 1
+  HIT_BFG, // 2
+  HIT_TRAP, // 3
+  HIT_FALL, // 4
+  HIT_WATER, // 5
+  HIT_ACID, // 6
+  HIT_ELECTRO, // 7
+  HIT_FLAME, // 8
+  HIT_SELF, // 9
+  HIT_DISCON, // 10
+}
+
 
 ////////////////////////////////////////////////////////////////////////////////
 // various triggers
@@ -398,6 +420,8 @@ TriggerData for (TRIGGER_PRESS, TRIGGER_ON, TRIGGER_OFF, TRIGGER_ONOFF) {
   "ext_random" type bool offset 20 default false;
   // this one is for moving platforms
   "panelid" panel default null;
+  "silent" type bool default true;
+  "sound" type string default "";
 }
 
 enum TriggerScoreTeam {
@@ -477,6 +501,7 @@ TriggerData for TRIGGER_MESSAGE {
 TriggerData for TRIGGER_DAMAGE {
   "amount" type ushort offset 0 writedefault;
   "interval" type ushort offset 2 writedefault;
+  "kind" type ubyte offset 4 enum HitType default HIT_SOME writedefault;
 }
 
 TriggerData for TRIGGER_HEALTH {
@@ -490,7 +515,7 @@ TriggerData for TRIGGER_SHOT {
   "position" type point offset 0 as txy writedefault;
   "type" alias shotType type ubyte offset 8 enum TriggerShot writedefault;
   "target" alias shotTarget type ubyte offset 9 enum TriggerShotTarget writedefault;
-  "quiet" type negbool offset 10; // negbool!
+  "sound" alias shotSound type negbool offset 10; // negbool!
   "aim" type byte offset 11 enum TriggerShotAim default TRIGGER_SHOT_AIM_DEFAULT;
   "panelid" type int offset 12 panel default null writedefault;
   "sight" type ushort offset 16;