Editing Blood Omen file formats

Jump to: navigation, search

Warning: You are not logged in.

Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 177: Line 177:
 
Map file is fixed-length structure which holds tiles placement (80x80), enemies, lights, buttons and other objects to form Blood Omen level. Because of it's fixed nature, there are many limits, and each map file have exactly same size (so it can just be copied into memory).
 
Map file is fixed-length structure which holds tiles placement (80x80), enemies, lights, buttons and other objects to form Blood Omen level. Because of it's fixed nature, there are many limits, and each map file have exactly same size (so it can just be copied into memory).
  
  <span style="color:green">// blood omen map structure</span>
+
  <span style="color:green">// map trigger</span>
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>  
+
  <span style="color:darkblue">typedef struct</span>  
  {
+
  <span style="color:darkblue">'''{'''</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> parm1;    <span style="color:green">// first parm, if script is not defined it"s 0xFFFF, 0xFFFE is null value</span>
+
      '''unsigned short''' parm1;    <span style="color:green">// first parm, if script is not defined it's 0xFFFF, 0xFFFE is null value</span>
                        <span style="color:green">//  - destination/source map number (TRIGGER_EXIT, TRIGGER_ENTRANCE, TRIGGER_TELEPORT)</span>
+
                              <span style="color:green">//  - destination/source map number (TRIGGER_EXIT, TRIGGER_ENTRANCE, TRIGGER_TELEPORT)</span>
                        <span style="color:green">//  - speech num (TRIGGER_INFOMARK, TRIGGER_IMAGEMARK)</span>
+
                              <span style="color:green">//  - speech num (TRIGGER_INFOMARK, TRIGGER_IMAGEMARK)</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> parm2;    <span style="color:green">// second parm:</span>
+
      '''unsigned short''' parm2;    <span style="color:green">// second parm:</span>
                        <span style="color:green">//  - button num (TRIGGER_BUTTON)</span>
+
                              <span style="color:green">//  - button num (TRIGGER_BUTTON)</span>
                        <span style="color:green">//  - pic num (TRIGGER_IMAGEMARK)</span>
+
                              <span style="color:green">//  - pic num (TRIGGER_IMAGEMARK)</span>
byte          parm3;    <span style="color:green">// destination/source map section (TRIGGER_EXIT, TRIGGER_ENTRANCE, TRIGGER_TELEPORT)</span>
+
      '''byte'''           parm3;    <span style="color:green">// destination/source map section (TRIGGER_EXIT, TRIGGER_ENTRANCE, TRIGGER_TELEPORT)</span>
byte          srcx;    <span style="color:green">// sposition</span>
+
      '''byte'''           srcx;    <span style="color:green">// sposition</span>
byte          srcy;    <span style="color:green">// sposition</span>
+
      '''byte'''           srcy;    <span style="color:green">// sposition</span>
byte          type;    <span style="color:green">// script type, one of TRIGGER_</span>
+
      '''byte'''           type;    <span style="color:green">// script type, one of TRIGGER_</span>
byte          u2[3];    <span style="color:green">// ?</span>
+
      '''byte'''           u2<span style="color:darkblue">'''['''</span>3<span style="color:darkblue">''']'''</span>;    <span style="color:green">// ?</span>
byte          x;        <span style="color:green">// position</span>
+
      '''byte'''           x;        <span style="color:green">// position</span>
byte          y;        <span style="color:green">// position</span>
+
      '''byte'''           y;        <span style="color:green">// position</span>
byte          u3[3];    <span style="color:green">// ?</span>
+
      '''byte'''           u3<span style="color:darkblue">'''['''</span>3<span style="color:darkblue">''']'''</span>;    <span style="color:green">// ?</span>
  }bo_trigger_t;
+
  <span style="color:darkblue">'''}'''</span>'''bo_trigger_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// map item</span>
  {
+
<span style="color:darkblue">typedef struct</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> savenum;  <span style="color:green">// unique savegame id</span>
+
  <span style="color:darkblue">'''{'''</span>
byte          itemcode; <span style="color:green">// one of MAPITEM_ code</span>
+
      '''unsigned short''' savenum;  <span style="color:green">// unique savegame id</span>
byte          x;        <span style="color:green">// position</span>
+
      '''byte'''           itemcode; <span style="color:green">// one of MAPITEM_ code</span>
byte          y;        <span style="color:green">// position</span>
+
      '''byte'''           x;        <span style="color:green">// position</span>
byte          hidden;  <span style="color:green">// set to 1 if item is spawned by trigger (like barrel destruction)</span>
+
      '''byte'''           y;        <span style="color:green">// position</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> target;  <span style="color:green">// targeted triggergroup</span>
+
      '''byte'''           hidden;  <span style="color:green">// set to 1 if item is spawned by trigger (like barrel destruction)</span>
byte          u[4];    <span style="color:green">// ?</span>
+
      '''unsigned short''' target;  <span style="color:green">// targeted triggergroup</span>
  }bo_item_t;
+
      '''byte'''          u<span style="color:darkblue">'''['''</span>4<span style="color:darkblue">''']'''</span>;    <span style="color:green">// ?</span>
 +
  <span style="color:darkblue">'''}'''</span>'''bo_item_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// animated tile</span>
  {
+
<span style="color:darkblue">typedef struct</span>
    <span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> targetnum;<span style="color:green">// a triggergroup</span>
+
  <span style="color:darkblue">'''{'''</span>
byte x;                  <span style="color:green">// position</span>
+
      '''unsigned short''' targetnum;<span style="color:green">// a triggergroup</span>
byte u1;                <span style="color:green">// ?</span>
+
      '''byte''' x;                  <span style="color:green">// position</span>
byte y;                  <span style="color:green">// position</span>
+
      '''byte''' u1;                <span style="color:green">// ?</span>
byte u2;                <span style="color:green">// ?</span>
+
      '''byte''' y;                  <span style="color:green">// position</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> tile1;    <span style="color:green">// tilenum</span>
+
      '''byte''' u2;                <span style="color:green">// ?</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> tile2;    <span style="color:green">// alternate state tilenum</span>
+
      '''unsigned short''' tile1;    <span style="color:green">// tilenum</span>
byte contents1;          <span style="color:green">// contents, see CONTENTS_ defines for possible content values</span>
+
      '''unsigned short''' tile2;    <span style="color:green">// alternate state tilenum</span>
byte contents2;          <span style="color:green">// alternate state contents</span>
+
      '''byte''' contents1;          <span style="color:green">// contents, see CONTENTS_ defines for possible content values</span>
byte u3[12];            <span style="color:green">// ?</span>
+
      '''byte''' contents2;          <span style="color:green">// alternate state contents</span>
  }bo_atile_t;
