‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
duplicaterender_mgr.csc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 #using scripts\shared\callbacks_shared;
3 #using scripts\shared\clientfield_shared;
4 #using scripts\shared\filter_shared;
5 #using scripts\shared\flag_shared;
6 #using scripts\shared\flagsys_shared;
7 #using scripts\shared\visionset_mgr_shared;
8 #using scripts\shared\util_shared;
9 
10 #insert scripts\shared\duplicaterender.gsh;
11 #insert scripts\shared\shared.gsh;
12 #insert scripts\shared\version.gsh;
13 #insert scripts\shared\abilities\_ability_util.gsh;
14 
15 #using scripts\shared\system_shared;
16 
17 #namespace duplicate_render;
18 
19 #define FRAMEBUFFER_FILTER_SET "framebuffer"
20 #define FRAMEBUFFER_DUPLICATE_FILTER_SET "framebuffer_duplicate"
21 #define OFFSCREEN_FILTER_SET "offscreen"
22 
23 ‪REGISTER_SYSTEM( "duplicate_render", &‪__init__, undefined )
24 
25 #define EQUIPMENT_RETRIEVABLE_MATERIAL "mc/hud_keyline_retrievable"
26 #define EQUIPMENT_UNPLACEABLE_MATERIAL "mc/hud_keyline_unplaceable"
27 #define EQUIPMENT_ENEMYEQUIP_MATERIAL "mc/hud_outline_rim"
28 #define EQUIPMENT_ENEMYVEHICLE_MATERIAL "mc/hud_outline_rim"
29 #define EQUIPMENT_ENEMYEQUIP_DETECT_MATERIAL "mc/hud_outline_rim"
30 #define EQUIPMENT_FRIENDLYEQUIP_MATERIAL "mc/hud_keyline_friendlyequip"
31 #define EQUIPMENT_FRIENDLYVEHICLE_MATERIAL "mc/hud_keyline_friendlyequip"
32 
33 #define PLAYER_THREAT_DETECTOR_MATERIAL "mc/hud_keyline_enemyequip"
34 
35 #define PLAYER_HACKER_TOOL_HACKED "mc/mtl_hacker_tool_hacked"
36 #define PLAYER_HACKER_TOOL_HACKING "mc/mtl_hacker_tool_hacking"
37 #define PLAYER_HACKER_TOOL_BREACHING "mc/mtl_hacker_tool_breaching"
38 
39 #define PLAYER_BALL_OUTLINE "mc/hud_keyline_friendlyequip"
40 
41 function ‪__init__()
42 {
43  ‪DEFAULT(level.drfilters,[]);
44 
47 
51 
54 
63 
65  ‪set_dr_filter_offscreen( "threat_detector_enemy", 10, "threat_detector_enemy", undefined, ‪DR_TYPE_OFFSCREEN, ‪PLAYER_THREAT_DETECTOR_MATERIAL, ‪DR_CULL_NEVER );
66 
67  ‪set_dr_filter_offscreen( "hthacked", 5, "hacker_tool_hacked", undefined, ‪DR_TYPE_OFFSCREEN, ‪PLAYER_HACKER_TOOL_HACKED, ‪DR_CULL_NEVER );
68  ‪set_dr_filter_offscreen( "hthacking", 5, "hacker_tool_hacking", undefined, ‪DR_TYPE_OFFSCREEN, ‪PLAYER_HACKER_TOOL_HACKING, ‪DR_CULL_NEVER );
69  ‪set_dr_filter_offscreen( "htbreaching", 5, "hacker_tool_breaching", undefined, ‪DR_TYPE_OFFSCREEN, ‪PLAYER_HACKER_TOOL_BREACHING, ‪DR_CULL_NEVER );
70 
73 
74 
75  level.friendlyContentOutlines = GetDvarInt( "friendlyContentOutlines", false );
76 }
77 
78 function ‪on_player_spawned( local_client_num )
79 {
80  self.currentdrfilter=[];
81  self ‪change_dr_flags(local_client_num);
82 
83  if( !level ‪flagsys::get( "duplicaterender_registry_ready" ) )
84  {
85  ‪WAIT_CLIENT_FRAME;//We need a frame once player is valid to set up the materials
86  level ‪flagsys::set( "duplicaterender_registry_ready" );
87  }
88 }
89 
90 function ‪on_player_connect( localClientNum )
91 {
92  level ‪wait_team_changed( localClientNum );
93 }
94 
95 function ‪wait_team_changed( localClientNum )
96 {
97  while( 1 )
98  {
99  level waittill( "team_changed" );
100 
101  // the local player might not be valid yet and will cause the team detection functionality not to work
102  while ( !isdefined( GetLocalPlayer( localClientNum ) ) )
103  {
104  wait( ‪SERVER_FRAME );
105  }
106 
107  player = GetLocalPlayer( localClientNum );
108  player Codcaster_Keyline_Enable( false );
109  }
110 }
111 
112 function ‪set_dr_filter( filterset, ‪name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3 )
113 {
114  ‪DEFAULT( level.drfilters, [] );
115  if ( !IsDefined( level.drfilters[ filterset ] ) )
116  {
117  level.drfilters[filterset]=[];
118  }
119  if (!IsDefined(level.drfilters[filterset][‪name]))
120  {
121  level.drfilters[filterset][‪name] = spawnstruct();
122  }
123  filter = level.drfilters[filterset][‪name];
124  filter.name = ‪name;
125  // set priority negative until the materials are registered. This will keep it from being used
126  filter.priority = -priority;
127  if (!IsDefined(require_flags))
128  filter.require = [];
129  else if ( IsArray(require_flags) )
130  filter.require = require_flags;
131  else
132  filter.require = StrTok( require_flags, "," );
133  if (!IsDefined(refuse_flags))
134  filter.refuse = [];
135  else if ( IsArray(refuse_flags) )
136  filter.refuse = refuse_flags;
137  else
138  filter.refuse = StrTok( refuse_flags, "," );
139  filter.types = [];
140  filter.values = [];
141  filter.culling = [];
142  if (IsDefined(drtype1))
143  {
144  idx = filter.types.size;
145  filter.types[idx]=drtype1;
146  filter.values[idx]=drval1;
147  filter.culling[idx]=drcull1;
148  }
149  if (IsDefined(drtype2))
150  {
151  idx = filter.types.size;
152  filter.types[idx]=drtype2;
153  filter.values[idx]=drval2;
154  filter.culling[idx]=drcull2;
155  }
156  if (IsDefined(drtype3))
157  {
158  idx = filter.types.size;
159  filter.types[idx]=drtype3;
160  filter.values[idx]=drval3;
161  filter.culling[idx]=drcull3;
162  }
163 
164  thread ‪register_filter_materials( filter );
165 }
166 
167 function ‪set_dr_filter_framebuffer( ‪name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3 )
168 {
169  ‪set_dr_filter( ‪FRAMEBUFFER_FILTER_SET, ‪name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3 );
170 }
171 
172 function ‪set_dr_filter_framebuffer_duplicate( ‪name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3 )
173 {
174  ‪set_dr_filter( ‪FRAMEBUFFER_DUPLICATE_FILTER_SET, ‪name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3 );
175 }
176 
177 function ‪set_dr_filter_offscreen( ‪name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3 )
178 {
179  ‪set_dr_filter( ‪OFFSCREEN_FILTER_SET, ‪name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3 );
180 }
181 
183 {
184  playerCount = undefined;
185  opts = filter.types.size;
186  for ( i=0; i<opts; i++ )
187  {
188  value = filter.values[i];
189  if ( IsString( value ) )
190  {
191  if ( !IsDefined(playerCount) )
192  {
193  while( !isDefined(level.localPlayers) && !isDefined(level.frontendClientConnected) )
194  {
196  }
197  if( isDefined(level.frontendClientConnected) )
198  {
199  playerCount = 1;
200  }
201  else
202  {
204  playerCount = level.localPlayers.size;
205  }
206  }
207  if ( !IsDefined(‪filter::mapped_material_id( value ) ) )
208  {
209  for ( localClientNum = 0; localClientNum < playerCount; localClientNum++ )
210  {
211  ‪filter::map_material_helper_by_localclientnum( localClientNum, value );
212  }
213  }
214  }
215  }
216 
217  // make it usable
218  filter.priority = abs( filter.priority );
219 }
220 
221 function ‪update_dr_flag( localClientNum, toset, setto=true )
222 {
223  if ( ‪set_dr_flag( toset, setto ) )
224  {
225  ‪update_dr_filters(localClientNum);
226  }
227 }
228 
229 
230 function ‪set_dr_flag_not_array( toset, setto=true )
231 {
232  if ( !IsDefined( self.flag ) || !IsDefined( self.flag[toset] ) )
233  {
234  self ‪flag::init(toset);
235  }
236 
237  if ( setto == self.flag[toset] )
238  {
239  return false;
240  }
241  if ( ‪IS_TRUE(setto) )
242  {
243  self ‪flag::set(toset);
244  }
245  else
246  {
247  self ‪flag::clear(toset);
248  }
249  return true;
250 }
251 function ‪set_dr_flag( toset, setto=true )
252 {
253  Assert( IsDefined(setto) );
254 
255  if ( IsArray(toset))
256  {
257  foreach( ts in toset )
258  {
259  ‪set_dr_flag( ts, setto );
260  }
261  return;
262  }
263 
264  if ( !IsDefined( self.flag ) || !IsDefined( self.flag[toset] ) )
265  {
266  self ‪flag::init(toset);
267  }
268 
269  if ( setto == self.flag[toset] )
270  {
271  return false;
272  }
273  if ( ‪IS_TRUE(setto) )
274  {
275  self ‪flag::set(toset);
276  }
277  else
278  {
279  self ‪flag::clear(toset);
280  }
281  return true;
282 }
283 
284 function ‪clear_dr_flag( toclear )
285 {
286  ‪set_dr_flag( toclear, false );
287 }
288 
289 function ‪change_dr_flags( localClientNum, toset, toclear )
290 {
291  if ( IsDefined(toset) )
292  {
293  if( IsString( toset ) )
294  {
295  toset = StrTok( toset, "," );
296  }
297  self ‪set_dr_flag(toset);
298  }
299  if ( IsDefined(toclear) )
300  {
301  if( IsString( toclear ) )
302  {
303  toclear = StrTok( toclear, "," );
304  }
305  self ‪clear_dr_flag(toclear);
306  }
307 
308  ‪update_dr_filters(localClientNum);
309 }
310 
311 function ‪_update_dr_filters(localClientNum)
312 {
313  self notify("update_dr_filters");
314  self endon("update_dr_filters");
315  self endon("entityshutdown");
316 
317  waittillframeend;
318 
319  foreach( key, filterset in level.drfilters )
320  {
321  filter = self ‪find_dr_filter(filterset);
322  if ( isdefined(filter) && (!isdefined(self.currentdrfilter) || !‪IS_EQUAL(self.currentdrfilter[key],filter.name) ) )
323  {
324  self ‪apply_filter( localClientNum, filter, key );
325  }
326  }
327 }
328 
329 function ‪update_dr_filters(localClientNum)
330 {
331  self thread ‪_update_dr_filters(localClientNum);
332 }
333 
334 function ‪find_dr_filter( filterset = level.drfilters[‪FRAMEBUFFER_FILTER_SET] )
335 {
336  best = undefined;
337  foreach( filter in filterset )
338  {
339  if ( self ‪can_use_filter( filter ) )
340  {
341  if (!IsDefined(best) || filter.priority > best.priority)
342  {
343  best = filter;
344  }
345  }
346  }
347  return best;
348 }
349 
350 function ‪can_use_filter( filter )
351 {
352  for ( i = 0; i < filter.require.size; i++ )
353  {
354  if ( !self ‪flagsys::get( filter.require[i] ))
355  return false;
356  }
357  for ( i = 0; i < filter.refuse.size; i++ )
358  {
359  if ( self ‪flagsys::get( filter.refuse[i] ))
360  return false;
361  }
362  return true;
363 }
364 
365 function ‪apply_filter( localClientNum, filter, filterset = ‪FRAMEBUFFER_FILTER_SET )
366 {
367  if ( IsDefined( level.postGame ) && level.postGame && !‪IS_TRUE( level.showedTopThreePlayers ) )
368  {
369  player = GetLocalPlayer( localClientNum );
370  if ( !(player GetInKillcam( localClientNum )) )
371  return;
372  }
373 
374  if (!IsDefined(self.currentdrfilter))
375  self.currentdrfilter=[];
376  self.currentdrfilter[filterset]=filter.name;
377  opts = filter.types.size;
378  for ( i=0; i<opts; i++ )
379  {
380  type = filter.types[i];
381  value = filter.values[i];
382  culling = filter.culling[i];
383  material = undefined;
384  if ( IsString( value ) )
385  {
386  material = ‪filter::mapped_material_id( value );
388  if (IsDefined(value) && IsDefined(material))
389  {
390  // right now all duplicate rendering is see through walls
391  self addduplicaterenderoption( type, value, material, culling );
392  }
393  else
394  {
395  self.currentdrfilter[filterset]=undefined;
396  }
397  }
398  else
399  {
400  self addduplicaterenderoption( type, value, -1, culling );
401  }
402  }
403 
404  if( SessionModeIsMultiplayerGame() ) // Save client script vars for other game modes
405  {
407  }
408 }
409 
411 {
412  self endon("entityshutdown");
413  self notify("disable_all_filters_on_game_ended");
414  self endon("disable_all_filters_on_game_ended");
415 
416  level waittill( "post_game" );
417 
418  self disableduplicaterendering();
419 }
420 
421 
422 //===================================================================================
423 
424 function ‪set_item_retrievable( localClientNum, on_off )
425 {
426  self ‪update_dr_flag( localClientNum, "retrievable", on_off );
427 }
428 
429 function ‪set_item_unplaceable( localClientNum, on_off )
430 {
431  self ‪update_dr_flag( localClientNum, "unplaceable", on_off );
432 }
433 
434 function ‪set_item_enemy_equipment( localClientNum, on_off )
435 {
436  self ‪update_dr_flag( localClientNum, "enemyequip", on_off );
437 }
438 
439 function ‪set_item_friendly_equipment( localClientNum, on_off )
440 {
441  self ‪update_dr_flag( localClientNum, "friendlyequip", on_off );
442 }
443 
444 function ‪set_item_enemy_explosive( localClientNum, on_off )
445 {
446  self ‪update_dr_flag( localClientNum, "enemyexplo", on_off );
447 }
448 
449 function ‪set_item_friendly_explosive( localClientNum, on_off )
450 {
451  self ‪update_dr_flag( localClientNum, "friendlyexplo", on_off );
452 }
453 
454 function ‪set_item_enemy_vehicle( localClientNum, on_off )
455 {
456  self ‪update_dr_flag( localClientNum, "enemyvehicle", on_off );
457 }
458 
459 function ‪set_item_friendly_vehicle( localClientNum, on_off )
460 {
461  self ‪update_dr_flag( localClientNum, "friendlyvehicle", on_off );
462 }
463 
464 function ‪set_entity_thermal( localClientNum, on_off )
465 {
466  self ‪update_dr_flag( localClientNum, "infrared_entity", on_off );
467 }
468 
469 function ‪set_player_threat_detected( localClientNum, on_off )
470 {
471  self ‪update_dr_flag( localClientNum, "threat_detector_enemy", on_off );
472 }
473 
474 
475 function ‪set_hacker_tool_hacked( localClientNum,on_off )
476 {
477  self ‪update_dr_flag( localClientNum, "hacker_tool_hacked", on_off );
478 }
479 
480 
481 function ‪set_hacker_tool_hacking( localClientNum, on_off )
482 {
483  self ‪update_dr_flag( localClientNum,"hacker_tool_hacking", on_off );
484 }
485 
486 
487 function ‪set_hacker_tool_breaching( localClientNum, on_off )
488 {
489  flags_changed = self ‪set_dr_flag( "hacker_tool_breaching", on_off );
490  if ( on_off )
491  {
492  flags_changed = self ‪set_dr_flag( "enemyvehicle", false ) || flags_changed;
493  }
494  else
495  {
496  if ( ‪IS_TRUE( self.isEnemyVehicle ) )
497  {
498  flags_changed = self ‪set_dr_flag( "enemyvehicle", true ) || flags_changed;
499  }
500  }
501 
502  if ( flags_changed )
503  {
504  ‪update_dr_filters(localClientNum);
505  }
506 }
507 
508 function ‪show_friendly_outlines( local_client_num )
509 {
510  if ( !‪IS_TRUE( level.friendlyContentOutlines ) )
511  return false;
512 
513  if ( IsShoutcaster( local_client_num ) )
514  return false;
515 
516  return true;
517 }
518 
‪set_item_retrievable
‪function set_item_retrievable(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:424
‪DR_METHOD_ENEMY_MATERIAL
‪#define DR_METHOD_ENEMY_MATERIAL
Definition: duplicaterender.gsh:12
‪on_player_spawned
‪function on_player_spawned(local_client_num)
Definition: duplicaterender_mgr.csc:78
‪set_dr_filter_framebuffer_duplicate
‪function set_dr_filter_framebuffer_duplicate(name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3)
Definition: duplicaterender_mgr.csc:172
‪map_material_helper_by_localclientnum
‪function map_material_helper_by_localclientnum(localClientNum, materialname)
Definition: filter_shared.csc:12
‪DR_METHOD_THERMAL_MATERIAL
‪#define DR_METHOD_THERMAL_MATERIAL
Definition: duplicaterender.gsh:10
‪_update_dr_filters
‪function _update_dr_filters(localClientNum)
Definition: duplicaterender_mgr.csc:311
‪disable_all_filters_on_game_ended
‪function disable_all_filters_on_game_ended()
Definition: duplicaterender_mgr.csc:410
‪EQUIPMENT_ENEMYEQUIP_DETECT_MATERIAL
‪#define EQUIPMENT_ENEMYEQUIP_DETECT_MATERIAL
Definition: duplicaterender_mgr.csc:29
‪PLAYER_HACKER_TOOL_HACKED
‪#define PLAYER_HACKER_TOOL_HACKED
Definition: duplicaterender_mgr.csc:35
‪clear
‪function clear(str_flag)
Definition: flag_shared.csc:130
‪clear_dr_flag
‪function clear_dr_flag(toclear)
Definition: duplicaterender_mgr.csc:284
‪DR_CULL_ALWAYS
‪#define DR_CULL_ALWAYS
Definition: duplicaterender.gsh:14
‪apply_filter
‪function apply_filter(localClientNum, filter, filterset=FRAMEBUFFER_FILTER_SET)
Definition: duplicaterender_mgr.csc:365
‪update_dr_filters
‪function update_dr_filters(localClientNum)
Definition: duplicaterender_mgr.csc:329
‪wait_team_changed
‪function wait_team_changed(localClientNum)
Definition: duplicaterender_mgr.csc:95
‪DR_TYPE_OFFSCREEN
‪#define DR_TYPE_OFFSCREEN
Definition: duplicaterender.gsh:6
‪FRAMEBUFFER_FILTER_SET
‪#define FRAMEBUFFER_FILTER_SET
Definition: duplicaterender_mgr.csc:19
‪DR_METHOD_CUSTOM_MATERIAL
‪#define DR_METHOD_CUSTOM_MATERIAL
Definition: duplicaterender.gsh:11
‪set_dr_flag_not_array
‪function set_dr_flag_not_array(toset, setto=true)
Definition: duplicaterender_mgr.csc:230
‪set_item_enemy_equipment
‪function set_item_enemy_equipment(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:434
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪DR_METHOD_OFF
‪#define DR_METHOD_OFF
Definition: duplicaterender.gsh:8
‪get
‪function get(kvp_value, kvp_key="targetname")
Definition: struct.csc:13
‪EQUIPMENT_ENEMYEQUIP_MATERIAL
‪#define EQUIPMENT_ENEMYEQUIP_MATERIAL
Definition: duplicaterender_mgr.csc:27
‪set_dr_filter
‪function set_dr_filter(filterset, name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3)
Definition: duplicaterender_mgr.csc:112
‪set_hacker_tool_breaching
‪function set_hacker_tool_breaching(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:487
‪set_player_threat_detected
‪function set_player_threat_detected(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:469
‪PLAYER_THREAT_DETECTOR_MATERIAL
‪#define PLAYER_THREAT_DETECTOR_MATERIAL
Definition: duplicaterender_mgr.csc:33
‪can_use_filter
‪function can_use_filter(filter)
Definition: duplicaterender_mgr.csc:350
‪EQUIPMENT_RETRIEVABLE_MATERIAL
‪#define EQUIPMENT_RETRIEVABLE_MATERIAL
Definition: duplicaterender_mgr.csc:25
‪__init__
‪function __init__()
Definition: duplicaterender_mgr.csc:41
‪set_hacker_tool_hacked
‪function set_hacker_tool_hacked(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:475
‪DEFAULT
‪#define DEFAULT(__var, __default)
Definition: shared.gsh:270
‪EQUIPMENT_FRIENDLYEQUIP_MATERIAL
‪#define EQUIPMENT_FRIENDLYEQUIP_MATERIAL
Definition: duplicaterender_mgr.csc:30
‪on_spawned
‪function on_spawned(func, obj)
Definition: callbacks_shared.csc:245
‪on_localclient_connect
‪function on_localclient_connect(localClientNum)
Definition: ctf.csc:20
‪DR_CULL_NEVER
‪#define DR_CULL_NEVER
Definition: duplicaterender.gsh:15
‪set_item_enemy_vehicle
‪function set_item_enemy_vehicle(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:454
‪set_item_unplaceable
‪function set_item_unplaceable(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:429
‪set_hacker_tool_hacking
‪function set_hacker_tool_hacking(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:481
‪SERVER_FRAME
‪#define SERVER_FRAME
Definition: shared.gsh:264
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪set_item_friendly_explosive
‪function set_item_friendly_explosive(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:449
‪DR_TYPE_FRAMEBUFFER
‪#define DR_TYPE_FRAMEBUFFER
Definition: duplicaterender.gsh:4
‪on_player_connect
‪function on_player_connect(localClientNum)
Definition: duplicaterender_mgr.csc:90
‪set_item_friendly_equipment
‪function set_item_friendly_equipment(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:439
‪init
‪function init()
Definition: struct.csc:1
‪PLAYER_HACKER_TOOL_BREACHING
‪#define PLAYER_HACKER_TOOL_BREACHING
Definition: duplicaterender_mgr.csc:37
‪PLAYER_HACKER_TOOL_HACKING
‪#define PLAYER_HACKER_TOOL_HACKING
Definition: duplicaterender_mgr.csc:36
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪EQUIPMENT_UNPLACEABLE_MATERIAL
‪#define EQUIPMENT_UNPLACEABLE_MATERIAL
Definition: duplicaterender_mgr.csc:26
‪IS_EQUAL
‪#define IS_EQUAL(__a, __b)
Definition: shared.gsh:250
‪waitforallclients
‪function waitforallclients()
Definition: util_shared.csc:36
‪set_dr_filter_offscreen
‪function set_dr_filter_offscreen(name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3)
Definition: duplicaterender_mgr.csc:177
‪FRAMEBUFFER_DUPLICATE_FILTER_SET
‪#define FRAMEBUFFER_DUPLICATE_FILTER_SET
Definition: duplicaterender_mgr.csc:20
‪EQUIPMENT_FRIENDLYVEHICLE_MATERIAL
‪#define EQUIPMENT_FRIENDLYVEHICLE_MATERIAL
Definition: duplicaterender_mgr.csc:31
‪set_entity_thermal
‪function set_entity_thermal(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:464
‪set_item_enemy_explosive
‪function set_item_enemy_explosive(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:444
‪update_dr_flag
‪function update_dr_flag(localClientNum, toset, setto=true)
Definition: duplicaterender_mgr.csc:221
‪set_item_friendly_vehicle
‪function set_item_friendly_vehicle(localClientNum, on_off)
Definition: duplicaterender_mgr.csc:459
‪register_filter_materials
‪function register_filter_materials(filter)
Definition: duplicaterender_mgr.csc:182
‪set_dr_flag
‪function set_dr_flag(toset, setto=true)
Definition: duplicaterender_mgr.csc:251
‪name
‪class GroundFx name
‪WAIT_CLIENT_FRAME
‪#define WAIT_CLIENT_FRAME
Definition: shared.gsh:266
‪change_dr_flags
‪function change_dr_flags(localClientNum, toset, toclear)
Definition: duplicaterender_mgr.csc:289
‪OFFSCREEN_FILTER_SET
‪#define OFFSCREEN_FILTER_SET
Definition: duplicaterender_mgr.csc:21
‪find_dr_filter
‪function find_dr_filter(filterset=level.drfilters[FRAMEBUFFER_FILTER_SET])
Definition: duplicaterender_mgr.csc:334
‪set_dr_filter_framebuffer
‪function set_dr_filter_framebuffer(name, priority, require_flags, refuse_flags, drtype1, drval1, drcull1, drtype2, drval2, drcull2, drtype3, drval3, drcull3)
Definition: duplicaterender_mgr.csc:167
‪mapped_material_id
‪function mapped_material_id(materialname)
Definition: filter_shared.csc:35
‪show_friendly_outlines
‪function show_friendly_outlines(local_client_num)
Definition: duplicaterender_mgr.csc:508
‪DR_METHOD_DEFAULT_MATERIAL
‪#define DR_METHOD_DEFAULT_MATERIAL
Definition: duplicaterender.gsh:9
‪DR_TYPE_FRAMEBUFFER_DUPLICATE
‪#define DR_TYPE_FRAMEBUFFER_DUPLICATE
Definition: duplicaterender.gsh:5