Guest User

_zombiemode_powerups.gsc

a guest
Jan 7th, 2012
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.50 KB | None | 0 0
  1. #include maps\_utility;
  2. #include common_scripts\utility;
  3. #include maps\_zombiemode_utility;
  4.  
  5. init()
  6. {
  7. // powerup Vars
  8. set_zombie_var( "zombie_insta_kill", 0 );
  9. set_zombie_var( "zombie_point_scalar", 1 );
  10. set_zombie_var( "zombie_drop_item", 0 );
  11. set_zombie_var( "zombie_timer_offset", 350 ); // hud offsets
  12. set_zombie_var( "zombie_timer_offset_interval", 30 );
  13. set_zombie_var( "zombie_powerup_insta_kill_on", false );
  14. set_zombie_var( "zombie_powerup_point_doubler_on", false );
  15. set_zombie_var( "zombie_powerup_point_doubler_time", 30 ); // length of point doubler
  16. set_zombie_var( "zombie_powerup_insta_kill_time", 30 ); // length of insta kill
  17. set_zombie_var( "zombie_powerup_drop_increment", 2000 ); // lower this to make drop happen more often
  18. set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); // lower this to make drop happen more often
  19. set_zombie_var( "zombie_powerup_turrets_on", false );
  20. set_zombie_var( "zombie_powerup_turrets_time", 30 ); // length of turrets
  21. set_zombie_var( "zombie_powerup_forcefield_on", false );
  22. set_zombie_var( "zombie_powerup_forcefield_time", 30 ); // length of force fields
  23.  
  24. // powerups
  25. level._effect["powerup_on"] = loadfx( "misc/fx_zombie_powerup_on" );
  26. level._effect["powerup_grabbed"] = loadfx( "misc/fx_zombie_powerup_grab" );
  27. level._effect["powerup_grabbed_wave"] = loadfx( "misc/fx_zombie_powerup_wave" );
  28. level._effect["force_field"] = loadfx( "misc/zct_forcefield" );
  29. level._effect["force_field_emitter"] = loadfx( "misc/zct_forcefield_emitter" );
  30. level._effect["force_field_hit"] = loadfx( "misc/zct_force_hit" );
  31. level._effect[ "self_defence" ] = loadfx( "misc/zct_self_defence" );
  32.  
  33. // Define Shaders
  34. level.powerup_shaders["double_points"] = "zct_x2";
  35. level.powerup_shaders["insta_kill"] = "zct_instakill";
  36. level.powerup_shaders["force_field"] = "zct_force_field";
  37. level.powerup_shaders["turret_defence"] = "zct_turret_defence";
  38.  
  39. // Precache Overlays
  40. PrecacheShader( "zct_x2" );
  41. PrecacheShader( "zct_instakill" );
  42. //PrecacheShader( "zct_nuke" );
  43. PrecacheShader( "zct_maxammo" );
  44. PrecacheShader( "zct_force_field" );
  45. PrecacheShader( "zct_turret_defence" );
  46.  
  47. thread create_powerup_hud();
  48. level.powerup_hud_overlay = [];
  49. level.powerup = [];
  50. init_powerups();
  51. init_dont_include_powerup();
  52. init_include_powerup();
  53. thread watch_for_drop();
  54. }
  55.  
  56. init_powerups()
  57. {
  58. // Random Drops
  59. /*
  60. add_zombie_powerup( "fast_reload", "zombie_perk_bottle_sleight", "Sleight Of Hand");
  61. add_zombie_powerup( "fast_revive", "zombie_perk_bottle_sleight", "Quick Revive");
  62. add_zombie_powerup( "juggernaut", "zombie_perk_bottle_sleight", "Juggernaut");
  63. add_zombie_powerup( "fast_rof", "zombie_perk_bottle_sleight", "Double Tapp");
  64. add_zombie_powerup( "conditioning", "zombie_perk_bottle_sleight", "Quick Revive");
  65. add_zombie_powerup( "stopping_power", "zombie_perk_bottle_sleight", "Stopping Power");
  66. */
  67. // Non-Standard
  68. add_zombie_powerup( "melee_damage", "zombie_perk_bottle_sleight", "Quick Revive");
  69. add_zombie_powerup( "fast_rebuild", "zombie_perk_bottle_sleight", "Fast Rebuild");
  70. add_zombie_powerup( "self_defence", "zombie_perk_bottle_sleight", "Self Defence");
  71. add_zombie_powerup( "ammo_regen", "zombie_perk_bottle_sleight", "Ammo Regen");
  72. // Instant
  73. add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", "misc/fx_zombie_mini_nuke" );
  74. add_zombie_powerup( "full_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO");
  75. // Timed Powerups
  76. add_zombie_powerup( "force_field", "zombie_teddybear", "Force Field");
  77. add_zombie_powerup( "turret", "zombie_teddybear", "Automatic Turrets");
  78. add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL" );
  79. add_zombie_powerup( "double_points","zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS" );
  80.  
  81. }
  82.  
  83. init_include_powerup()
  84. {
  85.  
  86. //include_powerup( "fast_reload", 100 );
  87. include_powerup( "nuke", 100 );
  88. //include_powerup( "fast_revive", 100 );
  89. include_powerup( "full_ammo", 100 );
  90. //include_powerup( "juggernaut", 100 );
  91.  
  92. include_powerup( "force_field", 100 ); // 5
  93. //include_powerup( "fast_rof", 100 );
  94. include_powerup( "turret", 100 ); // 5
  95. //include_powerup( "stopping_power", 70 );
  96. include_powerup( "insta_kill", 100 ); // 15
  97. //include_powerup( "conditioning", 100 );
  98. include_powerup( "double_points", 50 ); // 15
  99. /*
  100. include_powerup( "melee_damage", 70 );
  101. include_powerup( "fast_rebuild", 100 ); //10
  102. include_powerup( "self_defence", 50 );
  103. include_powerup( "ammo_regen", 50 ); //10
  104. */
  105. }
  106.  
  107. init_dont_include_powerup()
  108. {
  109. if( !IsDefined( level.zombie_remove_powerups ) )
  110. level.zombie_remove_powerups = [];
  111. // Defined in map
  112. exclude_by_map = GetStructArray("disable_powerup","targetname"); // continue here, fetch excludes
  113. for(i=0; i<exclude_by_map.size; i++)
  114. level.zombie_remove_powerups[exclude_by_map[i].script_noteworthy] = true;
  115. // special turrets, if they aren't there, remove the powerup.
  116. turrets = GetEntArray("support_turret","targetname");
  117. if(turrets.size < 1)
  118. level.zombie_remove_powerups["turret"] = true;
  119. else
  120. {
  121. for(i=0; i<turrets.size; i++)
  122. {
  123. turrets[i] MakeTurretUnusable();
  124. }
  125. }
  126. // Force Fields
  127. forcefields = GetStructArray("force_field","targetname");
  128. if(forcefields.size < 1)
  129. level.zombie_remove_powerups["force_field"] = true;
  130. // Remove Bob The Builder if there are no blockers
  131. barricades = getstructarray( "exterior_goal", "targetname" );
  132. barricade_disable = true;
  133. for(i=0; i<barricades.size; i++)
  134. {
  135. if(IsDefined(barricades[i].target) && barricade_disable)
  136. barricade_disable = false;
  137. }
  138. if(barricade_disable)
  139. level.zombie_remove_powerups["fast_rebuild"] = true;
  140. }
  141.  
  142. include_powerup( powerup_name, weight )
  143. {
  144. if( !IsDefined( level.zombie_powerup_total_weight ) )
  145. level.zombie_powerup_total_weight = 0;
  146. if( !IsDefined( level.zombie_include_powerups ) )
  147. level.zombie_include_powerups = [];
  148. if( !IsDefined( level.zombie_remove_powerups[powerup_name] ))
  149. {
  150. level.zombie_include_powerups[powerup_name] = weight;
  151. level.zombie_powerup_total_weight = level.zombie_powerup_total_weight + weight;
  152. }
  153. }
  154.  
  155. add_zombie_powerup( powerup_name, model_name, hint, fx )
  156. {
  157. if( IsDefined( level.zombie_include_powerups ) && !IsDefined( level.zombie_include_powerups[powerup_name] ) )
  158. {
  159. return;
  160. }
  161.  
  162. PrecacheModel( model_name );
  163. PrecacheString( hint );
  164.  
  165. struct = SpawnStruct();
  166.  
  167. if( !IsDefined( level.zombie_powerups ) )
  168. {
  169. level.zombie_powerups = [];
  170. }
  171.  
  172. if( !IsDefined( level.zombie_powerup_array ) )
  173. {
  174. level.zombie_powerup_array = [];
  175. }
  176.  
  177. struct.powerup_name = powerup_name;
  178. struct.model_name = model_name;
  179. struct.weapon_classname = "script_model";
  180. struct.hint = hint;
  181.  
  182. if( IsDefined( fx ) )
  183. {
  184. struct.fx = LoadFx( fx );
  185. }
  186.  
  187. level.zombie_powerups[powerup_name] = struct;
  188. level.zombie_powerup_array[level.zombie_powerup_array.size] = powerup_name;
  189. }
  190.  
  191. get_next_powerup()
  192. {
  193. // WoO, update this to use a weight system.. pick at random.
  194. // Add failsafe for last 2 powerups dropped.. so it won't drop the same 2 in 3 powerups.
  195. powerup_random = randomint(level.zombie_powerup_total_weight);
  196. powerup = "";
  197. keys = array_randomize( GetArrayKeys(level.zombie_include_powerups) );
  198.  
  199. while(powerup == "")
  200. {
  201. for(i=0; i<keys.size; i++)
  202. {
  203. if(powerup_random < level.zombie_include_powerups[keys[i]])
  204. {
  205. powerup = keys[i];
  206. break;
  207. }
  208. else
  209. {
  210. powerup_random = powerup_random - level.zombie_include_powerups[keys[i]];
  211. }
  212. }
  213. // Done, failsafe, test.
  214. if(IsDefined(level.powerup[1]) && powerup == level.powerup[1])
  215. powerup = "";
  216. if(IsDefined(level.powerup[2]) && powerup == level.powerup[2])
  217. powerup = "";
  218. wait(0.01);
  219. }
  220. if(IsDefined(level.powerup[1]))
  221. level.powerup[2] = level.powerup[1];
  222. level.powerup[1] = powerup;
  223. return powerup;
  224. }
  225.  
  226. watch_for_drop()
  227. {
  228. players = get_players();
  229. score_to_drop = ( players.size * level.zombie_vars["zombie_score_start"] ) + level.zombie_vars["zombie_powerup_drop_increment"];
  230.  
  231. while (1)
  232. {
  233. players = get_players();
  234.  
  235. curr_total_score = 0;
  236.  
  237. for (i = 0; i < players.size; i++)
  238. {
  239. curr_total_score += players[i].score_total;
  240. }
  241.  
  242. if (curr_total_score > score_to_drop )
  243. {
  244. level.zombie_vars["zombie_powerup_drop_increment"] *= 1.05;
  245. score_to_drop = curr_total_score + level.zombie_vars["zombie_powerup_drop_increment"];
  246. // Added By WoO - Prevent Drop On Mass Kill
  247. if( !IsDefined( level.wro["disable_powerups"] ) )
  248. level.wro["disable_powerups"] = false;
  249. if( level.wro["disable_powerups"] == false )
  250. {
  251. level.zombie_vars["zombie_drop_item"] = 1;
  252. }
  253. }
  254. // WoO : Testing, Remove=============================================================================
  255. // level.zombie_vars["zombie_drop_item"] = 1;
  256. wait( 0.5 );
  257. }
  258. }
  259.  
  260. include_zombie_powerup( powerup_name )
  261. {
  262. /*
  263. OBSOLETE, BUT REFERENCED IN MAPS, DOES NOTHING
  264. ALL POWERUPS ADDED UNLESS SPECIFIED IN THE MAP ITSELF.
  265. */
  266. }
  267.  
  268. powerup_round_start()
  269. {
  270. level.powerup_drop_count = 0;
  271. }
  272.  
  273. powerup_drop(drop_point)
  274. {
  275. rand_drop = randomint(100);
  276.  
  277. if( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] )
  278. {
  279. println( "^3POWERUP DROP EXCEEDED THE MAX PER ROUND!" );
  280. return;
  281. }
  282.  
  283. // some guys randomly drop, but most of the time they check for the drop flag
  284. if (rand_drop > 2)
  285. {
  286. if (!level.zombie_vars["zombie_drop_item"])
  287. {
  288. return;
  289. }
  290. level.zombie_vars["zombie_drop_item"] = 0;
  291. debug = "score";
  292. }
  293. else
  294. {
  295. level.zombie_vars["zombie_drop_item"] = 0;
  296. debug = "random";
  297. }
  298.  
  299. // never drop unless in the playable area
  300. playable_area = getentarray("playable_area","targetname");
  301.  
  302. powerup = spawn ("script_model", drop_point + (0,0,40));
  303.  
  304. for (i = 0; i < playable_area.size; i++)
  305. {
  306. if (!powerup istouching(playable_area[i]))
  307. {
  308. powerup delete();
  309. level.zombie_vars["zombie_drop_item"] = 1;
  310. return;
  311. }
  312. }
  313.  
  314. powerup powerup_setup();
  315. level.powerup_drop_count++;
  316.  
  317. print_powerup_drop( powerup.powerup_name, debug );
  318.  
  319. powerup thread powerup_timeout();
  320. powerup thread powerup_wobble();
  321. powerup thread powerup_grab();
  322.  
  323.  
  324. }
  325.  
  326. powerup_setup()
  327. {
  328. powerup = get_next_powerup();
  329.  
  330. struct = level.zombie_powerups[powerup];
  331. self SetModel( struct.model_name );
  332.  
  333. //TUEY Spawn Powerup
  334. playsoundatposition("spawn_powerup", self.origin);
  335.  
  336. self.powerup_name = struct.powerup_name;
  337. self.hint = struct.hint;
  338.  
  339. if( IsDefined( struct.fx ) )
  340. {
  341. self.fx = struct.fx;
  342. }
  343.  
  344. self PlayLoopSound("spawn_powerup_loop");
  345. }
  346.  
  347. powerup_grab()
  348. {
  349. self endon ("powerup_timedout");
  350. self endon ("powerup_grabbed");
  351.  
  352. while (isdefined(self))
  353. {
  354. players = get_players();
  355.  
  356. for (i = 0; i < players.size; i++)
  357. {
  358. if (distance (players[i].origin, self.origin) < 64 && !(players[i].is_zombie || players[i] maps\_laststand::player_is_in_laststand() || players[i].sessionstate == "spectator"))
  359. {
  360. playfx (level._effect["powerup_grabbed"], self.origin);
  361. playfx (level._effect["powerup_grabbed_wave"], self.origin);
  362.  
  363. if( IsDefined( level.zombie_powerup_grab_func ) )
  364. {
  365. level thread [[level.zombie_powerup_grab_func]]();
  366. }
  367. else
  368. {
  369. level.zct[ "power_up_text" ] = players[i].playername;
  370. switch (self.powerup_name)
  371. {
  372. case "nuke":
  373. level thread nuke_powerup( self, players[i] );
  374. break;
  375. case "full_ammo":
  376. level thread full_ammo_powerup( self );
  377. break;
  378. case "double_points":
  379. level thread double_points_powerup( self );
  380. break;
  381. case "insta_kill":
  382. level thread insta_kill_powerup( self );
  383. break;
  384. case "turret":
  385. level thread turrets_powerup( self );
  386. break;
  387. case "force_field":
  388. level thread force_field_powerup( self, players[i] );
  389. break;
  390. /*
  391. case "fast_reload":
  392. level thread find_free_perk( players[i], "specialty_fastreload" );
  393. break;
  394. case "fast_revive":
  395. level thread find_free_perk( players[i], "specialty_quickrevive" );
  396. break;
  397. case "juggernaut":
  398. level thread find_free_perk( players[i], "specialty_armorvest" );
  399. break;
  400. case "fast_rof":
  401. level thread find_free_perk( players[i], "specialty_rof" );
  402. break;
  403. case "stopping_power":
  404. level thread find_free_perk( players[i], "specialty_bulletdamage" );
  405. break;
  406. case "conditioning":
  407. level thread find_free_perk( players[i], "specialty_longersprint" );
  408. break;
  409. case "fast_rebuild":
  410. level thread find_free_perk( players[i], "specialty_extraammo" );
  411. break;
  412. case "melee_damage":
  413. level thread find_free_perk( players[i], "specialty_quieter" );
  414. break;
  415. case "ammo_regen":
  416. level thread find_free_perk( players[i], "specialty_holdbreath" );
  417. break;
  418. case "self_defence":
  419. level thread find_free_perk( players[i], "specialty_detectexplosive" );
  420. break;
  421. */
  422. default:
  423. IPrintLN ("Unrecognized powerup.");
  424. break;
  425. }
  426. }
  427.  
  428. wait( 0.1 );
  429.  
  430. playsoundatposition("powerup_grabbed", self.origin);
  431. self stoploopsound();
  432.  
  433. self delete();
  434. self notify ("powerup_grabbed");
  435. }
  436. }
  437. wait 0.1;
  438. }
  439. }
  440.  
  441. powerup_wobble()
  442. {
  443. self endon ("powerup_grabbed");
  444. self endon ("powerup_timedout");
  445.  
  446. if (isdefined(self))
  447. {
  448. playfxontag (level._effect["powerup_on"], self, "tag_origin");
  449. }
  450.  
  451. while (isdefined(self))
  452. {
  453. waittime = randomfloatrange(2.5, 5);
  454. yaw = RandomInt( 360 );
  455. if( yaw > 300 )
  456. {
  457. yaw = 300;
  458. }
  459. else if( yaw < 60 )
  460. {
  461. yaw = 60;
  462. }
  463. yaw = self.angles[1] + yaw;
  464. self rotateto ((-60 + randomint(120), yaw, -45 + randomint(90)), waittime, waittime * 0.5, waittime * 0.5);
  465. wait randomfloat (waittime - 0.1);
  466. }
  467. }
  468.  
  469. powerup_timeout()
  470. {
  471. self endon ("powerup_grabbed");
  472.  
  473. wait 15;
  474.  
  475. for (i = 0; i < 40; i++)
  476. {
  477. // hide and show
  478. if (i % 2)
  479. {
  480. self hide();
  481. }
  482. else
  483. {
  484. self show();
  485. }
  486.  
  487. if (i < 15)
  488. {
  489. wait 0.5;
  490. }
  491. else if (i < 25)
  492. {
  493. wait 0.25;
  494. }
  495. else
  496. {
  497. wait 0.1;
  498. }
  499. }
  500.  
  501. self notify ("powerup_timedout");
  502. self delete();
  503. }
  504.  
  505. nuke_powerup( drop_item, player )
  506. {
  507. level.zct[ "power_up_image" ] = "zct_nuke";
  508. level notify( "zct_powerup_hud_change" );
  509.  
  510. zombies = getaiarray("axis");
  511.  
  512. PlayFx( drop_item.fx, drop_item.origin );
  513. level thread nuke_flash();
  514.  
  515. zombies = get_array_of_closest( drop_item.origin, zombies );
  516. for (i = 0; i < zombies.size; i++)
  517. {
  518. wait (randomfloatrange(0.1, 0.7));
  519. if( !IsDefined( zombies[i] ) )
  520. {
  521. continue;
  522. }
  523.  
  524. if( i < 5 )
  525. {
  526. zombies[i] thread animscripts\death::flame_death_fx();
  527. }
  528. player maps\_zombiemode_score::add_to_player_score( level.zombie_vars["zombie_score_damage"] * 10 * level.zombie_vars["zombie_point_scalar"] );
  529. zombies[i] maps\_zombiemode_spawner::zombie_head_gib();
  530.  
  531. zombies[i] dodamage(zombies[i].health + 666, zombies[i].origin);
  532. playsoundatposition("nuked", zombies[i].origin);
  533. }
  534. }
  535.  
  536. nuke_flash()
  537. {
  538. playsoundatposition("nuke_flash", (0,0,0));
  539.  
  540. fadetowhite = newhudelem();
  541.  
  542. fadetowhite.x = 0;
  543. fadetowhite.y = 0;
  544. fadetowhite.alpha = 0;
  545.  
  546. fadetowhite.horzAlign = "fullscreen";
  547. fadetowhite.vertAlign = "fullscreen";
  548. fadetowhite.foreground = true;
  549. fadetowhite SetShader( "white", 640, 480 );
  550.  
  551. // Fade into white
  552. fadetowhite FadeOverTime( 0.2 );
  553. fadetowhite.alpha = 0.6;
  554.  
  555. wait 0.5;
  556. fadetowhite FadeOverTime( 1.0 );
  557. fadetowhite.alpha = 0;
  558.  
  559. wait 1.1;
  560. fadetowhite destroy();
  561. }
  562.  
  563. full_ammo_powerup( drop_item )
  564. {
  565. level.zct[ "power_up_image" ] = "zct_maxammo";
  566. level notify( "zct_powerup_hud_change" );
  567.  
  568. players = get_players();
  569.  
  570. for (i = 0; i < players.size; i++)
  571. {
  572. primaryWeapons = players[i] GetWeaponsListPrimaries();
  573.  
  574. for( x = 0; x < primaryWeapons.size; x++ )
  575. {
  576. players[i] GiveMaxAmmo( primaryWeapons[x] );
  577. }
  578. }
  579. players = get_players();
  580.  
  581. for (i = 0; i < players.size; i++)
  582. {
  583. players[i] playsound ("full_ammo");
  584. }
  585. }
  586.  
  587. insta_kill_powerup( drop_item )
  588. {
  589. level.zct[ "power_up_image" ] = "zct_instakill";
  590. level notify( "zct_powerup_hud_change" );
  591.  
  592. level notify( "powerup instakill" );
  593. level endon( "powerup instakill" );
  594.  
  595. level thread insta_kill_on_hud( drop_item );
  596. level.zombie_vars["zombie_insta_kill"] = 1;
  597. wait( 30 );
  598. level.zombie_vars["zombie_insta_kill"] = 0;
  599. }
  600.  
  601. check_for_instakill( player, damage )
  602. {
  603. if( IsDefined( player ) && IsAlive( player ) && level.zombie_vars["zombie_insta_kill"])
  604. {
  605. self maps\_zombiemode_spawner::zombie_head_gib();
  606. self DoDamage( self.health + 666, self.origin, player );
  607. }
  608. // add a check here for stopping power, increase damage * 1.25
  609.  
  610. }
  611.  
  612. insta_kill_on_hud( drop_item )
  613. {
  614. self endon ("disconnect");
  615.  
  616. // check to see if this is on or not
  617. if ( level.zombie_vars["zombie_powerup_insta_kill_on"] )
  618. {
  619. // reset the time and keep going
  620. level.zombie_vars["zombie_powerup_insta_kill_time"] = 30;
  621. return;
  622. }
  623. level.zombie_vars["zombie_powerup_insta_kill_on"] = true;
  624. level thread powerup_create_hud_overlay( "insta_kill", "zombie_powerup_insta_kill_time" );
  625. level thread time_remaning_on_insta_kill_powerup();
  626.  
  627. }
  628.  
  629. time_remaning_on_insta_kill_powerup()
  630. {
  631.  
  632. temp_enta = spawn("script_origin", (0,0,0));
  633. temp_enta playloopsound("insta_kill_loop");
  634.  
  635. while ( level.zombie_vars["zombie_powerup_insta_kill_time"] >= 0)
  636. {
  637. wait 1;
  638. level.zombie_vars["zombie_powerup_insta_kill_time"] = level.zombie_vars["zombie_powerup_insta_kill_time"] - 1;
  639. }
  640.  
  641. players = get_players();
  642. for (i = 0; i < players.size; i++)
  643. {
  644. players[i] playsound("insta_kill");
  645. }
  646.  
  647. temp_enta stoploopsound(2);
  648. level.zombie_vars["zombie_powerup_insta_kill_on"] = false;
  649. level.zombie_vars["zombie_powerup_insta_kill_time"] = 30;
  650. temp_enta delete();
  651. }
  652.  
  653. // double the points
  654. double_points_powerup( drop_item )
  655. {
  656. level.zct[ "power_up_image" ] = "zct_x2";
  657. level notify( "zct_powerup_hud_change" );
  658.  
  659. level notify ("powerup points scaled");
  660. level endon ("powerup points scaled");
  661.  
  662. level thread point_doubler_on_hud( drop_item );
  663.  
  664. level.zombie_vars["zombie_point_scalar"] *= 2;
  665.  
  666. wait 30;
  667.  
  668. level.zombie_vars["zombie_point_scalar"] = 1;
  669. }
  670.  
  671. point_doubler_on_hud( drop_item )
  672. {
  673. self endon ("disconnect");
  674.  
  675. if ( level.zombie_vars["zombie_powerup_point_doubler_on"] )
  676. {
  677. level.zombie_vars["zombie_powerup_point_doubler_time"] = 30;
  678. return;
  679. }
  680.  
  681. level.zombie_vars["zombie_powerup_point_doubler_on"] = true;
  682. level thread powerup_create_hud_overlay( "double_points", "zombie_powerup_point_doubler_time" );
  683. level thread time_remaining_on_point_doubler_powerup();
  684.  
  685. }
  686.  
  687. time_remaining_on_point_doubler_powerup()
  688. {
  689.  
  690. temp_ent = spawn("script_origin", (0,0,0));
  691. temp_ent playloopsound ("double_point_loop");
  692.  
  693. while ( level.zombie_vars["zombie_powerup_point_doubler_time"] >= 0)
  694. {
  695. wait 1;
  696. level.zombie_vars["zombie_powerup_point_doubler_time"] = level.zombie_vars["zombie_powerup_point_doubler_time"] - 1;
  697. }
  698.  
  699. level.zombie_vars["zombie_powerup_point_doubler_on"] = false;
  700. players = get_players();
  701. for (i = 0; i < players.size; i++)
  702. {
  703. players[i] playsound("points_loop_off");
  704. }
  705. temp_ent stoploopsound(2);
  706.  
  707. level.zombie_vars["zombie_powerup_point_doubler_time"] = 30;
  708. temp_ent delete();
  709. }
  710.  
  711. // forcefield powerup
  712. force_field_powerup( drop_item, player )
  713. {
  714. level.zct[ "power_up_image" ] = "zct_force_field";
  715. level notify( "zct_powerup_hud_change" );
  716.  
  717. level notify ("powerup forcefield");
  718. level endon ("powerup forcefield");
  719.  
  720. level thread force_field_on_hud( drop_item, player );
  721.  
  722. wait 30;
  723. }
  724.  
  725. force_field_on_hud( drop_item, player )
  726. {
  727. self endon ("disconnect");
  728.  
  729. if ( level.zombie_vars["zombie_powerup_forcefield_on"] )
  730. {
  731. // level.zombie_vars["zombie_powerup_forcefield_time"] = 30;
  732. return;
  733. }
  734. // thread the forcefield powerup here..
  735. level thread force_field_active( player );
  736. level.zombie_vars["zombie_powerup_forcefield_on"] = true;
  737. level thread powerup_create_hud_overlay( "force_field", "zombie_powerup_forcefield_time" );
  738. level thread time_remaining_on_force_field_powerup();
  739.  
  740. }
  741.  
  742. time_remaining_on_force_field_powerup()
  743. {
  744.  
  745. temp_ent = spawn("script_origin", (0,0,0));
  746. temp_ent playloopsound ("double_point_loop");
  747.  
  748. while ( level.zombie_vars["zombie_powerup_forcefield_time"] >= 0)
  749. {
  750. wait 1;
  751. level.zombie_vars["zombie_powerup_forcefield_time"] = level.zombie_vars["zombie_powerup_forcefield_time"] - 1;
  752. }
  753.  
  754. level.zombie_vars["zombie_powerup_forcefield_on"] = false;
  755. players = get_players();
  756. for (i = 0; i < players.size; i++)
  757. {
  758. players[i] playsound("points_loop_off");
  759. }
  760. temp_ent stoploopsound(2);
  761.  
  762. level.zombie_vars["zombie_powerup_forcefield_time"] = 30;
  763. temp_ent delete();
  764. }
  765.  
  766. // All new, forcefields
  767. force_field_active( player )
  768. {
  769. activefx_field = [];
  770. activefx_emitter = [];
  771. force_field_damage = [];
  772. forcefields = GetStructArray("force_field", "targetname");
  773. for(i=0; i<forcefields.size; i++)
  774. {
  775. if(Distance( player.origin, forcefields[i].origin) < 1024)
  776. {
  777. // Rewrite cuz X was fuckin me up..
  778. // play sound FX here, once per barricade.
  779. playsoundatposition("zct_defence_barriers", forcefields[i].origin);
  780. forcefields[i] thread play_loop_sound_on_entity( "zct_barrier_hum", (0, 0, 0) );
  781. forcefields[i].active = true;
  782. activefx_field[i] = PlayLoopedFX(level._effect["force_field"],2, forcefields[i].origin, 0, AnglesToForward( forcefields[i].angles ) );
  783. force_emitter = GetEnt(forcefields[i].target,"targetname");
  784. activefx_emitter[i] = PlayLoopedFX(level._effect["force_field_emitter"],2, force_emitter.origin, 0, AnglesToForward( forcefields[i].angles ) );
  785. // spawn a trigger_radius here for monitor
  786. force_field_damage[i] = Spawn("trigger_radius", forcefields[i].origin - (0, 0, int(forcefields[i].script_noteworthy) ), 0, int(forcefields[i].script_noteworthy), int(forcefields[i].script_noteworthy)*2 );
  787. force_field_damage[i] thread force_field_monitor( player );
  788. }
  789. }
  790. wait(30); // non renewable.. by choice. if you hit a second one in a different position, it will activate a few
  791. // but we will call this a "cool down" that is required.
  792. for(i=0; i<forcefields.size; i++)
  793. {
  794. if(IsDefined(forcefields[i].active) && forcefields[i].active)
  795. {
  796. force_field_damage[i] notify("destroyed");
  797. force_field_damage[i] Delete();
  798. activefx_field[i] Delete();
  799. activefx_emitter[i] Delete();
  800. forcefields[i] thread stop_loop_sound_on_entity( "zct_barrier_hum" );
  801. }
  802. }
  803. }
  804.  
  805. force_field_monitor( player )
  806. {
  807. self endon("destroyed");
  808. afflicted = [];
  809. while(1)
  810. {
  811. ai = GetAIArray( "axis" );
  812. for(i=0; i<ai.size; i++)
  813. {
  814. ai_id = ai[i] GetEntityNumber();
  815. if(ai[i] IsTouching( self ) && !IsDefined(afflicted[ai_id]) )
  816. {
  817. // need to flag/kill phaze shifters who try to cross
  818. tmphealth = ai[i].health;
  819. if(IsDefined(ai[i].phazed) && ai[i].phazed == "1")
  820. {
  821. ai[i] notify("unphase");
  822. wait(0.2);
  823. }
  824. ai[i] DoDamage( (ai[i].health / 7), self.origin, player, "MOD_PISTOL_BULLET");
  825. // ai[i].health = ai[i].health/2;
  826. // maps\woo_toolkit::debug_print_ln("Damage, Now " + ai[i].health + " : Was " + tmphealth);
  827. afflicted[ai_id] = true;
  828. PlayFX(level._effect["force_field_hit"], ai[i].origin + (0, 0, 40) );
  829. playsoundatposition("zct_barrier_hit", ai[i].origin);
  830. // set fire?
  831. }
  832. }
  833. wait(0.01);
  834. }
  835. }
  836.  
  837. // Turrets powerup
  838. turrets_powerup( drop_item, player )
  839. {
  840. level.zct[ "power_up_image" ] = "zct_turret_defence";
  841. level notify( "zct_powerup_hud_change" );
  842.  
  843. level notify ("powerup turrets");
  844. level endon ("powerup turrets");
  845. level thread turrets_on_hud( drop_item, player );
  846.  
  847. // wait 30;
  848. }
  849.  
  850. turrets_on_hud( drop_item, player )
  851. {
  852. self endon ("disconnect");
  853.  
  854. if ( level.zombie_vars["zombie_powerup_turrets_on"] )
  855. {
  856. level.zombie_vars["zombie_powerup_turrets_time"] = 30;
  857. return;
  858. }
  859. // thread the turret powerup here..
  860. level thread turrets_active( player );
  861. level.zombie_vars["zombie_powerup_turrets_on"] = true;
  862. level thread powerup_create_hud_overlay( "turret_defence", "zombie_powerup_turrets_time" );
  863. level thread time_remaining_on_turrets_powerup();
  864.  
  865. }
  866.  
  867. time_remaining_on_turrets_powerup()
  868. {
  869.  
  870. // temp_ent = spawn("script_origin", (0,0,0));
  871. // temp_ent playloopsound ("double_point_loop");
  872.  
  873. while ( level.zombie_vars["zombie_powerup_turrets_time"] >= 0)
  874. {
  875. wait 1;
  876. level.zombie_vars["zombie_powerup_turrets_time"] = level.zombie_vars["zombie_powerup_turrets_time"] - 1;
  877. }
  878.  
  879. level.zombie_vars["zombie_powerup_turrets_on"] = false;
  880. /*players = get_players();
  881. for (i = 0; i < players.size; i++)
  882. {
  883. players[i] playsound("points_loop_off");
  884. }
  885. temp_ent stoploopsound(2);*/
  886. level notify("turrets off");
  887. level.zombie_vars["zombie_powerup_turrets_time"] = 30;
  888. // temp_ent delete();
  889. }
  890.  
  891. turrets_active(player)
  892. {
  893. turrets = GetEntArray("support_turret", "targetname");
  894. for(i=0;i<turrets.size;i++)
  895. {
  896. playsoundatposition("zct_defence_turrets", turrets[i].origin);
  897. turrets[i].script_delay_min = 0.001;
  898. turrets[i].script_delay_max = 0.005;
  899. // turrets[i].script_burst_min = 0.2;
  900. // turrets[i].script_burst_max = 0.3;
  901. turrets[i] setTurretTeam( "allies" );
  902. turrets[i] SetMode( "auto_nonai" );
  903. turrets[i] thread maps\_mgturret::burst_fire_unmanned();
  904. turrets[i] thread turret_alarm();
  905. }
  906.  
  907. level waittill("turrets off");
  908.  
  909. for(i=0;i<turrets.size;i++)
  910. {
  911. turrets[i] notify("stop_burst_fire_unmanned");
  912. turrets[i] SetMode( "manual" );
  913. turrets[i] stop_loop_sound_on_entity( "zct_turret_alarm" );
  914. }
  915. }
  916.  
  917. turret_alarm()
  918. {
  919. wait(3);
  920. self play_loop_sound_on_entity( "zct_turret_alarm", (0, 0, 0) );
  921. }
  922.  
  923. powerup_create_hud_overlay( powerup, zombievar )
  924. {
  925. // need to recreate this properly.
  926. level.powerup_hud_overlay[powerup] = create_simple_hud();
  927. level.powerup_hud_overlay[powerup].foreground = true;
  928. level.powerup_hud_overlay[powerup].sort = 2;
  929. level.powerup_hud_overlay[powerup].hidewheninmenu = false;
  930. level.powerup_hud_overlay[powerup].alignX = "right";
  931. level.powerup_hud_overlay[powerup].alignY = "top";
  932. level.powerup_hud_overlay[powerup].horzAlign = "right";
  933. level.powerup_hud_overlay[powerup].vertAlign = "top";
  934. level.powerup_hud_overlay[powerup].x = -11;
  935. level.powerup_hud_overlay[powerup].y = 35 + ((level.powerup_hud_overlay.size - 1) * 35);
  936. // level.powerup_hud_overlay[powerup].alpha = 0.8;
  937. // level.powerup_positions[powerup] = powerup_hud.size -1;
  938.  
  939.  
  940. while ( level.zombie_vars[zombievar] > 0)
  941. {
  942. level.powerup_hud_overlay[powerup].alpha = 1;
  943. level.powerup_hud_overlay[powerup] setshader(level.powerup_shaders[powerup], 32, 32);
  944.  
  945. if(level.zombie_vars[zombievar] < 5)
  946. {
  947. wait(0.1);
  948. level.powerup_hud_overlay[powerup].alpha = 0;
  949. wait(0.1);
  950. }
  951. else if(level.zombie_vars[zombievar] < 10)
  952. {
  953. wait(0.2);
  954. level.powerup_hud_overlay[powerup].alpha = 0;
  955. wait(0.18);
  956. }
  957. wait(0.05);
  958. }
  959. // remove the hud.
  960. level.powerup_hud_overlay[powerup] Destroy();
  961. level.powerup_hud_overlay[powerup] = undefined;
  962. // resort the powerup hud
  963. resort_powerup_hud_overlay();
  964.  
  965. }
  966.  
  967. resort_powerup_hud_overlay()
  968. {
  969. keys = GetArrayKeys(level.powerup_hud_overlay);
  970. for(i=0; i<keys.size; i++)
  971. {
  972. level.powerup_hud_overlay[keys[i]].y = 35 + (i * 35);
  973. }
  974. }
  975.  
  976. // -----------------------------------------------------------------------------
  977. // ---- Mike adding some crap in here for perks. ----
  978. // -----------------------------------------------------------------------------
  979. /*
  980. find_free_perk( player, preferred )
  981. {
  982. // appears they had the perk, find a free one.
  983. perk_given = "";
  984. perks_free = [];
  985. perks_available = [];
  986. if(!player HasPerk(preferred))
  987. {
  988. perk_given = preferred;
  989. }
  990. // only pick from ones that are enabled..
  991. if( !IsDefined( level.zombie_remove_powerups["fast_reload"] ))
  992. perks_available["specialty_fastreload"] = "zct_slight";
  993.  
  994. if( !IsDefined( level.zombie_remove_powerups["fast_revive"] ))
  995. perks_available["specialty_quickrevive"] = "zct_quickrevive";
  996.  
  997. if( !IsDefined( level.zombie_remove_powerups["juggernaut"] ))
  998. perks_available["specialty_armorvest"] = "zct_jugg";
  999.  
  1000. if( !IsDefined( level.zombie_remove_powerups["fast_rof"] ))
  1001. perks_available["specialty_rof"] = "zct_doubletap";
  1002.  
  1003. if( !IsDefined( level.zombie_remove_powerups["stopping_power"] ))
  1004. perks_available["specialty_bulletdamage"] = "zct_stoppower";
  1005.  
  1006. if( !IsDefined( level.zombie_remove_powerups["conditioning"] ))
  1007. perks_available["specialty_longersprint"] = "zct_extremecon";
  1008.  
  1009. if( !IsDefined( level.zombie_remove_powerups["fast_rebuild"] ))
  1010. perks_available["specialty_extraammo"] = "zct_fast_rebuild";
  1011.  
  1012. if( !IsDefined( level.zombie_remove_powerups["melee_damage"] ))
  1013. perks_available["specialty_quieter"] = "zct_melee";
  1014.  
  1015. if( !IsDefined( level.zombie_remove_powerups["ammo_regen"] ))
  1016. perks_available["specialty_holdbreath"] = "zct_ammo_regen";
  1017.  
  1018. if( !IsDefined( level.zombie_remove_powerups["self_defence"] ))
  1019. perks_available["specialty_detectexplosive"] = "zct_self_defence";
  1020.  
  1021. players = get_players();
  1022. if(perk_given == "")
  1023. {
  1024. keys = GetArrayKeys( perks_available );
  1025. for(i=0; i<keys.size; i++)
  1026. {
  1027. if(!player HasPerk( keys[i] ))
  1028. {
  1029. perks_free[keys[i]] = true;
  1030. maps\woo_toolkit::debug_print_ln(" Does Not Have " + keys[i]);
  1031. }
  1032. else
  1033. {
  1034. maps\woo_toolkit::debug_print_ln(" Has " + keys[i]);
  1035. }
  1036. }
  1037. if(perks_free.size < 1 && players.size > 1)
  1038. {
  1039. level.zct[ "power_up_image" ] = "zct_maxammo";
  1040. level.zct[ "power_up_text" ] = " Except " + player.playername + ", Perk Whore";
  1041. level notify( "zct_powerup_hud_change" );
  1042. for (i = 0; i < players.size; i++)
  1043. {
  1044. if(players[i] != player)
  1045. {
  1046. primaryWeapons = players[i] GetWeaponsListPrimaries();
  1047.  
  1048. for( x = 0; x < primaryWeapons.size; x++ )
  1049. {
  1050. players[i] GiveMaxAmmo( primaryWeapons[x] );
  1051. }
  1052. }
  1053. }
  1054. // max ammo - player, perk whore.
  1055. }
  1056. if(perks_free.size < 1 && players.size == 1)
  1057. {
  1058. if(level.zct[ "power_up_image" ] != "zct_maxammo")
  1059. {
  1060. level.zct[ "power_up_image" ] = "zct_maxammo";
  1061. level.zct[ "power_up_text" ] = player.playername;
  1062. level notify( "zct_powerup_hud_change" );
  1063. for (i = 0; i < players.size; i++)
  1064. {
  1065. primaryWeapons = players[i] GetWeaponsListPrimaries();
  1066.  
  1067. for( x = 0; x < primaryWeapons.size; x++ )
  1068. {
  1069. players[i] GiveMaxAmmo( primaryWeapons[x] );
  1070. }
  1071. }
  1072. }
  1073. }
  1074. else
  1075. {
  1076. keys = GetArrayKeys( perks_free );
  1077. perk_given = keys[ RandomInt( keys.size ) ];
  1078. }
  1079. }
  1080. if(perk_given != "")
  1081. {
  1082. player maps\_zombiemode_perks_woo::setup_perk (perk_given);
  1083. level.zct[ "power_up_image" ] = perks_available[perk_given];
  1084. level notify( "zct_powerup_hud_change" );
  1085. }
  1086. }
  1087. */
  1088.  
  1089. create_powerup_hud()
  1090. {
  1091. current_image = "";
  1092. current_text = "";
  1093.  
  1094. powerup_hud = create_simple_hud();
  1095. powerup_hud.foreground = true;
  1096. powerup_hud.sort = 2;
  1097. powerup_hud.hidewheninmenu = false;
  1098. powerup_hud.alignX = "left";
  1099. powerup_hud.alignY = "top";
  1100. powerup_hud.horzAlign = "left";
  1101. powerup_hud.vertAlign = "top";
  1102. powerup_hud.x = 70; // + (i * 15);
  1103. powerup_hud.y = 20;
  1104. powerup_hud.alpha = 0.8;
  1105.  
  1106. powerup_hud_text = create_simple_hud();
  1107. powerup_hud_text.foreground = true;
  1108. powerup_hud_text.sort = 2;
  1109. powerup_hud_text.hidewheninmenu = false;
  1110. powerup_hud_text.alignX = "left";
  1111. powerup_hud_text.alignY = "top";
  1112. powerup_hud_text.horzAlign = "left";
  1113. powerup_hud_text.vertAlign = "top";
  1114. powerup_hud_text.fontScale = 8;
  1115. powerup_hud_text.x = 92; // + (i * 15);
  1116. powerup_hud_text.y = 18;
  1117. // powerup_hud_text.alpha = 0.8;
  1118.  
  1119. while(1)
  1120. {
  1121.  
  1122. level waittill( "zct_powerup_hud_change" );
  1123.  
  1124. if( IsDefined( level.zct[ "power_up_image" ] ) )
  1125. {
  1126. powerup_hud.alpha = 1;
  1127. powerup_hud setshader(level.zct[ "power_up_image" ], 16, 16);
  1128. }
  1129. if( IsDefined( level.zct[ "power_up_text" ] ) )
  1130. {
  1131. powerup_hud_text.label = level.zct[ "power_up_text" ];
  1132. }
  1133. wait(0.05);
  1134. }
  1135. }
  1136. //
  1137. // DEBUG
  1138. //
  1139.  
  1140. print_powerup_drop( powerup, type )
  1141. {
  1142. /#
  1143. if( !IsDefined( level.powerup_drop_time ) )
  1144. {
  1145. level.powerup_drop_time = 0;
  1146. level.powerup_random_count = 0;
  1147. level.powerup_score_count = 0;
  1148. }
  1149.  
  1150. time = ( GetTime() - level.powerup_drop_time ) * 0.001;
  1151. level.powerup_drop_time = GetTime();
  1152.  
  1153. if( type == "random" )
  1154. {
  1155. level.powerup_random_count++;
  1156. }
  1157. else
  1158. {
  1159. level.powerup_score_count++;
  1160. }
  1161.  
  1162. println( "========== POWER UP DROPPED ==========" );
  1163. println( "DROPPED: " + powerup );
  1164. println( "HOW IT DROPPED: " + type );
  1165. println( "--------------------" );
  1166. println( "Drop Time: " + time );
  1167. println( "Random Powerup Count: " + level.powerup_random_count );
  1168. println( "Random Powerup Count: " + level.powerup_score_count );
  1169. println( "======================================" );
  1170. #/
  1171. }
Advertisement
Add Comment
Please, Sign In to add comment