quake2ts 0.0.201 → 0.0.202

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/package.json +1 -1
  2. package/packages/cgame/dist/index.cjs +1 -1
  3. package/packages/cgame/dist/index.cjs.map +1 -1
  4. package/packages/cgame/dist/index.js +2 -2
  5. package/packages/cgame/dist/index.js.map +1 -1
  6. package/packages/client/dist/browser/index.global.js +11 -11
  7. package/packages/client/dist/browser/index.global.js.map +1 -1
  8. package/packages/client/dist/cjs/index.cjs +28 -14
  9. package/packages/client/dist/cjs/index.cjs.map +1 -1
  10. package/packages/client/dist/esm/index.js +28 -14
  11. package/packages/client/dist/esm/index.js.map +1 -1
  12. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  13. package/packages/engine/dist/browser/index.global.js +10 -10
  14. package/packages/engine/dist/browser/index.global.js.map +1 -1
  15. package/packages/engine/dist/cjs/index.cjs +14 -7
  16. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  17. package/packages/engine/dist/esm/index.js +14 -7
  18. package/packages/engine/dist/esm/index.js.map +1 -1
  19. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  20. package/packages/game/dist/browser/index.global.js +2 -2
  21. package/packages/game/dist/browser/index.global.js.map +1 -1
  22. package/packages/game/dist/cjs/index.cjs +233 -55
  23. package/packages/game/dist/cjs/index.cjs.map +1 -1
  24. package/packages/game/dist/esm/index.js +233 -55
  25. package/packages/game/dist/esm/index.js.map +1 -1
  26. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  27. package/packages/game/dist/types/entities/playerStats.d.ts.map +1 -1
  28. package/packages/shared/dist/browser/index.global.js +1 -1
  29. package/packages/shared/dist/browser/index.global.js.map +1 -1
  30. package/packages/shared/dist/cjs/index.cjs +197 -52
  31. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  32. package/packages/shared/dist/esm/index.js +191 -52
  33. package/packages/shared/dist/esm/index.js.map +1 -1
  34. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  35. package/packages/shared/dist/types/items/ammo.d.ts +8 -7
  36. package/packages/shared/dist/types/items/ammo.d.ts.map +1 -1
  37. package/packages/shared/dist/types/protocol/stats.d.ts +41 -8
  38. package/packages/shared/dist/types/protocol/stats.d.ts.map +1 -1
  39. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ AMMO_MAX: () => AMMO_MAX,
23
24
  AMMO_TYPE_COUNT: () => AMMO_TYPE_COUNT,
24
25
  ANORMS: () => ANORMS,
25
26
  AmmoItemId: () => AmmoItemId,
