debugId is now a regular field of mapobject and has been renamed in id
authorbenblan <benblan@3ce38193-f967-438d-acd5-fc4e68e0da95>
Tue, 22 Jul 2014 09:57:44 +0000 (09:57 +0000)
committerbenblan <benblan@3ce38193-f967-438d-acd5-fc4e68e0da95>
Tue, 22 Jul 2014 09:57:44 +0000 (09:57 +0000)
freesynd/branches/rework-actions/src/mapobject.cpp
freesynd/branches/rework-actions/src/mapobject.h
freesynd/branches/rework-actions/src/missionmanager.cpp
freesynd/branches/rework-actions/src/missionmanager.h
freesynd/branches/rework-actions/src/ped.cpp
freesynd/branches/rework-actions/src/ped.h
freesynd/branches/rework-actions/src/pedmanager.cpp
freesynd/branches/rework-actions/src/vehicle.cpp
freesynd/branches/rework-actions/src/vehicle.h
freesynd/branches/rework-actions/src/weapon.cpp
freesynd/branches/rework-actions/src/weapon.h

index ea3ca9a97e12d7e09dd82e16c48b470f96fc9ac3..381239ceeeb8894068bb837db5e71365cd06f36e 100644 (file)
 #include "core/gamesession.h"
 #include "mission.h"
 
-#ifdef _DEBUG
-uint32 MapObject::debugIdCnt = 0;
-#endif
-
+uint16 SFXObject::sfxIdCnt = 0;
 const int Static::kStaticSubtype1 = 0;
 const int Static::kStaticSubtype2 = 2;
 
-MapObject::MapObject(int m, ObjectNature nature):size_x_(1), size_y_(1), size_z_(2),
+MapObject::MapObject(uint16 id, int m, ObjectNature nature):
+    size_x_(1), size_y_(1), size_z_(2),
     map_(m), frame_(0), elapsed_carry_(0),
     frames_per_sec_(8),
     dir_(0),
@@ -46,10 +44,8 @@ MapObject::MapObject(int m, ObjectNature nature):size_x_(1), size_y_(1), size_z_
     is_ignored_(false), is_frame_drawn_(false),
     state_(0xFFFFFFFF)
 {
-#ifdef _DEBUG
-    debugId_ = ++debugIdCnt;
-#endif
     nature_ = nature; 
+    id_ = id;
 }
 
 const char* MapObject::natureName() {
@@ -452,7 +448,7 @@ void MapObject::offzOnStairs(uint8 twd) {
  * \param t_show
  * \param managed True means object is destroyed by another object than Mission
  */
-SFXObject::SFXObject(int m, SfxTypeEnum type, int t_show, bool managed) : MapObject(m, kNatureUndefined) {
+SFXObject::SFXObject(int m, SfxTypeEnum type, int t_show, bool managed) : MapObject(sfxIdCnt++, m, kNatureUndefined) {
     type_ = type;
     managed_ = managed;
     draw_all_frames_ = true;
@@ -569,15 +565,17 @@ void SFXObject::reset() {
     elapsed_left_ = 0;
 }
 
-ShootableMapObject::ShootableMapObject(int m, ObjectNature nature):MapObject(m, nature)
+ShootableMapObject::ShootableMapObject(uint16 id, int m, ObjectNature nature):
+    MapObject(id, m, nature)
 {
     rcv_damage_def_ = MapObject::ddmg_Invulnerable;
 }
 
-ShootableMovableMapObject::ShootableMovableMapObject(int m, ObjectNature nature):
-    ShootableMapObject(m, nature),
-speed_(0), base_speed_(0), dist_to_pos_(0)
-{
+ShootableMovableMapObject::ShootableMovableMapObject(uint16 id, int m, ObjectNature nature):
+        ShootableMapObject(id, m, nature) {
+    speed_ = 0;
+    base_speed_ = 0;
+    dist_to_pos_ = 0;
 }
 
 /*!
@@ -644,7 +642,7 @@ bool ShootableMovableMapObject::checkCurrPosTileOnly(PathNode &pn) {
         && pn.tileZ() == tile_z_;
 }
 
-Static *Static::loadInstance(uint8 * data, int m)
+Static *Static::loadInstance(uint8 * data, uint16 id, int m)
 {
     LevelData::Statics * gamdata =
         (LevelData::Statics *) data;
@@ -661,14 +659,14 @@ Static *Static::loadInstance(uint8 * data, int m)
     switch(gamdata->sub_type) {
         case 0x01:
             // phone booth
-            s = new EtcObj(m, curanim, curanim, curanim);
+            s = new EtcObj(id, m, curanim, curanim, curanim);
             s->setSizeX(128);
             s->setSizeY(128);
             s->setSizeZ(128);
             break;
         case 0x05:// 1040-1043, 1044 - damaged
             // crossroad things
-            s = new Semaphore(m, 1040, 1044);
+            s = new Semaphore(id, m, 1040, 1044);
             s->setSizeX(48);
             s->setSizeY(48);
             s->setSizeZ(48);
@@ -678,7 +676,7 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x06:
             // crossroad things
-            s = new Semaphore(m, 1040, 1044);
+            s = new Semaphore(id, m, 1040, 1044);
             s->setSizeX(48);
             s->setSizeY(48);
             s->setSizeZ(48);
@@ -688,7 +686,7 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x07:
             // crossroad things
-            s = new Semaphore(m, 1040, 1044);
+            s = new Semaphore(id, m, 1040, 1044);
             s->setSizeX(48);
             s->setSizeY(48);
             s->setSizeZ(48);
@@ -698,7 +696,7 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x08:
             // crossroad things
-            s = new Semaphore(m, 1040, 1044);
+            s = new Semaphore(id, m, 1040, 1044);
             s->setSizeX(48);
             s->setSizeY(48);
             s->setSizeZ(48);
@@ -712,7 +710,7 @@ Static *Static::loadInstance(uint8 * data, int m)
             //printf("0x0B anim %X\n", curanim);
             break;
         case 0x0A:
-            s = new NeonSign(m, curanim);
+            s = new NeonSign(id, m, curanim);
             s->setFrame(g_App.gameSprites().getFrameFromFrameIndx(curframe));
             s->setIsIgnored(true);
             s->setSizeX(32);
@@ -722,14 +720,14 @@ Static *Static::loadInstance(uint8 * data, int m)
         case 0x0C: // closed door
             if (gamdata->orientation == 0x00 || gamdata->orientation == 0x80
                 || gamdata->orientation == 0x7E || gamdata->orientation == 0xFE) {
-                s = new Door(m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
+                s = new Door(id, m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
                 s->setSubType(kStaticSubtype1);
                 s->setSizeX(256);
                 s->setSizeY(1);
                 s->setSizeZ(196);
             } else {
                 baseanim++;
-                s = new Door(m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
+                s = new Door(id, m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
                 s->setSubType(kStaticSubtype2);
                 s->setSizeX(1);
                 s->setSizeY(256);
@@ -739,14 +737,14 @@ Static *Static::loadInstance(uint8 * data, int m)
         case 0x0D: // closed door
             if (gamdata->orientation == 0x00 || gamdata->orientation == 0x80
                 || gamdata->orientation == 0x7E || gamdata->orientation == 0xFE) {
-                s = new Door(m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
+                s = new Door(id, m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
                 s->setSubType(kStaticSubtype1);
                 s->setSizeX(256);
                 s->setSizeY(1);
                 s->setSizeZ(196);
             } else {
                 baseanim++;
-                s = new Door(m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
+                s = new Door(id, m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
                 s->setSubType(kStaticSubtype2);
                 s->setSizeX(1);
                 s->setSizeY(256);
@@ -756,14 +754,14 @@ Static *Static::loadInstance(uint8 * data, int m)
         case 0x0E: // opening doors, not open
             if (gamdata->orientation == 0x00 || gamdata->orientation == 0x80
                 || gamdata->orientation == 0x7E || gamdata->orientation == 0xFE) {
-                s = new Door(m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
+                s = new Door(id, m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
                 s->setSubType(kStaticSubtype1);
                 s->setSizeX(256);
                 s->setSizeY(1);
                 s->setSizeZ(196);
             } else {
                 baseanim++;
-                s = new Door(m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
+                s = new Door(id, m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
                 s->setSubType(kStaticSubtype2);
                 s->setSizeX(1);
                 s->setSizeY(256);
@@ -774,14 +772,14 @@ Static *Static::loadInstance(uint8 * data, int m)
         case 0x0F: // opening doors, not open
             if (gamdata->orientation == 0x00 || gamdata->orientation == 0x80
                 || gamdata->orientation == 0x7E || gamdata->orientation == 0xFE) {
-                s = new Door(m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
+                s = new Door(id, m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
                 s->setSubType(kStaticSubtype1);
                 s->setSizeX(256);
                 s->setSizeY(1);
                 s->setSizeZ(196);
             } else {
                 baseanim++;
-                s = new Door(m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
+                s = new Door(id, m, baseanim, baseanim + 2, baseanim + 4, baseanim + 6);
                 s->setSubType(kStaticSubtype2);
                 s->setSizeX(1);
                 s->setSizeY(256);
@@ -796,7 +794,7 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x12:
             // open window
-            s = new WindowObj(m, curanim - 2, curanim, curanim + 2, curanim + 4);
+            s = new WindowObj(id, m, curanim - 2, curanim, curanim + 2, curanim + 4);
             if (gamdata->orientation == 0x00 || gamdata->orientation == 0x80) {
                 s->setSubType(kStaticSubtype1);
                 s->setSizeX(96);
@@ -814,7 +812,7 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x13:
             // closed window
-            s = new WindowObj(m, curanim, curanim + 2, curanim + 4, curanim + 6);
+            s = new WindowObj(id, m, curanim, curanim + 2, curanim + 4, curanim + 6);
             if (gamdata->orientation == 0x00 || gamdata->orientation == 0x80) {
                 s->setSubType(kStaticSubtype1);
                 s->setSizeX(96);
@@ -832,7 +830,7 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x15:
             // damaged window
-            s = new WindowObj(m, curanim - 6, curanim - 4, curanim - 2, curanim);
+            s = new WindowObj(id, m, curanim - 6, curanim - 4, curanim - 2, curanim);
             s->setIsIgnored(true);
             s->setHealth(0);
             s->setStartHealth(1);
@@ -840,7 +838,7 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x16:
             // TODO: set state if damaged trees exist
-            s = new Tree(m, curanim, curanim + 1, curanim + 2);
+            s = new Tree(id, m, curanim, curanim + 1, curanim + 2);
             s->setSizeX(64);
             s->setSizeY(64);
             s->setSizeZ(256);
@@ -849,14 +847,14 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x19:
             // trash bin
-            s = new EtcObj(m, curanim, curanim, curanim);
+            s = new EtcObj(id, m, curanim, curanim, curanim);
             s->setSizeX(64);
             s->setSizeY(64);
             s->setSizeZ(96);
             break;
         case 0x1A:
             // mail box
-            s = new EtcObj(m, curanim, curanim, curanim);
+            s = new EtcObj(id, m, curanim, curanim, curanim);
             s->setSizeX(64);
             s->setSizeY(64);
             s->setSizeZ(96);
@@ -868,19 +866,19 @@ Static *Static::loadInstance(uint8 * data, int m)
             break;
         case 0x1F:
             // advertisement on wall
-            s = new EtcObj(m, curanim, curanim, curanim, smt_Advertisement);
+            s = new EtcObj(id, m, curanim, curanim, curanim, smt_Advertisement);
             s->setIsIgnored(true);
             break;
 
         case 0x20:
             // window without light
-            s = new AnimWindow(m, curanim);
+            s = new AnimWindow(id, m, curanim);
             s->setStateMasks(sttawnd_LightOff);
             s->setTimeShowAnim(30000 + (rand() % 30000));
             break;
         case 0x21:
             // window light turns on
-            s = new AnimWindow(m, curanim - 2);
+            s = new AnimWindow(id, m, curanim - 2);
             s->setTimeShowAnim(1000 + (rand() % 1000));
             s->setStateMasks(sttawnd_LightSwitching);
 
@@ -889,18 +887,18 @@ Static *Static::loadInstance(uint8 * data, int m)
         case 0x23:
             // window with person's shadow non animated,
             // even though on 1 map person appears I will ignore it
-            s = new AnimWindow(m, 1959 + ((gamdata->orientation & 0x40) >> 5));
+            s = new AnimWindow(id, m, 1959 + ((gamdata->orientation & 0x40) >> 5));
             s->setStateMasks(sttawnd_ShowPed);
             s->setTimeShowAnim(15000 + (rand() % 5000));
             break;
         case 0x24:
             // window with person's shadow, hides, actually animation
             // is of ped standing, but I will ignore it
-            s = new AnimWindow(m, 1959 + 8 + ((gamdata->orientation & 0x40) >> 5));
+            s = new AnimWindow(id, m, 1959 + 8 + ((gamdata->orientation & 0x40) >> 5));
             s->setStateMasks(sttawnd_PedDisappears);
             break;
         case 0x25:
-            s = new AnimWindow(m, curanim);
+            s = new AnimWindow(id, m, curanim);
 
             // NOTE : orientation, I assume, plays role of hidding object,
             // orientation 0x40, 0x80 are drawn (gamdata->desc always 7)
@@ -916,7 +914,7 @@ Static *Static::loadInstance(uint8 * data, int m)
         case 0x26:
             // 0x00,0x80 south - north = 0
             // 0x40,0xC0 weast - east = 2
-            s = new LargeDoor(m, curanim, curanim + 1, curanim + 2);
+            s = new LargeDoor(id, m, curanim, curanim + 1, curanim + 2);
             if (gamdata->orientation == 0x00 || gamdata->orientation == 0x80) {
                 s->setSubType(kStaticSubtype1);
                 s->setSizeX(384);
@@ -965,8 +963,8 @@ Static *Static::loadInstance(uint8 * data, int m)
     return s;
 }
 
-Door::Door(int m, int anim, int closingAnim, int openAnim, int openingAnim) :
-    Static(m, Static::smt_Door), anim_(anim), closing_anim_(closingAnim),
+Door::Door(uint16 id, int m, int anim, int closingAnim, int openAnim, int openingAnim) :
+    Static(id, m, Static::smt_Door), anim_(anim), closing_anim_(closingAnim),
         open_anim_(openAnim), opening_anim_(openingAnim) {
     state_ = Static::sttdoor_Closed;
 }
@@ -1094,8 +1092,8 @@ bool Door::isPathBlocker()
 }
 
 
-LargeDoor::LargeDoor(int m, int anim, int closingAnim, int openingAnim):
-        Static(m, Static::smt_LargeDoor), anim_(anim),
+LargeDoor::LargeDoor(uint16 id, int m, int anim, int closingAnim, int openingAnim):
+        Static(id, m, Static::smt_LargeDoor), anim_(anim),
         closing_anim_(closingAnim), opening_anim_(openingAnim) {
     state_ = Static::sttdoor_Closed;
 }
@@ -1453,8 +1451,8 @@ bool LargeDoor::isPathBlocker()
 }
 
 
-Tree::Tree(int m, int anim, int burningAnim, int damagedAnim) :
-        Static(m, Static::smt_Tree), anim_(anim), burning_anim_(burningAnim),
+Tree::Tree(uint16 id, int m, int anim, int burningAnim, int damagedAnim) :
+        Static(id, m, Static::smt_Tree), anim_(anim), burning_anim_(burningAnim),
         damaged_anim_(damagedAnim) {
     rcv_damage_def_ = MapObject::ddmg_StaticTree;
     state_ = Static::stttree_Healthy;
@@ -1505,9 +1503,9 @@ bool Tree::handleDamage(ShootableMapObject::DamageInflictType *d) {
     return true;
 }
 
-WindowObj::WindowObj(int m, int anim, int openAnim, int breakingAnim,
+WindowObj::WindowObj(uint16 id, int m, int anim, int openAnim, int breakingAnim,
                      int damagedAnim) :
-        Static(m, Static::smt_Window), anim_(anim), open_anim_(openAnim),
+        Static(id, m, Static::smt_Window), anim_(anim), open_anim_(openAnim),
         breaking_anim_(breakingAnim), damaged_anim_(damagedAnim) {
     rcv_damage_def_ = MapObject::ddmg_StaticWindow;
 }
@@ -1544,8 +1542,8 @@ bool WindowObj::handleDamage(ShootableMapObject::DamageInflictType *d) {
     return true;
 }
 
-EtcObj::EtcObj(int m, int anim, int burningAnim, int damagedAnim, StaticType type) :
-        Static(m, type), anim_(anim), burning_anim_(burningAnim),
+EtcObj::EtcObj(uint16 id, int m, int anim, int burningAnim, int damagedAnim, StaticType type) :
+        Static(id, m, type), anim_(anim), burning_anim_(burningAnim),
         damaged_anim_(damagedAnim) {
     rcv_damage_def_ = MapObject::ddmg_StaticGeneral;
 }
@@ -1556,7 +1554,7 @@ void EtcObj::draw(int x, int y)
     g_App.gameSprites().drawFrame(anim_, frame_, x, y);
 }
 
-NeonSign::NeonSign(int m, int anim) : Static(m, Static::smt_NeonSign) {
+NeonSign::NeonSign(uint16 id, int m, int anim) : Static(id, m, Static::smt_NeonSign) {
     anim_ = anim;
 }
 
@@ -1566,8 +1564,8 @@ void NeonSign::draw(int x, int y)
     g_App.gameSprites().drawFrame(anim_, frame_, x, y);
 }
 
-Semaphore::Semaphore(int m, int anim, int damagedAnim) :
-        Static(m, Static::smt_Semaphore), anim_(anim),
+Semaphore::Semaphore(uint16 id, int m, int anim, int damagedAnim) :
+        Static(id, m, Static::smt_Semaphore), anim_(anim),
         damaged_anim_(damagedAnim), elapsed_left_smaller_(0),
         elapsed_left_bigger_(0), up_down_(1) {
     rcv_damage_def_ = MapObject::ddmg_StaticGeneral;
@@ -1653,7 +1651,7 @@ void Semaphore::draw(int x, int y)
     g_App.gameSprites().drawFrame(anim_ +  state_, frame_, x, y);
 }
 
-AnimWindow::AnimWindow(int m, int anim) : Static(m, smt_AnimatedWindow) {
+AnimWindow::AnimWindow(uint16 id, int m, int anim) : Static(id, m, smt_AnimatedWindow) {
     rcv_damage_def_ = MapObject::ddmg_StaticGeneral;
     setIsIgnored(true);
     setFramesPerSec(4);
index 247219f5e290db83dc00802fd4e5564112356f11..3cd63941e36a9f0c3789ce7b779ea27c4dc5dc58 100644 (file)
@@ -53,7 +53,7 @@ public:
     };
 
 public:
-    MapObject(int m, ObjectNature nature);
+    MapObject(uint16 id, int m, ObjectNature nature);
     virtual ~MapObject() {}
 
     //! Return the nature of the object
@@ -61,6 +61,9 @@ public:
     //! For debug purpose
     const char* natureName();
 
+    //! Return the object's id
+    uint16 id() { return id_; }
+
     virtual void draw(int x, int y) = 0;
     enum DamageType {
         dmg_None = 0x0000,
@@ -287,13 +290,11 @@ public:
 
     void offzOnStairs(uint8 twd);
 
-#ifdef _DEBUG
-    uint32 getDebugID() { return debugId_; }
-#endif
-
 protected:
     //! the nature of this object
     ObjectNature nature_;
+    //! Id of the object. Id is unique within a nature
+    uint16 id_;
     /*!
      * Tile based coordinates, tile_x_ and tile_y_ have 256
      * tile_z_ has 128 base
@@ -329,11 +330,6 @@ protected:
     uint32 state_;
 
     void addOffs(int &x, int &y);
-#ifdef _DEBUG
-private:
-    static uint32 debugIdCnt;
-    uint32 debugId_;
-#endif
 };
 
 /*!
@@ -381,6 +377,7 @@ public:
         }
     }
 protected:
+    static uint16 sfxIdCnt;
     /*! The type of SfxObject.*/
     SfxTypeEnum type_;
     int anim_;
@@ -422,7 +419,7 @@ public:
     };
 
 public:
-    ShootableMapObject(int m, ObjectNature nature);
+    ShootableMapObject(uint16 id, int m, ObjectNature nature);
     virtual ~ShootableMapObject() {}
 
     int health() { return health_; }
@@ -511,7 +508,7 @@ public:
  */
 class ShootableMovableMapObject : public ShootableMapObject {
 public:
-    ShootableMovableMapObject(int m, ObjectNature nature);
+    ShootableMovableMapObject(uint16 id, int m, ObjectNature nature);
     virtual ~ShootableMovableMapObject() {}
 
     void setSpeed(int new_speed) {
@@ -581,7 +578,7 @@ public:
         smt_NeonSign
     };
 public:
-    static Static *loadInstance(uint8 *data, int m);
+    static Static *loadInstance(uint8 *data, uint16 id, int m);
     virtual ~Static() {}
 
     //! Return the type of statics
@@ -634,8 +631,8 @@ public:
     }stateAnimatedWindows;
 
 protected:
-    Static(int m, StaticType type) :
-            ShootableMapObject(m, MapObject::kNatureStatic) {
+    Static(uint16 id, int m, StaticType type) :
+            ShootableMapObject(id, m, MapObject::kNatureStatic) {
         type_ = type;
         subType_ = kStaticSubtype1;
     }
@@ -652,7 +649,7 @@ protected:
  */
 class Door : public Static {
 public:
-    Door(int m, int anim, int closingAnim, int openAnim, int openingAnim);
+    Door(uint16 id, int m, int anim, int closingAnim, int openAnim, int openingAnim);
     virtual ~Door() {}
 
     void draw(int x, int y);
@@ -668,7 +665,7 @@ protected:
  */
 class LargeDoor : public Static {
 public:
-    LargeDoor(int m, int anim, int closingAnim, int openingAnim);
+    LargeDoor(uint16 id, int m, int anim, int closingAnim, int openingAnim);
     virtual ~LargeDoor() {}
 
     void draw(int x, int y);
@@ -683,7 +680,7 @@ protected:
  */
 class Tree : public Static {
 public:
-    Tree(int m, int anim, int burningAnim, int damagedAnim);
+    Tree(uint16 id, int m, int anim, int burningAnim, int damagedAnim);
     virtual ~Tree() {}
 
     void draw(int x, int y);
@@ -699,7 +696,7 @@ protected:
  */
 class WindowObj : public Static {
 public:
-    WindowObj(int m, int anim, int openAnim, int breakingAnim,
+    WindowObj(uint16 id, int m, int anim, int openAnim, int breakingAnim,
               int damagedAnim);
     virtual ~WindowObj() {}
 
@@ -716,7 +713,7 @@ protected:
  */
 class EtcObj : public Static {
 public:
-    EtcObj(int m, int anim, int burningAnim, int damagedAnim, StaticType type = smt_None);
+    EtcObj(uint16 id, int m, int anim, int burningAnim, int damagedAnim, StaticType type = smt_None);
     virtual ~EtcObj() {}
 
     void draw(int x, int y);
@@ -730,7 +727,7 @@ protected:
  */
 class NeonSign : public Static {
 public:
-    NeonSign(int m, int anim);
+    NeonSign(uint16 id, int m, int anim);
     virtual ~NeonSign() {}
 
     void draw(int x, int y);
@@ -745,7 +742,7 @@ protected:
  */
 class Semaphore : public Static {
 public:
-    Semaphore(int m, int anim, int damagedAnim);
+    Semaphore(uint16 id, int m, int anim, int damagedAnim);
     virtual ~Semaphore() {}
 
     bool animate(int elapsed, Mission *obj);
@@ -771,7 +768,7 @@ protected:
  */
 class AnimWindow : public Static {
 public:
-    AnimWindow(int m, int anim);
+    AnimWindow(uint16 id, int m, int anim);
     virtual ~AnimWindow() {}
 
     bool animate(int elapsed, Mission *obj);
index 5a459a9d9d80896d374d83ac24cb41fe7334877f..4e182745463dc121f36a49ea3cdec06a7536a30f 100644 (file)
@@ -321,7 +321,7 @@ Mission * MissionManager::create_mission(LevelData::LevelDataAll &level_data) {
             LevelData::Statics & sref = level_data.statics[i];
             if(sref.desc == 0)
                 continue;
-            Static *s = Static::loadInstance((uint8 *) & sref, p_mission->mapId());
+            Static *s = Static::loadInstance((uint8 *) & sref, i, p_mission->mapId());
             if (s) {
                 p_mission->addStatic(s);
             }
@@ -471,13 +471,13 @@ WeaponInstance * MissionManager::create_weapon_instance(const LevelData::Weapons
 
 
 void MissionManager::createVehicles(const LevelData::LevelDataAll &level_data, DataIndex &di, Mission *pMission) {
-    for (uint8 i = 0; i < 64; i++) {
+    for (uint16 i = 0; i < 64; i++) {
         const LevelData::Cars & car = level_data.cars[i];
         // car.sub_type 0x09 - train
         if (car.type == 0x0)
             continue;
         VehicleInstance *v =
-            createVehicleInstance(car, pMission->mapId());
+            createVehicleInstance(car, i, pMission->mapId());
         if (v) {
             di.vindx[i] = pMission->numVehicles();
             pMission->addVehicle(v);
@@ -492,7 +492,7 @@ void MissionManager::createVehicles(const LevelData::LevelDataAll &level_data, D
 /*!
  *
  */
-VehicleInstance * MissionManager::createVehicleInstance(const LevelData::Cars &gamdata, uint16 map)
+VehicleInstance * MissionManager::createVehicleInstance(const LevelData::Cars &gamdata, uint16 id, uint16 map)
 {
     // TODO: check all maps
     // TODO: train, join somehow
@@ -504,7 +504,7 @@ VehicleInstance * MissionManager::createVehicleInstance(const LevelData::Cars &g
     int cur_anim = READ_LE_UINT16(gamdata.index_current_anim) - dir;
     //setVehicleBaseAnim(vehicleanim, cur_anim);
     vehicleanim->set_base_anims(cur_anim);
-    VehicleInstance *vehicle_new = new VehicleInstance(vehicleanim, map);
+    VehicleInstance *vehicle_new = new VehicleInstance(vehicleanim, id, map);
     vehicle_new->setHealth(hp);
     vehicle_new->setStartHealth(hp);
     vehicle_new->setType(gamdata.sub_type);
@@ -695,7 +695,7 @@ void MissionManager::createPeds(const LevelData::LevelDataAll &level_data, DataI
                 // TODO: set scenarios
                 
                if (p->useNewAnimation()) {
-                    createScriptedActionsForPed(pMission, di, level_data, i, p);
+                    createScriptedActionsForPed(pMission, di, level_data, p);
                 } else {
                     uint16 offset_start = READ_LE_UINT16(pedref.offset_scenario_start);
                     uint16 offset_nxt = offset_start;
@@ -810,8 +810,8 @@ void MissionManager::createPeds(const LevelData::LevelDataAll &level_data, DataI
     }
 }
 
-void MissionManager::createScriptedActionsForPed(Mission *pMission, DataIndex &di, const LevelData::LevelDataAll &level_data, uint16 pedIdx, PedInstance *pPed) {
-    const LevelData::People & pedref = level_data.people[pedIdx];
+void MissionManager::createScriptedActionsForPed(Mission *pMission, DataIndex &di, const LevelData::LevelDataAll &level_data, PedInstance *pPed) {
+    const LevelData::People & pedref = level_data.people[pPed->id()];
     uint16 offset_start = READ_LE_UINT16(pedref.offset_scenario_start);
     uint16 offset_nxt = offset_start;
     Vehicle *v = pPed->inVehicle();
@@ -822,7 +822,7 @@ void MissionManager::createScriptedActionsForPed(Mission *pMission, DataIndex &d
 
 #ifdef _DEBUG
     if (offset_nxt) {
-        LOG(Log::k_FLG_GAME, "MissionManager","createScriptedActionsForPed", ("Scenarios for ped : %d", pPed->getDebugID()))
+        LOG(Log::k_FLG_GAME, "MissionManager","createScriptedActionsForPed", ("Scenarios for ped : %d", pPed->id()))
     }
 #endif
 
@@ -839,7 +839,7 @@ void MissionManager::createScriptedActionsForPed(Mission *pMission, DataIndex &d
         // 10 - train stops and waits
         // 11 - protected target reached destination(kenya) (TODO properly)
         LevelData::Scenarios sc = level_data.scenarios[offset_nxt / 8];
-        LOG(Log::k_FLG_GAME, "MissionManager","createScriptedActionsForPed", ("At offset : %d", offset_nxt))
+        LOG(Log::k_FLG_GAME, "MissionManager","createScriptedActionsForPed", ("At offset %d, type : %d", offset_nxt, sc.type))
 
         offset_nxt = READ_LE_UINT16(sc.next);
         if (offset_nxt == offset_start) {
index bd18f764d45931438396d6b6d7f2321d755b8b1f..74a4f9bc7e7fcd89ad4a2c1f71099a3a90e44fdc 100644 (file)
@@ -80,14 +80,14 @@ private:
     void createVehicles(const LevelData::LevelDataAll &level_data, 
                             DataIndex &di, Mission *pMission);
     //! Creates a vehicle from the game data
-    VehicleInstance * createVehicleInstance(const LevelData::Cars &gamdata, uint16 map);
+    VehicleInstance * createVehicleInstance(const LevelData::Cars &gamdata, uint16 id, uint16 map);
     //! Creates all peds
     void createPeds(const LevelData::LevelDataAll &level_data, 
                             DataIndex &di, Mission *pMission);
     void createScriptedActionsForPed(Mission *pMission, 
                                         DataIndex &di, 
                                         const LevelData::LevelDataAll &level_data, 
-                                        uint16 pedIdx, PedInstance *pPed);
+                                        PedInstance *pPed);
     //! Creates objectives
     void createObjectives(const LevelData::LevelDataAll &level_data, 
                             DataIndex &di, Mission *pMission);
index e318156d5b95f113eb8e14b47c226ece6537428a..b9ca76203c3c8a9f500b3cd4b18c36a05e3f0551 100644 (file)
@@ -1973,10 +1973,6 @@ bool PedInstance::animate(int elapsed, Mission *mission) {
     return updated;
 }
 
-PedInstance *Ped::createInstance(int map) {
-    return new PedInstance(this, map);
-}
-
 /*!
  * Forces an agent to commit suicide.
  * If he's equiped with the good version of Mod Chest, he will
@@ -2062,7 +2058,7 @@ void PedInstance::showPath(int scrollX, int scrollY) {
     }
 }
 
-PedInstance::PedInstance(Ped *ped, int m) : ShootableMovableMapObject(m, MapObject::kNaturePed),
+PedInstance::PedInstance(Ped *ped, uint16 id, int m) : ShootableMovableMapObject(id, m, MapObject::kNaturePed),
     ped_(ped), action_grp_id_(1),
     desc_state_(PedInstance::pd_smUndefined),
     hostile_desc_(PedInstance::pd_smUndefined),
index 26062634eb0cf711ce13edf378c087b74aa05a35..9c425f28d82f7f151f711b868eb72239015fbd6b 100644 (file)
@@ -93,8 +93,6 @@ public:
 
     void setPersuadeAnim(int anim) { persuade_anim_ = anim; }
 
-    PedInstance *createInstance(int map);
-
     bool drawStandFrame(int x, int y, int dir, int frame,
             Weapon::WeaponAnimIndex weapon = Weapon::Unarmed_Anim);
     int lastStandFrame(int dir, Weapon::WeaponAnimIndex weapon);
@@ -198,7 +196,7 @@ public:
         pd_smAll = 0xFFFF
     };
 
-    PedInstance(Ped *ped, int m);
+    PedInstance(Ped *ped, uint16 id, int m);
     ~PedInstance();
 
     //! Temporary method
index 5ce7146786768306fbed529f56a76e1944e744cb..81486a594f7a1b40733b62dd9dcc5728e6295b6d 100644 (file)
@@ -161,7 +161,7 @@ PedInstance *PedManager::loadInstance(const LevelData::People & gamdata, uint16
 
     Ped *pedanim = new Ped();
     setPed(pedanim, READ_LE_UINT16(gamdata.index_base_anim));
-    PedInstance *newped = pedanim->createInstance(map);
+    PedInstance *newped = new PedInstance(pedanim, ped_idx, map);
 
     int hp = READ_LE_INT16(gamdata.health);
     if (hp <= 0)
index eebd32e4a83ed911268b6ae2964bea8c3151d717..36e8e9e4bde2ec2fc9075025b80ea5410aedede7 100644 (file)
@@ -108,8 +108,8 @@ bool Vehicle::containsHostilesForPed(PedInstance* p,
     return false;
 }
 
-VehicleInstance::VehicleInstance(VehicleAnimation * vehicle, int m):
-    Vehicle(m, true), vehicle_(vehicle), vehicle_driver_(NULL)
+VehicleInstance::VehicleInstance(VehicleAnimation * vehicle, uint16 id, int m):
+    Vehicle(id, m, true), vehicle_(vehicle), vehicle_driver_(NULL)
 {
     hold_on_.wayFree = 0;
     rcv_damage_def_ = MapObject::ddmg_Vehicle;
index 3d0b0d8a5280ea3ca3e962143590d457687bfe8e..82554ede46c4e39798587e49d32899f94effbb1c 100644 (file)
@@ -80,7 +80,7 @@ protected:
  */
 class Vehicle : public ShootableMovableMapObject{
 public:
-    Vehicle(int m, bool drivable) : ShootableMovableMapObject(m, MapObject::kNatureVehicle) {
+    Vehicle(uint16 id, int m, bool drivable) : ShootableMovableMapObject(id, m, MapObject::kNatureVehicle) {
         isDrivable_ = drivable;
     }
 
@@ -119,7 +119,7 @@ private:
 class VehicleInstance : public Vehicle
 {
 public:
-    VehicleInstance(VehicleAnimation *vehicle, int m);
+    VehicleInstance(VehicleAnimation *vehicle, uint16 id, int m);
     virtual ~VehicleInstance() { delete vehicle_;}
 
     bool animate(int elapsed);
index f583864b8ff02da821855d0604fedbd73c24e5e7..595fd82b76f47f6b8bd1c9c1a9c4c1fa7f936bef 100644 (file)
@@ -39,6 +39,8 @@
 
 #define Z_SHIFT_TO_AIR   4
 
+uint16 WeaponInstance::weaponIdCnt = 0;
+
 Weapon::Weapon(WeaponType w_type, ConfigFile &conf)
 {
     type_ = w_type;
@@ -253,10 +255,10 @@ void Weapon::initFromConfig(WeaponType w_type, ConfigFile &conf) {
  * \return an instance of WeaponInstance
  */
 WeaponInstance *WeaponInstance::createInstance(Weapon *pWeaponClass) {
-    return new WeaponInstance(pWeaponClass);
+    return new WeaponInstance(pWeaponClass, weaponIdCnt++);
 }
 
-WeaponInstance::WeaponInstance(Weapon * w) : ShootableMapObject(-1, MapObject::kNatureWeapon),
+WeaponInstance::WeaponInstance(Weapon * w, uint16 id) : ShootableMapObject(id, -1, MapObject::kNatureWeapon),
     bombSoundTimer(w->timeReload()), bombExplosionTimer(w->timeForShot()),
     flamerTimer_(180) {
     pWeaponClass_ = w;
index 3a4945cd297c4da0f8856a9d5555ff5700bf7be6..3e7747433bf3e94b5993050425253c95ff548673 100644 (file)
@@ -302,7 +302,7 @@ public:
     //! Creates a instance for the given weapon class
     static WeaponInstance *createInstance(Weapon *pWeaponClass);
 
-    WeaponInstance(Weapon *w);
+    WeaponInstance(Weapon *w, uint16 id);
 
     /*! Sets the owner of the weapon. */
     void setOwner(PedInstance *owner) { pOwner_ = owner; }
@@ -397,6 +397,7 @@ public:
     void fire(Mission *pMission, ShootableMapObject::DamageInflictType &dmg, int elapsed);
 
 protected:
+    static uint16 weaponIdCnt;
     Weapon *pWeaponClass_;
     /*! Owner of the weapon.*/
     PedInstance *pOwner_;