This tutorial is directed towards an improvement of the "Nuke" powerup, basically someone uses the powerup, the zombies take between 0.1 second to 0.7 seconds to die, in that time many times the zombie can kill the player, here is why this tutorial. In addition, another detail is corrected about the points it awards (400) when double points are active, they should be 800 but they always give 400, that is also included.
We will only work with the _zombiemod_powerups.gsc file.
Look for this function: nuke_powerup( drop_item ) and replace it with this:
nuke_powerup( drop_item ) { zombies = getaispeciesarray("axis"); location = drop_item.origin; PlayFx( drop_item.fx, location ); // BO2 STYLE NUKE ******************* players = get_players(); for(i = 0; i < players.size; i++) { players[i] EnableInvulnerability(); } // ************************************ level thread nuke_flash(); wait( 0.5 ); zombies = get_array_of_closest( location, zombies ); zombies_nuked = []; // Mark them for death for (i = 0; i < zombies.size; i++) { // already going to die if ( IsDefined(zombies[i].marked_for_death) && zombies[i].marked_for_death ) { continue; } // check for custom damage func if ( IsDefined(zombies[i].nuke_damage_func) ) { zombies[i] thread [[ zombies[i].nuke_damage_func ]](); continue; } if( is_magic_bullet_shield_enabled( zombies[i] ) ) { continue; } zombies[i].marked_for_death = true; zombies[i].nuked = true; zombies_nuked[ zombies_nuked.size ] = zombies[i]; } for (i = 0; i < zombies_nuked.size; i++) { wait (randomfloatrange(0.1, 0.7)); if( !IsDefined( zombies_nuked[i] ) ) { continue; } if( is_magic_bullet_shield_enabled( zombies_nuked[i] ) ) { continue; } if( i < 5 && !( zombies_nuked[i].isdog ) ) { zombies_nuked[i] thread animscripts\zombie_death::flame_death_fx(); zombies_nuked[i] playsound ("evt_nuked"); } if( !( zombies_nuked[i].isdog ) ) { if ( !is_true( zombies_nuked[i].no_gib ) ) { zombies_nuked[i] maps\_zombiemode_spawner::zombie_head_gib(); } zombies_nuked[i] playsound ("evt_nuked"); } zombies_nuked[i] dodamage( zombies_nuked[i].health + 666, zombies_nuked[i].origin ); } for(i = 0; i < players.size; i++) { players[i] DisableInvulnerability(); // FOR BO1 STYLE if ( level.zombie_vars["zombie_powerup_point_doubler_on"] ) { players[i] maps\_zombiemode_score::player_add_points( "nuke_powerup", 800 ); } else { players[i] maps\_zombiemode_score::player_add_points( "nuke_powerup", 400 ); } } }