Official patch notes

Counter-Strike 2 update
Build 24934554
25 Aug 2026, 19:53 UTC
Technical changes
26 files changed
+5248 additions-102 removals
Technical changes
Changed files
Showing 20 of 26 tracked files.
26 files+5248-102
MDumpSource2/schemas/server/dynpitchvol_base_t.h+2-2
DumpSource2/schemas/server/dynpitchvol_base_t.h
+2-2
@@ -17,8 +17,8 @@
1717 // "pitch": 0,
1818 // "spinupsav": 0,
1919 // "spindownsav": 0,
20-// "pitchfrac": -1936887446,
21-// "vol": 32761,
20+// "pitchfrac": 1308717418,
21+// "vol": 32767,
2222 // "fadeinsav": 0,
2323 // "fadeoutsav": 0,
2424 // "volfrac": 0,
MDumpSource2/schemas/server/dynpitchvol_t.h+2-2
DumpSource2/schemas/server/dynpitchvol_t.h
+2-2
@@ -17,8 +17,8 @@
1717 // "pitch": 0,
1818 // "spinupsav": 0,
1919 // "spindownsav": 0,
20-// "pitchfrac": -1936887446,
21-// "vol": 32761,
20+// "pitchfrac": 1308717418,
21+// "vol": 32767,
2222 // "fadeinsav": 0,
2323 // "fadeoutsav": 0,
2424 // "volfrac": 0,
Mcontent/csgo/maps/editor/zoo/scripts/point_script.d.ts+0-2
content/csgo/maps/editor/zoo/scripts/point_script.d.ts
+0-2
@@ -271,10 +271,8 @@ declare module "cs_script/point_script"
271271 INVALID = -1,
272272 NONE,
273273 WALK,
274- FLY,
275274 FLYGRAVITY,
276275 VPHYSICS,
277- PUSH,
278276 NOCLIP,
279277 OBSERVER,
280278 LADDER,
A
content/csgo_addons/cs_script_demo/maps/scripts/chess.js
+3789-0
Added · line preview unavailable
Acontent/csgo_addons/cs_script_demo/maps/scripts/grenadetraining.js+110-0
content/csgo_addons/cs_script_demo/maps/scripts/grenadetraining.js
+110-0
@@ -0,0 +1,110 @@
1+import { Entity, Instance } from "cs_script/point_script";
2+
3+let Rounds = 0;
4+let Hits = 0;
5+let Target = 0;
6+
7+let TargetEasy = "targetbox.ez";
8+let TargetMedium = "targetbox.med";
9+let TargetHard = "targetbox.hard";
10+
11+function SetNextTarget() {
12+ Rounds++;
13+
14+ Instance.EntFireAtName({ name: "worldtext.rounds", input: "SetMessage", value: Rounds });
15+ Instance.EntFireAtName({ name: "cover.*", input: "Enable" });
16+ Instance.EntFireAtName({ name: "tele.reset", input: "Teleport" });
17+
18+ // Roll 1-11, if it duplicates last value choose value 12.
19+ let NewTarget = Math.floor(Math.random() * 11) + 1;
20+ if (NewTarget === Target) NewTarget = 12;
21+ Target = NewTarget;
22+
23+ let difficulty = "ez";
24+ if (Rounds > 7) difficulty = "hard";
25+ else if (Rounds > 4) difficulty = "med";
26+
27+ Instance.EntFireAtName({ name: `cover.${Target}`, input: "Disable" });
28+ Instance.EntFireAtName({ name: `tele.${Target}`, input: "TeleportEntity", value: `targetbox.${difficulty}` });
29+}
30+
31+// called if player leaves play area at any time
32+Instance.OnScriptInput("ResetAndCleanUp", () => {
33+ Instance.EntFireAtName({ name: "trigger.start", input: "Enable" });
34+ Instance.EntFireAtName({ name: "trigger.end_early", input: "Disable" });
35+ Instance.EntFireAtName({ name: "worldtext.go_here", input: "Enable" });
36+ Instance.EntFireAtName({ name: "relay.start_countdown", input: "CancelPending" });
37+
38+ Instance.EntFireAtName({ name: "worldtext.training_countdown_dyn", input: "SetMessage", value: "3" });
39+ Instance.EntFireAtName({ name: "worldtext.training_countdown_static", input: "Disable" });
40+ Instance.EntFireAtName({ name: "worldtext.training_countdown_dyn", input: "Disable" });
41+ Instance.EntFireAtName({ name: "board.timer", input: "Disable" });
42+ Instance.EntFireAtName({ name: "board.timer", input: "ResetTimer" });
43+ Instance.EntFireAtName({ name: "snd.tick", input: "StopSound" });
44+ Instance.EntFireAtName({ name: "tele.reset", input: "Teleport" });
45+ Instance.EntFireAtName({ name: "cover.*", input: "Enable" });
46+ Instance.EntFireAtName({ name: "worldtext.hits", input: "SetMessage", value: "0" });
47+ Instance.EntFireAtName({ name: "worldtext.rounds", input: "SetMessage", value: "0" });
48+
49+ Instance.ServerCommand("sv_infinite_ammo 0");
50+ const player = Instance.GetPlayerController(0)?.GetPlayerPawn();
51+ player?.DestroyWeapons();
52+ Instance.ClientCommand(0, "slot3");
53+});
54+
55+Instance.OnScriptInput("StartTraining", () => {
56+ Instance.EntFireAtName({ name: "trigger.start", input: "Disable" });
57+ Instance.EntFireAtName({ name: "trigger.end_early", input: "Enable" });
58+ Instance.EntFireAtName({ name: "worldtext.go_here", input: "Disable" });
59+ Instance.EntFireAtName({ name: "relay.start_countdown", input: "Trigger" });
60+
61+ Instance.ServerCommand("sv_infinite_ammo 1");
62+ const player = Instance.GetPlayerController(0)?.GetPlayerPawn();
63+ player?.DestroyWeapons();
64+ player?.GiveNamedItem("weapon_hegrenade", true);
65+
66+ Rounds = 0;
67+ Hits = 0;
68+});
69+
70+// called from grenade trigger inside target area
71+Instance.OnScriptInput("GrenadeHit", () => {
72+ Hits++;
73+ Instance.EntFireAtName({ name: "snd.hit", input: "StartSound" });
74+ Instance.EntFireAtName({ name: "worldtext.hits", input: "SetMessage", value: Hits });
75+ if (trackedProjectile && trackedProjectile.IsValid()) {
76+ trackedProjectile.Remove();
77+ trackedProjectile = undefined;
78+ }
79+});
80+
81+// called from logic_timer "board.timer", 3 sec interval
82+Instance.OnScriptInput("SetNextTarget", () => {
83+ if (Rounds < 10) {
84+ SetNextTarget();
85+ } else {
86+ Instance.EntFireAtName({ name: "snd.end", input: "StartSound" });
87+ Instance.EntFireAtName({ name: "board.timer", input: "Disable" });
88+ Instance.EntFireAtName({ name: "board.timer", input: "ResetTimer" });
89+ Instance.EntFireAtName({ name: "tele.reset", input: "Teleport" });
90+ Instance.EntFireAtName({ name: "cover.*", input: "Enable" });
91+ }
92+});
93+
94+/** @type {Entity | undefined} */
95+let trackedProjectile;
96+/** @type {import("cs_script/point_script").Vector} */
97+let trackedPos;
98+Instance.OnGrenadeThrow(({ projectile }) => {
99+ Instance.ClientCommand(0, "slot6");
100+ trackedProjectile = projectile;
101+ trackedPos = trackedProjectile.GetAbsOrigin();
102+ Instance.SetNextThink(Instance.GetGameTime());
103+});
104+Instance.SetThink(() => {
105+ if (trackedProjectile && trackedProjectile.IsValid()) {
106+ Instance.DebugLine({ start: trackedPos, end: trackedProjectile.GetAbsOrigin(), duration: 1, color: { r: 0, g: 0, b: 255 } });
107+ trackedPos = trackedProjectile.GetAbsOrigin();
108+ Instance.SetNextThink(Instance.GetGameTime());
109+ }
110+});
Acontent/csgo_addons/cs_script_demo/maps/scripts/hello.js+2-0
content/csgo_addons/cs_script_demo/maps/scripts/hello.js
+2-0
@@ -0,0 +1,2 @@
1+import { Instance } from "cs_script/point_script";
2+Instance.Msg("Hello cs_script!");
Acontent/csgo_addons/cs_script_demo/maps/scripts/input.js+41-0
content/csgo_addons/cs_script_demo/maps/scripts/input.js
+41-0
@@ -0,0 +1,41 @@
1+import { Instance, CSInputs, CSPlayerPawn } from "cs_script/point_script";
2+
3+const CSInputsValues = Object.values(CSInputs).filter((i) => typeof i === "number");
4+
5+/** @type {CSPlayerPawn | undefined} */
6+let inputPawn = undefined;
7+
8+Instance.RegisterCheatCommand( "script_zoo_showinput", () => {
9+ const player = Instance.GetAllPlayerControllers()[0];
10+ inputPawn = inputPawn == player?.GetPlayerPawn() ? undefined : player?.GetPlayerPawn();
11+});
12+
13+/**
14+ * @param {string} name
15+ * @param {(input:CSInputs) => boolean} getter
16+ * @param {number} x
17+ * @param {number} y
18+ */
19+function printInputType(name, getter, x, y) {
20+ const inputs = CSInputsValues.filter(getter).map((i) => CSInputs[i]);
21+ let inputText = inputs.length === 0 ? "NONE" : inputs.join("|");
22+ Instance.DebugScreenText({ text: `${name}: ${inputText}`, x, y });
23+}
24+
25+/**
26+ * @param {CSPlayerPawn | undefined} pawn
27+ */
28+function printInput(pawn) {
29+ if (pawn) {
30+ printInputType("Pressed", pawn.IsInputPressed.bind(pawn), 100, 500);
31+ printInputType("Just Pressed", pawn.WasInputJustPressed.bind(pawn), 100, 510);
32+ printInputType("Just Released", pawn.WasInputJustReleased.bind(pawn), 100, 520);
33+ }
34+}
35+
36+Instance.OnActivate(() => Instance.SetNextThink(Instance.GetGameTime()));
37+Instance.OnScriptReload({ after: () => Instance.SetNextThink(Instance.GetGameTime()) });
38+Instance.SetThink(() => {
39+ Instance.SetNextThink(Instance.GetGameTime());
40+ printInput(inputPawn);
41+});
Acontent/csgo_addons/cs_script_demo/maps/scripts/mdlchange.js+67-0
content/csgo_addons/cs_script_demo/maps/scripts/mdlchange.js
+67-0
@@ -0,0 +1,67 @@
1+import { Instance, BaseModelEntity } from "cs_script/point_script";
2+
3+// mdl 1 - models/de_overpass/construction/ladder/ladder_stand_open_1.vmdl
4+// mdl 2 - models/de_overpass/overpass_bike/bike_01.vmdl
5+// mdl 3 - models/generic/terrace_set_01/terrace_chair_01.vmdl
6+
7+function GetProp() {
8+ const ent = Instance.FindEntityByName("mdlchange.prop_dyn");
9+ if (ent instanceof BaseModelEntity) return ent;
10+}
11+function Init() {
12+ const prop = GetProp();
13+ if (prop) {
14+ prop.Unglow();
15+ }
16+}
17+Instance.OnActivate(Init);
18+Instance.OnScriptReload({ after: Init });
19+
20+let scale = 1.0;
21+Instance.OnScriptInput("ScaleUp", () => {
22+ const prop = GetProp();
23+ if (prop) {
24+ scale *= 1.25;
25+ prop.SetModelScale(scale);
26+ }
27+});
28+
29+Instance.OnScriptInput("ScaleDown", () => {
30+ const prop = GetProp();
31+ if (prop) {
32+ scale /= 1.25;
33+ prop.SetModelScale(scale);
34+ }
35+});
36+
37+Instance.OnScriptInput("SetModelVar1", () => {
38+ const prop = GetProp();
39+ if (prop) {
40+ prop.SetModel("models/de_overpass/construction/ladder/ladder_stand_open_1.vmdl");
41+ prop.Unglow();
42+ }
43+});
44+
45+Instance.OnScriptInput("SetModelVar2", () => {
46+ const prop = GetProp();
47+ if (prop) {
48+ prop.SetModel("models/de_overpass/overpass_bike/bike_01.vmdl");
49+ prop.Unglow();
50+ }
51+});
52+
53+Instance.OnScriptInput("SetModelVar3", () => {
54+ const prop = GetProp();
55+ if (prop) {
56+ prop.SetModel("models/generic/terrace_set_01/terrace_chair_01.vmdl");
57+ prop.Unglow();
58+ }
59+});
60+
61+Instance.OnScriptInput("GlowToggle", () => {
62+ const prop = GetProp();
63+ if (prop) {
64+ if (!prop.IsGlowing()) prop.Glow();
65+ else prop.Unglow();
66+ }
67+});
Acontent/csgo_addons/cs_script_demo/maps/scripts/point_script.d.ts+867-0
content/csgo_addons/cs_script_demo/maps/scripts/point_script.d.ts
+867-0
@@ -0,0 +1,867 @@
1+/**
2+ * This file, `point_script.d.ts`, documents the JavaScript API for cs_script scripts attached to point_script entities.
3+ * This file is a TypeScript Declaration file. https://www.typescriptlang.org/docs/handbook/2/type-declarations.html#dts-files
4+ * This file can be used by various editors to provide tooling while editing JavaScript. https://www.typescriptlang.org/docs/handbook/intro-to-js-ts.html
5+ * Next to this file is a `tsconfig.json` file configured for editing JavaScript targetting the current version used by CS2.
6+ * Place copies of these two files, `point_script.d.ts` and `tsconfig.json`, next to your scripts and some editors will begin providing tooling without further configuration.
7+ * These two files will be maintained as the cs_script API changes or the JavaScript version in CS2 is updated.
8+ * Please send feedback to CSGOTeamFeedback@valvesoftware.com with "cs_script Feedback" in the subject line.
9+ */
10+
11+/**
12+ * `"cs_script/point_script"` is the module provided to scripts loaded for point_script entities.
13+ *
14+ * # Setup:
15+ * - Create a JavaScript file (.js) that imports this module.
16+ * - See `hello.js` for an example.
17+ * - Create a point_script entity in your map and set its cs_script field to reference your JavaScript file as a vjs asset.
18+ * - See `script_zoo.vmap`. There is a point_script entity in there named "hello_cs_script" that runs `hello.js`. There are a handful of other examples as well.
19+ *
20+ * # Execution:
21+ * - The compiled version of your script (.vjs_c) will be loaded during map load.
22+ * - When the point_script entity is spawned it will execute all code at the top level scope of your script.
23+ * - Register callbacks on `Instance` to setup code that executes at various times throughout the lifetime of the map.
24+ * - A function passed to `Instance.OnActivate` will be invoked when the point_script entity is activated.
25+ * - A function passed to `Instance.OnPlayerJump` will be invoked when any player in the map jumps.
26+ *
27+ * # Tips:
28+ * - Entity variables are stable. Two variables referring to the same entity will be reference equals (===).
29+ * - Extra values attached to an entity variable will still be there if the variable is fetched again.
30+ * - A map can have multiple point_script entities. Each script will run with its own Instance, set of globals, and set of entity variables.
31+ *
32+ * # Tools Mode:
33+ * - In tools mode, saving changes to your script will recompile your file, clear all registered callbacks, and re-run the top level scope of your script.
34+ * - Global variables and instances of entity variables will persist across reloads.
35+ * - Beware. This is an avenue for holding references to code from previous iterations of your script. This is only a concern in tools mode.
36+ * - See `Instance.OnScriptReload` for a tool to handle edge cases around reloading.
37+ */
38+declare module "cs_script/point_script"
39+{
40+ export const Instance: Domain;
41+
42+ /**
43+ * The top level API provided to scripts attached to a point_script entity.
44+ * Access these functions by importing Instance from "cs_script/point_script".
45+ */
46+ class Domain {
47+ /** Log a message to the console. */
48+ Msg(text: any): void;
49+ /** Print some text to the game window. Only works in dev environments. */
50+ DebugScreenText(config: { text: any, x: number, y: number, duration?: number, color?: ColorArg }): void;
51+ /** Draw a line in the world. Only works in dev environments. */
52+ DebugLine(config: { start: Vector, end: Vector, duration?: number, color?: ColorArg }): void;
53+ /** Draw a wire sphere in the world. Only works in dev environments. */
54+ DebugSphere(config: { center: Vector, radius: number, duration?: number, color?: ColorArg }): void;
55+ /** Draw an axis aligned box in the world. Only works in dev environments. */
56+ DebugBox(config: { mins: Vector, maxs: Vector, duration?: number, color?: ColorArg }): void;
57+
58+ /**
59+ * Called in Tools mode when the script is reloaded due to changes.
60+ * The before callback will be invoked before pre-load teardown.
61+ * The after callback will be invoked after the new script is evaluated and will be passed the return value of the before callback.
62+ */
63+ OnScriptReload<T>(config: { before?: () => T, after?: (memory: T) => void }): void;
64+
65+ /**
66+ * Writes save data associated with this workshop addon.
67+ * Will synchronously write to disk every time this is called.
68+ */
69+ SetSaveData(data: string): void;
70+ /**
71+ * Retrieves the save data associated with this workshop addon.
72+ * Will synchronously read from disk the first time this is called.
73+ */
74+ GetSaveData(): string;
75+
76+ /** Called at a specified time. Control when this is run using SetNextThink. */
77+ SetThink(callback: () => void): void;
78+ /** Set when the OnThink callback should next be run. The exact time will be on the tick nearest to the specified time, which may be earlier or later. */
79+ SetNextThink(time: number): void;
80+ /** Returns a promise that resolves after `delay` number of seconds. The exact time will be on the tick nearest to the specified delay, which may be earlier or later. */
81+ Delay(delay: number): Promise<void>;
82+
83+ /**
84+ * Queue up a callback to be invoked once, after all entities have executed their think functions this tick (eg. player input has been handled, projectiles have moved).
85+ * This can be useful for delaying until a clean moment when an entity isn't mid-computation and might ignore or misinterpret.
86+ * This can be useful for delaying until the world is in a consistent state.
87+ * Callbacks queued up during a post entity think callback will be invoked in the same tick.
88+ * @experimental This method is experimental and may experience breaking changes.
89+ * Please send feedback to CSGOTeamFeedback@valvesoftware.com with "cs_script Feedback" in the subject line.
90+ */
91+ QueueAfterThinks( callback: () => void ): void;
92+
93+ /** Called when the point_script entity is activated */
94+ OnActivate(callback: () => void): void;
95+ /** Called when input RunScriptInput is triggered on the point_script entity with a parameter value that matches name. */
96+ OnScriptInput(name: string, callback: (inputData: { caller?: Entity, activator?: Entity }) => void): void;
97+
98+ /** Called when a client finishes the initial connection handshake with the server. */
99+ OnPlayerConnect(callback: (event: { player: CSPlayerController }) => void): void;
100+ /** Called when a client finishes loading and is ready to spawn. */
101+ OnPlayerActivate(callback: (event: { player: CSPlayerController }) => void): void;
102+ /** Called when a client disconnects from the server. */
103+ OnPlayerDisconnect(callback: (event: { playerSlot: number }) => void): void;
104+ /** Called when a player respawns, changes team, or is placed back at spawn due to a round restart */
105+ OnPlayerReset(callback: (event: { player: CSPlayerPawn }) => void): void
106+ /** Called when a new round begins */
107+ OnRoundStart(callback: () => void): void;
108+ /** Called when a team wins a round */
109+ OnRoundEnd(callback: (event: { winningTeam: number, reason: CSRoundEndReason }) => void): void;
110+ /**
111+ * Called at the start of cleanup for a round restart
112+ * @experimental This method is experimental and may experience breaking changes.
113+ * Please send feedback to CSGOTeamFeedback@valvesoftware.com with "cs_script Feedback" in the subject line.
114+ */
115+ OnBeginRoundRestart(callback: () => void): void;
116+ /** Called when a player starts planting their c4 */
117+ OnBombPlantStart(callback: (event: { planter: CSPlayerPawn }) => void): void;
118+ /** Called when a player aborts planting their c4 */
119+ OnBombPlantAbort(callback: (event: { planter: CSPlayerPawn }) => void): void;
120+ /** Called when a player plants their c4 */
121+ OnBombPlant(callback: (event: BombPlantEvent) => void): void;
122+ /** Called when a player starts defusing a c4 */
123+ OnBombDefuseStart(callback: (event: { plantedC4: CSPlantedC4 }) => void): void;
124+ /** Called when a player aborts defusing a c4 */
125+ OnBombDefuseAbort(callback: (event: { plantedC4: CSPlantedC4 }) => void): void;
126+ /** Called when a player defuses a c4 */
127+ OnBombDefuse(callback: (event: BombDefuseEvent) => void): void;
128+ /** Called when a c4 explodes */
129+ OnBombExplode(callback: (event: { plantedC4: CSPlantedC4 }) => void): void;
130+ /**
131+ * Called immediately before a CSPlayerPawn takes damage to armor and health.
132+ * Called after hitgroup modifications are applied such as headshot multiplier.
133+ * This won't be called if the player would take no damage. Such as if they're frozen or invulnerable or if friendly fire would disable the damage.
134+ * @param callback
135+ * Return `{ damage: N }` to modify the amount of damage.
136+ * Return `{ damageFlags: event.damageFlags | CSDamageFlags.IGNORE_ARMOR }` to have the damage pierce armor.
137+ * Return `{ abort: true }` to cancel the damage event.
138+ */
139+ OnModifyPlayerDamage(callback: (event: ModifyPlayerDamageEvent) => ModfiyPlayerDamageResult | void): void;
140+ /**
141+ * Called when a player has taken damage.
142+ */
143+ OnPlayerDamage(callback: (event: PlayerDamageEvent) => void): void;
144+ /** Called when a player dies. `inflictor`, `attacker` and `weapon` will match the damage event that caused the kill. */
145+ OnPlayerKill(callback: (event: { player: CSPlayerPawn, inflictor?: Entity, attacker?: Entity, weapon?: CSWeaponBase }) => void): void;
146+ /** Called when a player jumps off the ground. */
147+ OnPlayerJump(callback: (event: { player: CSPlayerPawn }) => void): void;
148+ /** Called when a player hits the ground while falling. */
149+ OnPlayerLand(callback: (event: { player: CSPlayerPawn }) => void): void;
150+ /** Called when a player sends a chat message. `team` will match they player's team if the message was sent to team chat. */
151+ OnPlayerChat(callback: (event: { player?: CSPlayerController, text: string, team: number }) => void): void;
152+ /** Called when a player pings a location. */
153+ OnPlayerPing(callback: (event: { player: CSPlayerController, position: Vector }) => void): void;
154+ /** Called when a gun is reloaded. */
155+ OnGunReload(callback: (event: { weapon: CSWeaponBase }) => void): void;
156+ /** Called when a gun emits bullets. A shotgun will only trigger this once when emitting multiple bullets at once. */
157+ OnGunFire(callback: (event: { weapon: CSWeaponBase }) => void): void;
158+ /**
159+ * Called when a bullet hits a surface.
160+ * Penetrations can cause a single bullet to trigger multiple impacts.
161+ * This will be called for all impacts of a bullet before any player damage events are called.
162+ */
163+ OnBulletImpact(callback: (event: { weapon: CSWeaponBase, position: Vector, hitEntity?: Entity }) => void): void;
164+ /** Called when a weapon is dropped. */
165+ OnWeaponDrop(callback: (event: { weapon: CSWeaponBase, dropper: CSPlayerPawn }) => void): void;
166+ /** Called when a weapon is picked up. */
167+ OnWeaponPickup(callback: (event: { weapon: CSWeaponBase }) => void): void;
168+ /** Called when a grenade is thrown. `projectile` is the newly created grenade projectile. */
169+ OnGrenadeThrow(callback: (event: { weapon: CSWeaponBase, projectile: CSGrenadeProjectileBase }) => void): void;
170+ /** Called when a grenade bounces. */
171+ OnGrenadeBounce(callback: (event: GrenadeBounceEvent) => void): void;
172+ /** Called when a knife attacks, even if it misses. */
173+ OnKnifeAttack(callback: (event: { weapon: CSWeaponBase, attackType: CSWeaponAttackType }) => void): void;
174+ /** Called when a button in a CustomHudLayout is clicked. */
175+ OnCustomHudClicked( callback: (event: {player: CSPlayerController, layout: CustomHudLayout, buttonId: string}) => void ): void;
176+
177+ /** Fire the input on all targets matching the specified names. */
178+ EntFireAtName(config: { name: string, input: string, value?: InputValue, caller?: Entity, activator?: Entity, delay?: number }): void;
179+ /** Fire the input on the specified target. */
180+ EntFireAtTarget(config: { target: Entity, input: string, value?: InputValue, caller?: Entity, activator?: Entity, delay?: number }): void;
181+ /** Connect the output of an entity to a callback. The return value is a connection id that can be used in `DisconnectOutput` */
182+ ConnectOutput(target: Entity, output: string, callback: (inputData: { value?: InputValue, caller?: Entity, activator?: Entity }) => any): number | undefined;
183+ /** Find entities by name. */
184+ DisconnectOutput(connectionId: number): void;
185+
186+ /** Find the first entity matching the specified name. */
187+ FindEntityByName(name: string): Entity | undefined;
188+ /** Find entities matching the specified name. */
189+ FindEntitiesByName(name: string): Entity[];
190+ /** Find the first entity of the specified class name. */
191+ FindEntityByClass(className: string): Entity | undefined;
192+ /** Find entities of the specified class name. */
193+ FindEntitiesByClass(className: string): Entity[];
194+ /** Get the player controller in the given slot. */
195+ GetPlayerController(playerSlot: number): CSPlayerController | undefined;
196+ /** Get all the player controllers. Includes disconnected players. */
197+ GetAllPlayerControllers(): CSPlayerController[];
198+
199+ /** Trace a point along a line and detect collisions */
200+ TraceLine(trace: BaseTraceConfig): TraceResult;
201+ /** Trace a sphere along a line and detect collisions */
202+ TraceSphere(trace: { radius: number } & BaseTraceConfig): TraceResult;
203+ /** Trace an axis aligned bounding box along a line and detect collisions */
204+ TraceBox(trace: { mins: Vector, maxs: Vector } & BaseTraceConfig): TraceResult;
205+ /** Trace as a player would collide */
206+ TracePlayer(trace: PlayerTrace): PlayerTraceResult;
207+ /** Trace as a bullet and detect hits and damage */
208+ TraceBullet(trace: BulletTrace): BulletTraceResult[];
209+
210+ /** Get if the server is a dedicated server. */
211+ IsDedicatedServer(): boolean;
212+ /** Get the game time in seconds. */
213+ GetGameTime(): number;
214+ /** Get if the game is currently in a Warmup period. */
215+ IsWarmupPeriod(): boolean;
216+ /** Get if the game is currently in a Freeze period. */
217+ IsFreezePeriod(): boolean;
218+ /** Get the current Game Type. */
219+ GetGameType(): number;
220+ /** Get the current Game Mode. */
221+ GetGameMode(): number;
222+ /** Get the name of the current map. */
223+ GetMapName(): string;
224+ /** Get the number of rounds played in the current game. */
225+ GetRoundsPlayed(): number;
226+ /** Get the time remaining in the current round in seconds. */
227+ GetRoundRemainingTime(): number;
228+ /** Set the time remaining in the current round in seconds. */
229+ SetRoundRemainingTime(time: number): void;
230+
231+ /** Spawns a live grenade projectile. */
232+ SpawnGrenadeProjectile(config: SpawnGrenadeProjectileConfig): CSGrenadeProjectileBase;
233+
234+ /** Issue the specified command to the specified client. */
235+ ClientCommand(playerSlot: number, command: string): void;
236+
This preview is truncated. The source commit contains the complete diff.
Acontent/csgo_addons/cs_script_demo/maps/scripts/setup.js+63-0
content/csgo_addons/cs_script_demo/maps/scripts/setup.js
+63-0
@@ -0,0 +1,63 @@
1+import { CSDamageFlags, CSDamageTypes, Entity, Instance } from "cs_script/point_script";
2+
3+Instance.ServerCommand("sv_cheats 1");
4+Instance.ServerCommand("mp_warmup_offline_enabled 1");
5+Instance.ServerCommand("mp_warmup_pausetimer 1");
6+
7+let bFirstActivate = true;
8+Instance.OnPlayerActivate(({ player }) => {
9+ if (bFirstActivate) {
10+ bFirstActivate = false;
11+ player.JoinTeam(2);
12+ Instance.ServerCommand("bot_stop 1");
13+ Instance.ServerCommand("bot_add");
14+ }
15+
16+ ShowWelcome(player.GetPlayerSlot());
17+});
18+
19+Instance.OnModifyPlayerDamage(({ player }) => {
20+ if (player.GetOriginalPlayerController().IsBot()) {
21+ return { damageFlags: CSDamageFlags.PREVENT_DEATH };
22+ }
23+});
24+
25+Instance.OnPlayerDamage((event) => {
26+ if (event.damageTypes == CSDamageTypes.SLASH) {
27+ Instance.QueueAfterThinks(() => {
28+ const velocity = event.player.GetAbsVelocity();
29+ velocity.z += 500;
30+ event.player.Teleport({ velocity });
31+ });
32+ }
33+});
34+
35+let welcomeLayout = null;
36+function GetWelcomeLayout() {
37+ if (!(welcomeLayout instanceof Entity) || !welcomeLayout.IsValid()) {
38+ welcomeLayout = Instance.FindEntitiesByName("welcome_layout")[0];
39+ }
40+ return Instance.FindEntitiesByName("welcome_layout")[0];
41+}
42+
43+function ShowWelcome(playerSlot) {
44+ GetWelcomeLayout().SetHasClassForPlayer(playerSlot, "dialog", "Dismissed", false);
45+ GetWelcomeLayout().SetInputCaptureEnabled(playerSlot, true);
46+}
47+
48+function HideWelcome(playerSlot) {
49+ GetWelcomeLayout().SetHasClassForPlayer(playerSlot, "dialog", "Dismissed", true);
50+ GetWelcomeLayout().SetInputCaptureEnabled(playerSlot, false);
51+}
52+
53+Instance.OnCustomHudClicked((event) => {
54+ if (event.layout === GetWelcomeLayout() && event.buttonId === "dismiss_button") {
55+ HideWelcome(event.player.GetPlayerSlot());
56+ }
57+});
58+
59+Instance.RegisterCheatCommand("script_zoo_show_welcome", () => {
60+ for (const player of Instance.GetAllPlayerControllers()) {
61+ ShowWelcome(player.GetPlayerSlot());
62+ }
63+});
Acontent/csgo_addons/cs_script_demo/maps/scripts/trace.js+158-0
content/csgo_addons/cs_script_demo/maps/scripts/trace.js
+158-0
@@ -0,0 +1,158 @@
1+import { CSHitGroup, CSPlayerPawn, Instance } from "cs_script/point_script";
2+
3+const traceFrequency = 0;
4+const drawDuration = 0;
5+
6+/** @type {"line" | "sphere" | "box" | "player" | "bullet" | null} */
7+let traceType = null;
8+/** @type {CSPlayerPawn | undefined} */
9+let tracePawn = undefined;
10+
11+Instance.OnScriptReload({
12+ before: () => {
13+ return { traceType, tracePawn };
14+ },
15+ after: (memory) => {
16+ if (memory) {
17+ traceType = memory.traceType;
18+ tracePawn = memory.tracePawn;
19+ }
20+ },
21+});
22+
23+Instance.RegisterCheatCommand("script_zoo_trace", (args) => {
24+ tracePawn = Instance.GetAllPlayerControllers()[0].GetPlayerPawn();
25+ if (args === "line" || args === "sphere" || args === "box" || args === "player" || args === "bullet") {
26+ traceType = args;
27+ } else {
28+ Instance.Msg("Usage: script_zoo_trace <type> - type can be line, sphere, box, player, or bullet.")
29+ traceType = null;
30+ }
31+});
32+
33+Instance.SetThink(() => {
34+ Instance.SetNextThink(Instance.GetGameTime() + traceFrequency);
35+ if (!tracePawn || !tracePawn.IsValid()) return;
36+
37+ const start = tracePawn.GetEyePosition();
38+ const forward = getForward(tracePawn.GetEyeAngles());
39+ const end = vectorAdd(start, vectorScale(forward, 4000));
40+
41+ if (traceType === "line") {
42+ const result = Instance.TraceLine({ start, end, ignoreEntity: tracePawn });
43+
44+ if (result.didHit) {
45+ Instance.DebugSphere({ center: result.end, radius: 1, duration: drawDuration, color: { r: 255, g: 0, b: 0 } });
46+ const normalEnd = vectorAdd(result.end, vectorScale(result.normal, 10));
47+ Instance.DebugLine({ start: result.end, end: normalEnd, duration: drawDuration, color: { r: 255, g: 255, b: 0 } });
48+ }
49+ } else if (traceType === "sphere") {
50+ const result = Instance.TraceSphere({ start, end, radius: 10, ignoreEntity: tracePawn, ignorePlayers: true });
51+
52+ Instance.DebugSphere({ center: result.end, radius: 5, duration: drawDuration, color: { r: 255, g: 0, b: 0 } });
53+ if (result.didHit) {
54+ const normalStart = vectorAdd(result.end, vectorScale(result.normal, 5));
55+ const normalEnd = vectorAdd(normalStart, vectorScale(result.normal, 10));
56+ Instance.DebugLine({ start: normalStart, end: normalEnd, duration: drawDuration, color: { r: 255, g: 255, b: 0 } });
57+ }
58+ } else if (traceType === "box") {
59+ const mins = { x: -10, y: -10, z: -10 };
60+ const maxs = { x: 10, y: 10, z: 10 };
61+
62+ const result = Instance.TraceBox({ start, end, mins, maxs, ignoreEntity: tracePawn });
63+
64+ Instance.DebugBox({ mins: vectorAdd(result.end, mins), maxs: vectorAdd(result.end, maxs), duration: drawDuration, color: { r: 255, g: 0, b: 0 } });
65+ if (result.didHit) {
66+ const normalEnd = vectorAdd(result.end, vectorScale(result.normal, 10));
67+ Instance.DebugLine({ start: result.end, end: normalEnd, duration: drawDuration, color: { r: 255, g: 255, b: 0 } });
68+ }
69+ } else if (traceType === "player") {
70+ const mins = { x: -16, y: -16, z: 0 };
71+ const maxs = { x: 16, y: 16, z: tracePawn.IsDucked() ? 36 : 72 };
72+
73+ const result = Instance.TracePlayer({ start, end, player: tracePawn });
74+
75+ Instance.DebugBox({ mins: vectorAdd(result.end, mins), maxs: vectorAdd(result.end, maxs), duration: drawDuration, color: { r: 255, g: 0, b: 0 } });
76+ if (result.didHit) {
77+ const normalEnd = vectorAdd(result.end, vectorScale(result.normal, 10));
78+ Instance.DebugLine({ start: result.end, end: normalEnd, duration: drawDuration, color: { r: 255, g: 255, b: 0 } });
79+ }
80+ } else if (traceType === "bullet") {
81+ let weaponData = tracePawn.GetActiveWeapon()?.GetData();
82+ if (!weaponData) return;
83+
84+ const end = vectorAdd(start, vectorScale(forward, weaponData.GetRange()));
85+
86+ const mins = { x: -1, y: -1, z: -1 };
87+ const maxs = { x: 1, y: 1, z: 1 };
88+
89+ const results = Instance.TraceBullet({
90+ start,
91+ end,
92+ shooter: tracePawn,
93+ damage: weaponData.GetDamage(),
94+ rangeModifier: weaponData.GetRangeModifier(),
95+ penetration: weaponData.GetPenetration(),
96+ });
97+ for (const result of results) {
98+ let color = { r: 255, g: 0, b: 0 };
99+ if (result.hitEntity.IsWorld()) {
100+ color = { r: 0, g: 0, b: 255 };
101+ } else if (result.damage < 1) {
102+ color = { r: 0, g: 255, b: 0 };
103+ } else if (result.damage < 100) {
104+ color.g = lerp(255, 0, result.damage / 100);
105+ } else if (result.damage > 100) {
106+ color.b = lerp(0, 255, (result.damage - 100) / 100);
107+ }
108+ if (result.hitGroup == CSHitGroup.HEAD) {
109+ Instance.DebugSphere({ center: result.position, radius: 1, duration: drawDuration, color });
110+ } else {
111+ Instance.DebugBox({ mins: vectorAdd(result.position, mins), maxs: vectorAdd(result.position, maxs), duration: drawDuration, color });
112+ }
113+ }
114+ }
115+});
116+Instance.SetNextThink(Instance.GetGameTime());
117+
118+/**
119+ * @param {import("cs_script/point_script").Vector} vec1
120+ * @param {import("cs_script/point_script").Vector} vec2
121+ * @returns {import("cs_script/point_script").Vector}
122+ */
123+function vectorAdd(vec1, vec2) {
124+ return { x: vec1.x + vec2.x, y: vec1.y + vec2.y, z: vec1.z + vec2.z };
125+}
126+
127+/**
128+ * @param {import("cs_script/point_script").Vector} vec
129+ * @param {number} scale
130+ * @returns {import("cs_script/point_script").Vector}
131+ */
132+function vectorScale(vec, scale) {
133+ return { x: vec.x * scale, y: vec.y * scale, z: vec.z * scale };
134+}
135+
136+/**
137+ * @param {import("cs_script/point_script").QAngle} angles
138+ * @returns {import("cs_script/point_script").Vector}
139+ */
140+function getForward(angles) {
141+ const pitchRadians = (angles.pitch * Math.PI) / 180;
142+ const yawRadians = (angles.yaw * Math.PI) / 180;
143+ const hScale = Math.cos(pitchRadians);
144+ return {
145+ x: Math.cos(yawRadians) * hScale,
146+ y: Math.sin(yawRadians) * hScale,
147+ z: -Math.sin(pitchRadians),
148+ };
149+}
150+
151+/**
152+ * @param {number} a
153+ * @param {number} b
154+ * @param {number} t
155+ */
156+function lerp(a, b, t) {
157+ return a + (b - a) * t;
158+}
Acontent/csgo_addons/cs_script_demo/maps/scripts/tsconfig.json+8-0
content/csgo_addons/cs_script_demo/maps/scripts/tsconfig.json
+8-0
@@ -0,0 +1,8 @@
1+{
2+ "compilerOptions": {
3+ "strict": true,
4+ "target": "es2022",
5+ "checkJs": true,
6+ "noEmit": true
7+ }
8+}
\ No newline at end of file
Mgame/bin/assettypes_common.txt+0-8
game/bin/assettypes_common.txt
+0-8
@@ -739,10 +739,6 @@
739739 m_Encoding = "RESOURCE_ENCODING_KV3"
740740 },
741741 ]
742- m_HideForRetailMods =
743- [
744- "csgo",
745- ]
746742 }
747743 panorama_layout =
748744 {
@@ -769,10 +765,6 @@
769765 m_Encoding = "RESOURCE_ENCODING_KV3"
770766 },
771767 ]
772- m_HideForRetailMods =
773- [
774- "csgo",
775- ]
776768 }
777769 panorama_dynamic_images =
778770 {
Mgame/bin/built_from_cl.txt+1-1
game/bin/built_from_cl.txt
+1-1
@@ -1 +1 @@
1-10935971
1+10937911
Mgame/bin/win64/panorama_strings.txt+44-36
game/bin/win64/panorama_strings.txt
+44-36
@@ -262,55 +262,56 @@ $hRh
262262 (!(1(=(?(I(Q([(](a(g(u(
263263 ((long)msg_hdr->msg_len) > 0
264264 (0'yX
265-(1nJ
266-(1zJ
267265 (4?NewFromUnsigned@Integer@v8@@SA?AV?$Local@VInteger@v8@@@2@PEAVIsolate@2@I@Z
268-(5DJ
269266 (5Me
270-(5jJ
267+(5QJ
268+(5dJ
271269 (5jP
272-(A1J
273-(AcJ
270+(5mJ
271+(AnJ
274272 (BZq
275273 (D4D
276-(EvJ
274+(E5J
275+(E8J
276+(I3J
277277 (I?Value@External@v8@@QEBAPEAXXZ
278-(IEJ
279-(MPJ
280-(MgJ
281-(MkJ
282-(MoJ
278+(MAJ
279+(MLJ
280+(MaJ
283281 (NONE)
282+(QfJ
284283 (U1h
285-(U5J
286-(YHJ
287-(YbJ
288-(YeJ
289-(YhJ
290-(YrJ
291-(YsJ
284+(YKJ
285+(YPJ
286+(YTJ
292287 (ZdOt\n&
293288 (_Assert)
289+(aJJ
294290 (anonymous)
295-(aqJ
296291 (d4t8
297292 (down)
298-(e0J
299-(eIJ
300293 (fS{ggRcjh
301294 (h`H1pqA
302295 (i/Al
296+(iFJ
297+(iUJ
298+(ihJ
299+(ioJ
303300 (jvg;
304-(m7J
301+(m1J
302+(m9J
303+(mVJ
305304 (memory)
306-(qUJ
307-(umJ
305+(q4J
306+(qrJ
307+(uMJ
308308 (undefined)
309309 (unset)
310310 (unset) w/parent: %s
311+(uxJ
311312 (vQF
312313 (wMww
313-(yWJ
314+(y0J
314315 )!)#)?)G)])e)i)o)u)
315316 )4?NewFromUtf8@String@v8@@SA?AV?$MaybeLocal@VString@v8@@@2@PEAVIsolate@2@PEBDW4NewStringType@2@H@Z
316317 )Ck?B
@@ -1025,6 +1026,7 @@ $hRh
10251026 2)252Y2]2c2k2o2u2w2{2
10261027 2)Ab`
10271028 2+~,@\r;Zj09
1029+20H
10281030 20t\f
10291031 24U\n
10301032 27;C
@@ -1111,7 +1113,6 @@ $hRh
11111113 6?NumberValue@Value@v8@@QEBA?AV?$Maybe@N@2@V?$Local@VContext@v8@@@2@@Z
11121114 6H,N
11131115 6O|T%
1114-6Pt=
11151116 6Qd=
11161117 6_wEX
11171118 6afD
@@ -1121,6 +1122,8 @@ $hRh
11211122 6l13
11221123 6lkc
11231124 6myY;
1125+6pk=
1126+6pt=
11241127 6qo~
11251128 6r-m_v
11261129 6r1ij
@@ -1153,14 +1156,14 @@ $hRh
11531156 7zRQ
11541157 8"3hrf
11551158 8+Qw
1156-8-OJ
11571159 80F2<
11581160 82\n:XPH
11591161 851Pe
11601162 8<pl
11611163 8= zp
11621164 8??SetInternalFieldCount@ObjectTemplate@v8@@QEAAXH@Z
11631165 8A6j
1166+8B0%\n
11641167 8GZS
11651168 8SIffK5W
11661169 8TZvrv<
@@ -1171,7 +1174,6 @@ $hRh
11711174 8pe7?
11721175 8q-S*]X
11731176 8sOy
1174-8uZJ
11751177 9#9%9)9/9=9A9M9[9k9y9}9
11761178 9)PF
11771179 9)jx
@@ -1336,8 +1338,11 @@ $hRh
13361338 ?x29
13371339 @!@%@+@1@?@C@E@]@a@g@m@
13381340 @0pp
1341+@60n=
13391342 @?SlowGetInternalField@Object@v8@@AEAA?AV?$Local@VData@v8@@@2@H@Z
13401343 @BH]f
1344+@HPX`hvP
1345+@HVp
13411346 @MfKZ
13421347 @Pgl
13431348 @Pu\rm
@@ -3061,6 +3066,7 @@ Hp)X?
30613066 Hq,r/f
30623067 HqI9x
30633068 Ht4qw
3069+Hy`J
30643070 H{1S
30653071 I"9|OxTex
30663072 I+8G
@@ -3569,9 +3575,9 @@ P-224
35693575 P-256
35703576 P-384
35713577 P-521
3578+P08J@
35723579 P1\t98"
35733580 P5[1
3574-P6pz=
35753581 PAGN_4
35763582 PARAMETERS
35773583 PARSE_BAG
@@ -5010,15 +5016,16 @@ Z~wl
50105016 \n%12s%s
50115017 \n5a=Z
50125018 \n:82H
5019+\nGNJ
50135020 \nJS(%s:%d:%d)\n%s\n%s\n
50145021 \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
50155022 \n\tIPSec/IKE/Oakley curve #3 over a 155 bit binary field.\n\tNot suitable for ECDSA.\n\tQuestionable extension field!
50165023 \n\tIPSec/IKE/Oakley curve #4 over a 185 bit binary field.\n\tNot suitable for ECDSA.\n\tQuestionable extension field!
50175024 \n\t\t<xs:complexType name="%sType">\n\t\t\t<xs:complexContent>\n\t\t\t\t<xs:extension base="Internal_BaseType">\n\t\t\t\t\t<xs:annotation>\n\t\t\t\t\t\t<xs:documentation xml:lang="en">\n\t\t\t\t\t\t\t%s\n\t\t\t\t\t\t</xs:documentation>\n\t\t\t\t\t</xs:annotation>\n\t\t
50185025 \n\t\t\t\t</xs:extension>\n\t\t\t</xs:complexContent>\n\t\t</xs:complexType>\n\t\t
50195026 \n\t\t\t\t\t<xs:annotation><xs:documentation xml:lang="en">%s</xs:documentation></xs:annotation>\n\t\t\t\t
5020-\nbutt
50215027 \nqYu
5028+\nround
50225029 \ntM(ie-V
50235030 \r!\r+\r-\r=\r?\rO\rU\ri\ry\r
50245031 \r@h!Aq8
@@ -5086,10 +5093,12 @@ _jPo
50865093 _wjb
50875094 _xU`u
50885095 _}eOk
5096+`1PJ
5097+`20H
50895098 `28)fk
50905099 `3?New@Array@v8@@SA?AV?$Local@VArray@v8@@@2@PEAVIsolate@2@H@Z
5091-`6Po=
5092-`9pJ
5100+`6Pr=
5101+`6pz=
50935102 `:zQF
50945103 `D$daM-l
50955104 `DZG
@@ -5471,6 +5480,7 @@ buffer
54715480 buildingName
54725481 burlywood
54735482 businessCategory
5483+butt
54745484 c2\f?C\t
54755485 c2i_ASN1_BIT_STRING
54765486 c2i_ASN1_INTEGER
@@ -6601,7 +6611,6 @@ file://{resources}/default_keybinds.cfg
66016611 file://{resources}/keybinds.cfg
66026612 file://{resources}/window_keybinds.cfg
66036613 filename too big
6604-fill
66056614 fill
66066615 fill-opacity
66076616 fill-parent-flow
@@ -8118,7 +8127,7 @@ p.other
81188127 p.ppBasis
81198128 p.prime
81208129 p.tpBasis
8121-p0jPW$
8130+p20%\n
81228131 p2{l
81238132 p4Z3
81248133 p5Z3
@@ -8564,7 +8573,6 @@ rotate3d(
85648573 rotatex
85658574 rotatey
85668575 rotatez
8567-round
85688576 row-resize
85698577 royalblue
85708578 rsa not implemented
Mgame/bin/win64/resourcecompiler_strings.txt+30-10
game/bin/win64/resourcecompiler_strings.txt
+30-10
@@ -169,7 +169,11 @@
169169 (%lu = 0x%lx)\n
170170 (%u = 0x%x)\n
171171 (08@HPX`j
172+ (08@HPXb0P=
172173 (08@HPZ
174+ (08@HR0P=
175+ (08@J0P=
176+ (0X`hpz0P=
173177 (Bad Remap %d)
174178 (INVALID PSS PARAMETERS)\n
175179 (Negative)
@@ -21267,6 +21271,7 @@ $prefix_element$
2126721271 02V8[
2126821272 05=k
2126921273 08@HR
21274+08@J0P=
2127021275 08bX
2127121276 09,h
2127221277 0;Q5[
@@ -21324,7 +21329,6 @@ $prefix_element$
2132421329 2)Ab`
2132521330 2+~,@\r;Zj09
2132621331 20P=
21327-20gB
2132821332 20t\f
2132921333 241:1: FLOAT : ( ( MINUS )? ( DIGIT )+ '.' ( DIGIT )* ( EXP )? ( FLOATSUFFIX )? | ( MINUS )? ( DIGIT )+ ( EXP )? ( FLOATSUFFIX )? | ( MINUS )? '.' ( DIGIT )+ ( EXP )? ( FLOATSUFFIX )? );
2133021334 24U\n
@@ -21348,6 +21352,7 @@ $prefix_element$
2134821352 2\fWQx
2134921353 2\rE2h
2135021354 2\rlhp
21355+2\vpx
2135121356 2^pV
2135221357 2_BONE_IK
2135321358 2a"l
@@ -21358,11 +21363,12 @@ $prefix_element$
2135821363 2nIg
2135921364 2nd most active material around a probe.
2136021365 2p"6
21366+2pW=
2136121367 2prB
2136221368 3%3+3/353A3G3[3_3g3k3s3y3
2136321369 31tPR
21370+333?
2136421371 333?+
21365-333?P
2136621372 33s?+
2136721373 35-w
2136821374 37LQ
@@ -21518,7 +21524,7 @@ $prefix_element$
2151821524 9q6\r#m
2151921525 9r#xV
2152021526 :':+:1:K:Q:[:c:g:m:y:
21521-:0gB
21527+:0UB
2152221528 :: <NO TARGET BONE>
2152321529 :BAD OBJECT
2152421530 :Blowfish part of OpenSSL 1.0.2j 26 Sep 2016
@@ -21528,6 +21534,8 @@ $prefix_element$
2152821534 :NetworkedCycle:CycleZeroTime
2152921535 :NetworkedCycle:CyclesPerSecond
2153021536 :NetworkedCycle:ResetCount
21537+:PUB
21538+:PZB
2153121539 :QYJ
2153221540 :Vlq
2153321541 :\tV_frexpf
@@ -21704,10 +21712,11 @@ $prefix_element$
2170421712 @%s_lookFrame_1
2170521713 @%s_lookFrame_2
2170621714 @0pp
21715+@:0UB
21716+@:PUB
2170721717 @BH]f
2170821718 @CMapLocator
2170921719 @CMixControlAutomatic
21710-@HVP
2171121720 @Integer overflow in %s
2171221721 @MfKZ
2171321722 @Pgl
@@ -21792,6 +21801,7 @@ A9ur
2179221801 A<fP
2179321802 A>x8
2179421803 AA Compromise
21804+AA:p
2179521805 AACompromise
2179621806 AC2,h
2179721807 ACCESS_DESCRIPTION
@@ -31836,8 +31846,12 @@ P-224
3183631846 P-256
3183731847 P-384
3183831848 P-521
31849+P08@J0P=
31850+P08J@
3183931851 P1\t98"
31852+P20P=
3184031853 P5[1
31854+P:0P=
3184131855 PAGN_4
3184231856 PARAMETERS
3184331857 PARENT
@@ -32671,7 +32685,6 @@ R Sqrt
3267132685 R channel
3267232686 R channel not found!\n
3267332687 R/Qs
32674-R0P=
3267532688 R10G10B10A2_TYPELESS
3267632689 R10G10B10A2_UINT
3267732690 R10G10B10A2_UNORM
@@ -32880,6 +32893,7 @@ RT Proxy geometry: %s verts / %s, %s indices / %s. Duplicated %i verts due to p
3288032893 RT60 for low, mid, and high frequency bands for the probe.
3288132894 R\r1>Vp
3288232895 R\vp!y
32896+R\vpx
3288332897 R]Di
3288432898 R_T5Y
3288532899 Rad2 Deg
@@ -36321,6 +36335,7 @@ Z"T-47\f8
3632136335 Z#Pe
3632236336 Z+5AS
3632336337 Z-Axis
36338+Z0P=
3632436339 Z0zd
3632536340 Z7"c
3632636341 Z72\v
@@ -36424,6 +36439,7 @@ Z~wl
3642436439 \Y|W2
3642536440 \\MVT
3642636441 \f%\f/\f1\fA\f[\f_\fa\fm\fs\fw\f
36442+\f0kB
3642736443 \f7ig
3642836444 \f<<0A1pq
3642936445 \f?nkK=f
@@ -36433,7 +36449,6 @@ Z~wl
3643336449 \f]ne3
3643436450 \fdhWTh
3643536451 \fiaR
36436-\fp\vPh
3643736452 \ful2
3643836453 \fy&3Gl
3643936454 \l:ArR
@@ -36522,6 +36537,8 @@ Z~wl
3652236537 \n//\n// Fog Irradiance Volume\n//\n
3652336538 \n//\n// Light Probe Volumes\n//\n
3652436539 \n//\n// Lightmap\n//\n
36540+\n0UB
36541+\n0cB
3652536542 \n5a=Z
3652636543 \n:82H
3652736544 \n==============================================================================================\n
@@ -36531,6 +36548,7 @@ Z~wl
3653136548 \nMS,\nVS_MS_RTX
3653236549 \nNo game entities will be available for creation.\n
3653336550 \nPS_RENDER_STATE
36551+\nPUB
3653436552 \nRTX
3653536553 \nRay Tracing Environment\n
3653636554 \nVCS file format is invalid for %s\n
@@ -36878,6 +36896,7 @@ _wjb
3687836896 _xU`u
3687936897 _zero
3688036898 _}eOk
36899+`20P=
3688136900 `28)fk
3688236901 `3?New@Array@v8@@SA?AV?$Local@VArray@v8@@@2@PEAVIsolate@2@H@Z
3688336902 `:0YB
@@ -39086,7 +39105,6 @@ d.usernotice
3908639105 d.v1AttrCert
3908739106 d.v2AttrCert
3908839107 d.x400Address
39089-d/\vPZ4
3909039108 d/rRw
3909139109 d2i ecpkparameters failure
3909239110 d2i ts resp int failed
@@ -40854,6 +40872,7 @@ horizontal differencing
4085440872 horizontal_pose_param_name
4085540873 houdini
4085640874 houseIdentifier
40875+hpz0P=
4085740876 hr_H
4085840877 hsequence
4085940878 http request
@@ -41532,6 +41551,7 @@ j <= (int)sizeof(ctx->key)
4153241551 j <= sizeof(c->iv)
4153341552 j"MRX
4153441553 j&LQ
41554+j0P=
4153541555 j0ksJ
4153641556 j2ty
4153741557 j3kg
@@ -43793,6 +43813,7 @@ p.other
4379343813 p.ppBasis
4379443814 p.prime
4379543815 p.tpBasis
43816+p20P=
4379643817 p2{l
4379743818 p4Z3
4379843819 p4lib
@@ -44441,6 +44462,7 @@ quiet
4444144462 qx(q
4444244463 r$0I
4444344464 r-IE
44465+r0UB
4444444466 r184
4444544467 r3A~
4444644468 r<\rND
@@ -44453,7 +44475,6 @@ rF6t
4445344475 rFC822localPart
4445444476 rFur`7\t
4445544477 rL[i+
44456-rP'F
4445744478 rRfKR
4445844479 rX&O0
4445944480 rZ1VwGf5
@@ -45930,7 +45951,6 @@ s{5F
4593045951 t(1pC
4593145952 t(ydU
4593245953 t+RW
45933-t.\vPZ4
4593445954 t0;?ZlP*m
4593545955 t2U
4593645956 t4O_
@@ -46617,7 +46637,6 @@ u0Az
4661746637 u5bB
4661846638 u6Bm
4661946639 u:9F
46620-u;0D
4662146640 u;{Gk
4662246641 uBY+
4662346642 uC<[rR
@@ -47358,6 +47377,7 @@ yield_token
4735847377 yyen
4735947378 z(ov
4736047379 z/B,9d
47380+z0P=
4736147381 z<d2
4736247382 z>Hz
4736347383 zDconst char *__cdecl Reflection::Internal::GetFuncName<class CFootPinningPoseOperation>(void)
Mgame/csgo/bin/win64/client_strings.txt+35-29
game/csgo/bin/win64/client_strings.txt
+35-29
@@ -110,10 +110,11 @@
110110 (%d)Unknown
111111 (%ld unused bits)\n
112112 (+%d more due to usercommand delivery)
113- (08@HPX`j
114- (08@HPXb
115- (08@HPZ
116- (0X`hpz
113+ (08@HPX`j@/
114+ (08@HPXbP
115+ (08@HRP
116+ (08@JP
117+ (0X`hpzP
117118 (DEFAULT)
118119 (Dirty Animation)
119120 (INVALID PSS PARAMETERS)\n
@@ -2940,7 +2941,7 @@ $taser_charge
29402941 ).CPlayer_GetPerFriendPreferences_Response"M
29412942 ).CPlayer_SetCommunityPreferences_Response"+
29422943 ).CPlayer_SetPerFriendPreferences_Response"G
2943-)240
2944+)24P
29442945 )4?NewFromUtf8@String@v8@@SA?AV?$MaybeLocal@VString@v8@@@2@PEAVIsolate@2@PEBDW4NewStringType@2@H@Z
29452946 )A service for accessing Steam player dataB
29462947 )App Id this file is being published FROM.
@@ -3121,16 +3122,17 @@ $taser_charge
31213122 ,\n\nsv_interp0
31223123 ,\n\nsv_interp1
31233124 ,\n\vvictim_slot
3125+,]p3H
31243126 ,ar_monastery
3125-,d;4P
3127+,d;4p
31263128 ,fQM(
31273129 ,h11]
31283130 ,hmQ#
31293131 ,kXKlQT
31303132 ,kj8\te
31313133 ,name:
31323134 ,oYR
3133-,sK3
3135+,sK38
31343136 ,section=
31353137 ,value:
31363138 - "%s" = "%.2f"\n
@@ -11012,8 +11014,9 @@ $taser_charge
1101211014 0123456789ABCDEF#
1101311015 02V8[
1101411016 05=k
11015-08@HR
11016-08@J
11017+08@HR@/
11018+08@JP
11019+08B@/
1101711020 08bX
1101811021 09,h
1101911022 0;Q5[
@@ -11045,6 +11048,7 @@ $taser_charge
1104511048 0e\r8
1104611049 0pp@5tqE?|sO541
1104711050 0tU+xc:
11051+0vDt
1104811052 0x%4.4x
1104911053 0x%X
1105011054 0x%X
@@ -11310,7 +11314,6 @@ $taser_charge
1131011314 2\n\nline_items
1131111315 2\n\vpreferences
1131211316 2\rlhp
11313-2\vpT
1131411317 2^pV
1131511318 2a"l
1131611319 2bT~
@@ -11399,7 +11402,7 @@ $taser_charge
1139911402 4tpD
1140011403 4zj@1;IJ
1140111404 4|2;#GameUI_Retake_Card_LightEmUp,1,1,rifle1,grenade0|2;#GameUI_Retake_Card_Kobe,1,1,rifle1,grenade2|1;#GameUI_Retake_Card_1g,1,1,rifle1,grenade3|1;#GameUI_Retake_Card_DisappearingAct,1,1,rifle1,grenade1|1;#GameUI_Retake_Card_EyesOnTarget,1,1,weapon_aug
11402-4~3X
11405+4~3x
1140311406 5'0v2ZP
1140411407 5(EWorkshopFileType) Type of Workshop file to publish.
1140511408 5(Optional) The number of results, per page to return.
@@ -11794,7 +11797,6 @@ $taser_charge
1179411797 ?HAI\t81\t9dcG'
1179511798 ?HP4
1179611799 ?HasCaught@TryCatch@v8@@QEBA_NXZ
11797-?Holds game events until client has received the tick the event was fired on.
1179811800 ?IronSightQuarterRes2
1179911801 ?LatchVariables
1180011802 ?MapItemPreviewPanel SetModel
@@ -11811,6 +11813,7 @@ $taser_charge
1181111813 ?expf
1181211814 ?ffF@D
1181311815 ?ffffff
11816+?gameSceneNodeStepSimulationOriginSerializer
1181411817 ?gwL
1181511818 ?jOb
1181611819 ?referer=csgo_client&steamID=%llu
@@ -11819,14 +11822,13 @@ $taser_charge
1181911822 ?uWS
1182011823 ?x29
1182111824 @!@%@+@1@?@C@E@]@a@g@m@
11825+@08NDt
1182211826 @0pp
11823-@6pF
1182411827 @?SlowGetInternalField@Object@v8@@AEAA?AV?$Local@VData@v8@@@2@H@Z
1182511828 @BH]f
1182611829 @BoneSetup
1182711830 @C_SmokeGrenade
1182811831 @DebugIndividualStyle
11829-@HPX`hvPy
1183011832 @MfKZ
1183111833 @Pgl
1183211834 @Pu\rm
@@ -11841,9 +11843,9 @@ $taser_charge
1184111843 @\n\vserver_type
1184211844 @cl_aggregate_particles
1184311845 @dKb]
11846+@fDt
1184411847 @fff>fff>fff>fff>
1184511848 @ffffff
11846-@htp
1184711849 @i1V
1184811850 @icon_camera
1184911851 @icon_character
@@ -11852,6 +11854,7 @@ $taser_charge
1185211854 @keyframes
1185311855 @keyframes '%s'\r\n{\r\n
1185411856 @n2w
11857+@nDt
1185511858 @workshop
1185611859 @zDSteamUnifiedMessages
1185711860 A random value [0.0, 1.0] used to make sure entities are not all in sync
@@ -20541,6 +20544,7 @@ LT[N
2054120544 LT_txt
2054220545 LXKQ
2054320546 LY\r5
20547+L\fp0
2054420548 L\n\fincludevotes
2054520549 L\n\nserverinfo
2054620550 L\n\tfile_type
@@ -21935,12 +21939,14 @@ P-224
2193521939 P-256
2193621940 P-384
2193721941 P-521
21938-P08@J
21939-P08J01
21942+P08@JP
21943+P08J`1
21944+P08NDt
2194021945 P1\t98"
2194121946 P2P Voice
2194221947 P2P ping to "%s". Timed out after %.2fms\n
2194321948 P5[1
21949+P6@o
2194421950 PAGN_4
2194521951 PANORAMA_LAYOUTFILE
2194621952 PARALYZE
@@ -22645,6 +22651,7 @@ Playsoundscape %s:Unknown command %s\n
2264522651 Please specify 0 or 1 with the -stream Parameter\n
2264622652 Pm8A?
2264722653 PmR"H?
22654+PnDt
2264822655 Point entity.
2264922656 PointsAnim
2265022657 Policy Qualifier CPS
@@ -23115,8 +23122,7 @@ RULESHERE
2311523122 R\n\rincludekvtags
2311623123 R\r1>Vp
2311723124 R\vp!y
23118-R\vpLd
23119-R\vpT
23125+R\vp|d
2312023126 R]Di
2312123127 Rad2 Deg
2312223128 Radar
@@ -26787,7 +26793,6 @@ X\n\tTeamStats
2678726793 X\n\vFantasyTeam
2678826794 X\n\vLoadoutItem
2678926795 X\tQo
26790-X`hr
2679126796 Xd3h
2679226797 XfJ7
2679326798 XjfR
@@ -27112,7 +27117,6 @@ Z~wl
2711227117 \nFinished generating SSTs (%.1f seconds)\n\n
2711327118 \nGameTick_t
2711427119 \nLOADOUT ACTION BATCH #%i\n
27115-\nPLd
2711627120 \nScratch RT Allocations:\n
2711727121 \nSimulating Entities:\n\n
2711827122 \n\fBPE_Teleport
@@ -27821,7 +27825,6 @@ Z~wl
2782127825 \tListen for while open event
2782227826 \tMarkSucceeded()\n
2782327827 \tNone\n
27824-\tPPO
2782527828 \tParam BasePlayerWeapon returned NULL!\n
2782627829 \tParam selecting string is out of range!\n
2782727830 \tPlayer param "%s" returned NULL.\n
@@ -27942,13 +27945,12 @@ Z~wl
2794227945 \vGt5
2794327946 \vHCK/
2794427947 \vNCE\v
27945-\vPPO
2794627948 \vUY6[E
2794727949 \v\n\tRemoveFan
2794827950 \v\vTSG
2794927951 \vj0k
2795027952 \vjC7
27951-\vpLd
27953+\vppR
2795227954 ]1h=bfz
2795327955 ]FhSD}
2795427956 ]GT7]
@@ -28047,7 +28049,6 @@ _xU`u
2804728049 _}eOk
2804828050 `28)fk
2804928051 `3?New@Array@v8@@SA?AV?$Local@VArray@v8@@@2@PEAVIsolate@2@H@Z
28050-`6pn
2805128052 `:zQF
2805228053 `D$daM-l
2805328054 `DZG
@@ -28056,12 +28057,13 @@ _}eOk
2805628057 `ITS
2805728058 `VX:H
2805828059 `\n\rvector_values
28059-`\rP\f0Ld
2806028060 `\tV_log2f
2806128061 `anonymous-namespace'::DynamicLockHelper<struct `anonymous namespace'::SmokeConstantBuffer_t>::Lock
2806228062 `anonymous-namespace'::DynamicLockHelper<struct `anonymous namespace'::SmokeLightProbeVolumeData_t>::Lock
28063+`fDt
2806328064 `fPw.\vM
2806428065 `h9T~
28066+`nDt
2806528067 `o_je
2806628068 `yNT
2806728069 a null shared library handle was used
@@ -28081,6 +28083,7 @@ a:typeparam
2808128083 a;Tg
2808228084 a@XZ
2808328085 aA0k
28086+aBvDt
2808428087 aD/x
2808528088 aDSS
2808628089 aECDH
@@ -32382,7 +32385,6 @@ gameSceneNodeLocalAnglesChanged
3238232385 gameSceneNodeLocalOriginChanged
3238332386 gameSceneNodeLocalScaleChanged
3238432387 gameSceneNodeStepSimulationAnglesSerializer
32385-gameSceneNodeStepSimulationOriginSerializer
3238632388 gameTypes
3238732389 game_display_type
3238832390 game_event_listener
@@ -32939,7 +32941,7 @@ hour
3293932941 hours
3294032942 houseIdentifier
3294132943 hover
32942-hpz
32944+hpzP
3294332945 hr_H
3294432946 href="
3294532947 hscroll
@@ -36349,6 +36351,7 @@ p.other
3634936351 p.ppBasis
3635036352 p.prime
3635136353 p.tpBasis
36354+p08@H^Dt
3635236355 p250
3635336356 p2p_ping could not convert "%s" to a CPeerToPeerAddress\n
3635436357 p2p_ping could not ping "%s" because they are an unknown peer\n
@@ -36359,7 +36362,9 @@ p4Z3
3635936362 p5Z3
3636036363 p5\nL,
3636136364 p618
36365+p6p/
3636236366 p>?Set@Template@v8@@QEAAXV?$Local@VName@v8@@@2@V?$Local@VData@v8@@@2@W4PropertyAttribute@2@@Z
36367+p>Dt
3636336368 p@0pqE5tsO?|1
3636436369 pBLightQueryGameSystem
3636536370 pCheckpointName
@@ -37002,6 +37007,7 @@ playtime
3700237007 playtime_2weeks
3700337008 playtime_forever
3700437009 plum
37010+pnDt
3700537011 point
3700637012 point arithmetic failure
3700737013 point at infinity
@@ -37416,7 +37422,7 @@ rRfKR
3741637422 rX&O0
3741737423 rZ1VwGf5
3741837424 rZPM
37419-r\fpLd
37425+r\fp|d
3742037426 r\n\vstart_index
3742137427 r\vDi
3742237428 r\vp!K
Mgame/csgo/csgo.fgd+1-1
game/csgo/csgo.fgd
+1-1
@@ -1601,7 +1601,7 @@
16011601 "Panorama UI that can be controlled by cs_script. See point_script."
16021602 [
16031603 targetname(target_source) { sort_priority = 90 } : "Name" : : "The name that other entities refer to this entity by."
1604- layout(resource:xml) : "A panorama layout file. A limited set of panel types and attributes are supported. Run command dev_report_info_hud_layout for more details."
1604+ layout(resource:xml) : "A panorama layout file. A limited set of panel types and attributes are supported."
16051605 ]
16061606
16071607 @FilterClass base(BaseFilter) iconsprite("editor/filter_team.vmat") = filter_activator_team :
Mgame/csgo/gameinfo.gi+2-0
game/csgo/gameinfo.gi
+2-0
@@ -326,6 +326,8 @@
326326 "include" "models"
327327 "include" "panorama/images/overheadmaps"
328328 "include" "panorama/images/map_icons"
329+ "include" "panorama/layout/custom_game"
330+ "include" "panorama/styles/custom_game"
329331 "include" "particles"
330332 "include" "resource/overviews"
331333 "include" "scripts"
Mgame/csgo/pak01_dir.txt+2-2
game/csgo/pak01_dir.txt
+2-2
@@ -6864,8 +6864,8 @@ maps/editor/zoo/scripts/input.vjs_c CRC:00701852e9 size:2332
68646864 maps/editor/zoo/scripts/mdlchange.vjs_c CRC:0015e118a4 size:2582
68656865 maps/editor/zoo/scripts/setup.vjs_c CRC:00b895686f size:2925
68666866 maps/editor/zoo/scripts/trace.vjs_c CRC:00c0e9beac size:7301
6867-maps/editor/zoo/scripts/welcome.vcss_c CRC:0087a2d950 size:2407
6868-maps/editor/zoo/scripts/welcome.vxml_c CRC:001e14b6aa size:1544
6867+maps/editor/zoo/scripts/welcome.vcss_c CRC:00b91e138a size:2407
6868+maps/editor/zoo/scripts/welcome.vxml_c CRC:00ad304d6b size:1604
68696869 maps/workshop_compatibility_versions.txt CRC:0041137ecb size:1787
68706870 materials/anubis/anubis_water_canal.vmat_c CRC:007e7b5225 size:5763
68716871 materials/anubis/anubis_water_canal_vmat_g_tcolor_7ab53e0a.vtex_c CRC:00d4b83f87 size:1976
Update information⌄
- Build
- 24934554
- Associated changelist
- 38326889
- Game version
- 2000891
Found something incorrect?
Report a missing patch note, incorrect file change, or other problem.