| 1144 | } |
| 1145 | |
| 1146 | void levelgoals::InitLevel() { |
| 1147 | int i, j; |
| 1148 | |
| 1149 | for (i = 0; i <= Highest_object_index; i++) { |
| 1150 | if (Objects[i].type != OBJ_NONE) { |
| 1151 | Objects[i].flags &= |
| 1152 | (~(OF_INFORM_PLAYER_COLLIDE_TO_LG | OF_INFORM_PLAYER_WEAPON_COLLIDE_TO_LG | OF_INFORM_DESTROY_TO_LG)); |
| 1153 | } |
| 1154 | } |
| 1155 | |
| 1156 | for (i = 0; i <= Highest_room_index; i++) { |
| 1157 | if (Rooms[i].used) { |
| 1158 | Rooms[i].flags &= (~(RF_INFORM_RELINK_TO_LG)); |
| 1159 | } |
| 1160 | } |
| 1161 | |
| 1162 | for (i = 0; i < Num_triggers; i++) { |
| 1163 | Triggers[i].flags &= (~(TF_INFORM_ACTIVATE_TO_LG)); |
| 1164 | } |
| 1165 | |
| 1166 | for (i = 0; i < m_num_goals; i++) { |
| 1167 | int flags; |
| 1168 | m_goal[i].GetStatus(i, LO_GET_SPECIFIED, &flags); |
| 1169 | flags &= LGF_COMP_MASK; |
| 1170 | |
| 1171 | for (j = 0; j < m_goal[i].GetNumItems(); j++) { |
| 1172 | char type; |
| 1173 | int handle; |
| 1174 | bool done; |
| 1175 | |
| 1176 | m_goal[i].ItemInfo(j, LO_GET_SPECIFIED, &type, &handle, &done); |
| 1177 | |
| 1178 | switch (type) { |
| 1179 | case LIT_TERRAIN_CELL: |
| 1180 | break; |
| 1181 | case LIT_INTERNAL_ROOM: |
| 1182 | if (flags == LGF_COMP_ENTER) { |
| 1183 | if (handle >= 0 && handle <= Highest_room_index && Rooms[handle].used) { |
| 1184 | Rooms[handle].flags |= RF_INFORM_RELINK_TO_LG; |
| 1185 | } |
| 1186 | } |
| 1187 | break; |
| 1188 | case LIT_OBJECT: |
| 1189 | if (flags == LGF_COMP_PLAYER) { |
| 1190 | object *obj = ObjGet(handle); |
| 1191 | if (obj) { |
| 1192 | obj->flags |= OF_INFORM_PLAYER_COLLIDE_TO_LG; |
| 1193 | } |
| 1194 | } else if (flags == LGF_COMP_PLAYER_WEAPON) { |
| 1195 | object *obj = ObjGet(handle); |
| 1196 | if (obj) { |
| 1197 | obj->flags |= OF_INFORM_PLAYER_WEAPON_COLLIDE_TO_LG; |
| 1198 | } |
| 1199 | } else if (flags == LGF_COMP_DESTROY) { |
| 1200 | object *obj = ObjGet(handle); |
| 1201 | if (obj) { |
| 1202 | obj->flags |= OF_INFORM_DESTROY_TO_LG; |
| 1203 | } |
no test coverage detected