@@ -114,7 +115,12 @@ __export(index_exports, {
114
115
  MAX_TOKEN_CHARS: () => MAX_TOKEN_CHARS,
115
116
  MAX_WHEEL_ITEMS: () => MAX_WHEEL_ITEMS,
116
117
  MersenneTwister19937: () => MersenneTwister19937,
118
+ NUM_AMMO_STATS: () => NUM_AMMO_STATS,
119
+ NUM_BITS_FOR_AMMO: () => NUM_BITS_FOR_AMMO,
120
+ NUM_BITS_FOR_POWERUP: () => NUM_BITS_FOR_POWERUP,
121
+ NUM_POWERUP_STATS: () => NUM_POWERUP_STATS,
117
122
  PITCH: () => PITCH,
123
+ POWERUP_MAX: () => POWERUP_MAX,
118
124
  PlaneSide: () => PlaneSide,
119
125
  PlayerButton: () => PlayerButton,
120
126
  PlayerStat: () => PlayerStat,
@@ -3794,6 +3800,90 @@ var LayoutFlags = /* @__PURE__ */ ((LayoutFlags2) => {
3794
3800
  return LayoutFlags2;
3795
3801
  })(LayoutFlags || {});
3796
3802
 
3803
+ // src/protocol/bitpack.ts
3804
+ function toSigned16(val) {
3805
+ return val << 16 >> 16;
3806
+ }
3807
+ function readUint16LE(stats, startIndex, byteOffset) {
3808
+ const elementIndex = Math.floor(byteOffset / 2);
3809
+ const isOdd = byteOffset % 2 !== 0;
3810
+ const index = startIndex + elementIndex;
3811
+ const val0 = stats[index] || 0;
3812
+ if (!isOdd) {
3813
+ return val0 & 65535;
3814
+ } else {
3815
+ const val1 = stats[index + 1] || 0;
3816
+ const low = val0 >>> 8 & 255;
3817
+ const high = val1 & 255;
3818
+ return high << 8 | low;
3819
+ }
3820
+ }
3821
+ function writeUint16LE(stats, startIndex, byteOffset, value) {
3822
+ const elementIndex = Math.floor(byteOffset / 2);
3823
+ const isOdd = byteOffset % 2 !== 0;
3824
+ const index = startIndex + elementIndex;
3825
+ if (stats[index] === void 0) stats[index] = 0;
3826
+ if (!isOdd) {
3827
+ stats[index] = toSigned16(value);
3828
+ } else {
3829
+ if (stats[index + 1] === void 0) stats[index + 1] = 0;
3830
+ const val0 = stats[index];
3831
+ const val1 = stats[index + 1];
3832
+ const newHigh0 = value & 255;
3833
+ const newVal0 = val0 & 255 | newHigh0 << 8;
3834
+ stats[index] = toSigned16(newVal0);
3835
+ const newLow1 = value >>> 8 & 255;
3836
+ const newVal1 = newLow1 | val1 & 65280;
3837
+ stats[index + 1] = toSigned16(newVal1);
3838
+ }
3839
+ }
3840
+ function setCompressedInteger(stats, startIndex, id, count, bitsPerValue) {
3841
+ const bitOffset = bitsPerValue * id;
3842
+ const byteOffset = Math.floor(bitOffset / 8);
3843
+ const bitShift = bitOffset % 8;
3844
+ const mask = (1 << bitsPerValue) - 1 << bitShift;
3845
+ let base = readUint16LE(stats, startIndex, byteOffset);
3846
+ const valueToWrite = base & ~mask | count << bitShift & mask;
3847
+ writeUint16LE(stats, startIndex, byteOffset, valueToWrite & 65535);
3848
+ }
3849
+ function getCompressedInteger(stats, startIndex, id, bitsPerValue) {
3850
+ const bitOffset = bitsPerValue * id;
3851
+ const byteOffset = Math.floor(bitOffset / 8);
3852
+ const bitShift = bitOffset % 8;
3853
+ const mask = (1 << bitsPerValue) - 1 << bitShift;
3854
+ const base = readUint16LE(stats, startIndex, byteOffset);
3855
+ return (base & mask) >>> bitShift;
3856
+ }
3857
+
3858
+ // src/items/powerups.ts
3859
+ var PowerupId = /* @__PURE__ */ ((PowerupId2) => {
3860
+ PowerupId2["QuadDamage"] = "quad";
3861
+ PowerupId2["Invulnerability"] = "invulnerability";
3862
+ PowerupId2["EnviroSuit"] = "enviro_suit";
3863
+ PowerupId2["Rebreather"] = "rebreather";
3864
+ PowerupId2["Silencer"] = "silencer";
3865
+ PowerupId2["PowerScreen"] = "power_screen";
3866
+ PowerupId2["PowerShield"] = "power_shield";
3867
+ PowerupId2["QuadFire"] = "quad_fire";
3868
+ PowerupId2["Invisibility"] = "invisibility";
3869
+ PowerupId2["Bandolier"] = "bandolier";
3870
+ PowerupId2["AmmoPack"] = "ammo_pack";
3871
+ PowerupId2["IRGoggles"] = "ir_goggles";
3872
+ PowerupId2["DoubleDamage"] = "double_damage";
3873
+ PowerupId2["SphereVengeance"] = "sphere_vengeance";
3874
+ PowerupId2["SphereHunter"] = "sphere_hunter";
3875
+ PowerupId2["SphereDefender"] = "sphere_defender";
3876
+ PowerupId2["Doppelganger"] = "doppelganger";
3877
+ PowerupId2["TagToken"] = "tag_token";
3878
+ PowerupId2["TechResistance"] = "tech_resistance";
3879
+ PowerupId2["TechStrength"] = "tech_strength";
3880
+ PowerupId2["TechHaste"] = "tech_haste";
3881
+ PowerupId2["TechRegeneration"] = "tech_regeneration";
3882
+ PowerupId2["Flashlight"] = "flashlight";
3883
+ PowerupId2["Compass"] = "compass";
3884
+ return PowerupId2;
3885
+ })(PowerupId || {});
3886
+
3797
3887
  // src/protocol/stats.ts
3798
3888
  var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
3799
3889
  PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
@@ -3814,24 +3904,101 @@ var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
3814
3904
  PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
3815
3905
  PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
3816
3906
  PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
3817
- PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 18] = "STAT_WEAPONS_OWNED_1";
3818
- PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 19] = "STAT_WEAPONS_OWNED_2";
3819
- PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 20] = "STAT_AMMO_INFO_START";
3907
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
3908
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
3909
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
3910
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
3911
+ PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
3912
+ PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
3913
+ PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
3914
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
3915
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
3916
+ PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
3917
+ PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
3918
+ PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
3919
+ PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
3920
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
3921
+ PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
3922
+ PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
3923
+ PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
3924
+ PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
3925
+ PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
3926
+ PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
3927
+ PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
3928
+ PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
3929
+ PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
3930
+ PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
3931
+ PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
3932
+ PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
3933
+ PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
3934
+ PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
3935
+ PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
3820
3936
  return PlayerStat2;