+
      '''byte''' u3<span style="color:darkblue">'''['''</span>12<span style="color:darkblue">''']'''</span>;            <span style="color:green">// ?</span>
 +
  <span style="color:darkblue">'''}'''</span>'''bo_atile_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// button controller</span>
  {
+
<span style="color:darkblue">typedef struct</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> target;  <span style="color:green">// a triggergroup to call</span>
+
  <span style="color:darkblue">'''{'''</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> tile1;    <span style="color:green">// tilenum</span>
+
      '''unsigned short''' target;  <span style="color:green">// a triggergroup to call</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> tile2;    <span style="color:green">// alternate state tilenum</span>
+
      '''unsigned short''' tile1;    <span style="color:green">// tilenum</span>
byte flags;              <span style="color:green">// see BUTTONFLAG_* defs</span>
+
      '''unsigned short''' tile2;    <span style="color:green">// alternate state tilenum</span>
byte u1;                <span style="color:green">// ?</span>
+
      '''byte''' flags;              <span style="color:green">// see BUTTONFLAG_* defs</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> savenum;  <span style="color:green">// unique savegame id</span>
+
      '''byte''' u1;                <span style="color:green">// ?</span>
byte u2;                <span style="color:green">// ?</span>
+
      '''unsigned short''' savenum;  <span style="color:green">// unique savegame id</span>
byte u3;                <span style="color:green">// ?</span>
+
      '''byte''' u2;                <span style="color:green">// ?</span>
  }bo_button_t;
+
      '''byte''' u3;                <span style="color:green">// ?</span>
 +
  <span style="color:darkblue">'''}'''</span>'''bo_button_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// effect</span>
  {
+
<span style="color:darkblue">typedef struct</span>
byte x;                  <span style="color:green">// position</span>
+
  <span style="color:darkblue">'''{'''</span>
byte y;                  <span style="color:green">// position</span>
+
      '''byte''' x;                  <span style="color:green">// position</span>
byte lightposx;          <span style="color:green">// position of lightsource</span>
+
      '''byte''' y;                  <span style="color:green">// position</span>
byte lightposy;          <span style="color:green">// position of lightsource</span>
+
      '''byte''' lightposx;          <span style="color:green">// position of lightsource</span>
byte sprite;            <span style="color:green">// index of sprite from sprites array</span>
+
      '''byte''' lightposy;          <span style="color:green">// position of lightsource</span>
byte lightheight;       <span style="color:green">// height (for lightsource)</span>
+
      '''byte''' sprite;            <span style="color:green">// index of sprite from sprites array</span>
byte lightwidth;        <span style="color:green">// width (for lightsource)</span>
+
      '''byte''' lightsizex;         <span style="color:green">// size of light polygons</span>
byte flags;             <span style="color:green">// effect flags</span>
+
      '''byte''' lightsizey;        <span style="color:green">// size of light polygons</span>
byte lightflags;         <span style="color:green">// light flags</span>
+
      '''byte''' u1;                 <span style="color:green">// ?</span>
byte r;                  <span style="color:green">// red color component</span>
+
      '''byte''' lightform;         <span style="color:green">// light form flags</span>
byte g;                  <span style="color:green">// green color component</span>
+
      '''byte''' r;                  <span style="color:green">// red color component</span>
byte b;                  <span style="color:green">// blue color component</span>
+
      '''byte''' g;                  <span style="color:green">// green color component</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> targetnum;<span style="color:green">// triggergroup</span>
+
      '''byte''' b;                  <span style="color:green">// darkblue color component</span>
byte start_on;          <span style="color:green">// 1 if effect starts on, 0 if starts off</span>
+
      '''unsigned short''' targetnum;<span style="color:green">// triggergroup</span>
byte u3[5];              <span style="color:green">// ?</span>
+
      '''byte''' start_on;          <span style="color:green">// 1 if effect starts on, 0 if starts off</span>
  }bo_effect_t;
