Advertisement
TehMerkMods

zm_powerups BO2 GSC

Apr 21st, 2015
1,044
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 59.01 KB | None | 0 0
  1. /*Here is a list
  2. case "all_revive":
  3.         case "bonfire_sale":
  4.         case "bonus_points_player":
  5.         case "bonus_points_team":
  6.         case "carpenter":
  7.         case "dog":
  8.         case "double_points":
  9.         case "empty_clip":
  10.         case "fire_sale":
  11.         case "free_perk":
  12.         case "full_ammo":
  13.         case "insta_kill":
  14.         case "lose_perk":
  15.         case "lose_points_team":
  16.         case "minigun":
  17.         case "nuke":
  18.         case "random_weapon":
  19.         case "tesla":
  20.  
  21.  
  22. More info below
  23. */
  24.  
  25.  
  26. #include maps\mp\zombies\_zm_melee_weapon;
  27. #include maps\mp\zombies\_zm_weapons;
  28. #include maps\mp\zombies\_zm_perks;
  29. #include maps\mp\gametypes_zm\_hud_util;
  30. #include maps\mp\zombies\_zm_pers_upgrades_functions;
  31. #include maps\mp\zombies\_zm_spawner;
  32. #include maps\mp\animscripts\zm_death;
  33. #include maps\mp\zombies\_zm_score;
  34. #include maps\mp\zombies\_zm_powerups;
  35. #include maps\mp\zombies\_zm_blockers;
  36. #include maps\mp\zombies\_zm_audio_announcer;
  37. #include maps\mp\zombies\_zm_stats;
  38. #include maps\mp\zombies\_zm_pers_upgrades;
  39. #include maps\mp\zombies\_zm_laststand;
  40. #include maps\mp\_demo;
  41. #include maps\mp\zombies\_zm_magicbox;
  42. #include maps\mp\zombies\_zm_audio;
  43. #include maps\mp\zombies\_zm_net;
  44. #include maps\mp\zombies\_zm_utility;
  45. #include maps\mp\_utility;
  46. #include common_scripts\utility;
  47.  
  48.  
  49. // 0x3440
  50. init()
  51. {
  52.     precacheshader( "specialty_doublepoints_zombies" );
  53.     precacheshader( "specialty_instakill_zombies" );
  54.     precacheshader( "specialty_firesale_zombies" );
  55.     precacheshader( "zom_icon_bonfire" );
  56.     precacheshader( "zom_icon_minigun" );
  57.     precacheshader( "black" );
  58.     set_zombie_var( "zombie_insta_kill", 0, undefined, undefined, 1 );
  59.     set_zombie_var( "zombie_point_scalar", 1, undefined, undefined, 1 );
  60.     set_zombie_var( "zombie_drop_item", 0 );
  61.     set_zombie_var( "zombie_timer_offset", 350 );
  62.     set_zombie_var( "zombie_timer_offset_interval", 30 );
  63.     set_zombie_var( "zombie_powerup_fire_sale_on", 0 );
  64.     set_zombie_var( "zombie_powerup_fire_sale_time", 30 );
  65.     set_zombie_var( "zombie_powerup_bonfire_sale_on", 0 );
  66.     set_zombie_var( "zombie_powerup_bonfire_sale_time", 30 );
  67.     set_zombie_var( "zombie_powerup_insta_kill_on", 0, undefined, undefined, 1 );
  68.     set_zombie_var( "zombie_powerup_insta_kill_time", 30, undefined, undefined, 1 );
  69.     set_zombie_var( "zombie_powerup_point_doubler_on", 0, undefined, undefined, 1 );
  70.     set_zombie_var( "zombie_powerup_point_doubler_time", 30, undefined, undefined, 1 );
  71.     set_zombie_var( "zombie_powerup_drop_increment", 2000 );
  72.     set_zombie_var( "zombie_powerup_drop_max_per_round", 4 );
  73.     onplayerconnect_callback( ::init_player_zombie_vars );
  74.     level._effect["powerup_on"] = loadfx( "misc/fx_zombie_powerup_on" );
  75.     level._effect["powerup_off"] = loadfx( "misc/fx_zombie_powerup_off" );
  76.     level._effect["powerup_grabbed"] = loadfx( "misc/fx_zombie_powerup_grab" );
  77.     level._effect["powerup_grabbed_wave"] = loadfx( "misc/fx_zombie_powerup_wave" );
  78.     level._effect["powerup_on_red"] = loadfx( "misc/fx_zombie_powerup_on_red" );
  79.     level._effect["powerup_grabbed_red"] = loadfx( "misc/fx_zombie_powerup_red_grab" );
  80.     level._effect["powerup_grabbed_wave_red"] = loadfx( "misc/fx_zombie_powerup_red_wave" );
  81.     level._effect["powerup_on_solo"] = loadfx( "misc/fx_zombie_powerup_solo_on" );
  82.     level._effect["powerup_grabbed_solo"] = loadfx( "misc/fx_zombie_powerup_solo_grab" );
  83.     level._effect["powerup_grabbed_wave_solo"] = loadfx( "misc/fx_zombie_powerup_solo_wave" );
  84.     level._effect["powerup_on_caution"] = loadfx( "misc/fx_zombie_powerup_caution_on" );
  85.     level._effect["powerup_grabbed_caution"] = loadfx( "misc/fx_zombie_powerup_caution_grab" );
  86.     level._effect["powerup_grabbed_wave_caution"] = loadfx( "misc/fx_zombie_powerup_caution_wave" );
  87.     init_powerups();
  88.     return;
  89.     thread watch_for_drop();
  90.     thread setup_firesale_audio();
  91.     thread setup_bonfiresale_audio();
  92.     level.use_new_carpenter_func = ::start_carpenter_new;
  93.     level.board_repair_distance_squared = 562500;
  94. // SP = 0x0 - check OK
  95. }
  96.  
  97. // 0x36EC
  98. init_powerups()
  99. {
  100.     flag_init( "zombie_drop_powerups" );
  101.     flag_set( "zombie_drop_powerups" );
  102.     level.active_powerups = [];
  103.     level.zombie_powerup_array = [];
  104.     level.zombie_special_drop_array = [];
  105.     add_zombie_powerup( "nuke", "zombie_bomb", &"ZOMBIE_POWERUP_NUKE", ::func_should_always_drop, 0, 0, 0, "misc/fx_zombie_mini_nuke_hotness" );
  106.     add_zombie_powerup( "insta_kill", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_instant_kill", "zombie_powerup_insta_kill_time", "zombie_powerup_insta_kill_on" );
  107.     add_zombie_powerup( "full_ammo", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_always_drop, 0, 0, 0 );
  108.     add_zombie_powerup( "double_points", "zombie_x2_icon", &"ZOMBIE_POWERUP_DOUBLE_POINTS", ::func_should_always_drop, 0, 0, 0, undefined, "powerup_double_points", "zombie_powerup_point_doubler_time", "zombie_powerup_point_doubler_on" );
  109.     add_zombie_powerup( "carpenter", "zombie_carpenter", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_carpenter, 0, 0, 0 );
  110.     add_zombie_powerup( "fire_sale", "zombie_firesale", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_drop_fire_sale, 0, 0, 0, undefined, "powerup_fire_sale", "zombie_powerup_fire_sale_time", "zombie_powerup_fire_sale_on" );
  111.     add_zombie_powerup( "bonfire_sale", "zombie_pickup_bonfire", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 0, undefined, "powerup_bon_fire", "zombie_powerup_bonfire_sale_time", "zombie_powerup_bonfire_sale_on" );
  112.     add_zombie_powerup( "minigun", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_drop_minigun, 1, 0, 0, undefined, "powerup_mini_gun", "zombie_powerup_minigun_time", "zombie_powerup_minigun_on" );
  113.     add_zombie_powerup( "free_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_FREE_PERK", ::func_should_never_drop, 0, 0, 0 );
  114.     add_zombie_powerup( "tesla", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MINIGUN", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_tesla", "zombie_powerup_tesla_time", "zombie_powerup_tesla_on" );
  115.     add_zombie_powerup( "random_weapon", "zombie_pickup_minigun", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 1, 0, 0 );
  116.     add_zombie_powerup( "bonus_points_player", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 1, 0, 0 );
  117.     add_zombie_powerup( "bonus_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_BONUS_POINTS", ::func_should_never_drop, 0, 0, 0 );
  118.     add_zombie_powerup( "lose_points_team", "zombie_z_money_icon", &"ZOMBIE_POWERUP_LOSE_POINTS", ::func_should_never_drop, 0, 0, 1 );
  119.     add_zombie_powerup( "lose_perk", "zombie_pickup_perk_bottle", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 );
  120.     add_zombie_powerup( "empty_clip", "zombie_ammocan", &"ZOMBIE_POWERUP_MAX_AMMO", ::func_should_never_drop, 0, 0, 1 );
  121.     add_zombie_powerup( "insta_kill_ug", "zombie_skull", &"ZOMBIE_POWERUP_INSTA_KILL", ::func_should_never_drop, 1, 0, 0, undefined, "powerup_instant_kill_ug", "zombie_powerup_insta_kill_ug_time", "zombie_powerup_insta_kill_ug_on", 5000 );
  122.     [[level.level_specific_init_powerups]]();
  123.     randomize_powerups();
  124.     level.zombie_powerup_index = 0;
  125.     randomize_powerups();
  126.     level.rare_powerups_active = 0;
  127.     level.firesale_vox_firstime = 0;
  128.     level thread powerup_hud_monitor();
  129.     [[level.quantum_bomb_register_result_func]]( "random_powerup", ::quantum_bomb_random_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func );
  130.     [[level.quantum_bomb_register_result_func]]( "random_zombie_grab_powerup", ::quantum_bomb_random_zombie_grab_powerup_result, 5, level.quantum_bomb_in_playable_area_validation_func );
  131.     [[level.quantum_bomb_register_result_func]]( "random_weapon_powerup", ::quantum_bomb_random_weapon_powerup_result, 60, level.quantum_bomb_in_playable_area_validation_func );
  132.     [[level.quantum_bomb_register_result_func]]( "random_bonus_or_lose_points_powerup", ::quantum_bomb_random_bonus_or_lose_points_powerup_result, 25, level.quantum_bomb_in_playable_area_validation_func );
  133.     registerclientfield( "scriptmover", "powerup_fx", 1000, 3, "int" );
  134. // SP = 0x0 - check OK
  135. }
  136.  
  137. // 0x3A90
  138. init_player_zombie_vars()
  139. {
  140.     self.zombie_vars["zombie_powerup_minigun_on"] = 0;
  141.     self.zombie_vars["zombie_powerup_minigun_time"] = 0;
  142.     self.zombie_vars["zombie_powerup_tesla_on"] = 0;
  143.     self.zombie_vars["zombie_powerup_tesla_time"] = 0;
  144.     self.zombie_vars["zombie_powerup_insta_kill_ug_on"] = 0;
  145.     self.zombie_vars["zombie_powerup_insta_kill_ug_time"] = 18;
  146. // SP = 0x0 - check OK
  147. }
  148.  
  149. // 0x3AD8
  150. set_weapon_ignore_max_ammo( str_weapon )
  151. {
  152.     level.zombie_weapons_no_max_ammo = [];
  153.     level.zombie_weapons_no_max_ammo[str_weapon] = 1;
  154. // SP = 0x0 - check OK
  155. }
  156.  
  157. // 0x3AFC
  158. powerup_hud_monitor()
  159. {
  160.     flag_wait( "start_zombie_round_logic" );
  161.     return;
  162.     flashing_timers = [];
  163.     flashing_values = [];
  164.     flashing_timer = 10;
  165.     flashing_delta_time = 0;
  166.     flashing_is_on = 0;
  167.     flashing_value = 3;
  168.     flashing_min_timer = 0.15;
  169.     flashing_delta_time = 0.1;
  170.     flashing_delta_time = 0.2;
  171.     flashing_timer = flashing_timer - flashing_delta_time - 0.05;
  172.     flashing_value = 2;
  173.     flashing_timer -= flashing_delta_time;
  174.     flashing_value = 3;
  175.     flashing_timers[flashing_timers.size] = flashing_timer;
  176.     flashing_values[flashing_values.size] = flashing_value;
  177.     flashing_is_on = !(flashing_is_on);
  178.     client_fields = [];
  179.     powerup_keys = getarraykeys( level.zombie_powerups );
  180.     powerup_key_index = 0;
  181.     powerup_name = powerup_keys[powerup_key_index];
  182.     client_fields[powerup_name] = spawnstruct();
  183.     client_fields[powerup_name].client_field_name = level.zombie_powerups[powerup_name].client_field_name;
  184.     client_fields[powerup_name].solo = level.zombie_powerups[powerup_name].solo;
  185.     client_fields[powerup_name].time_name = level.zombie_powerups[powerup_name].time_name;
  186.     client_fields[powerup_name].on_name = level.zombie_powerups[powerup_name].on_name;
  187.     powerup_key_index++;
  188.     client_field_keys = getarraykeys( client_fields );
  189.     wait 0.05;
  190.     waittillframeend;
  191.     players = get_players();
  192.     playerindex = 0;
  193.     client_field_key_index = 0;
  194.     player = players[playerindex];
  195. /#
  196. #/
  197.     client_field_name = client_fields[client_field_keys[client_field_key_index]].client_field_name;
  198.     time_name = client_fields[client_field_keys[client_field_key_index]].time_name;
  199.     on_name = client_fields[client_field_keys[client_field_key_index]].on_name;
  200.     powerup_timer = undefined;
  201.     powerup_on = undefined;
  202.     powerup_timer = player.zombie_vars[time_name];
  203.     powerup_on = player.zombie_vars[on_name];
  204.     powerup_timer = level.zombie_vars[player.team][time_name];
  205.     powerup_on = level.zombie_vars[player.team][on_name];
  206.     powerup_timer = level.zombie_vars[time_name];
  207.     powerup_on = level.zombie_vars[on_name];
  208.     player set_clientfield_powerups( client_field_name, powerup_timer, powerup_on, flashing_timers, flashing_values );
  209.     player setclientfieldtoplayer( client_field_name, 0 );
  210.     client_field_key_index++;
  211.     playerindex++;
  212. // SP = 0x0 - check OK
  213. }
  214.  
  215. // 0x3E30
  216. set_clientfield_powerups( clientfield_name, powerup_timer, powerup_on, flashing_timers, flashing_values )
  217. {
  218.     flashing_value = 3;
  219.     i = flashing_timers.size - 1;
  220.     flashing_value = flashing_values[i];
  221.     i--;
  222.     self setclientfieldtoplayer( clientfield_name, flashing_value );
  223.     self setclientfieldtoplayer( clientfield_name, 1 );
  224.     self setclientfieldtoplayer( clientfield_name, 0 );
  225. // SP = 0x0 - check OK
  226. }
  227.  
  228. // 0x3EB8
  229. randomize_powerups()
  230. {
  231.     level.zombie_powerup_array = array_randomize( level.zombie_powerup_array );
  232. // SP = 0x0 - check OK
  233. }
  234.  
  235. // 0x3ED0
  236. get_next_powerup()
  237. {
  238.     powerup = level.zombie_powerup_array[level.zombie_powerup_index];
  239.     level.zombie_powerup_index++;
  240.     level.zombie_powerup_index = 0;
  241.     randomize_powerups();
  242.     return powerup;
  243. // SP = 0x0 - check OK
  244. }
  245.  
  246. // 0x3F0C
  247. get_valid_powerup()
  248. {
  249. /#
  250.     return level.zombie_powerup_array[level.zombie_powerup_index];
  251. #/
  252.     i = level.zombie_powerup_boss;
  253.     level.zombie_powerup_boss = undefined;
  254.     return level.zombie_powerup_array[i];
  255.     powerup = level.zombie_powerup_ape;
  256.     level.zombie_powerup_ape = undefined;
  257.     return powerup;
  258.     powerup = get_next_powerup();
  259.     powerup = get_next_powerup();
  260.     return powerup;
  261. // SP = 0x0 - check OK
  262. }
  263.  
  264. // 0x3FA4
  265. minigun_no_drop()
  266. {
  267.     players = get_players();
  268.     i = 0;
  269.     return 1;
  270.     i++;
  271.     return 1;
  272.     return 1;
  273.     return 0;
  274. // SP = 0x0 - check OK
  275. }
  276.  
  277. // 0x4020
  278. get_num_window_destroyed()
  279. {
  280.     num = 0;
  281.     i = 0;
  282.     num += 1;
  283.     i++;
  284.     return num;
  285. // SP = 0x0 - check OK
  286. }
  287.  
  288. // 0x4074
  289. watch_for_drop()
  290. {
  291.     flag_wait( "start_zombie_round_logic" );
  292.     flag_wait( "begin_spawning" );
  293.     players = get_players();
  294.     score_to_drop = players.size * level.zombie_vars["zombie_score_start_" + players.size + "p"] + level.zombie_vars["zombie_powerup_drop_increment"];
  295.     flag_wait( "zombie_drop_powerups" );
  296.     players = get_players();
  297.     curr_total_score = 0;
  298.     i = 0;
  299.     curr_total_score += players[i].score_total;
  300.     i++;
  301.     level.zombie_vars["zombie_powerup_drop_increment"] *= 1.14;
  302.     score_to_drop = curr_total_score + level.zombie_vars["zombie_powerup_drop_increment"];
  303.     level.zombie_vars["zombie_drop_item"] = 1;
  304.     wait 0.5;
  305. // SP = 0x0 - check OK
  306. }
  307.  
  308. // 0x4164
  309. add_zombie_powerup( powerup_name, model_name, hint, func_should_drop_with_regular_powerups, solo, caution, zombie_grabbable, fx, client_field_name, time_name, on_name, clientfield_version )
  310. {
  311.     clientfield_version = 1;
  312.     return;
  313.     precachemodel( model_name );
  314.     precachestring( hint );
  315.     struct = spawnstruct();
  316.     level.zombie_powerups = [];
  317.     struct.powerup_name = powerup_name;
  318.     struct.model_name = model_name;
  319.     struct.weapon_classname = "script_model";
  320.     struct.hint = hint;
  321.     struct.func_should_drop_with_regular_powerups = func_should_drop_with_regular_powerups;
  322.     struct.solo = solo;
  323.     struct.caution = caution;
  324.     struct.zombie_grabbable = zombie_grabbable;
  325.     struct.fx = loadfx( fx );
  326.     level.zombie_powerups[powerup_name] = struct;
  327.     level.zombie_powerup_array[level.zombie_powerup_array.size] = powerup_name;
  328.     add_zombie_special_drop( powerup_name );
  329.     registerclientfield( "toplayer", client_field_name, clientfield_version, 2, "int" );
  330.     struct.client_field_name = client_field_name;
  331.     struct.time_name = time_name;
  332.     struct.on_name = on_name;
  333. // SP = 0x0 - check OK
  334. }
  335.  
  336. // 0x42A8
  337. powerup_set_can_pick_up_in_last_stand( powerup_name, b_can_pick_up )
  338. {
  339.     level.zombie_powerups[powerup_name].can_pick_up_in_last_stand = b_can_pick_up;
  340. // SP = 0x0 - check OK
  341. }
  342.  
  343. // 0x42C4
  344. add_zombie_special_drop( powerup_name )
  345. {
  346.     level.zombie_special_drop_array[level.zombie_special_drop_array.size] = powerup_name;
  347. // SP = 0x0 - check OK
  348. }
  349.  
  350. // 0x42DC
  351. include_zombie_powerup( powerup_name )
  352. {
  353.     level.zombie_include_powerups = [];
  354.     level.zombie_include_powerups[powerup_name] = 1;
  355. // SP = 0x0 - check OK
  356. }
  357.  
  358. // 0x4300
  359. powerup_round_start()
  360. {
  361.     level.powerup_drop_count = 0;
  362. // SP = 0x0 - check OK
  363. }
  364.  
  365. // 0x430C
  366. powerup_drop( drop_point )
  367. {
  368. /#
  369.     println( "^3POWERUP DROP EXCEEDED THE MAX PER ROUND!" );
  370. #/
  371.     return;
  372.     return;
  373.     rand_drop = randomint( 100 );
  374.     return;
  375.     debug = "score";
  376.     debug = "random";
  377.     playable_area = getentarray( "player_volume", "script_noteworthy" );
  378.     level.powerup_drop_count++;
  379.     powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vector_scale( ( 0, 0, 1 ), 40 ) );
  380.     valid_drop = 0;
  381.     i = 0;
  382.     valid_drop = 1;
  383.     i++;
  384.     pos = ( drop_point[0], drop_point[1], drop_point[2] + 42 );
  385.     level.zombie_vars["zombie_drop_item"] = 0;
  386.     valid_drop = 0;
  387.     level.powerup_drop_count--;
  388.     powerup delete();
  389.     return;
  390.     powerup powerup_setup();
  391.     print_powerup_drop( powerup.powerup_name, debug );
  392.     powerup thread powerup_timeout();
  393.     powerup thread powerup_wobble();
  394.     powerup thread powerup_grab();
  395.     powerup thread powerup_move();
  396.     powerup thread powerup_emp();
  397.     level.zombie_vars["zombie_drop_item"] = 0;
  398.     level notify( "powerup_dropped", powerup );
  399. // SP = 0x0 - check OK
  400. }
  401.  
  402. // 0x44BC
  403. specific_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location )
  404. {
  405.     powerup = maps\mp\zombies\_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vector_scale( ( 0, 0, 1 ), 40 ) );
  406.     level notify( "powerup_dropped", powerup );
  407.     powerup powerup_setup( powerup_name, powerup_team, powerup_location );
  408.     powerup thread powerup_timeout();
  409.     powerup thread powerup_wobble();
  410.     powerup thread powerup_grab( powerup_team );
  411.     powerup thread powerup_move();
  412.     powerup thread powerup_emp();
  413.     return powerup;
  414. // SP = 0x0 - check OK
  415. }
  416.  
  417. // 0x4550
  418. quantum_bomb_random_powerup_result( position )
  419. {
  420.     return;
  421.     keys = getarraykeys( level.zombie_include_powerups );
  422.     index = randomint( keys.size );
  423.     skip = 0;
  424.     switch ( keys[index] )
  425.     {
  426.         case "bonfire_sale":
  427.         case "bonus_points_player":
  428.         case "bonus_points_team":
  429.             skip = 1;
  430.             break;
  431.         case "fire_sale":
  432.         case "free_perk":
  433.         case "full_ammo":
  434.         case "insta_kill":
  435.             skip = 1;
  436.             break;
  437.         case "minigun":
  438.         case "random_weapon":
  439.         case "tesla":
  440.             skip = 1;
  441.             break;
  442.         default:
  443.     }
  444.     arrayremovevalue( keys, keys[index] );
  445.     self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" );
  446.     [[level.quantum_bomb_play_player_effect_at_position_func]]( position );
  447.     level specific_powerup_drop( keys[index], position );
  448.     return;
  449.     arrayremovevalue( keys, keys[index] );
  450. // SP = 0x0 - check OK
  451. }
  452.  
  453. // 0x46B0
  454. quantum_bomb_random_zombie_grab_powerup_result( position )
  455. {
  456.     return;
  457.     keys = getarraykeys( level.zombie_include_powerups );
  458.     index = randomint( keys.size );
  459.     self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_bad" );
  460.     [[level.quantum_bomb_play_player_effect_at_position_func]]( position );
  461.     level specific_powerup_drop( keys[index], position );
  462.     return;
  463.     arrayremovevalue( keys, keys[index] );
  464. // SP = 0x0 - check OK
  465. }
  466.  
  467. // 0x4750
  468. quantum_bomb_random_weapon_powerup_result( position )
  469. {
  470.     self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_good" );
  471.     [[level.quantum_bomb_play_player_effect_at_position_func]]( position );
  472.     level specific_powerup_drop( "random_weapon", position );
  473. // SP = 0x0 - check OK
  474. }
  475.  
  476. // 0x4788
  477. quantum_bomb_random_bonus_or_lose_points_powerup_result( position )
  478. {
  479.     rand = randomint( 10 );
  480.     powerup = "bonus_points_team";
  481.     switch ( rand )
  482.     {
  483.         case 0:
  484.         case 1:
  485.             powerup = "lose_points_team";
  486.             self thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "kill", "quant_bad" );
  487.             break;
  488.         case 2:
  489.         case 3:
  490.         case 4:
  491.             powerup = "bonus_points_player";
  492.             break;
  493.         default:
  494.             powerup = "bonus_points_team";
  495.             break;
  496.     }
  497.     [[level.quantum_bomb_play_player_effect_at_position_func]]( position );
  498.     level specific_powerup_drop( powerup, position );
  499. // SP = 0x0 - check OK
  500. }
  501.  
  502. // 0x484C
  503. special_powerup_drop( drop_point )
  504. {
  505.     return;
  506.     powerup = spawn( "script_model", drop_point + vector_scale( ( 0, 0, 1 ), 40 ) );
  507.     playable_area = getentarray( "player_volume", "script_noteworthy" );
  508.     valid_drop = 0;
  509.     i = 0;
  510.     valid_drop = 1;
  511.     i++;
  512.     powerup delete();
  513.     return;
  514.     powerup special_drop_setup();
  515. // SP = 0x0 - check OK
  516. }
  517.  
  518. // 0x48F8
  519. cleanup_random_weapon_list()
  520. {
  521.     self waittill( "death" );
  522.     arrayremovevalue( level.random_weapon_powerups, self );
  523. // SP = 0x0 - check OK
  524. }
  525.  
  526. // 0x4914
  527. powerup_setup( powerup_override, powerup_team, powerup_location )
  528. {
  529.     powerup = undefined;
  530.     powerup = get_valid_powerup();
  531.     powerup = powerup_override;
  532.     powerup = "minigun";
  533.     struct = level.zombie_powerups[powerup];
  534.     players = get_players();
  535.     self.weapon = maps\mp\zombies\_zm_magicbox::treasure_chest_chooseweightedrandomweapon( players[0] );
  536. /#
  537.     weapon = GetDvar( #"0x45ED7744" );
  538.     self.weapon = weapon;
  539.     setdvar( "scr_force_weapon", "" );
  540. #/
  541.     self.base_weapon = self.weapon;
  542.     level.random_weapon_powerups = [];
  543.     level.random_weapon_powerups[level.random_weapon_powerups.size] = self;
  544.     self thread cleanup_random_weapon_list();
  545.     self.weapon = level.zombie_weapons[self.weapon].upgrade_name;
  546.     self setmodel( getweaponmodel( self.weapon ) );
  547.     self useweaponhidetags( self.weapon );
  548.     offsetdw = vector_scale( ( 1, 1, 1 ), 3 );
  549.     self.worldgundw = undefined;
  550.     self.worldgundw = spawn( "script_model", self.origin + offsetdw );
  551.     self.worldgundw.angles = self.angles;
  552.     self.worldgundw setmodel( maps\mp\zombies\_zm_magicbox::get_left_hand_weapon_model_name( self.weapon ) );
  553.     self.worldgundw useweaponhidetags( self.weapon );
  554.     self.worldgundw linkto( self, "tag_weapon", offsetdw, ( 0, 0, 0 ) );
  555.     self setmodel( struct.model_name );
  556.     maps\mp\_demo::bookmark( "zm_powerup_dropped", GetTime(), undefined, undefined, 1 );
  557.     playsoundatposition( "zmb_spawn_powerup", self.origin );
  558.     self.powerup_team = powerup_team;
  559.     self.powerup_location = powerup_location;
  560.     self.powerup_name = struct.powerup_name;
  561.     self.hint = struct.hint;
  562.     self.solo = struct.solo;
  563.     self.caution = struct.caution;
  564.     self.zombie_grabbable = struct.zombie_grabbable;
  565.     self.func_should_drop_with_regular_powerups = struct.func_should_drop_with_regular_powerups;
  566.     self.fx = struct.fx;
  567.     self.can_pick_up_in_last_stand = struct.can_pick_up_in_last_stand;
  568.     self playloopsound( "zmb_spawn_powerup_loop" );
  569.     level.active_powerups[level.active_powerups.size] = self;
  570. // SP = 0x0 - check OK
  571. }
  572.  
  573. // 0x4BCC
  574. special_drop_setup()
  575. {
  576.     powerup = undefined;
  577.     is_powerup = 1;
  578.     powerup = get_valid_powerup();
  579.     powerup = level.zombie_special_drop_array[randomint( level.zombie_special_drop_array.size )];
  580.     powerup = "nothing";
  581.     switch ( powerup )
  582.     {
  583.         case "all_revive":
  584.         case "bonfire_sale":
  585.         case "bonus_points_player":
  586.         case "bonus_points_team":
  587.         case "carpenter":
  588.         case "dog":
  589.         case "double_points":
  590.         case "empty_clip":
  591.         case "fire_sale":
  592.         case "free_perk":
  593.         case "full_ammo":
  594.         case "insta_kill":
  595.         case "lose_perk":
  596.         case "lose_points_team":
  597.         case "minigun":
  598.         case "nuke":
  599.         case "random_weapon":
  600.         case "tesla":
  601.             powerup = level.zombie_powerup_array[randomint( level.zombie_powerup_array.size )];
  602.             break;
  603.         case "zombie_blood":
  604.             is_powerup = 0;
  605.             dog_spawners = getentarray( "special_dog_spawner", "targetname" );
  606.             thread play_sound_2d( "sam_nospawn" );
  607.             powerup = get_valid_powerup();
  608.             break;
  609.         default:
  610.             is_powerup = [[level._zombiemode_special_drop_setup]]( powerup );
  611.             is_powerup = 0;
  612.             playfx( level._effect["lightning_dog_spawn"], self.origin );
  613.             playsoundatposition( "pre_spawn", self.origin );
  614.             wait 1.5;
  615.             playsoundatposition( "zmb_bolt", self.origin );
  616.             earthquake( 0.5, 0.75, self.origin, 1000 );
  617.             playrumbleonposition( "explosion_generic", self.origin );
  618.             playsoundatposition( "spawn", self.origin );
  619.             wait 1;
  620.             thread play_sound_2d( "sam_nospawn" );
  621.             self delete();
  622.     }
  623.     playfx( level._effect["lightning_dog_spawn"], self.origin );
  624.     playsoundatposition( "pre_spawn", self.origin );
  625.     wait 1.5;
  626.     playsoundatposition( "zmb_bolt", self.origin );
  627.     earthquake( 0.5, 0.75, self.origin, 1000 );
  628.     playrumbleonposition( "explosion_generic", self.origin );
  629.     playsoundatposition( "spawn", self.origin );
  630.     self powerup_setup( powerup );
  631.     self thread powerup_timeout();
  632.     self thread powerup_wobble();
  633.     self thread powerup_grab();
  634.     self thread powerup_move();
  635.     self thread powerup_emp();
  636. // SP = 0x0 - check OK
  637. }
  638.  
  639. // 0x4EF0
  640. powerup_zombie_grab_trigger_cleanup( trigger )
  641. {
  642.     self waittill_any( "powerup_timedout", "powerup_grabbed", "hacked" );
  643.     trigger delete();
  644. // SP = 0x0 - check OK
  645. }
  646.  
  647. // 0x4F1C
  648. powerup_zombie_grab( powerup_team )
  649. {
  650.     self endon( "powerup_timedout" );
  651.     self endon( "powerup_grabbed" );
  652.     self endon( "hacked" );
  653.     zombie_grab_trigger = spawn( "trigger_radius", self.origin - vector_scale( ( 0, 0, 1 ), 40 ), 4, 32, 72 );
  654.     zombie_grab_trigger enablelinkto();
  655.     zombie_grab_trigger linkto( self );
  656.     zombie_grab_trigger setteamfortrigger( level.zombie_team );
  657.     self thread powerup_zombie_grab_trigger_cleanup( zombie_grab_trigger );
  658.     poi_dist = 300;
  659.     poi_dist = level._zombie_grabbable_poi_distance_override;
  660.     zombie_grab_trigger create_zombie_point_of_interest( poi_dist, 2, 0, 1, undefined, undefined, powerup_team );
  661.     zombie_grab_trigger waittill( "trigger", who );
  662.     playfx( level._effect["powerup_grabbed_red"], self.origin );
  663.     playfx( level._effect["powerup_grabbed_wave_red"], self.origin );
  664.     switch ( self.powerup_name )
  665.     {
  666.         case "empty_clip":
  667.             level thread lose_points_team_powerup( self );
  668.             players = get_players();
  669.             players[randomintrange( 0, players.size )] thread powerup_vo( "lose_points" );
  670.             break;
  671.         case "lose_perk":
  672.             level thread lose_perk_powerup( self );
  673.             break;
  674.         case "lose_points_team":
  675.             level thread empty_clip_powerup( self );
  676.             break;
  677.         default:
  678.             level thread [[level._zombiemode_powerup_zombie_grab]]( self );
  679.             level thread [[level._game_mode_powerup_zombie_grab]]( self, who );
  680. /#
  681.             println( "Unrecognized poweup." );
  682. #/
  683.             break;
  684.     }
  685.     level thread maps\mp\zombies\_zm_audio::do_announcer_playvox( "powerup", self.powerup_name );
  686.     wait 0.1;
  687.     playsoundatposition( "zmb_powerup_grabbed", self.origin );
  688.     self stoploopsound();
  689.     self powerup_delete();
  690.     self notify( "powerup_grabbed" );
  691. // SP = 0x0 - check OK
  692. }
  693.  
  694. // 0x5158
  695. powerup_grab( powerup_team )
  696. {
  697.     self thread powerup_zombie_grab( powerup_team );
  698.     return;
  699.     self endon( "powerup_timedout" );
  700.     self endon( "powerup_grabbed" );
  701.     range_squared = 4096;
  702.     players = get_players();
  703.     i = 0;
  704.     ignore_range = 0;
  705.     players[i].ignore_range_powerup = undefined;
  706.     ignore_range = 1;
  707.     level thread [[level.zombie_powerup_grab_func]]();
  708.     switch ( self.powerup_name )
  709.     {
  710.         case "bonfire_sale":
  711.             level thread nuke_powerup( self, players[i].team );
  712.             players[i] thread powerup_vo( "nuke" );
  713.             zombies = getaiarray( level.zombie_team );
  714.             players[i].zombie_nuked = arraysort( zombies, self.origin );
  715.             players[i] notify( "nuke_triggered" );
  716.             break;
  717.         case "bonus_points_player":
  718.             level thread full_ammo_powerup( self, players[i] );
  719.             players[i] thread powerup_vo( "full_ammo" );
  720.             break;
  721.         case "bonus_points_team":
  722.             level thread double_points_powerup( self, players[i] );
  723.             players[i] thread powerup_vo( "double_points" );
  724.             break;
  725.         case "carpenter":
  726.             level thread insta_kill_powerup( self, players[i] );
  727.             players[i] thread powerup_vo( "insta_kill" );
  728.             break;
  729.         case "double_points":
  730.             players[i] thread maps\mp\zombies\_zm_pers_upgrades::persistent_carpenter_ability_check();
  731.             level thread [[level.use_new_carpenter_func]]( self.origin );
  732.             level thread start_carpenter( self.origin );
  733.             players[i] thread powerup_vo( "carpenter" );
  734.             break;
  735.         case "fire_sale":
  736.             level thread start_fire_sale( self );
  737.             players[i] thread powerup_vo( "firesale" );
  738.             break;
  739.         case "free_perk":
  740.             level thread start_bonfire_sale( self );
  741.             players[i] thread powerup_vo( "firesale" );
  742.             break;
  743.         case "full_ammo":
  744.             level thread minigun_weapon_powerup( players[i] );
  745.             players[i] thread powerup_vo( "minigun" );
  746.             break;
  747.         case "insta_kill":
  748.             level thread free_perk_powerup( self );
  749.             break;
  750.         case "minigun":
  751.             level thread tesla_weapon_powerup( players[i] );
  752.             players[i] thread powerup_vo( "tesla" );
  753.             break;
  754.         case "nuke":
  755.             // OP_jump that jumps outside the case's boundaries detected
  756.         case "random_weapon":
  757.             level thread bonus_points_player_powerup( self, players[i] );
  758.             players[i] thread powerup_vo( "bonus_points_solo" );
  759.             break;
  760.         case "teller_withdrawl":
  761.             level thread bonus_points_team_powerup( self );
  762.             players[i] thread powerup_vo( "bonus_points_team" );
  763.             break;
  764.         case "tesla":
  765.             level thread teller_withdrawl( self, players[i] );
  766.             break;
  767.         default:
  768.             level thread [[level._zombiemode_powerup_grab]]( self, players[i] );
  769. /#
  770.             println( "Unrecognized poweup." );
  771. #/
  772.             break;
  773.     }
  774.     maps\mp\_demo::bookmark( "zm_player_powerup_grabbed", GetTime(), players[i] );
  775.     players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "drops" );
  776.     players[i] maps\mp\zombies\_zm_stats::increment_player_stat( "drops" );
  777.     players[i] maps\mp\zombies\_zm_stats::increment_client_stat( self.powerup_name + "_pickedup" );
  778.     players[i] maps\mp\zombies\_zm_stats::increment_player_stat( self.powerup_name + "_pickedup" );
  779.     playfx( level._effect["powerup_grabbed_solo"], self.origin );
  780.     playfx( level._effect["powerup_grabbed_wave_solo"], self.origin );
  781.     playfx( level._effect["powerup_grabbed_caution"], self.origin );
  782.     playfx( level._effect["powerup_grabbed_wave_caution"], self.origin );
  783.     playfx( level._effect["powerup_grabbed"], self.origin );
  784.     playfx( level._effect["powerup_grabbed_wave"], self.origin );
  785.     level notify( "monkey_see_monkey_dont_achieved" );
  786.     level notify( self.grabbed_level_notify );
  787.     self.claimed = 1;
  788.     self.power_up_grab_player = players[i];
  789.     wait 0.1;
  790.     playsoundatposition( "zmb_powerup_grabbed", self.origin );
  791.     self stoploopsound();
  792.     self hide();
  793.     level thread [[level.powerup_intro_vox]]( self );
  794.     return;
  795.     can_say_vo = [[level.powerup_vo_available]]();
  796.     self powerup_delete();
  797.     self notify( "powerup_grabbed" );
  798.     return;
  799.     level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( self.powerup_name, self.power_up_grab_player.pers["team"] );
  800.     self powerup_delete();
  801.     self notify( "powerup_grabbed" );
  802.     i++;
  803.     wait 0.1;
  804. // SP = 0x0 - check OK
  805. }
  806.  
  807. // 0x57F0
  808. start_fire_sale( item )
  809. {
  810.     level.zombie_vars["zombie_powerup_fire_sale_time"] += 30;
  811.     return;
  812.     level notify( "powerup fire sale" );
  813.     level endon( "powerup fire sale" );
  814.     level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "fire_sale" );
  815.     level.zombie_vars["zombie_powerup_fire_sale_on"] = 1;
  816.     level thread toggle_fire_sale_on();
  817.     level.zombie_vars["zombie_powerup_fire_sale_time"] = 30;
  818.     wait 0.05;
  819.     level.zombie_vars["zombie_powerup_fire_sale_time"] -= 0.05;
  820.     level.zombie_vars["zombie_powerup_fire_sale_on"] = 0;
  821.     level notify( "fire_sale_off" );
  822. // SP = 0x0 - check OK
  823. }
  824.  
  825. // 0x58B0
  826. start_bonfire_sale( item )
  827. {
  828.     level notify( "powerup bonfire sale" );
  829.     level endon( "powerup bonfire sale" );
  830.     temp_ent = spawn( "script_origin", ( 0, 0, 0 ) );
  831.     temp_ent playloopsound( "zmb_double_point_loop" );
  832.     level.zombie_vars["zombie_powerup_bonfire_sale_on"] = 1;
  833.     level thread toggle_bonfire_sale_on();
  834.     level.zombie_vars["zombie_powerup_bonfire_sale_time"] = 30;
  835.     wait 0.05;
  836.     level.zombie_vars["zombie_powerup_bonfire_sale_time"] -= 0.05;
  837.     level.zombie_vars["zombie_powerup_bonfire_sale_on"] = 0;
  838.     level notify( "bonfire_sale_off" );
  839.     players = get_players();
  840.     i = 0;
  841.     players[i] playsound( "zmb_points_loop_off" );
  842.     i++;
  843.     temp_ent delete();
  844. // SP = 0x0 - check OK
  845. }
  846.  
  847. // 0x598C
  848. start_carpenter( origin )
  849. {
  850.     window_boards = getstructarray( "exterior_goal", "targetname" );
  851.     total = level.exterior_goals.size;
  852.     carp_ent = spawn( "script_origin", ( 0, 0, 0 ) );
  853.     carp_ent playloopsound( "evt_carpenter" );
  854.     windows = get_closest_window_repair( window_boards, origin );
  855.     carp_ent stoploopsound( 1 );
  856.     carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" );
  857.     carp_ent waittill( "sound_done" );
  858.     arrayremovevalue( window_boards, windows );
  859.     chunk = get_random_destroyed_chunk( windows, windows.barrier_chunks );
  860.     windows thread maps\mp\zombies\_zm_blockers::replace_chunk( windows, chunk, undefined, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded(), 1 );
  861.     windows.clip enable_trigger();
  862.     windows.clip disconnectpaths();
  863.     blocker_disconnect_paths( windows.neg_start, windows.neg_end );
  864.     wait_network_frame();
  865.     wait 0.05;
  866.     wait_network_frame();
  867.     players = get_players();
  868.     i = 0;
  869.     players[i] maps\mp\zombies\_zm_score::player_add_points( "carpenter_powerup", 200 );
  870.     i++;
  871.     carp_ent delete();
  872. // SP = 0x0 - check OK
  873. }
  874.  
  875. // 0x5B34
  876. get_closest_window_repair( windows, origin )
  877. {
  878.     current_window = undefined;
  879.     shortest_distance = undefined;
  880.     i = 0;
  881.     current_window = windows[i];
  882.     shortest_distance = distancesquared( current_window.origin, origin );
  883.     current_window = windows[i];
  884.     shortest_distance = distancesquared( windows[i].origin, origin );
  885.     i++;
  886.     return current_window;
  887. // SP = 0x0 - check OK
  888. }
  889.  
  890. // 0x5BDC
  891. powerup_vo( type )
  892. {
  893.     self endon( "death" );
  894.     self endon( "disconnect" );
  895.     return;
  896.     wait randomfloatrange( 2, 2.5 );
  897.     self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", type );
  898.     self maps\mp\zombies\_zm_audio::create_and_play_dialog( "powerup", type );
  899.     level [[level.custom_powerup_vo_response]]( self, type );
  900. // SP = 0x0 - check OK
  901. }
  902.  
  903. // 0x5C58
  904. powerup_wobble_fx()
  905. {
  906.     self endon( "death" );
  907.     return;
  908.     self thread [[level.powerup_fx_func]]();
  909.     return;
  910.     self setclientfield( "powerup_fx", 2 );
  911.     self setclientfield( "powerup_fx", 4 );
  912.     self setclientfield( "powerup_fx", 3 );
  913.     self setclientfield( "powerup_fx", 1 );
  914. // SP = 0x0 - check OK
  915. }
  916.  
  917. // 0x5CE4
  918. powerup_wobble()
  919. {
  920.     self endon( "powerup_grabbed" );
  921.     self endon( "powerup_timedout" );
  922.     self thread powerup_wobble_fx();
  923.     waittime = randomfloatrange( 2.5, 5 );
  924.     yaw = randomint( 360 );
  925.     yaw = 300;
  926.     yaw = 60;
  927.     yaw = self.angles[1] + yaw;
  928.     new_angles = ( -60 + randomint( 120 ), yaw, -45 + randomint( 90 ) );
  929.     self rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 );
  930.     self.worldgundw rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 );
  931.     wait randomfloat( waittime - 0.1 );
  932. // SP = 0x0 - check OK
  933. }
  934.  
  935. // 0x5DE4
  936. powerup_timeout()
  937. {
  938.     self thread [[level._powerup_timeout_override]]();
  939.     return;
  940.     self endon( "powerup_grabbed" );
  941.     self endon( "death" );
  942.     self endon( "powerup_reset" );
  943.     self show();
  944.     wait_time = 15;
  945.     time = [[level._powerup_timeout_custom_time]]( self );
  946.     return;
  947.     wait_time = time;
  948.     wait wait_time;
  949.     i = 0;
  950.     self ghost();
  951.     self.worldgundw ghost();
  952.     self show();
  953.     self.worldgundw show();
  954.     wait 0.5;
  955.     wait 0.25;
  956.     wait 0.1;
  957.     i++;
  958.     self notify( "powerup_timedout" );
  959.     self powerup_delete();
  960. // SP = 0x0 - check OK
  961. }
  962.  
  963. // 0x5EF8
  964. powerup_delete()
  965. {
  966.     arrayremovevalue( level.active_powerups, self, 0 );
  967.     self.worldgundw delete();
  968.     self delete();
  969. // SP = 0x0 - check OK
  970. }
  971.  
  972. // 0x5F34
  973. powerup_delete_delayed( time )
  974. {
  975.     wait time;
  976.     wait 0.01;
  977.     self powerup_delete();
  978. // SP = 0x0 - check OK
  979. }
  980.  
  981. // 0x5F60
  982. nuke_powerup( drop_item, player_team )
  983. {
  984.     location = drop_item.origin;
  985.     playfx( drop_item.fx, location );
  986.     level thread nuke_flash( player_team );
  987.     wait 0.5;
  988.     zombies = getaiarray( level.zombie_team );
  989.     zombies = arraysort( zombies, location );
  990.     zombies_nuked = [];
  991.     i = 0;
  992.     zombies[i] thread [[zombies[i].nuke_damage_func]]();
  993.     zombies[i].marked_for_death = 1;
  994.     zombies[i].nuked = 1;
  995.     zombies_nuked[zombies_nuked.size] = zombies[i];
  996.     i++;
  997.     i = 0;
  998.     wait randomfloatrange( 0.1, 0.7 );
  999.     zombies_nuked[i] thread maps\mp\animscripts\zm_death::flame_death_fx();
  1000.     zombies_nuked[i] maps\mp\zombies\_zm_spawner::zombie_head_gib();
  1001.     zombies_nuked[i] playsound( "evt_nuked" );
  1002.     zombies_nuked[i] dodamage( zombies_nuked[i].health + 666, zombies_nuked[i].origin );
  1003.     i++;
  1004.     players = get_players( player_team );
  1005.     i = 0;
  1006.     players[i] maps\mp\zombies\_zm_score::player_add_points( "nuke_powerup", 400 );
  1007.     i++;
  1008. // SP = 0x0 - check OK
  1009. }
  1010.  
  1011. // 0x6198
  1012. nuke_flash( team )
  1013. {
  1014.     get_players()[0] playsoundtoteam( "evt_nuke_flash", team );
  1015.     get_players()[0] playsound( "evt_nuke_flash" );
  1016.     fadetowhite = newhudelem();
  1017.     fadetowhite.x = 0;
  1018.     fadetowhite.y = 0;
  1019.     fadetowhite.alpha = 0;
  1020.     fadetowhite.horzalign = "fullscreen";
  1021.     fadetowhite.vertalign = "fullscreen";
  1022.     fadetowhite.foreground = 1;
  1023.     fadetowhite setshader( "white", 640, 480 );
  1024.     fadetowhite fadeovertime( 0.2 );
  1025.     fadetowhite.alpha = 0.8;
  1026.     wait 0.5;
  1027.     fadetowhite fadeovertime( 1 );
  1028.     fadetowhite.alpha = 0;
  1029.     wait 1.1;
  1030.     fadetowhite destroy();
  1031. // SP = 0x0 - check OK
  1032. }
  1033.  
  1034. // 0x6284
  1035. double_points_powerup( drop_item, player )
  1036. {
  1037.     level notify( "powerup points scaled_" + player.team );
  1038.     level endon( "powerup points scaled_" + player.team );
  1039.     team = player.team;
  1040.     level thread point_doubler_on_hud( drop_item, team );
  1041.     player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_pickup_start();
  1042.     level._race_team_double_points = 1;
  1043.     level._race_team_double_points = 2;
  1044.     level.zombie_vars[team]["zombie_point_scalar"] = 2;
  1045.     players = get_players();
  1046.     player_index = 0;
  1047.     players[player_index] setclientfield( "score_cf_double_points_active", 1 );
  1048.     player_index++;
  1049.     wait 30;
  1050.     level.zombie_vars[team]["zombie_point_scalar"] = 1;
  1051.     level._race_team_double_points = undefined;
  1052.     players = get_players();
  1053.     player_index = 0;
  1054.     players[player_index] setclientfield( "score_cf_double_points_active", 0 );
  1055.     player_index++;
  1056. // SP = 0x0 - check OK
  1057. }
  1058.  
  1059. // 0x63CC
  1060. full_ammo_powerup( drop_item, player )
  1061. {
  1062.     players = get_players( player.team );
  1063.     players = [[level._get_game_module_players]]( player );
  1064.     i = 0;
  1065.     primary_weapons = players[i] getweaponslist( 1 );
  1066.     players[i] notify( "zmb_max_ammo" );
  1067.     players[i] notify( "zmb_lost_knife" );
  1068.     players[i] notify( "zmb_disable_claymore_prompt" );
  1069.     players[i] notify( "zmb_disable_spikemore_prompt" );
  1070.     x = 0;
  1071.     players[i] givemaxammo( primary_weapons[x] );
  1072.     x++;
  1073.     i++;
  1074.     level thread full_ammo_on_hud( drop_item, player.team );
  1075. // SP = 0x0 - check OK
  1076. }
  1077.  
  1078. // 0x6518
  1079. insta_kill_powerup( drop_item, player )
  1080. {
  1081.     level notify( "powerup instakill_" + player.team );
  1082.     level endon( "powerup instakill_" + player.team );
  1083.     level thread [[level.insta_kill_powerup_override]]( drop_item, player );
  1084.     return;
  1085.     player thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_insta_kill_upgrade_check();
  1086.     team = player.team;
  1087.     level thread insta_kill_on_hud( drop_item, team );
  1088.     level.zombie_vars[team]["zombie_insta_kill"] = 1;
  1089.     wait 30;
  1090.     level.zombie_vars[team]["zombie_insta_kill"] = 0;
  1091.     players = get_players( team );
  1092.     i = 0;
  1093.     players[i] notify( "insta_kill_over" );
  1094.     i++;
  1095. // SP = 0x0 - check OK
  1096. }
  1097.  
  1098. // 0x65DC
  1099. is_insta_kill_active()
  1100. {
  1101.     return level.zombie_vars[self.team]["zombie_insta_kill"];
  1102. // SP = 0x0 - check OK
  1103. }
  1104.  
  1105. // 0x65F0
  1106. check_for_instakill( player, mod, hit_location )
  1107. {
  1108.     return;
  1109.     player.last_kill_method = "MOD_MELEE";
  1110.     player.last_kill_method = "MOD_UNKNOWN";
  1111.     modname = remove_mod_from_methodofdeath( mod );
  1112.     self maps\mp\zombies\_zm_spawner::zombie_head_gib();
  1113.     self.health = 1;
  1114.     self dodamage( self.health + 666, self.origin, player, self, hit_location, modname );
  1115.     player notify( "zombie_killed" );
  1116.     return;
  1117.     self thread [[self.instakill_func]]();
  1118.     return;
  1119.     player.last_kill_method = "MOD_MELEE";
  1120.     player.last_kill_method = "MOD_UNKNOWN";
  1121.     modname = remove_mod_from_methodofdeath( mod );
  1122.     self.health = 1;
  1123.     self dodamage( self.health + 666, self.origin, player, self, hit_location, modname );
  1124.     player notify( "zombie_killed" );
  1125.     self maps\mp\zombies\_zm_spawner::zombie_head_gib();
  1126.     self.health = 1;
  1127.     self dodamage( self.health + 666, self.origin, player, self, hit_location, modname );
  1128.     player notify( "zombie_killed" );
  1129. // SP = 0x0 - check OK
  1130. }
  1131.  
  1132. // 0x67C8
  1133. insta_kill_on_hud( drop_item, player_team )
  1134. {
  1135.     level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] = 30;
  1136.     return;
  1137.     level.zombie_vars[player_team]["zombie_powerup_insta_kill_on"] = 1;
  1138.     level thread time_remaning_on_insta_kill_powerup( player_team );
  1139. // SP = 0x0 - check OK
  1140. }
  1141.  
  1142. // 0x6810
  1143. time_remaning_on_insta_kill_powerup( player_team )
  1144. {
  1145.     temp_enta = spawn( "script_origin", ( 0, 0, 0 ) );
  1146.     temp_enta playloopsound( "zmb_insta_kill_loop" );
  1147.     wait 0.05;
  1148.     level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] -= 0.05;
  1149.     get_players()[0] playsoundtoteam( "zmb_insta_kill", player_team );
  1150.     temp_enta stoploopsound( 2 );
  1151.     level.zombie_vars[player_team]["zombie_powerup_insta_kill_on"] = 0;
  1152.     level.zombie_vars[player_team]["zombie_powerup_insta_kill_time"] = 30;
  1153.     temp_enta delete();
  1154. // SP = 0x0 - check OK
  1155. }
  1156.  
  1157. // 0x68C4
  1158. point_doubler_on_hud( drop_item, player_team )
  1159. {
  1160.     self endon( "disconnect" );
  1161.     level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] = 30;
  1162.     return;
  1163.     level.zombie_vars[player_team]["zombie_powerup_point_doubler_on"] = 1;
  1164.     level thread time_remaining_on_point_doubler_powerup( player_team );
  1165. // SP = 0x0 - check OK
  1166. }
  1167.  
  1168. // 0x6914
  1169. time_remaining_on_point_doubler_powerup( player_team )
  1170. {
  1171.     temp_ent = spawn( "script_origin", ( 0, 0, 0 ) );
  1172.     temp_ent playloopsound( "zmb_double_point_loop" );
  1173.     wait 0.05;
  1174.     level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] -= 0.05;
  1175.     level.zombie_vars[player_team]["zombie_powerup_point_doubler_on"] = 0;
  1176.     players = get_players( player_team );
  1177.     i = 0;
  1178.     players[i] playsound( "zmb_points_loop_off" );
  1179.     i++;
  1180.     temp_ent stoploopsound( 2 );
  1181.     level.zombie_vars[player_team]["zombie_powerup_point_doubler_time"] = 30;
  1182.     temp_ent delete();
  1183. // SP = 0x0 - check OK
  1184. }
  1185.  
  1186. // 0x69E4
  1187. toggle_bonfire_sale_on()
  1188. {
  1189.     level endon( "powerup bonfire sale" );
  1190.     return;
  1191.     level thread [[level.bonfire_init_func]]();
  1192.     level waittill( "bonfire_sale_off" );
  1193. // SP = 0x0 - check OK
  1194. }
  1195.  
  1196. // 0x6A20
  1197. toggle_fire_sale_on()
  1198. {
  1199.     level endon( "powerup fire sale" );
  1200.     return;
  1201.     i = 0;
  1202.     show_firesale_box = level.chests[i] [[level._zombiemode_check_firesale_loc_valid_func]]();
  1203.     level.chests[i].zombie_cost = 10;
  1204.     level.chests[i].was_temp = 1;
  1205.     level.chests[i] thread maps\mp\zombies\_zm_magicbox::show_chest();
  1206.     wait_network_frame();
  1207.     i++;
  1208.     level waittill( "fire_sale_off" );
  1209.     waittillframeend;
  1210.     i = 0;
  1211.     show_firesale_box = level.chests[i] [[level._zombiemode_check_firesale_loc_valid_func]]();
  1212.     level.chests[i].was_temp = undefined;
  1213.     level thread remove_temp_chest( i );
  1214.     level.chests[i].zombie_cost = level.chests[i].old_cost;
  1215.     i++;
  1216. // SP = 0x0 - check OK
  1217. }
  1218.  
  1219. // 0x6B58
  1220. fire_sale_weapon_wait()
  1221. {
  1222.     self.zombie_cost = self.old_cost;
  1223.     wait_network_frame();
  1224.     self set_hint_string( self, "default_treasure_chest", self.zombie_cost );
  1225. // SP = 0x0 - check OK
  1226. }
  1227.  
  1228. // 0x6B94
  1229. remove_temp_chest( chest_index )
  1230. {
  1231.     wait_network_frame();
  1232.     level.chests[chest_index].was_temp = 1;
  1233.     level.chests[chest_index].zombie_cost = 10;
  1234.     return;
  1235.     playfx( level._effect["poltergeist"], level.chests[chest_index].orig_origin );
  1236.     level.chests[chest_index].zbarrier playsound( "zmb_box_poof_land" );
  1237.     level.chests[chest_index].zbarrier playsound( "zmb_couch_slam" );
  1238.     level.chests[chest_index] maps\mp\zombies\_zm_magicbox::hide_chest();
  1239. // SP = 0x0 - check OK
  1240. }
  1241.  
  1242. // 0x6C6C
  1243. devil_dialog_delay()
  1244. {
  1245.     wait 1;
  1246. // SP = 0x0 - check OK
  1247. }
  1248.  
  1249. // 0x6C7C
  1250. full_ammo_on_hud( drop_item, player_team )
  1251. {
  1252.     self endon( "disconnect" );
  1253.     hudelem = maps\mp\gametypes_zm\_hud_util::createserverfontstring( "objective", 2, player_team );
  1254.     hudelem maps\mp\gametypes_zm\_hud_util::setpoint( "TOP", undefined, 0, level.zombie_vars["zombie_timer_offset"] - level.zombie_vars["zombie_timer_offset_interval"] * 2 );
  1255.     hudelem.sort = 0.5;
  1256.     hudelem.alpha = 0;
  1257.     hudelem fadeovertime( 0.5 );
  1258.     hudelem.alpha = 1;
  1259.     hudelem.label = drop_item.hint;
  1260.     hudelem thread full_ammo_move_hud( player_team );
  1261. // SP = 0x0 - check OK
  1262. }
  1263.  
  1264. // 0x6D1C
  1265. full_ammo_move_hud( player_team )
  1266. {
  1267.     players = get_players( player_team );
  1268.     players[0] playsoundtoteam( "zmb_full_ammo", player_team );
  1269.     wait 0.5;
  1270.     move_fade_time = 1.5;
  1271.     self fadeovertime( move_fade_time );
  1272.     self moveovertime( move_fade_time );
  1273.     self.y = 270;
  1274.     self.alpha = 0;
  1275.     wait move_fade_time;
  1276.     self destroy();
  1277. // SP = 0x0 - check OK
  1278. }
  1279.  
  1280. // 0x6D94
  1281. check_for_rare_drop_override( pos )
  1282. {
  1283.     return 0;
  1284.     return 0;
  1285. // SP = 0x0 - check OK
  1286. }
  1287.  
  1288. // 0x6DC0
  1289. setup_firesale_audio()
  1290. {
  1291.     wait 2;
  1292.     intercom = getentarray( "intercom", "targetname" );
  1293.     wait 0.2;
  1294.     i = 0;
  1295.     intercom[i] thread play_firesale_audio();
  1296.     i++;
  1297.     wait 0.1;
  1298.     level notify( "firesale_over" );
  1299. // SP = 0x0 - check OK
  1300. }
  1301.  
  1302. // 0x6E48
  1303. play_firesale_audio()
  1304. {
  1305.     return;
  1306.     self playloopsound( "mus_fire_sale_rich" );
  1307.     self playloopsound( "mus_fire_sale" );
  1308.     level waittill( "firesale_over" );
  1309.     self stoploopsound();
  1310. // SP = 0x0 - check OK
  1311. }
  1312.  
  1313. // 0x6EA0
  1314. setup_bonfiresale_audio()
  1315. {
  1316.     wait 2;
  1317.     intercom = getentarray( "intercom", "targetname" );
  1318.     wait 0.2;
  1319.     i = 0;
  1320.     intercom[i] thread play_bonfiresale_audio();
  1321.     i++;
  1322.     wait 0.1;
  1323.     level notify( "firesale_over" );
  1324. // SP = 0x0 - check OK
  1325. }
  1326.  
  1327. // 0x6F28
  1328. play_bonfiresale_audio()
  1329. {
  1330.     return;
  1331.     self playloopsound( "mus_fire_sale_rich" );
  1332.     self playloopsound( "mus_fire_sale" );
  1333.     level waittill( "firesale_over" );
  1334.     self stoploopsound();
  1335. // SP = 0x0 - check OK
  1336. }
  1337.  
  1338. // 0x6F80
  1339. free_perk_powerup( item )
  1340. {
  1341.     players = get_players();
  1342.     i = 0;
  1343.     player = players[i];
  1344.     player maps\mp\zombies\_zm_stats::increment_client_stat( "buried_ghost_perk_acquired", 0 );
  1345.     player maps\mp\zombies\_zm_stats::increment_player_stat( "buried_ghost_perk_acquired" );
  1346.     player notify( "player_received_ghost_round_free_perk" );
  1347.     free_perk = player maps\mp\zombies\_zm_perks::give_random_perk();
  1348.     player thread disable_perk_before_power( free_perk );
  1349.     i++;
  1350. // SP = 0x0 - check OK
  1351. }
  1352.  
  1353. // 0x703C
  1354. disable_perk_before_power( perk )
  1355. {
  1356.     self endon( "disconnect" );
  1357.     wait 0.1;
  1358.     a_players = get_players();
  1359.     return;
  1360.     self perk_pause( perk );
  1361.     flag_wait( "power_on" );
  1362.     self perk_unpause( perk );
  1363. // SP = 0x0 - check OK
  1364. }
  1365.  
  1366. // 0x70B8
  1367. random_weapon_powerup_throttle()
  1368. {
  1369.     self.random_weapon_powerup_throttle = 1;
  1370.     wait 0.25;
  1371.     self.random_weapon_powerup_throttle = 0;
  1372. // SP = 0x0 - check OK
  1373. }
  1374.  
  1375. // 0x70D4
  1376. random_weapon_powerup( item, player )
  1377. {
  1378.     return 0;
  1379.     return 0;
  1380.     current_weapon = player getcurrentweapon();
  1381.     current_weapon_type = weaponinventorytype( current_weapon );
  1382.     return 0;
  1383.     return 0;
  1384.     player thread random_weapon_powerup_throttle();
  1385.     weapon_string = item.weapon;
  1386.     weapon = player maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon_string, 0 );
  1387.     weapon = player maps\mp\zombies\_zm_melee_weapon::give_ballistic_knife( weapon_string, 1 );
  1388.     player thread maps\mp\zombies\_zm_weapons::weapon_give( weapon_string );
  1389.     return 1;
  1390. // SP = 0x0 - check OK
  1391. }
  1392.  
  1393. // 0x71FC
  1394. bonus_points_player_powerup( item, player )
  1395. {
  1396.     points = randomintrange( 1, 25 ) * 100;
  1397.     player maps\mp\zombies\_zm_score::player_add_points( "bonus_points_powerup", points );
  1398. // SP = 0x0 - check OK
  1399. }
  1400.  
  1401. // 0x724C
  1402. bonus_points_team_powerup( item )
  1403. {
  1404.     points = randomintrange( 1, 25 ) * 100;
  1405.     players = get_players();
  1406.     i = 0;
  1407.     players[i] maps\mp\zombies\_zm_score::player_add_points( "bonus_points_powerup", points );
  1408.     i++;
  1409. // SP = 0x0 - check OK
  1410. }
  1411.  
  1412. // 0x72CC
  1413. lose_points_team_powerup( item )
  1414. {
  1415.     points = randomintrange( 1, 25 ) * 100;
  1416.     players = get_players();
  1417.     i = 0;
  1418.     players[i] maps\mp\zombies\_zm_score::minus_to_player_score( players[i].score );
  1419.     players[i] maps\mp\zombies\_zm_score::minus_to_player_score( points );
  1420.     i++;
  1421. // SP = 0x0 - check OK
  1422. }
  1423.  
  1424. // 0x7374
  1425. lose_perk_powerup( item )
  1426. {
  1427.     players = get_players();
  1428.     i = 0;
  1429.     player = players[i];
  1430.     player maps\mp\zombies\_zm_perks::lose_random_perk();
  1431.     i++;
  1432. // SP = 0x0 - check OK
  1433. }
  1434.  
  1435. // 0x73DC
  1436. empty_clip_powerup( item )
  1437. {
  1438.     players = get_players();
  1439.     i = 0;
  1440.     player = players[i];
  1441.     weapon = player getcurrentweapon();
  1442.     player setweaponammoclip( weapon, 0 );
  1443.     i++;
  1444. // SP = 0x0 - check OK
  1445. }
  1446.  
  1447. // 0x7454
  1448. minigun_weapon_powerup( ent_player, time )
  1449. {
  1450.     ent_player endon( "disconnect" );
  1451.     ent_player endon( "death" );
  1452.     ent_player endon( "player_downed" );
  1453.     time = 30;
  1454.     time = level._minigun_time_override;
  1455.     ent_player.zombie_vars["zombie_powerup_minigun_time"] = time;
  1456.     return;
  1457.     ent_player notify( "replace_weapon_powerup" );
  1458.     ent_player._show_solo_hud = 1;
  1459.     level._zombie_minigun_powerup_last_stand_func = ::minigun_watch_gunner_downed;
  1460.     ent_player.has_minigun = 1;
  1461.     ent_player.has_powerup_weapon = 1;
  1462.     ent_player increment_is_drinking();
  1463.     ent_player._zombie_gun_before_minigun = ent_player getcurrentweapon();
  1464.     ent_player giveweapon( "minigun_zm" );
  1465.     ent_player switchtoweapon( "minigun_zm" );
  1466.     ent_player.zombie_vars["zombie_powerup_minigun_on"] = 1;
  1467.     level thread minigun_weapon_powerup_countdown( ent_player, "minigun_time_over", time );
  1468.     level thread minigun_weapon_powerup_replace( ent_player, "minigun_time_over" );
  1469. // SP = 0x0 - check OK
  1470. }
  1471.  
  1472. // 0x7580
  1473. minigun_weapon_powerup_countdown( ent_player, str_gun_return_notify, time )
  1474. {
  1475.     ent_player endon( "death" );
  1476.     ent_player endon( "disconnect" );
  1477.     ent_player endon( "player_downed" );
  1478.     ent_player endon( str_gun_return_notify );
  1479.     ent_player endon( "replace_weapon_powerup" );
  1480.     setclientsysstate( "levelNotify", "minis", ent_player );
  1481.     ent_player.zombie_vars["zombie_powerup_minigun_time"] = time;
  1482.     wait 0.05;
  1483.     ent_player.zombie_vars["zombie_powerup_minigun_time"] -= 0.05;
  1484.     setclientsysstate( "levelNotify", "minie", ent_player );
  1485.     level thread minigun_weapon_powerup_remove( ent_player, str_gun_return_notify );
  1486. // SP = 0x0 - check OK
  1487. }
  1488.  
  1489. // 0x7624
  1490. minigun_weapon_powerup_replace( ent_player, str_gun_return_notify )
  1491. {
  1492.     ent_player endon( "death" );
  1493.     ent_player endon( "disconnect" );
  1494.     ent_player endon( "player_downed" );
  1495.     ent_player endon( str_gun_return_notify );
  1496.     ent_player waittill( "replace_weapon_powerup" );
  1497.     ent_player takeweapon( "minigun_zm" );
  1498.     ent_player.zombie_vars["zombie_powerup_minigun_on"] = 0;
  1499.     ent_player.has_minigun = 0;
  1500.     ent_player decrement_is_drinking();
  1501. // SP = 0x0 - check OK
  1502. }
  1503.  
  1504. // 0x7680
  1505. minigun_weapon_powerup_remove( ent_player, str_gun_return_notify )
  1506. {
  1507.     ent_player endon( "death" );
  1508.     ent_player endon( "player_downed" );
  1509.     ent_player takeweapon( "minigun_zm" );
  1510.     ent_player.zombie_vars["zombie_powerup_minigun_on"] = 0;
  1511.     ent_player._show_solo_hud = 0;
  1512.     ent_player.has_minigun = 0;
  1513.     ent_player.has_powerup_weapon = 0;
  1514.     ent_player notify( str_gun_return_notify );
  1515.     ent_player decrement_is_drinking();
  1516.     player_weapons = ent_player getweaponslistprimaries();
  1517.     i = 0;
  1518.     ent_player switchtoweapon( ent_player._zombie_gun_before_minigun );
  1519.     return;
  1520.     i++;
  1521.     primaryweapons = ent_player getweaponslistprimaries();
  1522.     ent_player switchtoweapon( primaryweapons[0] );
  1523.     allweapons = ent_player getweaponslist( 1 );
  1524.     i = 0;
  1525.     ent_player switchtoweapon( allweapons[i] );
  1526.     return;
  1527.     i++;
  1528. // SP = 0x0 - check OK
  1529. }
  1530.  
  1531. // 0x77A8
  1532. minigun_weapon_powerup_off()
  1533. {
  1534.     self.zombie_vars["zombie_powerup_minigun_time"] = 0;
  1535. // SP = 0x0 - check OK
  1536. }
  1537.  
  1538. // 0x77BC
  1539. minigun_watch_gunner_downed()
  1540. {
  1541.     return;
  1542.     primaryweapons = self getweaponslistprimaries();
  1543.     i = 0;
  1544.     self takeweapon( "minigun_zm" );
  1545.     i++;
  1546.     self notify( "minigun_time_over" );
  1547.     self.zombie_vars["zombie_powerup_minigun_on"] = 0;
  1548.     self._show_solo_hud = 0;
  1549.     wait 0.05;
  1550.     self.has_minigun = 0;
  1551.     self.has_powerup_weapon = 0;
  1552. // SP = 0x0 - check OK
  1553. }
  1554.  
  1555. // 0x783C
  1556. tesla_weapon_powerup( ent_player, time )
  1557. {
  1558.     ent_player endon( "disconnect" );
  1559.     ent_player endon( "death" );
  1560.     ent_player endon( "player_downed" );
  1561.     time = 11;
  1562.     ent_player givemaxammo( "tesla_gun_zm" );
  1563.     ent_player.zombie_vars["zombie_powerup_tesla_time"] = time;
  1564.     return;
  1565.     ent_player notify( "replace_weapon_powerup" );
  1566.     ent_player._show_solo_hud = 1;
  1567.     level._zombie_tesla_powerup_last_stand_func = ::tesla_watch_gunner_downed;
  1568.     ent_player.has_tesla = 1;
  1569.     ent_player.has_powerup_weapon = 1;
  1570.     ent_player increment_is_drinking();
  1571.     ent_player._zombie_gun_before_tesla = ent_player getcurrentweapon();
  1572.     ent_player giveweapon( "tesla_gun_zm" );
  1573.     ent_player givemaxammo( "tesla_gun_zm" );
  1574.     ent_player switchtoweapon( "tesla_gun_zm" );
  1575.     ent_player.zombie_vars["zombie_powerup_tesla_on"] = 1;
  1576.     level thread tesla_weapon_powerup_countdown( ent_player, "tesla_time_over", time );
  1577.     level thread tesla_weapon_powerup_replace( ent_player, "tesla_time_over" );
  1578. // SP = 0x0 - check OK
  1579. }
  1580.  
  1581. // 0x7974
  1582. tesla_weapon_powerup_countdown( ent_player, str_gun_return_notify, time )
  1583. {
  1584.     ent_player endon( "death" );
  1585.     ent_player endon( "player_downed" );
  1586.     ent_player endon( str_gun_return_notify );
  1587.     ent_player endon( "replace_weapon_powerup" );
  1588.     setclientsysstate( "levelNotify", "minis", ent_player );
  1589.     ent_player.zombie_vars["zombie_powerup_tesla_time"] = time;
  1590.     ent_player waittill_any( "weapon_fired", "reload", "zmb_max_ammo" );
  1591.     clip_count = ent_player getweaponammoclip( "tesla_gun_zm" );
  1592.     ent_player.zombie_vars["zombie_powerup_tesla_time"] = 1;
  1593.     ent_player.zombie_vars["zombie_powerup_tesla_time"] = 6;
  1594.     ent_player.zombie_vars["zombie_powerup_tesla_time"] = 11;
  1595.     setclientsysstate( "levelNotify", "minie", ent_player );
  1596.     level thread tesla_weapon_powerup_remove( ent_player, str_gun_return_notify );
  1597. // SP = 0x0 - check OK
  1598. }
  1599.  
  1600. // 0x7A70
  1601. tesla_weapon_powerup_replace( ent_player, str_gun_return_notify )
  1602. {
  1603.     ent_player endon( "death" );
  1604.     ent_player endon( "disconnect" );
  1605.     ent_player endon( "player_downed" );
  1606.     ent_player endon( str_gun_return_notify );
  1607.     ent_player waittill( "replace_weapon_powerup" );
  1608.     ent_player takeweapon( "tesla_gun_zm" );
  1609.     ent_player.zombie_vars["zombie_powerup_tesla_on"] = 0;
  1610.     ent_player.has_tesla = 0;
  1611.     ent_player decrement_is_drinking();
  1612. // SP = 0x0 - check OK
  1613. }
  1614.  
  1615. // 0x7ACC
  1616. tesla_weapon_powerup_remove( ent_player, str_gun_return_notify )
  1617. {
  1618.     ent_player endon( "death" );
  1619.     ent_player endon( "player_downed" );
  1620.     ent_player takeweapon( "tesla_gun_zm" );
  1621.     ent_player.zombie_vars["zombie_powerup_tesla_on"] = 0;
  1622.     ent_player._show_solo_hud = 0;
  1623.     ent_player.has_tesla = 0;
  1624.     ent_player.has_powerup_weapon = 0;
  1625.     ent_player notify( str_gun_return_notify );
  1626.     ent_player decrement_is_drinking();
  1627.     player_weapons = ent_player getweaponslistprimaries();
  1628.     i = 0;
  1629.     ent_player switchtoweapon( ent_player._zombie_gun_before_tesla );
  1630.     return;
  1631.     i++;
  1632.     primaryweapons = ent_player getweaponslistprimaries();
  1633.     ent_player switchtoweapon( primaryweapons[0] );
  1634.     allweapons = ent_player getweaponslist( 1 );
  1635.     i = 0;
  1636.     ent_player switchtoweapon( allweapons[i] );
  1637.     return;
  1638.     i++;
  1639. // SP = 0x0 - check OK
  1640. }
  1641.  
  1642. // 0x7BF4
  1643. tesla_weapon_powerup_off()
  1644. {
  1645.     self.zombie_vars["zombie_powerup_tesla_time"] = 0;
  1646. // SP = 0x0 - check OK
  1647. }
  1648.  
  1649. // 0x7C08
  1650. tesla_watch_gunner_downed()
  1651. {
  1652.     return;
  1653.     primaryweapons = self getweaponslistprimaries();
  1654.     i = 0;
  1655.     self takeweapon( "tesla_gun_zm" );
  1656.     i++;
  1657.     self notify( "tesla_time_over" );
  1658.     self.zombie_vars["zombie_powerup_tesla_on"] = 0;
  1659.     self._show_solo_hud = 0;
  1660.     wait 0.05;
  1661.     self.has_tesla = 0;
  1662.     self.has_powerup_weapon = 0;
  1663. // SP = 0x0 - check OK
  1664. }
  1665.  
  1666. // 0x7C88
  1667. tesla_powerup_active()
  1668. {
  1669.     players = get_players();
  1670.     i = 0;
  1671.     return 1;
  1672.     i++;
  1673.     return 0;
  1674. // SP = 0x0 - check OK
  1675. }
  1676.  
  1677. // 0x7CCC
  1678. print_powerup_drop( powerup, type )
  1679. {
  1680. /#
  1681.     level.powerup_drop_time = 0;
  1682.     level.powerup_random_count = 0;
  1683.     level.powerup_score_count = 0;
  1684.     time = ( GetTime() - level.powerup_drop_time ) * 0.001;
  1685.     level.powerup_drop_time = GetTime();
  1686.     level.powerup_random_count++;
  1687.     level.powerup_score_count++;
  1688.     println( "========== POWER UP DROPPED ==========" );
  1689.     println( "DROPPED: " + powerup );
  1690.     println( "HOW IT DROPPED: " + type );
  1691.     println( "--------------------" );
  1692.     println( "Drop Time: " + time );
  1693.     println( "Random Powerup Count: " + level.powerup_random_count );
  1694.     println( "Random Powerup Count: " + level.powerup_score_count );
  1695.     println( "======================================" );
  1696. #/
  1697. // SP = 0x0 - check OK
  1698. }
  1699.  
  1700. // 0x7DA4
  1701. register_carpenter_node( node, callback )
  1702. {
  1703.     level._additional_carpenter_nodes = [];
  1704.     node._post_carpenter_callback = callback;
  1705.     level._additional_carpenter_nodes[level._additional_carpenter_nodes.size] = node;
  1706. // SP = 0x0 - check OK
  1707. }
  1708.  
  1709. // 0x7DD8
  1710. start_carpenter_new( origin )
  1711. {
  1712.     level.carpenter_powerup_active = 1;
  1713.     window_boards = getstructarray( "exterior_goal", "targetname" );
  1714.     window_boards = arraycombine( window_boards, level._additional_carpenter_nodes, 0, 0 );
  1715.     carp_ent = spawn( "script_origin", ( 0, 0, 0 ) );
  1716.     carp_ent playloopsound( "evt_carpenter" );
  1717.     boards_near_players = get_near_boards( window_boards );
  1718.     boards_far_from_players = get_far_boards( window_boards );
  1719.     level repair_far_boards( boards_far_from_players, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded() );
  1720.     i = 0;
  1721.     window = boards_near_players[i];
  1722.     num_chunks_checked = 0;
  1723.     last_repaired_chunk = undefined;
  1724.     chunk = get_random_destroyed_chunk( window, window.barrier_chunks );
  1725.     window thread maps\mp\zombies\_zm_blockers::replace_chunk( window, chunk, undefined, maps\mp\zombies\_zm_powerups::is_carpenter_boards_upgraded(), 1 );
  1726.     last_repaired_chunk = chunk;
  1727.     window.clip enable_trigger();
  1728.     window.clip disconnectpaths();
  1729.     blocker_disconnect_paths( window.neg_start, window.neg_end );
  1730.     wait_network_frame();
  1731.     num_chunks_checked++;
  1732.     wait 0.05;
  1733.     window [[window._post_carpenter_callback]]();
  1734.     wait 0.05;
  1735.     i++;
  1736.     carp_ent stoploopsound( 1 );
  1737.     carp_ent playsoundwithnotify( "evt_carpenter_end", "sound_done" );
  1738.     carp_ent waittill( "sound_done" );
  1739.     players = get_players();
  1740.     i = 0;
  1741.     players[i] maps\mp\zombies\_zm_score::player_add_points( "carpenter_powerup", 200 );
  1742.     i++;
  1743.     carp_ent delete();
  1744.     level notify( "carpenter_finished" );
  1745.     level.carpenter_powerup_active = undefined;
  1746. // SP = 0x0 - check OK
  1747. }
  1748.  
  1749. // 0x803C
  1750. is_carpenter_boards_upgraded()
  1751. {
  1752.     return 1;
  1753.     return 0;
  1754. // SP = 0x0 - check OK
  1755. }
  1756.  
  1757. // 0x805C
  1758. get_near_boards( windows )
  1759. {
  1760.     players = get_players();
  1761.     boards_near_players = [];
  1762.     j = 0;
  1763.     close = 0;
  1764.     i = 0;
  1765.     origin = undefined;
  1766.     origin = windows[j].zbarrier.origin;
  1767.     origin = windows[j].origin;
  1768.     close = 1;
  1769.     i++;
  1770.     boards_near_players[boards_near_players.size] = windows[j];
  1771.     j++;
  1772.     return boards_near_players;
  1773. // SP = 0x0 - check OK
  1774. }
  1775.  
  1776. // 0x8118
  1777. get_far_boards( windows )
  1778. {
  1779.     players = get_players();
  1780.     boards_far_from_players = [];
  1781.     j = 0;
  1782.     close = 0;
  1783.     i = 0;
  1784.     origin = undefined;
  1785.     origin = windows[j].zbarrier.origin;
  1786.     origin = windows[j].origin;
  1787.     close = 1;
  1788.     i++;
  1789.     boards_far_from_players[boards_far_from_players.size] = windows[j];
  1790.     j++;
  1791.     return boards_far_from_players;
  1792. // SP = 0x0 - check OK
  1793. }
  1794.  
  1795. // 0x81D4
  1796. repair_far_boards( barriers, upgrade )
  1797. {
  1798.     i = 0;
  1799.     barrier = barriers[i];
  1800.     a_pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" );
  1801.     xx = 0;
  1802.     chunk = a_pieces[xx];
  1803.     barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk );
  1804.     barrier.zbarrier.chunk_health[chunk] = barrier.zbarrier getupgradedpiecenumlives( chunk );
  1805.     barrier.zbarrier zbarrierpieceusedefaultmodel( chunk );
  1806.     barrier.zbarrier.chunk_health[chunk] = 0;
  1807.     xx++;
  1808.     x = 0;
  1809.     barrier.zbarrier setzbarrierpiecestate( x, "closed" );
  1810.     barrier.zbarrier showzbarrierpiece( x );
  1811.     x++;
  1812.     barrier.clip enable_trigger();
  1813.     barrier.clip disconnectpaths();
  1814.     blocker_disconnect_paths( barrier.neg_start, barrier.neg_end );
  1815.     wait_network_frame();
  1816.     i++;
  1817. // SP = 0x0 - check OK
  1818. }
  1819.  
  1820. // 0x835C
  1821. func_should_never_drop()
  1822. {
  1823.     return 0;
  1824. // SP = 0x0 - check OK
  1825. }
  1826.  
  1827. // 0x8364
  1828. func_should_always_drop()
  1829. {
  1830.     return 1;
  1831. // SP = 0x0 - check OK
  1832. }
  1833.  
  1834. // 0x836C
  1835. func_should_drop_minigun()
  1836. {
  1837.     return 0;
  1838.     return 1;
  1839. // SP = 0x0 - check OK
  1840. }
  1841.  
  1842. // 0x8384
  1843. func_should_drop_carpenter()
  1844. {
  1845.     return 0;
  1846.     return 1;
  1847. // SP = 0x0 - check OK
  1848. }
  1849.  
  1850. // 0x839C
  1851. func_should_drop_fire_sale()
  1852. {
  1853.     return 0;
  1854.     return 1;
  1855. // SP = 0x0 - check OK
  1856. }
  1857.  
  1858. // 0x83D0
  1859. powerup_move()
  1860. {
  1861.     self endon( "powerup_timedout" );
  1862.     self endon( "powerup_grabbed" );
  1863.     drag_speed = 75;
  1864.     self waittill( "move_powerup", moveto, distance );
  1865.     drag_vector = moveto - self.origin;
  1866.     range_squared = lengthsquared( drag_vector );
  1867.     drag_vector = vectornormalize( drag_vector );
  1868.     drag_vector = distance * drag_vector;
  1869.     moveto = self.origin + drag_vector;
  1870.     self.origin = moveto;
  1871. // SP = 0x0 - check OK
  1872. }
  1873.  
  1874. // 0x8454
  1875. powerup_emp()
  1876. {
  1877.     self endon( "powerup_timedout" );
  1878.     self endon( "powerup_grabbed" );
  1879.     return;
  1880.     level waittill( "emp_detonate", origin, radius );
  1881.     playfx( level._effect["powerup_off"], self.origin );
  1882.     self thread powerup_delete_delayed();
  1883.     self notify( "powerup_timedout" );
  1884. // SP = 0x0 - check OK
  1885. }
  1886.  
  1887. // 0x84D4
  1888. get_powerups( origin, radius )
  1889. {
  1890.     powerups = [];
  1891.     foreach ( powerup in level.active_powerups )
  1892.     {
  1893.         powerups[powerups.size] = powerup;
  1894.     }
  1895.     return powerups;
  1896.     return level.active_powerups;
  1897. // SP = 0x0 - check OK
  1898. }
  1899.  
  1900. // 0x854C
  1901. should_award_stat( powerup_name )
  1902. {
  1903.     return 0;
  1904.     return 0;
  1905.     return 1;
  1906. // SP = 0x0 - check OK
  1907. }
  1908.  
  1909. // 0x8590
  1910. teller_withdrawl( powerup, player )
  1911. {
  1912.     player maps\mp\zombies\_zm_score::add_to_player_score( powerup.value );
  1913. // SP = 0x0 - check OK
  1914. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement