// ----------------------------------------------------------------------------- // This must be called at the start of each level. // If this level contains a boss and mode != multiplayer, don't do control center stuff. (Ghost out control center object.) // If this level contains a boss and mode == multiplayer, do control center stuff. void init_controlcen_for_level(void) { int i; object *objp; int cntrlcen_objnum=-1, boss_objnum=-1; for (i=0; i<=Highest_object_index; i++) { objp = &Objects[i]; if (objp->type == OBJ_CNTRLCEN) if (cntrlcen_objnum != -1) mprintf((1, "Warning: Two or more control centers including %i and %i\n", i, cntrlcen_objnum)); else cntrlcen_objnum = i; if ((objp->type == OBJ_ROBOT) && (Robot_info[objp->id].boss_flag)) { // mprintf((0, "Found boss robot %d.\n", objp->id)); if (boss_objnum != -1) mprintf((1, "Warning: Two or more bosses including %i and %i\n", i, boss_objnum)); else boss_objnum = i; } } #ifndef NDEBUG if (cntrlcen_objnum == -1) { mprintf((1, "Warning: No control center.\n")); return; } #endif if ( (boss_objnum != -1) && !((Game_mode & GM_MULTI) && !(Game_mode & GM_MULTI_ROBOTS)) ) { if (cntrlcen_objnum != -1) { // mprintf((0, "Ghosting control center\n")); Objects[cntrlcen_objnum].type = OBJ_GHOST; Objects[cntrlcen_objnum].render_type = RT_NONE; Control_center_present = 0; } } else { // Compute all gun positions. objp = &Objects[cntrlcen_objnum]; for (i=0; i<N_controlcen_guns; i++) calc_controlcen_gun_point(&Gun_pos[i], &Gun_dir[i], objp, i); Control_center_present = 1; // Boost control center strength at higher levels. if (Current_level_num >= 0) objp->shields = F1_0*200 + (F1_0*200/4) * Current_level_num; else objp->shields = F1_0*200 - Current_level_num*F1_0*100; } // Say the control center has not yet been hit. Control_center_been_hit = 0; Control_center_player_been_seen = 0; Control_center_next_fire_time = 0; Dead_controlcen_object_num = -1; }
// ----------------------------------------------------------------------------- // This must be called at the start of each level. // If this level contains a boss and mode != multiplayer, don't do control center stuff. (Ghost out control center object.) // If this level contains a boss and mode == multiplayer, do control center stuff. void init_controlcen_for_level(void) { int i; object *objp; int cntrlcen_objnum=-1, boss_objnum=-1; for (i=0; i<=Highest_object_index; i++) { objp = &Objects[i]; if (objp->type == OBJ_CNTRLCEN) { if (cntrlcen_objnum != -1) ; else cntrlcen_objnum = i; } if ((objp->type == OBJ_ROBOT) && (Robot_info[objp->id].boss_flag)) { if (boss_objnum != -1) ; else boss_objnum = i; } } #ifndef NDEBUG if (cntrlcen_objnum == -1) { Dead_controlcen_object_num = -1; return; } #endif #ifdef NETWORK if ( (boss_objnum != -1) && !((Game_mode & GM_MULTI) && !(Game_mode & GM_MULTI_ROBOTS)) ) #else if (boss_objnum != -1) #endif { if (cntrlcen_objnum != -1) { // note link to above!!! Objects[cntrlcen_objnum].type = OBJ_GHOST; Objects[cntrlcen_objnum].render_type = RT_NONE; Control_center_present = 0; } } else { // Compute all gun positions. objp = &Objects[cntrlcen_objnum]; for (i=0; i<N_controlcen_guns; i++) calc_controlcen_gun_point(&Gun_pos[i], &Gun_dir[i], objp, i); Control_center_present = 1; // Boost control center strength at higher levels. if (Current_level_num >= 0) objp->shields = F1_0*200 + (F1_0*200/4) * Current_level_num; else objp->shields = F1_0*200 - Current_level_num*F1_0*100; } // Say the control center has not yet been hit. Control_center_been_hit = 0; Control_center_player_been_seen = 0; Control_center_next_fire_time = 0; Dead_controlcen_object_num = -1; }