+
      '''byte''' u3<span style="color:darkblue">'''['''</span>5<span style="color:darkblue">''']'''</span>;              <span style="color:green">// ?</span>
 +
  <span style="color:darkblue">'''}'''</span>'''bo_effect_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:darkblue">typedef struct</span>
{
+
<span style="color:darkblue">'''{'''</span>
byte data[164];
+
      '''byte''' data<span style="color:darkblue">'''['''</span>164<span style="color:darkblue">''']'''</span>;
  }bo_object_t;
+
  <span style="color:darkblue">'''}'''</span>'''bo_object_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// tile object definition (barrels, chests)</span>
  {
+
<span style="color:darkblue">typedef struct</span>
byte x;                  <span style="color:green">// start position</span>
+
  <span style="color:darkblue">'''{'''</span>
byte y;                  <span style="color:green">// end position</span>
+
      '''byte''' x;                  <span style="color:green">// start position</span>
byte w;                  <span style="color:green">// width</span>
+
      '''byte''' y;                  <span style="color:green">// end position</span>
byte h;                  <span style="color:green">// height</span>
+
      '''byte''' w;                  <span style="color:green">// width</span>
byte ofsx;              <span style="color:green">// multiply by 16 to get real offset</span>
+
      '''byte''' h;                  <span style="color:green">// height</span>
byte ofsy;              <span style="color:green">// multiply by 16 to get real offset</span>
+
      '''byte''' ofsx;              <span style="color:green">// multiply by 16 to get real offset</span>
byte u1;
+
      '''byte''' ofsy;              <span style="color:green">// multiply by 16 to get real offset</span>
byte u2;
+
      '''byte''' u1;
  }bo_grpobject_t;
+
      '''byte''' u2;
 +
  <span style="color:darkblue">'''}'''</span>'''bo_grpobject_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// scenery entities</span>
  {
+
<span style="color:darkblue">typedef struct</span>
byte u1;                <span style="color:green">// ?</span>
+
  <span style="color:darkblue">'''{'''</span>
byte u2;                <span style="color:green">// ?</span>
+
      '''byte''' u1;                <span style="color:green">// ?</span>
byte u3;                <span style="color:green">// ?</span>
+
      '''byte''' u2;                <span style="color:green">// ?</span>
byte u4;                <span style="color:green">// ?</span>
+
      '''byte''' u3;                <span style="color:green">// ?</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> tile1;    <span style="color:green">// base tile (grpobject really, not standart 32x32 tile)</span>
+
      '''byte''' u4;                <span style="color:green">// ?</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> tile2;    <span style="color:green">// toggled tile (grpobject)</span>
+
      '''unsigned short''' tile1;    <span style="color:green">// base tile (grpobject really, not standart 32x32 tile)</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> tile3;    <span style="color:green">// destroyed tile (grpobject)</span>
+
      '''unsigned short''' tile2;    <span style="color:green">// toggled tile (grpobject)</span>
byte u5;                <span style="color:green">// ?</span>
+
      '''unsigned short''' tile3;    <span style="color:green">// destroyed tilee (grpobject)</span>
byte u6;                <span style="color:green">// ?</span>
+
      '''byte''' u5;                <span style="color:green">// ?</span>
byte pushable;          <span style="color:green">// a strength required to push</span>
+
      '''byte''' u6;                <span style="color:green">// ?</span>
byte toggled;            <span style="color:green">// trigger can toggle it"s state (means tile2 is there)</span>
+
      '''byte''' pushable;          <span style="color:green">// a strength required to push</span>
byte u7;                <span style="color:green">// ?</span>
+
      '''byte''' toggled;            <span style="color:green">// trigger can toggle it's state (means tile2 is there)</span>
byte spawnitems[3];      <span style="color:green">// item codes to spawn when toggled/destroyed</span>
+
      '''byte''' u7;                <span style="color:green">// ?</span>
byte u8;                <span style="color:green">// ?</span>
+
      '''byte''' spawnitems<span style="color:darkblue">'''['''</span>3<span style="color:darkblue">''']'''</span>;      <span style="color:green">// item codes to spawn when toggled/destroyed</span>
byte destructible;      <span style="color:green">// destructible flags</span>
+
      '''byte''' u8;                <span style="color:green">// ?</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> savenum;  <span style="color:green">// unique savegame id</span>
+
      '''byte''' destructible;      <span style="color:green">// destructible flags</span>
byte u10;                <span style="color:green">// ?</span>
+
      '''unsigned short''' savenum;  <span style="color:green">// unique savegame id</span>
byte x;                  <span style="color:green">// position</span>
+
      '''byte''' u10;                <span style="color:green">// ?</span>
byte y;                  <span style="color:green">// position</span>
+
      '''byte''' x;                  <span style="color:green">// position</span>
byte u11;                <span style="color:green">// ? </span>
+
      '''byte''' y;                  <span style="color:green">// position</span>
byte active;            <span style="color:green">// 1 is filled, otherwise 0</span>
+
      '''byte''' u11;                <span style="color:green">// ? </span>
byte u13;                <span style="color:green">// ? </span>
+
      '''byte''' active;            <span style="color:green">// 1 is filled, otherwise 0</span>
  }bo_scenery_t;
+
      '''byte''' u13;                <span style="color:green">// ? </span>
 +
  <span style="color:darkblue">'''}'''</span>'''bo_scenery_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// enemy paths</span>
  {
+
<span style="color:darkblue">typedef struct</span>
byte x;                  <span style="color:green">// position</span>
+
  <span style="color:darkblue">'''{'''</span>
byte y;                  <span style="color:green">// position</span>
+
      '''byte''' x;                  <span style="color:green">// position</span>
byte u1;                <span style="color:green">// ?</span>
+
      '''byte''' y;                  <span style="color:green">// position</span>
byte u2;                <span style="color:green">// ?</span>
+
      '''byte''' u1;                <span style="color:green">// ?</span>
  }bo_path_t;
