quake2ts 0.0.201 → 0.0.203

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 (41) 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/server/dist/index.cjs +131 -2
  29. package/packages/server/dist/index.js +131 -2
  30. package/packages/shared/dist/browser/index.global.js +1 -1
  31. package/packages/shared/dist/browser/index.global.js.map +1 -1
  32. package/packages/shared/dist/cjs/index.cjs +197 -52
  33. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  34. package/packages/shared/dist/esm/index.js +191 -52
  35. package/packages/shared/dist/esm/index.js.map +1 -1
  36. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  37. package/packages/shared/dist/types/items/ammo.d.ts +8 -7
  38. package/packages/shared/dist/types/items/ammo.d.ts.map +1 -1
  39. package/packages/shared/dist/types/protocol/stats.d.ts +41 -8
  40. package/packages/shared/dist/types/protocol/stats.d.ts.map +1 -1
  41. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -3543,6 +3543,90 @@ var LayoutFlags = /* @__PURE__ */ ((LayoutFlags2) => {
3543
3543
  return LayoutFlags2;
3544
3544
  })(LayoutFlags || {});
3545
3545
 
3546
+ // src/protocol/bitpack.ts
3547
+ function toSigned16(val) {
3548
+ return val << 16 >> 16;
3549
+ }
3550
+ function readUint16LE(stats, startIndex, byteOffset) {
3551
+ const elementIndex = Math.floor(byteOffset / 2);
3552
+ const isOdd = byteOffset % 2 !== 0;
3553
+ const index = startIndex + elementIndex;
3554
+ const val0 = stats[index] || 0;
3555
+ if (!isOdd) {
3556
+ return val0 & 65535;
3557
+ } else {
3558
+ const val1 = stats[index + 1] || 0;
3559
+ const low = val0 >>> 8 & 255;
3560
+ const high = val1 & 255;
3561
+ return high << 8 | low;
3562
+ }
3563
+ }
3564
+ function writeUint16LE(stats, startIndex, byteOffset, value) {
3565
+ const elementIndex = Math.floor(byteOffset / 2);
3566
+ const isOdd = byteOffset % 2 !== 0;
3567
+ const index = startIndex + elementIndex;
3568
+ if (stats[index] === void 0) stats[index] = 0;
3569
+ if (!isOdd) {
3570
+ stats[index] = toSigned16(value);
3571
+ } else {
3572
+ if (stats[index + 1] === void 0) stats[index + 1] = 0;
3573
+ const val0 = stats[index];
3574
+ const val1 = stats[index + 1];
3575
+ const newHigh0 = value & 255;
3576
+ const newVal0 = val0 & 255 | newHigh0 << 8;
3577
+ stats[index] = toSigned16(newVal0);
3578
+ const newLow1 = value >>> 8 & 255;
3579
+ const newVal1 = newLow1 | val1 & 65280;
3580
+ stats[index + 1] = toSigned16(newVal1);
3581
+ }
3582
+ }
3583
+ function setCompressedInteger(stats, startIndex, id, count, bitsPerValue) {
3584
+ const bitOffset = bitsPerValue * id;
3585
+ const byteOffset = Math.floor(bitOffset / 8);
3586
+ const bitShift = bitOffset % 8;
3587
+ const mask = (1 << bitsPerValue) - 1 << bitShift;
3588
+ let base = readUint16LE(stats, startIndex, byteOffset);
3589
+ const valueToWrite = base & ~mask | count << bitShift & mask;
3590
+ writeUint16LE(stats, startIndex, byteOffset, valueToWrite & 65535);
3591
+ }
3592
+ function getCompressedInteger(stats, startIndex, id, bitsPerValue) {
3593
+ const bitOffset = bitsPerValue * id;
3594
+ const byteOffset = Math.floor(bitOffset / 8);
3595
+ const bitShift = bitOffset % 8;
3596
+ const mask = (1 << bitsPerValue) - 1 << bitShift;
3597
+ const base = readUint16LE(stats, startIndex, byteOffset);
3598
+ return (base & mask) >>> bitShift;
3599
+ }
3600
+
3601
+ // src/items/powerups.ts
3602
+ var PowerupId = /* @__PURE__ */ ((PowerupId2) => {
3603
+ PowerupId2["QuadDamage"] = "quad";
3604
+ PowerupId2["Invulnerability"] = "invulnerability";
3605
+ PowerupId2["EnviroSuit"] = "enviro_suit";
3606
+ PowerupId2["Rebreather"] = "rebreather";
3607
+ PowerupId2["Silencer"] = "silencer";
3608
+ PowerupId2["PowerScreen"] = "power_screen";
3609
+ PowerupId2["PowerShield"] = "power_shield";
3610
+ PowerupId2["QuadFire"] = "quad_fire";
3611
+ PowerupId2["Invisibility"] = "invisibility";
3612
+ PowerupId2["Bandolier"] = "bandolier";
3613
+ PowerupId2["AmmoPack"] = "ammo_pack";
3614
+ PowerupId2["IRGoggles"] = "ir_goggles";
3615
+ PowerupId2["DoubleDamage"] = "double_damage";
3616
+ PowerupId2["SphereVengeance"] = "sphere_vengeance";
3617
+ PowerupId2["SphereHunter"] = "sphere_hunter";
3618
+ PowerupId2["SphereDefender"] = "sphere_defender";
3619
+ PowerupId2["Doppelganger"] = "doppelganger";
3620
+ PowerupId2["TagToken"] = "tag_token";
3621
+ PowerupId2["TechResistance"] = "tech_resistance";
3622
+ PowerupId2["TechStrength"] = "tech_strength";
3623
+ PowerupId2["TechHaste"] = "tech_haste";
3624
+ PowerupId2["TechRegeneration"] = "tech_regeneration";
3625
+ PowerupId2["Flashlight"] = "flashlight";
3626
+ PowerupId2["Compass"] = "compass";
3627
+ return PowerupId2;
3628
+ })(PowerupId || {});
3629
+
3546
3630
  // src/protocol/stats.ts
