‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
drown.csc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\util_shared;
5 #using scripts\shared\system_shared;
6 #using scripts\shared\filter_shared;
7 #using scripts\shared\visionset_mgr_shared;
8 #using scripts\shared\clientfield_shared;
9 #using scripts\shared\math_shared;
10 
11 #insert scripts\shared\shared.gsh;
12 #insert scripts\shared\version.gsh;
13 #insert scripts\shared\drown.gsh;
14 
15 #namespace drown;
16 
17 #define DROWN_FRAME_PASS 1
18 #define DROWN_BLUR_DURATION 500
19 #define DROWN_FADE_DURATION 250
20 
21 #define DROWN_RADIUS_SCALE 1.41421 // sqr( 2 )
22 
23 // keep all these between 0 and 1, they will be scaled by DROWN_RADIUS_SCALE later
24 // where 0 is center, 1 is corner
25 #define RADIUS_INNER_STAGE_1_BEGIN .8
26 #define RADIUS_INNER_STAGE_1_END .5
27 #define RADIUS_OUTER_STAGE_1_BEGIN 1
28 #define RADIUS_OUTER_STAGE_1_END .8
29 
30 #define RADIUS_INNER_STAGE_2_BEGIN .6
31 #define RADIUS_INNER_STAGE_2_END .3
32 #define RADIUS_OUTER_STAGE_2_BEGIN .8
33 #define RADIUS_OUTER_STAGE_2_END .6
34 
35 #define RADIUS_INNER_STAGE_3_BEGIN .6
36 #define RADIUS_INNER_STAGE_3_END .3
37 #define RADIUS_OUTER_STAGE_3_BEGIN .8
38 #define RADIUS_OUTER_STAGE_3_END .6
39 
40 #define RADIUS_INNER_STAGE_4_BEGIN .5
41 #define RADIUS_INNER_STAGE_4_END .2
42 #define RADIUS_OUTER_STAGE_4_BEGIN .7
43 #define RADIUS_OUTER_STAGE_4_END .5
44 
45 //OPACTIY
46 #define OPACITY_STAGE_1_BEGIN .4
47 #define OPACITY_STAGE_1_END .5
48 
49 #define OPACITY_STAGE_2_BEGIN .5
50 #define OPACITY_STAGE_2_END .6
51 
52 #define OPACITY_STAGE_3_BEGIN .6
53 #define OPACITY_STAGE_3_END .7
54 
55 #define OPACITY_STAGE_4_BEGIN .6
56 #define OPACITY_STAGE_4_END .7
57 
58 
59 ‪REGISTER_SYSTEM( "drown", &‪__init__, undefined )
60 
61 function ‪__init__()
62 {
65 
66  level.playerMaxHealth = GetGametypeSetting( "playerMaxHealth" );
67  level.player_swim_damage_interval = GetDvarFloat( "player_swimDamagerInterval", 5000 ) * 1000;
68  level.player_swim_damage = GetDvarFloat( "player_swimDamage", 5000 );
69  level.player_swim_time = GetDvarFloat( "player_swimTime", 5000 ) * 1000;
70  level.player_swim_death_time = ( level.playerMaxHealth / level.player_swim_damage ) * level.player_swim_damage_interval + ‪DROWN_START_BEFORE_DAMAGE_TIME;
71 
83 
85 }
86 
88 {
89  level.drown_radius["inner"]["begin"][‪DROWN_STAGE_1] = ‪RADIUS_INNER_STAGE_1_BEGIN;
90  level.drown_radius["inner"]["begin"][‪DROWN_STAGE_2] = ‪RADIUS_INNER_STAGE_2_BEGIN;
91  level.drown_radius["inner"]["begin"][‪DROWN_STAGE_3] = ‪RADIUS_INNER_STAGE_3_BEGIN;
92  level.drown_radius["inner"]["begin"][‪DROWN_STAGE_4] = ‪RADIUS_INNER_STAGE_4_BEGIN;
93 
94  level.drown_radius["inner"]["end"][‪DROWN_STAGE_1] = ‪RADIUS_INNER_STAGE_1_END;
95  level.drown_radius["inner"]["end"][‪DROWN_STAGE_2] = ‪RADIUS_INNER_STAGE_2_END;
96  level.drown_radius["inner"]["end"][‪DROWN_STAGE_3] = ‪RADIUS_INNER_STAGE_3_END;
97  level.drown_radius["inner"]["end"][‪DROWN_STAGE_4] = ‪RADIUS_INNER_STAGE_4_END;
98 
99  level.drown_radius["outer"]["begin"][‪DROWN_STAGE_1] = ‪RADIUS_OUTER_STAGE_1_BEGIN;
100  level.drown_radius["outer"]["begin"][‪DROWN_STAGE_2] = ‪RADIUS_OUTER_STAGE_2_BEGIN;
101  level.drown_radius["outer"]["begin"][‪DROWN_STAGE_3] = ‪RADIUS_OUTER_STAGE_3_BEGIN;
102  level.drown_radius["outer"]["begin"][‪DROWN_STAGE_4] = ‪RADIUS_OUTER_STAGE_4_BEGIN;
103 
104  level.drown_radius["outer"]["end"][‪DROWN_STAGE_1] = ‪RADIUS_OUTER_STAGE_1_END;
105  level.drown_radius["outer"]["end"][‪DROWN_STAGE_2] = ‪RADIUS_OUTER_STAGE_2_END;
106  level.drown_radius["outer"]["end"][‪DROWN_STAGE_3] = ‪RADIUS_OUTER_STAGE_3_END;
107  level.drown_radius["outer"]["end"][‪DROWN_STAGE_4] = ‪RADIUS_OUTER_STAGE_4_END;
108 
109 
110  level.opacity["begin"][‪DROWN_STAGE_1] = ‪OPACITY_STAGE_1_BEGIN;
111  level.opacity["begin"][‪DROWN_STAGE_2] = ‪OPACITY_STAGE_2_BEGIN;
112  level.opacity["begin"][‪DROWN_STAGE_3] = ‪OPACITY_STAGE_3_BEGIN;
113  level.opacity["begin"][‪DROWN_STAGE_4] = ‪OPACITY_STAGE_4_BEGIN;
114 
115  level.opacity["end"][‪DROWN_STAGE_1] = ‪OPACITY_STAGE_1_END;
116  level.opacity["end"][‪DROWN_STAGE_2] = ‪OPACITY_STAGE_2_END;
117  level.opacity["end"][‪DROWN_STAGE_3] = ‪OPACITY_STAGE_3_END;
118  level.opacity["end"][‪DROWN_STAGE_4] = ‪OPACITY_STAGE_4_END;
119 }
120 
121 function ‪player_spawned( localClientNum )
122 {
123  if( self != GetLocalPlayer( localClientNum ) )
124  return;
125 
127  self thread ‪player_watch_drown_shutdown( localClientNum );
128 }
129 
131 {
132  if( !isDefined( self.drown_start_time ) )
133  {
134  self.drown_start_time = 0;
135  self.drown_outerRadius = 0;
136  self.drown_innerRadius = 0;
137  self.drown_opacity = 0;
138  }
139 }
140 
141 function ‪player_watch_drown_shutdown( localClientNum )
142 {
143  self ‪util::waittill_any ( "entityshutdown", "death" );
144  self ‪disable_drown( localClientNum );
145 }
146 
147 function ‪enable_drown( localClientNum , stage )
148 {
149  ‪filter::init_filter_drowning_damage( localClientNum );
151  self.drown_start_time = GetServerTime( localClientNum ) - ( stage - 1 ) * level.player_swim_damage_interval;
152  self.drown_outerRadius = 0;
153  self.drown_innerRadius = 0;
154  self.drown_opacity = 0;
155 }
156 
157 function ‪disable_drown( localClientNum )
158 {
160 }
161 
162 function ‪player_drown_fx( localClientNum, stage )
163 {
164  self endon ( "death" );
165  self endon ( "entityshutdown" );
166  self endon ( "player_fade_out_drown_fx" );
167  self notify ( "player_drown_fx" );
168  self endon ( "player_drown_fx" );
169 
171 
172  lastOutWaterTimeStage = self.drown_start_time + ( stage - 1 ) * level.player_swim_damage_interval;
173 
174  stageDuration = level.player_swim_damage_interval;
175  if( stage == ‪DROWN_STAGE_1 )
176  {
177  stageDuration = ‪DROWN_START_BEFORE_DAMAGE_TIME;
178  }
179 
180  while( 1 )
181  {
182  currentTime = GetServerTime( localClientNum );
183  elapsedTime = currentTime - self.drown_start_time;
184 
185  stageRatio = ‪math::clamp( ( currentTime - lastOutWaterTimeStage ) / stageDuration, 0.0, 1.0 );
186  self.drown_outerRadius = lerpFloat(level.drown_radius["outer"]["begin"][stage], level.drown_radius["outer"]["end"][stage], stageRatio ) * ‪DROWN_RADIUS_SCALE;
187  self.drown_innerRadius = lerpFloat(level.drown_radius["inner"]["begin"][stage], level.drown_radius["inner"]["end"][stage], stageRatio ) * ‪DROWN_RADIUS_SCALE;
188  self.drown_opacity = lerpFloat(level.opacity["begin"][stage], level.opacity["end"][stage], stageRatio );
189 
190  ‪filter::set_filter_drowning_damage_inner_radius( localClientNum, ‪DROWN_FRAME_PASS, self.drown_innerRadius );
191  ‪filter::set_filter_drowning_damage_outer_radius( localClientNum, ‪DROWN_FRAME_PASS, self.drown_outerRadius );
192  ‪filter::set_filter_drowning_damage_opacity( localClientNum, ‪DROWN_FRAME_PASS, self.drown_opacity );
193 
195  }
196 }
197 
198 function ‪player_fade_out_drown_fx( localClientNum )
199 {
200  self endon ( "death" );
201  self endon ( "entityshutdown" );
202  self endon ( "player_drown_fx" );
203  self notify ( "player_fade_out_drown_fx" );
204  self endon ( "player_fade_out_drown_fx" );
205 
207 
208  fadeStartTime = GetServerTime( localClientNum );
209  currentTime = GetServerTime( localClientNum );
210  while( currentTime - fadeStartTime < ‪DROWN_FADE_DURATION )
211  {
212  ratio = ( currentTime - fadeStartTime ) / ‪DROWN_FADE_DURATION;
213  outerRadius = lerpFloat( self.drown_outerRadius, ‪DROWN_RADIUS_SCALE, ratio );
214  innerRadius = lerpFloat( self.drown_innerRadius, ‪DROWN_RADIUS_SCALE, ratio );
215  opacity = lerpFloat( self.drown_opacity, 0, ratio );
216 
220 
222  currentTime = GetServerTime( localClientNum );
223  }
224 
225  self ‪disable_drown( localClientNum );
226 }
227 
228 function ‪drown_stage_callback( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
229 {
230  if( newVal > ‪DROWN_STAGE_NONE )
231  {
232  self ‪enable_drown( localClientNum, newVal );
233  self thread ‪player_drown_fx( localClientNum, newVal );
234  }
235  else if( !bNewEnt )
236  {
237  self thread ‪player_fade_out_drown_fx( localClientNum );
238  }
239  else
240  {
241  self ‪disable_drown( localClientNum );
242  }
243 }
‪DROWN_OVERLAY_SHOULD_VELOCITY_SCALE
‪#define DROWN_OVERLAY_SHOULD_VELOCITY_SCALE
Definition: drown.gsh:9
‪DROWN_OVERLAY_LERP_COUNT
‪#define DROWN_OVERLAY_LERP_COUNT
Definition: drown.gsh:5
‪RADIUS_OUTER_STAGE_4_END
‪#define RADIUS_OUTER_STAGE_4_END
Definition: drown.csc:43
‪on_localplayer_spawned
‪function on_localplayer_spawned(local_client_num)
Definition: _perks.csc:109
‪DROWN_FRAME_PASS
‪#define DROWN_FRAME_PASS
Definition: drown.csc:17
‪RADIUS_INNER_STAGE_1_END
‪#define RADIUS_INNER_STAGE_1_END
Definition: drown.csc:26
‪__init__
‪function __init__()
Definition: drown.csc:61
‪RADIUS_OUTER_STAGE_3_END
‪#define RADIUS_OUTER_STAGE_3_END
Definition: drown.csc:38
‪OPACITY_STAGE_4_END
‪#define OPACITY_STAGE_4_END
Definition: drown.csc:56
‪DROWN_OVERLAY_BLUR_AMOUNT
‪#define DROWN_OVERLAY_BLUR_AMOUNT
Definition: drown.gsh:6
‪RADIUS_OUTER_STAGE_1_END
‪#define RADIUS_OUTER_STAGE_1_END
Definition: drown.csc:28
‪DROWN_OVERLAY_TIME_FADE_IN
‪#define DROWN_OVERLAY_TIME_FADE_IN
Definition: drown.gsh:12
‪DROWN_FADE_DURATION
‪#define DROWN_FADE_DURATION
Definition: drown.csc:19
‪OPACITY_STAGE_3_BEGIN
‪#define OPACITY_STAGE_3_BEGIN
Definition: drown.csc:52
‪player_drown_fx
‪function player_drown_fx(localClientNum, stage)
Definition: drown.csc:162
‪CF_CALLBACK_ZERO_ON_NEW_ENT
‪#define CF_CALLBACK_ZERO_ON_NEW_ENT
Definition: version.gsh:103
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪DROWN_STAGE_NONE
‪#define DROWN_STAGE_NONE
Definition: drown.gsh:19
‪player_init_drown_values
‪function player_init_drown_values()
Definition: drown.csc:130
‪RADIUS_INNER_STAGE_1_BEGIN
‪#define RADIUS_INNER_STAGE_1_BEGIN
Definition: drown.csc:25
‪DROWN_STAGE_1
‪#define DROWN_STAGE_1
Definition: drown.gsh:20
‪OPACITY_STAGE_2_BEGIN
‪#define OPACITY_STAGE_2_BEGIN
Definition: drown.csc:49
‪RADIUS_INNER_STAGE_3_BEGIN
‪#define RADIUS_INNER_STAGE_3_BEGIN
Definition: drown.csc:35
‪DROWN_STAGE_3
‪#define DROWN_STAGE_3
Definition: drown.gsh:22
‪DROWN_STAGE_2
‪#define DROWN_STAGE_2
Definition: drown.gsh:21
‪OPACITY_STAGE_1_END
‪#define OPACITY_STAGE_1_END
Definition: drown.csc:47
‪RADIUS_OUTER_STAGE_2_END
‪#define RADIUS_OUTER_STAGE_2_END
Definition: drown.csc:33
‪DROWN_STAGE_4
‪#define DROWN_STAGE_4
Definition: drown.gsh:23
‪OPACITY_STAGE_4_BEGIN
‪#define OPACITY_STAGE_4_BEGIN
Definition: drown.csc:55
‪DROWN_SCREEN_EFFECT_NAME
‪#define DROWN_SCREEN_EFFECT_NAME
Definition: drown.gsh:2
‪init_filter_drowning_damage
‪function init_filter_drowning_damage(localClientNum)
Definition: filter_shared.csc:1409
‪RADIUS_INNER_STAGE_2_END
‪#define RADIUS_INNER_STAGE_2_END
Definition: drown.csc:31
‪DROWN_STAGE_BITS
‪#define DROWN_STAGE_BITS
Definition: drown.gsh:24
‪RADIUS_OUTER_STAGE_4_BEGIN
‪#define RADIUS_OUTER_STAGE_4_BEGIN
Definition: drown.csc:42
‪OPACITY_STAGE_1_BEGIN
‪#define OPACITY_STAGE_1_BEGIN
Definition: drown.csc:46
‪set_filter_drowning_damage_outer_radius
‪function set_filter_drowning_damage_outer_radius(localClientNum, passid, outer)
Definition: filter_shared.csc:1431
‪CF_HOST_ONLY
‪#define CF_HOST_ONLY
Definition: version.gsh:102
‪waittill_any
‪function waittill_any(str_notify1, str_notify2, str_notify3, str_notify4, str_notify5)
Definition: util_shared.csc:375
‪RADIUS_INNER_STAGE_3_END
‪#define RADIUS_INNER_STAGE_3_END
Definition: drown.csc:36
‪enable_drown
‪function enable_drown(localClientNum, stage)
Definition: drown.csc:147
‪disable_drown
‪function disable_drown(localClientNum)
Definition: drown.csc:157
‪drown_stage_callback
‪function drown_stage_callback(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: drown.csc:228
‪RADIUS_INNER_STAGE_4_END
‪#define RADIUS_INNER_STAGE_4_END
Definition: drown.csc:41
‪DROWN_START_BEFORE_DAMAGE_TIME
‪#define DROWN_START_BEFORE_DAMAGE_TIME
Definition: drown.gsh:26
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪DROWN_OVERLAY_INNER_RADIUS
‪#define DROWN_OVERLAY_INNER_RADIUS
Definition: drown.gsh:7
‪disable_filter_drowning_damage
‪function disable_filter_drowning_damage(localClientNum, passid)
Definition: filter_shared.csc:1436
‪player_fade_out_drown_fx
‪function player_fade_out_drown_fx(localClientNum)
Definition: drown.csc:198
‪setup_radius_values
‪function setup_radius_values()
Definition: drown.csc:87
‪player_watch_drown_shutdown
‪function player_watch_drown_shutdown(localClientNum)
Definition: drown.csc:141
‪RADIUS_OUTER_STAGE_3_BEGIN
‪#define RADIUS_OUTER_STAGE_3_BEGIN
Definition: drown.csc:37
‪enable_filter_drowning_damage
‪function enable_filter_drowning_damage(localClientNum, passid)
Definition: filter_shared.csc:1415
‪RADIUS_OUTER_STAGE_2_BEGIN
‪#define RADIUS_OUTER_STAGE_2_BEGIN
Definition: drown.csc:32
‪DROWN_RADIUS_SCALE
‪#define DROWN_RADIUS_SCALE
Definition: drown.csc:21
‪set_filter_drowning_damage_inner_radius
‪function set_filter_drowning_damage_inner_radius(localClientNum, passid, inner)
Definition: filter_shared.csc:1426
‪set_filter_drowning_damage_opacity
‪function set_filter_drowning_damage_opacity(localClientNum, passid, opacity)
Definition: filter_shared.csc:1421
‪DROWN_OVERLAY_TIME_FADE_OUT
‪#define DROWN_OVERLAY_TIME_FADE_OUT
Definition: drown.gsh:13
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪DROWN_OVERLAY_OUTER_RADIUS
‪#define DROWN_OVERLAY_OUTER_RADIUS
Definition: drown.gsh:8
‪register_overlay_info_style_speed_blur
‪function register_overlay_info_style_speed_blur(name, version, lerp_step_count, amount, inner_radius, outer_radius, velocity_should_scale, velocity_scale, blur_in, blur_out, should_offset)
Definition: visionset_mgr_shared.csc:155
‪clamp
‪function clamp(val, val_min, val_max)
Definition: math_shared.csc:16
‪OPACITY_STAGE_2_END
‪#define OPACITY_STAGE_2_END
Definition: drown.csc:50
‪RADIUS_OUTER_STAGE_1_BEGIN
‪#define RADIUS_OUTER_STAGE_1_BEGIN
Definition: drown.csc:27
‪WAIT_CLIENT_FRAME
‪#define WAIT_CLIENT_FRAME
Definition: shared.gsh:266
‪OPACITY_STAGE_3_END
‪#define OPACITY_STAGE_3_END
Definition: drown.csc:53
‪DROWN_OVERLAY_SHOULD_OFFSET
‪#define DROWN_OVERLAY_SHOULD_OFFSET
Definition: drown.gsh:11
‪player_spawned
‪function player_spawned(localClientNum)
Definition: drown.csc:121
‪RADIUS_INNER_STAGE_4_BEGIN
‪#define RADIUS_INNER_STAGE_4_BEGIN
Definition: drown.csc:40
‪RADIUS_INNER_STAGE_2_BEGIN
‪#define RADIUS_INNER_STAGE_2_BEGIN
Definition: drown.csc:30