3821
3937
  })(PlayerStat || {});
3822
- function G_SetAmmoStat(val) {
3823
- if (val > 511) return 511;
3824
- if (val < 0) return 0;
3825
- return val;
3826
- }
3827
- function G_GetAmmoStat(val) {
3828
- return val & 511;
3829
- }
3830
- function G_SetPowerupStat(val) {
3831
- return val;
3832
- }
3833
- function G_GetPowerupStat(val) {
3834
- return val;
3938
+ var AMMO_MAX = 12;
3939
+ var NUM_BITS_FOR_AMMO = 9;
3940
+ var NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
3941
+ var POWERUP_MAX = 23;
3942
+ var NUM_BITS_FOR_POWERUP = 2;
3943
+ var NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
3944
+ var POWERUP_STAT_MAP = {
3945
+ ["power_screen" /* PowerScreen */]: 0,
3946
+ ["power_shield" /* PowerShield */]: 1,
3947
+ // 2 is POWERUP_AM_BOMB (not in PowerupId?)
3948
+ ["quad" /* QuadDamage */]: 3,
3949
+ ["quad_fire" /* QuadFire */]: 4,
3950
+ ["invulnerability" /* Invulnerability */]: 5,
3951
+ ["invisibility" /* Invisibility */]: 6,
3952
+ ["silencer" /* Silencer */]: 7,
3953
+ ["rebreather" /* Rebreather */]: 8,
3954
+ ["enviro_suit" /* EnviroSuit */]: 9,
3955
+ // 10 is POWERUP_ADRENALINE (not in PowerupId?)
3956
+ ["ir_goggles" /* IRGoggles */]: 11,
3957
+ ["double_damage" /* DoubleDamage */]: 12,
3958
+ ["sphere_vengeance" /* SphereVengeance */]: 13,
3959
+ ["sphere_hunter" /* SphereHunter */]: 14,
3960
+ ["sphere_defender" /* SphereDefender */]: 15,
3961
+ ["doppelganger" /* Doppelganger */]: 16,
3962
+ ["flashlight" /* Flashlight */]: 17,
3963
+ ["compass" /* Compass */]: 18,
3964
+ ["tech_resistance" /* TechResistance */]: 19,
3965
+ ["tech_strength" /* TechStrength */]: 20,
3966
+ ["tech_haste" /* TechHaste */]: 21,
3967
+ ["tech_regeneration" /* TechRegeneration */]: 22
3968
+ };
3969
+ function G_SetAmmoStat(stats, ammoId, count) {
3970
+ if (ammoId < 0 || ammoId >= AMMO_MAX) return;
3971
+ let val = count;
3972
+ if (val > 511) val = 511;
3973
+ if (val < 0) val = 0;
3974
+ setCompressedInteger(stats, 34 /* STAT_AMMO_INFO_START */, ammoId, val, NUM_BITS_FOR_AMMO);
3975
+ }
3976
+ function G_GetAmmoStat(stats, ammoId) {
3977
+ if (ammoId < 0 || ammoId >= AMMO_MAX) return 0;
3978
+ return getCompressedInteger(stats, 34 /* STAT_AMMO_INFO_START */, ammoId, NUM_BITS_FOR_AMMO);
3979
+ }
3980
+ function G_SetPowerupStat(stats, powerupId, val) {
3981
+ let index;
3982
+ if (typeof powerupId === "number") {
3983
+ index = powerupId;
3984
+ } else {
3985
+ index = POWERUP_STAT_MAP[powerupId];
3986
+ }
3987
+ if (index === void 0 || index < 0 || index >= POWERUP_MAX) return;
3988
+ let safeVal = val;
3989
+ if (safeVal > 3) safeVal = 3;
3990
+ if (safeVal < 0) safeVal = 0;
3991
+ setCompressedInteger(stats, 41 /* STAT_POWERUP_INFO_START */, index, safeVal, NUM_BITS_FOR_POWERUP);
3992
+ }
3993
+ function G_GetPowerupStat(stats, powerupId) {
3994
+ let index;
3995
+ if (typeof powerupId === "number") {
3996
+ index = powerupId;
3997
+ } else {
3998
+ index = POWERUP_STAT_MAP[powerupId];
3999
+ }
4000
+ if (index === void 0 || index < 0 || index >= POWERUP_MAX) return 0;
4001
+ return getCompressedInteger(stats, 41 /* STAT_POWERUP_INFO_START */, index, NUM_BITS_FOR_POWERUP);
3835
4002
  }
3836
4003
 
3837
4004
  // src/protocol/entityFlags.ts
@@ -4187,13 +4354,14 @@ var AmmoType = /* @__PURE__ */ ((AmmoType2) => {
4187
4354
  AmmoType2[AmmoType2["Grenades"] = 3] = "Grenades";
4188
4355
  AmmoType2[AmmoType2["Cells"] = 4] = "Cells";
4189
4356
  AmmoType2[AmmoType2["Slugs"] = 5] = "Slugs";
4190
- AmmoType2[AmmoType2["Trap"] = 6] = "Trap";
4191
- AmmoType2[AmmoType2["Tesla"] = 7] = "Tesla";
4192
- AmmoType2[AmmoType2["MagSlugs"] = 8] = "MagSlugs";
4193
- AmmoType2[AmmoType2["Flechettes"] = 9] = "Flechettes";
4194
- AmmoType2[AmmoType2["Prox"] = 10] = "Prox";
4195
- AmmoType2[AmmoType2["Nuke"] = 11] = "Nuke";
4196
- AmmoType2[AmmoType2["Rounds"] = 12] = "Rounds";
4357
+ AmmoType2[AmmoType2["MagSlugs"] = 6] = "MagSlugs";
4358
+ AmmoType2[AmmoType2["Trap"] = 7] = "Trap";
4359
+ AmmoType2[AmmoType2["Flechettes"] = 8] = "Flechettes";
4360
+ AmmoType2[AmmoType2["Tesla"] = 9] = "Tesla";
4361
+ AmmoType2[AmmoType2["Disruptor"] = 10] = "Disruptor";
4362
+ AmmoType2[AmmoType2["Prox"] = 11] = "Prox";
4363
+ AmmoType2[AmmoType2["Nuke"] = 12] = "Nuke";
4364
+ AmmoType2[AmmoType2["Rounds"] = 13] = "Rounds";
4197
4365
  return AmmoType2;
4198
4366
  })(AmmoType || {});
4199
4367
  var AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
@@ -4206,37 +4374,9 @@ var AmmoItemId = /* @__PURE__ */ ((AmmoItemId2) => {
4206
4374
  AmmoItemId2["Slugs"] = "ammo_slugs";
4207
4375
  return AmmoItemId2;
4208
4376
  })(AmmoItemId || {});
4209
-
4210
- // src/items/powerups.ts
4211
- var PowerupId = /* @__PURE__ */ ((PowerupId2) => {
4212
- PowerupId2["QuadDamage"] = "quad";
4213
- PowerupId2["Invulnerability"] = "invulnerability";
4214
- PowerupId2["EnviroSuit"] = "enviro_suit";
4215
- PowerupId2["Rebreather"] = "rebreather";
4216
- PowerupId2["Silencer"] = "silencer";
4217
- PowerupId2["PowerScreen"] = "power_screen";
4218
- PowerupId2["PowerShield"] = "power_shield";
4219
- PowerupId2["QuadFire"] = "quad_fire";
4220
- PowerupId2["Invisibility"] = "invisibility";
4221
- PowerupId2["Bandolier"] = "bandolier";
4222
- PowerupId2["AmmoPack"] = "ammo_pack";
4223
- PowerupId2["IRGoggles"] = "ir_goggles";
4224
- PowerupId2["DoubleDamage"] = "double_damage";
4225
- PowerupId2["SphereVengeance"] = "sphere_vengeance";
4226
- PowerupId2["SphereHunter"] = "sphere_hunter";
4227
- PowerupId2["SphereDefender"] = "sphere_defender";
4228
- PowerupId2["Doppelganger"] = "doppelganger";
4229
- PowerupId2["TagToken"] = "tag_token";
4230
- PowerupId2["TechResistance"] = "tech_resistance";
4231
- PowerupId2["TechStrength"] = "tech_strength";
4232
- PowerupId2["TechHaste"] = "tech_haste";
4233
- PowerupId2["TechRegeneration"] = "tech_regeneration";
4234
- PowerupId2["Flashlight"] = "flashlight";
4235
- PowerupId2["Compass"] = "compass";
4236
- return PowerupId2;
4237
- })(PowerupId || {});
4238
4377
  // Annotate the CommonJS export names for ESM import in node:
4239
4378
  0 && (module.exports = {
4379
+ AMMO_MAX,
4240
4380
  AMMO_TYPE_COUNT,
4241
4381
  ANORMS,
4242
4382
  AmmoItemId,
@@ -4331,7 +4471,12 @@ var PowerupId = /* @__PURE__ */ ((PowerupId2) => {
4331
4471
  MAX_TOKEN_CHARS,
4332
4472
  MAX_WHEEL_ITEMS,
4333
4473
  MersenneTwister19937,
4474
+ NUM_AMMO_STATS,
4475
+ NUM_BITS_FOR_AMMO,
4476
+ NUM_BITS_FOR_POWERUP,
4477
+ NUM_POWERUP_STATS,
4334
4478
  PITCH,
4479
+ POWERUP_MAX,
4335
4480
  PlaneSide,
4336
4481
  PlayerButton,
4337
4482
  PlayerStat,