3547
3631
  var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
3548
3632
  PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
@@ -3563,24 +3647,101 @@ var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
3563
3647
  PlayerStat2[PlayerStat2["STAT_FLASHES"] = 15] = "STAT_FLASHES";
3564
3648
  PlayerStat2[PlayerStat2["STAT_CHASE"] = 16] = "STAT_CHASE";
3565
3649
  PlayerStat2[PlayerStat2["STAT_SPECTATOR"] = 17] = "STAT_SPECTATOR";
3566
- PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 18] = "STAT_WEAPONS_OWNED_1";
3567
- PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 19] = "STAT_WEAPONS_OWNED_2";
3568
- PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 20] = "STAT_AMMO_INFO_START";
3650
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_PIC"] = 18] = "STAT_CTF_TEAM1_PIC";
3651
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_CAPS"] = 19] = "STAT_CTF_TEAM1_CAPS";
3652
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_PIC"] = 20] = "STAT_CTF_TEAM2_PIC";
3653
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_CAPS"] = 21] = "STAT_CTF_TEAM2_CAPS";
3654
+ PlayerStat2[PlayerStat2["STAT_CTF_FLAG_PIC"] = 22] = "STAT_CTF_FLAG_PIC";
3655
+ PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM1_PIC"] = 23] = "STAT_CTF_JOINED_TEAM1_PIC";
3656
+ PlayerStat2[PlayerStat2["STAT_CTF_JOINED_TEAM2_PIC"] = 24] = "STAT_CTF_JOINED_TEAM2_PIC";
3657
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM1_HEADER"] = 25] = "STAT_CTF_TEAM1_HEADER";
3658
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAM2_HEADER"] = 26] = "STAT_CTF_TEAM2_HEADER";
3659
+ PlayerStat2[PlayerStat2["STAT_CTF_TECH"] = 27] = "STAT_CTF_TECH";
3660
+ PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW"] = 28] = "STAT_CTF_ID_VIEW";
3661
+ PlayerStat2[PlayerStat2["STAT_CTF_MATCH"] = 29] = "STAT_CTF_MATCH";
3662
+ PlayerStat2[PlayerStat2["STAT_CTF_ID_VIEW_COLOR"] = 30] = "STAT_CTF_ID_VIEW_COLOR";
3663
+ PlayerStat2[PlayerStat2["STAT_CTF_TEAMINFO"] = 31] = "STAT_CTF_TEAMINFO";
3664
+ PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_1"] = 32] = "STAT_WEAPONS_OWNED_1";
3665
+ PlayerStat2[PlayerStat2["STAT_WEAPONS_OWNED_2"] = 33] = "STAT_WEAPONS_OWNED_2";
3666
+ PlayerStat2[PlayerStat2["STAT_AMMO_INFO_START"] = 34] = "STAT_AMMO_INFO_START";
3667
+ PlayerStat2[PlayerStat2["STAT_POWERUP_INFO_START"] = 41] = "STAT_POWERUP_INFO_START";
3668
+ PlayerStat2[PlayerStat2["STAT_KEY_A"] = 44] = "STAT_KEY_A";
3669
+ PlayerStat2[PlayerStat2["STAT_KEY_B"] = 45] = "STAT_KEY_B";
3670
+ PlayerStat2[PlayerStat2["STAT_KEY_C"] = 46] = "STAT_KEY_C";
3671
+ PlayerStat2[PlayerStat2["STAT_ACTIVE_WHEEL_WEAPON"] = 47] = "STAT_ACTIVE_WHEEL_WEAPON";
3672
+ PlayerStat2[PlayerStat2["STAT_COOP_RESPAWN"] = 48] = "STAT_COOP_RESPAWN";
3673
+ PlayerStat2[PlayerStat2["STAT_LIVES"] = 49] = "STAT_LIVES";
3674
+ PlayerStat2[PlayerStat2["STAT_HIT_MARKER"] = 50] = "STAT_HIT_MARKER";
3675
+ PlayerStat2[PlayerStat2["STAT_SELECTED_ITEM_NAME"] = 51] = "STAT_SELECTED_ITEM_NAME";
3676
+ PlayerStat2[PlayerStat2["STAT_HEALTH_BARS"] = 52] = "STAT_HEALTH_BARS";
3677
+ PlayerStat2[PlayerStat2["STAT_ACTIVE_WEAPON"] = 53] = "STAT_ACTIVE_WEAPON";
3678
+ PlayerStat2[PlayerStat2["STAT_LAST"] = 54] = "STAT_LAST";
3569
3679
  return PlayerStat2;
