1 #using scripts\codescripts\struct;
3 #using scripts\shared\array_shared;
4 #using scripts\shared\clientfield_shared;
5 #using scripts\shared\flag_shared;
6 #using scripts\shared\util_shared;
8 #insert scripts\shared\shared.gsh;
10 #using scripts\shared\ai\zombie_utility;
12 #using scripts\zm\_util;
13 #using scripts\zm\_zm;
14 #using scripts\zm\_zm_utility;
16 #namespace zm_game_module;
21 function register_game_module(index,module_name,pre_init_func,post_init_func,pre_init_zombie_spawn_func,post_init_zombie_spawn_func,hub_start_func)
23 if(!isdefined(level._game_modules))
25 level._game_modules = [];
26 level._num_registered_game_modules = 0;
29 for(i=0;i<level._num_registered_game_modules;i++)
31 if(!isdefined(level._game_modules[i]))
35 if(isdefined(level._game_modules[i].index) && level._game_modules[i].index == index)
37 assert(level._game_modules[i].index != index,
"A Game module is already registered for index (" + index +
")" );
41 level._game_modules[level._num_registered_game_modules] = spawnstruct();
42 level._game_modules[level._num_registered_game_modules].index = index;
43 level._game_modules[level._num_registered_game_modules].module_name = module_name;
44 level._game_modules[level._num_registered_game_modules].pre_init_func = pre_init_func;
45 level._game_modules[level._num_registered_game_modules].post_init_func = post_init_func;
46 level._game_modules[level._num_registered_game_modules].pre_init_zombie_spawn_func = pre_init_zombie_spawn_func;
47 level._game_modules[level._num_registered_game_modules].post_init_zombie_spawn_func = post_init_zombie_spawn_func;
48 level._game_modules[level._num_registered_game_modules].hub_start_func = hub_start_func;
49 level._num_registered_game_modules++;
54 if(!isdefined(game_module_index))
56 level.current_game_module = level.GAME_MODULE_CLASSIC_INDEX;
57 level.scr_zm_game_module = level.GAME_MODULE_CLASSIC_INDEX;
62 if(!isdefined(game_module))
64 assert(isdefined(game_module),
"unknown game module (" + game_module_index +
")" );
68 level.current_game_module = game_module_index;
79 if(!isdefined(game_module_index))
84 for(i=0;i<level._game_modules.size;i++)
86 if(level._game_modules[i].index == game_module_index)
88 return level._game_modules[i];
100 if(!isdefined(current_module) || !isdefined(current_module.pre_init_zombie_spawn_func))
105 self [[current_module.pre_init_zombie_spawn_func]]();
114 if(!isdefined(current_module) || !isdefined(current_module.post_init_zombie_spawn_func))
119 self [[current_module.post_init_zombie_spawn_func]]();
124 players = GetPlayers();
125 for(i=0;i<players.size;i++)
133 players = GetPlayers();
134 foreach(player
in players)
136 if(player.sessionstate ==
"spectator")
138 if(isdefined(player.spectate_hud))
142 player [[level.spawnPlayer]]();
150 if(isdefined(eAttacker) && isplayer( eAttacker) && eAttacker ==
self)
154 if(isdefined(eAttacker) && !isPlayer(eAttacker))
158 if(!isdefined(eAttacker))
168 players = GetPlayers();
169 foreach(player
in players)
171 player [[level.spawnPlayer]]();
178 level notify(
"restart_round" );
180 if ( target_round < 1 )
185 level.zombie_total = 0;
189 if ( isdefined( zombies ) )
191 for (i = 0; i < zombies.size; i++)
193 zombies[i] dodamage(zombies[i].health + 666, zombies[i].origin);
207 self closeInGameMenu();
209 level endon(
"stop_intermission" );
210 self endon(
"disconnect");
212 self notify(
"_zombie_game_over" );
215 self.score =
self.score_total;
217 self.sessionstate =
"intermission";
218 self.spectatorclient = -1;
219 self.killcamentity = -1;
220 self.archivetime = 0;
221 self.psoffsettime = 0;
222 self.friendlydamage = undefined;
224 s_point =
struct::get(intermission_struct,
"targetname");
226 if(!isdefined(level.intermission_cam_model))
228 level.intermission_cam_model =
spawn(
"script_model",s_point.origin);
229 level.intermission_cam_model.angles = s_point.angles;
230 level.intermission_cam_model setmodel(
"tag_origin");
232 self.game_over_bg = NewClientHudelem(
self );
233 self.game_over_bg.horzAlign =
"fullscreen";
234 self.game_over_bg.vertAlign =
"fullscreen";
235 self.game_over_bg SetShader(
"black", 640, 480 );
236 self.game_over_bg.alpha = 1;
238 self spawn( level.intermission_cam_model.origin, level.intermission_cam_model.angles );
239 self CameraSetPosition( level.intermission_cam_model );
240 self CameraSetLookAt();
241 self CameraActivate(
true );
242 self linkto(level.intermission_cam_model);
243 level.intermission_cam_model moveto(
struct::get(s_point.target,
"targetname").origin,12);
244 if(isdefined(level.intermission_cam_model.angles))
246 level.intermission_cam_model rotateto(
struct::get(s_point.target,
"targetname").angles,12);
248 self.game_over_bg FadeOverTime( 2 );
249 self.game_over_bg.alpha = 0;
256 level endon(
"stop_fireworks");
261 launch_spots =array::randomize(launch_spots);
263 foreach(spot
in launch_spots)
266 wait(randomfloatrange(min_wait,max_wait));
268 wait(randomfloatrange(min_wait,max_wait));
274 firework =
spawn(
"script_model",launch_spot.origin + (randomintrange(-60,60),randomintrange(-60,60),0));
275 firework setmodel(
"tag_origin");
277 PlayFXOnTag( level._effect[
"fw_trail_cheap" ], firework,
"tag_origin" );
278 firework playloopsound(
"zmb_souls_loop", .75 );
282 while(isdefined(dest) && isdefined(dest.target))
284 random_offset = (randomintrange(-60,60),randomintrange(-60,60),0);
286 new_dest = array::random(new_dests);
288 dist = distance(new_dest.origin + random_offset,firework.origin);
290 firework MoveTo(new_dest.origin + random_offset, time);
291 firework waittill(
"movedone");
293 firework playsound(
"zmb_souls_end");
295 playfx(level._effect[
"fw_pre_burst"],firework.origin);