| 4098 | } |
| 4099 | |
| 4100 | Object *AddObject(_object_id objType, Point objPos) |
| 4101 | { |
| 4102 | if (ActiveObjectCount >= MAXOBJECTS) |
| 4103 | return nullptr; |
| 4104 | |
| 4105 | int oi = AvailableObjects[0]; |
| 4106 | AvailableObjects[0] = AvailableObjects[MAXOBJECTS - 1 - ActiveObjectCount]; |
| 4107 | ActiveObjects[ActiveObjectCount] = oi; |
| 4108 | dObject[objPos.x][objPos.y] = oi + 1; |
| 4109 | Object &object = Objects[oi]; |
| 4110 | SetupObject(object, objPos, objType); |
| 4111 | switch (object._otype) { |
| 4112 | case OBJ_L1LDOOR: |
| 4113 | case OBJ_L1RDOOR: |
| 4114 | case OBJ_L2LDOOR: |
| 4115 | case OBJ_L2RDOOR: |
| 4116 | case OBJ_L3LDOOR: |
| 4117 | case OBJ_L3RDOOR: |
| 4118 | case OBJ_L5LDOOR: |
| 4119 | case OBJ_L5RDOOR: |
| 4120 | AddDoor(object); |
| 4121 | break; |
| 4122 | case OBJ_BOOK2R: |
| 4123 | object.InitializeBook({ SetPiece.position, WorldTileSize(SetPiece.size.width + 1, SetPiece.size.height + 1) }); |
| 4124 | break; |
| 4125 | case OBJ_CHEST1: |
| 4126 | case OBJ_CHEST2: |
| 4127 | case OBJ_CHEST3: |
| 4128 | AddChest(object); |
| 4129 | break; |
| 4130 | case OBJ_TCHEST1: |
| 4131 | case OBJ_TCHEST2: |
| 4132 | case OBJ_TCHEST3: |
| 4133 | AddChest(object); |
| 4134 | object._oTrapFlag = true; |
| 4135 | if (leveltype == DTYPE_CATACOMBS) { |
| 4136 | object._oVar4 = GenerateRnd(2); |
| 4137 | } else { |
| 4138 | object._oVar4 = GenerateRnd(3); |
| 4139 | } |
| 4140 | break; |
| 4141 | case OBJ_SARC: |
| 4142 | case OBJ_L5SARC: |
| 4143 | AddSarcophagus(object); |
| 4144 | break; |
| 4145 | case OBJ_FLAMEHOLE: |
| 4146 | AddFlameTrap(object); |
| 4147 | break; |
| 4148 | case OBJ_FLAMELVR: |
| 4149 | AddFlameLever(object); |
| 4150 | break; |
| 4151 | case OBJ_WATER: |
| 4152 | object._oAnimFrame = 1; |
| 4153 | break; |
| 4154 | case OBJ_TRAPL: |
| 4155 | case OBJ_TRAPR: |
| 4156 | AddTrap(object); |
| 4157 | break; |
no test coverage detected