+
      '''byte''' u2;                <span style="color:green">// ?</span>
 +
  <span style="color:darkblue">'''}'''</span>'''bo_path_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// enemy entity</span>
  {
+
<span style="color:darkblue">typedef struct</span>
bo_path_t paths[4];      <span style="color:green">// patrole paths</span>
+
  <span style="color:darkblue">'''{'''</span>
byte u1[12];            <span style="color:green">// ?</span>
+
      bo_path_t paths<span style="color:darkblue">'''['''</span>4<span style="color:darkblue">''']'''</span>;      <span style="color:green">// patrole paths</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> savenum;  <span style="color:green">// unique savegame id</span>
+
      '''byte''' u1<span style="color:darkblue">'''['''</span>12<span style="color:darkblue">''']'''</span>;            <span style="color:green">// ?</span>
byte u2[52];            <span style="color:green">// ?</span>
+
      '''unsigned short''' savenum;  <span style="color:green">// unique savegame id</span>
byte charnum;            <span style="color:green">// monster class (same as char* sprite)</span>
+
      '''byte''' u2<span style="color:darkblue">'''['''</span>52<span style="color:darkblue">''']'''</span>;            <span style="color:green">// ?</span>
byte u3[10];            <span style="color:green">// ?</span>
+
      '''byte''' charnum;            <span style="color:green">// monster class (same as char* sprite)</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> target;  <span style="color:green">// triggergroup to call once killed</span>
+
      '''byte''' u3<span style="color:darkblue">'''['''</span>10<span style="color:darkblue">''']'''</span>;            <span style="color:green">// ?</span>
byte u4[20];            <span style="color:green">// ?</span>
+
      '''unsigned short''' target;  <span style="color:green">// triggergroup to call once killed</span>
byte lastpath;          <span style="color:green">// ?</span>
+
      '''byte''' u4<span style="color:darkblue">'''['''</span>20<span style="color:darkblue">''']'''</span>;            <span style="color:green">// ?</span>
byte u6[18];            <span style="color:green">// ?</span>
+
      '''byte''' lastpath;          <span style="color:green">// ?</span>
byte u7[15];            <span style="color:green">// ?</span>
+
      '''byte''' u6<span style="color:darkblue">'''['''</span>18<span style="color:darkblue">''']'''</span>;            <span style="color:green">// ?</span>
byte x;                  <span style="color:green">// position</span>
+
      '''byte''' u7<span style="color:darkblue">'''['''</span>15<span style="color:darkblue">''']'''</span>;            <span style="color:green">// ?</span>
byte y;                  <span style="color:green">// position</span>
+
      '''byte''' x;                  <span style="color:green">// position</span>
byte u8[4];              <span style="color:green">// ?</span>
+
      '''byte''' y;                  <span style="color:green">// position</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> speechnum;<span style="color:green">// a speech number for disguise talk</span>
+
      '''byte''' u8<span style="color:darkblue">'''['''</span>4<span style="color:darkblue">''']'''</span>;              <span style="color:green">// ?</span>
byte u9[6];              <span style="color:green">// ?</span>
+
      '''unsigned short''' speechnum;<span style="color:green">// a speech number for disguise talk</span>
  }bo_monster_t;
+
      '''byte''' u9<span style="color:darkblue">'''['''</span>6<span style="color:darkblue">''']'''</span>;              <span style="color:green">// ?</span>
 +
  <span style="color:darkblue">'''}'''</span>'''bo_monster_t''';
 
   
 
   
  <span style="color:#7f0055; font-weight:bold; ">typedef</span> <span style="color:#7f0055; font-weight:bold; ">struct</span>
+
  <span style="color:green">// general map file structure</span>
  {
+
<span style="color:darkblue">typedef struct</span>
<span style="color:green">// a chain of tilemap numbers used (to make a filenames)</span>
+
  <span style="color:darkblue">'''{'''</span>
<span style="color:green">// each tilemap holds 64 tiles, tiles numbering is linear</span>
+
      <span style="color:green">// a chain of tilemap numbers used (to make a filenames)</span>
<span style="color:green">// like, a tile #131 is tile #3 from tilemap #2</span>
+
      <span style="color:green">// each tilemap holds 64 tiles, tiles numbering is linear</span>
<span style="color:green">// being 2-byte (unsigned short) tilenum contains some flags (flag are starting from byte 10)</span>
+
      <span style="color:green">// like, a tile #131 is tile #3 from tilemap #2</span>
<span style="color:green">// see TILEFLAG_ defines for possible tileflags</span>
+
      <span style="color:green">// being 2-'''byte''' ('''unsigned short''') tilenum contains some flags (flag are starting from '''byte''' 10)</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> tilemaps[40];
+
      <span style="color:green">// see TILEFLAG_ defines for possible tileflags</span>
byte            u1[12]; <span style="color:green">// yet unknown info</span>
+
      '''unsigned short'''  tilemaps<span style="color:darkblue">'''['''</span>40<span style="color:darkblue">''']'''</span>;
bo_object_t    objects[10];
+
      <span style="color:green">// yet unknown info</span>
bo_monster_t    monsters[32];
+
      '''byte'''            u1<span style="color:darkblue">'''['''</span>12<span style="color:darkblue">''']'''</span>;
bo_grpobject_t  grpobjects[8][32];
+
      '''bo_object_t'''     objects<span style="color:darkblue">'''['''</span>10<span style="color:darkblue">''']'''</span>;
<span style="color:green">// animated tiles - a tiles that can be toggled between 2 states and have different contents for each state</span>
+
      '''bo_monster_t'''   monsters<span style="color:darkblue">'''['''</span>32<span style="color:darkblue">''']'''</span>;
<span style="color:green">// used on doors, spikes that pops up on the floor etc.</span>
+
      '''bo_grpobject_t''' grpobjects<span style="color:darkblue">'''['''</span>8<span style="color:darkblue">''']'''</span><span style="color:darkblue">'''['''</span>32<span style="color:darkblue">''']'''</span>;
<span style="color:green">// animated tiles have triggergroup to be executed by script</span>
+
      <span style="color:green">// animated tiles - a tiles that can be toggled between 2 states and have different contents for each state</span>
bo_atile_t      atiles[100];
+
      <span style="color:green">// used on doors, spikes that pops up on the floor etc.</span>
<span style="color:green">// a special buttons array holds all buttons used on level</span>
+
      <span style="color:green">// animated tiles have triggergroup to be executed by script</span>
<span style="color:green">// pretty similar to animated tiles</span>
+
      '''bo_atile_t'''     atiles<span style="color:darkblue">'''['''</span>100<span style="color:darkblue">''']'''</span>;
<span style="color:green">// buttons have triggergroup to be executed by script</span>
+
      <span style="color:green">// a special buttons array holds all buttons used on level</span>
bo_button_t    buttons[20];
+
      <span style="color:green">// pretty similar to animated tiles</span>
<span style="color:green">// yet unknown info #2</span>
+
      <span style="color:green">// buttons have triggergroup to be executed by script</span>
byte            u2[8];
+
      '''bo_button_t'''     buttons<span style="color:darkblue">'''['''</span>20<span style="color:darkblue">''']'''</span>;
<span style="color:green">// scenery pushable objects - tables, chairs, stones etc.</span>
+
      <span style="color:green">// yet unknown info #2</span>
bo_scenery_t    scenery[256];
+
      '''byte'''           u2<span style="color:darkblue">'''['''</span>8<span style="color:darkblue">''']'''</span>;
<span style="color:green">// first tilemap</span>
+
      <span style="color:green">// scenery pushable objects - tables, chairs, stones etc.</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> backtiles[80][80];
+
      '''bo_scenery_t'''   scenery<span style="color:darkblue">'''['''</span>256<span style="color:darkblue">''']'''</span>;
<span style="color:green">// second tilemap</span>
+
      <span style="color:green">// first tilemap</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> foretiles[80][80];
+
      '''unsigned short'''  backtiles<span style="color:darkblue">'''['''</span>80<span style="color:darkblue">''']'''</span><span style="color:darkblue">'''['''</span>80<span style="color:darkblue">''']'''</span>;
<span style="color:green">// contents map - a contents value for each static tile (in game they get overriden by switchable tiles if presented)</span>
+
      <span style="color:green">// second tilemap</span>
<span style="color:green">// see CONTENTS_ defines for possible content values</span>
+
      '''unsigned short'''  foretiles<span style="color:darkblue">'''['''</span>80<span style="color:darkblue">''']'''</span><span style="color:darkblue">'''['''</span>80<span style="color:darkblue">''']'''</span>;
byte            contents[80][80];
+
      <span style="color:green">// contents map - a contents value for each static tile (in game they get overriden by switchable tiles if presented)</span>
<span style="color:green">// linear triggers array - all triggers used on map</span>
+
      <span style="color:green">// see CONTENTS_ defines for possible content values</span>
bo_trigger_t    triggers[255];
+
      '''byte'''           contents<span style="color:darkblue">'''['''</span>80<span style="color:darkblue">''']'''</span><span style="color:darkblue">'''['''</span>80<span style="color:darkblue">''']'''</span>;
<span style="color:green">// triggers are non-solid interaction points, activated when player stands in them</span>
+
      <span style="color:green">// linear triggers array - all triggers used on map</span>
<span style="color:green">// this array golds pointers to triggers</span>
+
      '''bo_trigger_t'''   triggers<span style="color:darkblue">'''['''</span>255<span style="color:darkblue">''']'''</span>;
byte            triggertiles[80][80];
+
      <span style="color:green">// triggers are non-solid interaction points, activated when player stands in them</span>
<span style="color:green">// items placed on level</span>
+
      <span style="color:green">// this array golds pointers to triggers</span>
<span style="color:green">// itemcodes 0-9 are powerups, codes 10, 11, 12, 13 reserved for unique item codes</span>
+
      '''byte'''           triggertiles<span style="color:darkblue">'''['''</span>80<span style="color:darkblue">''']'''</span><span style="color:darkblue">'''['''</span>80<span style="color:darkblue">''']'''</span>;
<span style="color:green">// so there will be not more than 4 unique item type per level</span>
+
      <span style="color:green">// items placed on level</span>
<span style="color:green">// unique items are: spells, weapons, forms, artifacts, tokens</span>
+
      <span style="color:green">// itemcodes 0-9 are powerups, codes 10, 11, 12, 13 reserved for unique item codes</span>
byte            uniqueitems[4];
+
      <span style="color:green">// so there will be not more than 4 unique item type per level</span>
bo_item_t      items[50];
+
      <span style="color:green">// unique items are: spells, weapons, forms, artifacts, tokens</span>
<span style="color:green">// yet unknown data</span>
+
      '''byte'''           uniqueitems<span style="color:darkblue">'''['''</span>4<span style="color:darkblue">''']'''</span>;
byte            u4[8];
+
      '''bo_item_t'''      items<span style="color:darkblue">'''['''</span>50<span style="color:darkblue">''']'''</span>;
byte            u5[8][40];
+
      <span style="color:green">// yet unknown data</span>
byte            u6[24];
+
      '''byte'''            u4<span style="color:darkblue">'''['''</span>8<span style="color:darkblue">''']'''</span>;
<span style="color:green">// effects</span>
+
      '''byte'''            u5<span style="color:darkblue">'''['''</span>8<span style="color:darkblue">''']'''</span><span style="color:darkblue">'''['''</span>40<span style="color:darkblue">''']'''</span>;
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">short</span> sprites[8];
+
      '''byte'''            u6<span style="color:darkblue">'''['''</span>24<span style="color:darkblue">''']'''</span>;
bo_effect_t    effects[64];
+
      <span style="color:green">// effects</span>
<span style="color:green">// map general info</span>
+
      '''unsigned short'''  sprites<span style="color:darkblue">'''['''</span>8<span style="color:darkblue">''']'''</span>;
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">char</span>   u61;
+
      '''bo_effect_t'''    effects<span style="color:darkblue">'''['''</span>64<span style="color:darkblue">''']'''</span>;
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">char</span>   environments; <span style="color:green">// 0 is outdoor, 1 is indoor</span>
+
      <span style="color:green">// yet unknown data</span>
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">char</span>  ambientcolor[3]; <span style="color:green">// rgb format, 15 15 15 is white, 31 31 31 is double white</span>
+
      '''byte'''  u7<span style="color:darkblue">'''['''</span>936<span style="color:darkblue">''']'''</span>;
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">char</span>   songnum; <span style="color:green">// 0 is oracle caves</span>
+
<span style="color:darkblue">'''}'''</span>bo_map_t;
                        <span style="color:green">// 1 is mausoleum</span>
+
                        <span style="color:green">// 2 is awakening</span>
+
                        <span style="color:green">// 3 is road to vengeance</span>
+
                        <span style="color:green">// 4 is nupraptor</span>
+
                        <span style="color:green">// 5 is maleks bastion</span>
+
                        <span style="color:green">// 6 is voradors mansion</span>
+
                        <span style="color:green">// 7 is dark eden</span>
+
                        <span style="color:green">// 8 is solemn dirge</span>
+
                        <span style="color:green">// 9 is avernus </span>
+
                        <span style="color:green">// 10 is elzevir</span>
+
<span style="color:green">// yet unknown info #7</span>
+
<span style="color:#7f0055; font-weight:bold; ">unsigned</span> <span style="color:#7f0055; font-weight:bold; ">char</span>  u7[930];
+
}bo_map_t;
+
 
   
 
   
 
  <span style="color:green">// things that are not figured out yet:</span>
 
  <span style="color:green">// things that are not figured out yet:</span>
 
  <span style="color:green">// - how lightning is done (variable form lights, day-night light, ambient light)</span>
 
  <span style="color:green">// - how lightning is done (variable form lights, day-night light, ambient light)</span>
  <span style="color:green">// - monster"s paths"s switch (some paths are messed up)</span>
+
  <span style="color:green">// - monster's paths's switch (some paths are messed up)</span>
 
  <span style="color:green">// - counters and puzzle triggers?</span>
 
  <span style="color:green">// - counters and puzzle triggers?</span>
 
<span style="color:green">// map environments</span>
 
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ENVIRONMENTS_OUTDOOR    0</span>
 
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ENVIRONMENTS_INDOOR    1</span>
 
 
   
 
   
 
  <span style="color:green">// tileflags</span>
 
  <span style="color:green">// tileflags</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TILEFLAG_UNKNOWN1      1024</span>
+
  #define '''TILEFLAG_UNKNOWN1'''       1024
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TILEFLAG_NODRAW        2048</span>
+
  #define '''TILEFLAG_NODRAW'''         2048
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TILEFLAG_ONTOPINFRONT  4096</span>
+
  #define '''TILEFLAG_UNKNOWN3'''      4096
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TILEFLAG_ALWAYSBELOW    8192</span>
+
  #define '''TILEFLAG_UNKNOWN4'''      8192
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TILEFLAG_ALWAYSONTOP    16384</span>
+
  #define '''TILEFLAG_ALWAYSONTOP'''   16384
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TILEFLAG_UNKNOWN6      32768</span>
+
  #define '''TILEFLAG_UNKNOWN6'''       32768
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TILEFLAG_MASK          </span><span style="color:#7f0055; ">(</span><span style="color:#7f0055; ">1024 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 2048 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 4096 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 8192 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 16384 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 32768</span><span style="color:#7f0055; ">)</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TILEFLAG_IMASK          </span><span style="color:#7f0055; ">(</span><span style="color:#7f0055; ">1 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 2 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 4 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 8 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 16 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 32 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 64 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 128 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 256 </span><span style="color:#7f0055; ">+</span><span style="color:#7f0055; "> 512</span><span style="color:#7f0055; ">)</span>
+
 
   
 
   
 
  <span style="color:green">// contents</span>
 
  <span style="color:green">// contents</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_NONE          0</span>
+
  #define '''CONTENTS_SOLID'''         1
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_SOLID          1</span>
+
  #define '''CONTENTS_WATER'''         2
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_WATER          2</span>
+
  #define '''CONTENTS_LAVA'''           3
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_LAVA          3</span>
+
  #define '''CONTENTS_FIRE'''           4
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_FIRE          4</span>
+
  #define '''CONTENTS_SPIKES'''         5
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_SPIKES        5</span>
+
  #define '''CONTENTS_TRAPTELEPORT'''   6
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_TRAPTELEPORT  6</span>
+
  #define '''CONTENTS_JUMPWALL'''       8
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_JUMPWALL      8</span>
+
  #define '''CONTENTS_SWAMP'''         11
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_SWAMP          11</span>
+
  #define '''CONTENTS_JUMPFENCE'''     10
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_JUMPFENCE      10</span>
+
  #define '''CONTENTS_MISTWALK'''       12
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_MISTWALK      12</span>
+
  #define '''CONTENTS_SACRIFICE'''     13
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_SACRIFICE      13</span>
+
  #define '''CONTENTS_ICE'''           19
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_ICE            19</span>
+
  #define '''CONTENTS_SAVEGAM'''        44
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_SAVEGAME      44</span>
+
  #define '''CONTENTS_BATMARK'''       45
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> CONTENTS_BATMARK        45</span>
+
 
   
 
   
 
  <span style="color:green">// triggers</span>
 
  <span style="color:green">// triggers</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TRIGGER_EXIT            1</span>
+
  #define '''TRIGGER_EXIT'''           1
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TRIGGER_ENTRANCE        2</span>
+
  #define '''TRIGGER_ENTRANCE'''       2
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TRIGGER_SPEECHMARK      3</span>
+
  #define '''TRIGGER_SPEECHMARK'''     3
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TRIGGER_TOUCH          4</span>
+
  #define '''TRIGGER_TOUCH'''           4
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TRIGGER_TELEPORT        6</span>
+
  #define '''TRIGGER_TELEPORT'''       6
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> TRIGGER_IMAGEMARK      7</span>
+
  #define '''TRIGGER_IMAGEMARK'''       7
 
   
 
   
 
  <span style="color:green">// button flags</span>
 
  <span style="color:green">// button flags</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> BUTTONFLAG_TOGGLE 1</span>
+
  #define '''BUTTONFLAG_TOGGLE'''      1
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> BUTTONFLAG_SECRET      2</span>
+
  #define '''BUTTONFLAG_SECRET'''       2
+
<span style="color:green">// effect flags</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> LIGHTFLAG_FIRE        2  </span><span style="color:green">// fire damage</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> LIGHTFLAG_THUNDER      4  </span><span style="color:green">// thunder light</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> LIGHTFLAG_X            8</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> LIGHTFLAG_FORWARD      16  </span><span style="color:green">// spot light orientation, vertical lightsize sets number of steps, horizontal size sets starting step size</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> LIGHTFLAG_BACK        32  </span><span style="color:green">// spot light orientation, vertical lightsize sets number of steps, horizontal size sets starting step size</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> LIGHTFLAG_RIGHT        64  </span><span style="color:green">// spot light orientation, vertical lightsize sets number of steps, horizontal size sets starting step size</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> LIGHTFLAG_LEFT        128  </span><span style="color:green">// spot light orientation, vertical lightsize sets number of steps, horizontal size sets starting step size</span>
+
+
<span style="color:green">// light flags (possible light flags - 4 or 6)</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> EFFECTFLAG_DYNAMIC      1  </span><span style="color:green">// dynamic light adds to world light, not replacing it</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> EFFECTFLAG_FLICKER      2  </span><span style="color:green">// flickering light</span>
+
<span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> EFFECTFLAG_LIGHT        4  </span><span style="color:green">// has light</span>
+
 
   
 
   
 
  <span style="color:green">// item codes</span>
 
  <span style="color:green">// item codes</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_SMALLBLOODFLASK 1</span>
+
  #define '''MAPITEM_SMALLBLOODFLASK''' 1
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_BLOODFLASK      2</span>
+
  #define '''MAPITEM_BLOODFLASK'''     2
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_RUNEPYRAMID    3</span>
+
  #define '''MAPITEM_RUNEPYRAMID'''     3
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_PURPLESPHERE    4</span>
+
  #define '''MAPITEM_PURPLESPHERE'''   4
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_BLUESPHERE      5</span>
+
  #define '''MAPITEM_BLUESPHERE'''     5
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_GREENSPHERE    6</span>
+
  #define '''MAPITEM_GREENSPHERE'''     6
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_GOLDSPHERE      7</span>
+
  #define '''MAPITEM_GOLDSPHERE'''     7
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_REDSPHERE      8</span>
+
  #define '''MAPITEM_REDSPHERE'''       8
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_ANCIENTVIAL    9</span>
+
  #define '''MAPITEM_ANCIENTVIAL'''     9
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_UNIQUE1        10 </span><span style="color:green">// unique item codes</span>
+
  #define '''MAPITEM_UNIQUE1'''         10 <span style="color:green">// unique item codes</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_UNIQUE2        11 </span><span style="color:green">// unique item codes</span>
+
  #define '''MAPITEM_UNIQUE2'''         11 <span style="color:green">// unique item codes</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_UNIQUE3        12 </span><span style="color:green">// unique item codes</span>
+
  #define '''MAPITEM_UNIQUE3'''         12 <span style="color:green">// unique item codes</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> MAPITEM_UNIQUE4        13 </span><span style="color:green">// unique item codes</span>
+
  #define '''MAPITEM_UNIQUE4'''         13 <span style="color:green">// unique item codes</span>
 
   
 
   
  <span style="color:green">// real item codes</span>
+
  <span style="color:green">// unique item codes</span>
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_INSPIREHATE  10</span>
+
  #define '''ITEM_SPELL_INSPIREHATE''' 10
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_STUN        11</span>
+
  #define '''ITEM_SPELL_STUN'''         11
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_SPIRITWRACK  12</span>
+
  #define '''ITEM_SPELL_SPIRITWRACK''' 12
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_BLOODGOUT    13</span>
+
  #define '''ITEM_SPELL_BLOODGOUT'''   13
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_BLOODSHOWER  14</span>
+
  #define '''ITEM_SPELL_BLOODSHOWER''' 14
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_SPIRITDEATH  15</span>
+
  #define '''ITEM_SPELL_SPIRITDEATH''' 15
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_LIGHT        16</span>
+
  #define '''ITEM_SPELL_LIGHT'''       16
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_LIGHTNING    17</span>
+
  #define '''ITEM_SPELL_LIGHTNING'''   17
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_REPEL        18</span>
+
  #define '''ITEM_SPELL_REPEL'''       18
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_ENERGYBOLT  19</span>
+
  #define '''ITEM_SPELL_ENERGYBOLT'''   19
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_INCAPACITATE 20</span>
+
  #define '''ITEM_SPELL_INCAPACITATE''' 20
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_CONTROLMIND  21</span>
+
  #define '''ITEM_SPELL_CONTROLMIND''' 21
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_SPELL_SANCTUARY    22</span>
+
  #define '''ITEM_SPELL_SANCTUARY'''   22
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARTIFACT_FLAY      23</span>
+
  #define '''ITEM_ARTIFACT_FLAY'''     23
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARTIFACT_PENTALICH 24</span>
+
  #define '''ITEM_ARTIFACT_PENTALICH''' 24
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARTIFACT_IMPLODE  25</span>
+
  #define '''ITEM_ARTIFACT_IMPLODE'''   25
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARTIFACT_FONT      26</span>
+
  #define '''ITEM_ARTIFACT_FONT'''     26
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARTIFACT_BANK      27</span>
+
  #define '''ITEM_ARTIFACT_BANK'''     27
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARTIFACT_HEART    28</span>
+
  #define '''ITEM_ARTIFACT_HEART'''     28
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARTIFACT_ANTITOXIN 29</span>
+
  #define '''ITEM_ARTIFACT_ANTITOXIN''' 29
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARTIFACT_SLOWTIME  30</span>
+
  #define '''ITEM_ARTIFACT_SLOWTIME''' 30
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_MOEBIUS      31</span>
+
  #define '''ITEM_TOKEN_MOEBIUS'''     31
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_DEJOULE      32</span>
+
  #define '''ITEM_TOKEN_DEJOULE'''     32
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_DOLL        33</span>
+
  #define '''ITEM_TOKEN_DOLL'''         33
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_MALEK        34</span>
+
  #define '''ITEM_TOKEN_MALEK'''       34
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_AZIMUTH      35</span>
+
  #define '''ITEM_TOKEN_AZIMUTH'''     35
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_MORTANIUS    36</span>
+
  #define '''ITEM_TOKEN_MORTANIUS'''   36
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_NUPRAPTOR    37</span>
+
  #define '''ITEM_TOKEN_NUPRAPTOR'''   37
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_BANE        38</span>
+
  #define '''ITEM_TOKEN_BANE'''         38
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_SIGNETRING  39</span>
+
  #define '''ITEM_TOKEN_SIGNETRING'''   39
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_TIMEDEVICE  40</span>
+
  #define '''ITEM_TOKEN_TIMEDEVICE'''   40
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_TOKEN_ANACROTHE    41</span>
+
  #define '''ITEM_TOKEN_ANACROTHE'''   41
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_WEAPON_MACE        43</span>
+
  #define '''ITEM_WEAPON_MACE'''       43
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_WEAPON_AXES        44</span>
+
  #define '''ITEM_WEAPON_AXES'''       44
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_WEAPON_FLAMESWORD  45</span>
+
  #define '''ITEM_WEAPON_FLAMESWORD''' 45
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_WEAPON_SOULREAVER  46</span>
+
  #define '''ITEM_WEAPON_SOULREAVER''' 46
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARMOR_BONE        48</span>
+
  #define '''ITEM_ARMOR_BONE'''         48
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARMOR_CHAOS        49</span>
+
  #define '''ITEM_ARMOR_CHAOS'''       49
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARMOR_FLESH        50</span>
+
  #define '''ITEM_ARMOR_FLESH'''       50
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ARMOR_WRAITH      51</span>
+
  #define '''ITEM_ARMOR_WRAITH'''       51
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_FORM_BAT          53</span>
+
  #define '''ITEM_FORM_BAT'''           53
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_FORM_WOLF          54</span>
+
  #define '''ITEM_FORM_WOLF'''         54
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_FORM_DISGUISE      55</span>
+
  #define '''ITEM_FORM_DISGUISE'''     55
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_FORM_MIST          56</span>
+
  #define '''ITEM_FORM_MIST'''         56
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ENDING_1          69</span>
+
  #define '''ITEM_ENDING_1'''           69
  <span style="color:#7f0055; ">#</span><span style="color:#7f0055; ">define</span><span style="color:#7f0055; "> ITEM_ENDING_2          70</span>
+
  #define '''ITEM_ENDING_2'''           70
  
 
==Compression methods==
 
==Compression methods==

Please note that all contributions to Blood Wiki are considered to be released under the Creative Commons Attribution Share Alike (see BloodWiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)

This page is a member of 2 hidden categories:

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox