+ {
+ switch(self.HookType)
+ {
+ default:
+ case ENT_CLIENT_HOOK:
+ a = self.velocity;
+ b = self.origin;
+ break;
+ case ENT_CLIENT_LGBEAM:
+ case ENT_CLIENT_GAUNTLET:
+ a = self.origin;
+ b = self.velocity;
+ break;
+ }
+ }
+
+ t = GetPlayerColorForce(self.owner.sv_entnum);
+
+ switch(self.HookType)
+ {
+ default:
+ case ENT_CLIENT_HOOK:
+ intensity = 1;
+ offset = 0;
+ if(t == COLOR_TEAM1)
+ {
+ tex = "particles/hook_red";
+ rgb = '1 .3 .3';
+ }
+ else if(t == COLOR_TEAM2)
+ {
+ tex = "particles/hook_blue";
+ rgb = '.3 .3 1';
+ }
+ else if(t == COLOR_TEAM3)
+ {
+ tex = "particles/hook_yellow";
+ rgb = '1 1 .3';
+ }
+ else if(t == COLOR_TEAM4)
+ {
+ tex = "particles/hook_pink";
+ rgb = '1 .3 1';
+ }
+ else
+ {
+ tex = "particles/hook_green";
+ rgb = '.3 1 .3';
+ }
+ break;
+ case ENT_CLIENT_LGBEAM:
+ intensity = bound(0.2, 1 + Noise_Pink(self, frametime) * 1 + Noise_Burst(self, frametime, 0.03) * 0.3, 2);
+ offset = Noise_Brown(self, frametime) * 10;
+ tex = "particles/lgbeam";
+ rgb = '1 1 1';
+ break;
+ case ENT_CLIENT_GAUNTLET:
+ intensity = 1;
+ offset = Noise_White(self, frametime);
+ tex = "particles/gauntletbeam";
+ rgb = '1 1 1';
+ break;
+ }
+
+ Draw_GrapplingHook_trace_callback_tex = tex;
+ Draw_GrapplingHook_trace_callback_rnd = offset;
+ Draw_GrapplingHook_trace_callback_rgb = rgb;
+ Draw_GrapplingHook_trace_callback_a = intensity;
+ WarpZone_TraceBox_ThroughZone(a, '0 0 0', '0 0 0', b, ((self.HookType == ENT_CLIENT_HOOK) ? MOVE_NOTHING : MOVE_NORMAL), world, world, Draw_GrapplingHook_trace_callback);
+ Draw_GrapplingHook_trace_callback_tex = string_null;
+
+ atrans = WarpZone_TransformOrigin(WarpZone_trace_transform, a);