3570
3680
  })(PlayerStat || {});
3571
- function G_SetAmmoStat(val) {
3572
- if (val > 511) return 511;
3573
- if (val < 0) return 0;
3574
- return val;
3575
- }
3576
- function G_GetAmmoStat(val) {
3577
- return val & 511;
3578
- }
3579
- function G_SetPowerupStat(val) {
3580
- return val;
3581
- }
3582
- function G_GetPowerupStat(val) {
3583
- return val;
3681
+ var AMMO_MAX = 12;
3682
+ var NUM_BITS_FOR_AMMO = 9;
3683
+ var NUM_AMMO_STATS = Math.ceil(AMMO_MAX * NUM_BITS_FOR_AMMO / 16);
3684
+ var POWERUP_MAX = 23;
3685
+ var NUM_BITS_FOR_POWERUP = 2;
3686
+ var NUM_POWERUP_STATS = Math.ceil(POWERUP_MAX * NUM_BITS_FOR_POWERUP / 16);
3687
+ var POWERUP_STAT_MAP = {
3688
+ ["power_screen" /* PowerScreen */]: 0,
3689
+ ["power_shield" /* PowerShield */]: 1,
3690
+ // 2 is POWERUP_AM_BOMB (not in PowerupId?)
3691
+ ["quad" /* QuadDamage */]: 3,
3692
+ ["quad_fire" /* QuadFire */]: 4,
3693
+ ["invulnerability" /* Invulnerability */]: 5,
3694
+ ["invisibility" /* Invisibility */]: 6,
3695
+ ["silencer" /* Silencer */]: 7,
3696
+ ["rebreather" /* Rebreather */]: 8,
3697
+ ["enviro_suit" /* EnviroSuit */]: 9,
3698
+ // 10 is POWERUP_ADRENALINE (not in PowerupId?)
3699
+ ["ir_goggles" /* IRGoggles */]: 11,
3700
+ ["double_damage" /* DoubleDamage */]: 12,
3701
+ ["sphere_vengeance" /* SphereVengeance */]: 13,
3702
+ ["sphere_hunter" /* SphereHunter */]: 14,
3703
+ ["sphere_defender" /* SphereDefender */]: 15,
3704
+ ["doppelganger" /* Doppelganger */]: 16,
3705
+ ["flashlight" /* Flashlight */]: 17,
3706
+ ["compass" /* Compass */]: 18,
3707
+ ["tech_resistance" /* TechResistance */]: 19,
3708
+ ["tech_strength" /* TechStrength */]: 20,
3709
+ ["tech_haste" /* TechHaste */]: 21,
3710
+ ["tech_regeneration" /* TechRegeneration */]: 22
3711
+ };
3712
+ function G_SetAmmoStat(stats, ammoId, count) {
3713
+ if (ammoId < 0 || ammoId >= AMMO_MAX) return;
3714
+ let val = count;
3715
+ if (val > 511) val = 511;
3716
+ if (val < 0) val = 0;
3717
+ setCompressedInteger(stats, 34 /* STAT_AMMO_INFO_START */, ammoId, val, NUM_BITS_FOR_AMMO);
3718
+ }
3719
+ function G_GetAmmoStat(stats, ammoId) {
3720
+ if (ammoId < 0 || ammoId >= AMMO_MAX) return 0;
3721
+ return getCompressedInteger(stats, 34 /* STAT_AMMO_INFO_START */, ammoId, NUM_BITS_FOR_AMMO);
3722
+ }
3723
+ function G_SetPowerupStat(stats, powerupId, val) {
3724
+ let index;
3725
+ if (typeof powerupId === "number") {
3726
+ index = powerupId;
3727
+ } else {
3728
+ index = POWERUP_STAT_MAP[powerupId];
3729
+ }
3730
+ if (index === void 0 || index < 0 || index >= POWERUP_MAX) return;
3731
+ let safeVal = val;
3732
+ if (safeVal > 3) safeVal = 3;
3733
+ if (safeVal < 0) safeVal = 0;
3734
+ setCompressedInteger(stats, 41 /* STAT_POWERUP_INFO_START */, index, safeVal, NUM_BITS_FOR_POWERUP);
3735
+ }
3736
+ function G_GetPowerupStat(stats, powerupId) {
3737
+ let index;
3738
+ if (typeof powerupId === "number") {
3739
+ index = powerupId;
3740
+ } else {
3741
+ index = POWERUP_STAT_MAP[powerupId];
3742
+ }
3743
+ if (index === void 0 || index < 0 || index >= POWERUP_MAX) return 0;
3744
+ return getCompressedInteger(stats, 41 /* STAT_POWERUP_INFO_START */, index, NUM_BITS_FOR_POWERUP);
3584
3745
  }
3585
3746
 
3586
3747
  // src/protocol/entityFlags.ts
@@ -3936,13 +4097,14 @@ var AmmoType = /* @__PURE__ */ ((AmmoType2) => {
3936
4097
  AmmoType2[AmmoType2["Grenades"] = 3] = "Grenades";
3937
4098
  AmmoType2[AmmoType2["Cells"] = 4] = "Cells";
3938
4099
  AmmoType2[AmmoType2["Slugs"] = 5] = "Slugs";
3939
- AmmoType2[AmmoType2["Trap"] = 6] = "Trap";
3940
- AmmoType2[AmmoType2["Tesla"] = 7] = "Tesla";
3941
- AmmoType2[AmmoType2["MagSlugs"] = 8] = "MagSlugs";
3942
- AmmoType2[AmmoType2["Flechettes"] = 9] = "Flechettes";
3943
- AmmoType2[AmmoType2["Prox"] = 10] = "Prox";
3944
- AmmoType2[AmmoType2["Nuke"] = 11] = "Nuke";
3945
- AmmoType2[AmmoType2["Rounds"] = 12] = "Rounds";
4100
+ AmmoType2[AmmoType2["MagSlugs"] = 6] = "MagSlugs";
4101
+ AmmoType2[AmmoType2["Trap"] = 7] = "Trap";
4102
+ AmmoType2[AmmoType2["Flechettes"] = 8] = "Flechettes";
4103
+ AmmoType2[AmmoType2["Tesla"] = 9] = "Tesla";
4104
+ AmmoType2[AmmoType2["Disruptor"] = 10] = "Disruptor";
4105
+ AmmoType2[AmmoType2["Prox"] = 11] = "Prox";
4106
+ AmmoType2[AmmoType2["Nuke"] = 12] = "Nuke";
4107
+ AmmoType2[AmmoType2["Rounds"] = 13] = "Rounds";
3946
4108
  return AmmoType2;
3947
4109
  })(AmmoType || {});
3948
4110
  var AMMO_TYPE_COUNT = Object.keys(AmmoType).length / 2;
@@ -3955,36 +4117,8 @@ var AmmoItemId = /* @__PURE__ */ ((AmmoItemId2) => {
3955
4117
  AmmoItemId2["Slugs"] = "ammo_slugs";
3956
4118
  return AmmoItemId2;
3957
4119
  })(AmmoItemId || {});
3958
-
3959
- // src/items/powerups.ts
3960
- var PowerupId = /* @__PURE__ */ ((PowerupId2) => {
3961
- PowerupId2["QuadDamage"] = "quad";
3962
- PowerupId2["Invulnerability"] = "invulnerability";
3963
- PowerupId2["EnviroSuit"] = "enviro_suit";
3964
- PowerupId2["Rebreather"] = "rebreather";
3965
- PowerupId2["Silencer"] = "silencer";
3966
- PowerupId2["PowerScreen"] = "power_screen";
3967
- PowerupId2["PowerShield"] = "power_shield";
3968
- PowerupId2["QuadFire"] = "quad_fire";
3969
- PowerupId2["Invisibility"] = "invisibility";
3970
- PowerupId2["Bandolier"] = "bandolier";
3971
- PowerupId2["AmmoPack"] = "ammo_pack";
3972
- PowerupId2["IRGoggles"] = "ir_goggles";
3973
- PowerupId2["DoubleDamage"] = "double_damage";
3974
- PowerupId2["SphereVengeance"] = "sphere_vengeance";
3975
- PowerupId2["SphereHunter"] = "sphere_hunter";
3976
- PowerupId2["SphereDefender"] = "sphere_defender";
3977
- PowerupId2["Doppelganger"] = "doppelganger";
3978
- PowerupId2["TagToken"] = "tag_token";
3979
- PowerupId2["TechResistance"] = "tech_resistance";
3980
- PowerupId2["TechStrength"] = "tech_strength";
3981
- PowerupId2["TechHaste"] = "tech_haste";
3982
- PowerupId2["TechRegeneration"] = "tech_regeneration";
3983
- PowerupId2["Flashlight"] = "flashlight";
3984
- PowerupId2["Compass"] = "compass";
3985
- return PowerupId2;
3986
- })(PowerupId || {});
3987
4120
  export {
4121
+ AMMO_MAX,
3988
4122
  AMMO_TYPE_COUNT,
3989
4123
  ANORMS,
3990
4124
  AmmoItemId,
@@ -4079,7 +4213,12 @@ export {
4079
4213
  MAX_TOKEN_CHARS,
4080
4214
  MAX_WHEEL_ITEMS,
4081
4215
  MersenneTwister19937,
4216
+ NUM_AMMO_STATS,
4217
+ NUM_BITS_FOR_AMMO,
4218
+ NUM_BITS_FOR_POWERUP,
4219
+ NUM_POWERUP_STATS,
4082
4220
  PITCH,
4221
+ POWERUP_MAX,
4083
4222
  PlaneSide,
4084
4223
  PlayerButton,
4085
4224
  PlayerStat,