quake2ts 0.0.301 → 0.0.303

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 (38) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +13 -13
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +221 -38
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +221 -38
  7. package/packages/client/dist/esm/index.js.map +1 -1
  8. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  9. package/packages/client/dist/types/entities.d.ts +1 -0
  10. package/packages/client/dist/types/entities.d.ts.map +1 -1
  11. package/packages/engine/dist/browser/index.global.js +9 -9
  12. package/packages/engine/dist/browser/index.global.js.map +1 -1
  13. package/packages/engine/dist/cjs/index.cjs +90 -18
  14. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  15. package/packages/engine/dist/esm/index.js +90 -18
  16. package/packages/engine/dist/esm/index.js.map +1 -1
  17. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  18. package/packages/engine/dist/types/render/renderer.d.ts.map +1 -1
  19. package/packages/engine/dist/types/render/scene.d.ts +2 -0
  20. package/packages/engine/dist/types/render/scene.d.ts.map +1 -1
  21. package/packages/game/dist/browser/index.global.js +4 -4
  22. package/packages/game/dist/browser/index.global.js.map +1 -1
  23. package/packages/game/dist/cjs/index.cjs +104 -19
  24. package/packages/game/dist/cjs/index.cjs.map +1 -1
  25. package/packages/game/dist/esm/index.js +104 -19
  26. package/packages/game/dist/esm/index.js.map +1 -1
  27. package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
  28. package/packages/game/dist/types/ai/monster.d.ts.map +1 -1
  29. package/packages/shared/dist/browser/index.global.js +1 -1
  30. package/packages/shared/dist/browser/index.global.js.map +1 -1
  31. package/packages/shared/dist/cjs/index.cjs +97 -19
  32. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  33. package/packages/shared/dist/esm/index.js +97 -19
  34. package/packages/shared/dist/esm/index.js.map +1 -1
  35. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  36. package/packages/shared/dist/types/net/netchan.d.ts +5 -0
  37. package/packages/shared/dist/types/net/netchan.d.ts.map +1 -1
  38. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -1431,10 +1431,14 @@ var init_esm = __esm({
1431
1431
  this.incomingReliableSequence = 0;
1432
1432
  this.outgoingReliableSequence = 0;
1433
1433
  this.reliableLength = 0;
1434
+ this.fragmentSendOffset = 0;
1435
+ this.fragmentBuffer = null;
1436
+ this.fragmentLength = 0;
1437
+ this.fragmentReceived = 0;
1434
1438
  this.lastReceived = 0;
1435
1439
  this.lastSent = 0;
1436
1440
  this.remoteAddress = null;
1437
- this.reliableMessage = new BinaryWriter(_NetChan2.MAX_MSGLEN);
1441
+ this.reliableMessage = new BinaryWriter(_NetChan2.MAX_RELIABLE_BUFFER);
1438
1442
  const now = Date.now();
1439
1443
  this.lastReceived = now;
1440
1444
  this.lastSent = now;
@@ -1460,6 +1464,10 @@ var init_esm = __esm({
1460
1464
  this.outgoingReliableSequence = 0;
1461
1465
  this.reliableLength = 0;
1462
1466
  this.reliableMessage.reset();
1467
+ this.fragmentSendOffset = 0;
1468
+ this.fragmentBuffer = null;
1469
+ this.fragmentLength = 0;
1470
+ this.fragmentReceived = 0;
1463
1471
  this.lastReceived = Date.now();
1464
1472
  this.lastSent = Date.now();
1465
1473
  }
@@ -1469,18 +1477,38 @@ var init_esm = __esm({
1469
1477
  transmit(unreliableData) {
1470
1478
  this.outgoingSequence++;
1471
1479
  this.lastSent = Date.now();
1480
+ let sendReliableLength = 0;
1481
+ let isFragment = false;
1482
+ let fragmentStart = 0;
1483
+ if (this.reliableLength > 0) {
1484
+ if (this.reliableLength > _NetChan2.FRAGMENT_SIZE) {
1485
+ isFragment = true;
1486
+ if (this.fragmentSendOffset >= this.reliableLength) {
1487
+ this.fragmentSendOffset = 0;
1488
+ }
1489
+ const remaining = this.reliableLength - this.fragmentSendOffset;
1490
+ sendReliableLength = remaining;
1491
+ if (sendReliableLength > _NetChan2.FRAGMENT_SIZE) {
1492
+ sendReliableLength = _NetChan2.FRAGMENT_SIZE;
1493
+ }
1494
+ fragmentStart = this.fragmentSendOffset;
1495
+ this.fragmentSendOffset += sendReliableLength;
1496
+ } else {
1497
+ sendReliableLength = this.reliableLength;
1498
+ }
1499
+ }
1472
1500
  const headerSize = _NetChan2.PACKET_HEADER;
1473
- const reliableSize = this.reliableLength > 0 ? this.reliableLength + 2 : 0;
1501
+ const reliableHeaderSize = sendReliableLength > 0 ? 2 + (isFragment ? 8 : 0) : 0;
1474
1502
  let unreliableSize = unreliableData ? unreliableData.length : 0;
1475
- if (headerSize + reliableSize + unreliableSize > _NetChan2.MAX_MSGLEN) {
1476
- unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableSize;
1503
+ if (headerSize + reliableHeaderSize + sendReliableLength + unreliableSize > _NetChan2.MAX_MSGLEN) {
1504
+ unreliableSize = _NetChan2.MAX_MSGLEN - headerSize - reliableHeaderSize - sendReliableLength;
1477
1505
  if (unreliableSize < 0) unreliableSize = 0;
1478
1506
  }
1479
- const buffer = new ArrayBuffer(headerSize + reliableSize + unreliableSize);
1507
+ const buffer = new ArrayBuffer(headerSize + reliableHeaderSize + sendReliableLength + unreliableSize);
1480
1508
  const view = new DataView(buffer);
1481
1509
  const result = new Uint8Array(buffer);
1482
1510
  let sequence = this.outgoingSequence;
1483
- if (this.reliableLength > 0) {
1511
+ if (sendReliableLength > 0) {
1484
1512
  sequence |= 2147483648;
1485
1513
  if ((this.outgoingReliableSequence & 1) !== 0) {
1486
1514
  sequence |= 1073741824;
@@ -1494,13 +1522,23 @@ var init_esm = __esm({
1494
1522
  view.setUint32(4, ack, true);
1495
1523
  view.setUint16(8, this.qport, true);
1496
1524
  let offset = headerSize;
1497
- if (this.reliableLength > 0) {
1498
- view.setUint16(offset, this.reliableLength, true);
1525
+ if (sendReliableLength > 0) {
1526
+ let lengthField = sendReliableLength;
1527
+ if (isFragment) {
1528
+ lengthField |= 32768;
1529
+ }
1530
+ view.setUint16(offset, lengthField, true);
1499
1531
  offset += 2;
1532
+ if (isFragment) {
1533
+ view.setUint32(offset, fragmentStart, true);
1534
+ offset += 4;
1535
+ view.setUint32(offset, this.reliableLength, true);
1536
+ offset += 4;
1537
+ }
1500
1538
  const reliableBuffer = this.reliableMessage.getBuffer();
1501
- const reliableBytes = reliableBuffer.subarray(0, this.reliableLength);
1539
+ const reliableBytes = reliableBuffer.subarray(fragmentStart, fragmentStart + sendReliableLength);
1502
1540
  result.set(reliableBytes, offset);
1503
- offset += this.reliableLength;
1541
+ offset += sendReliableLength;
1504
1542
  }
1505
1543
  if (unreliableData && unreliableSize > 0) {
1506
1544
  const chunk = unreliableData.slice(0, unreliableSize);
@@ -1541,6 +1579,7 @@ var init_esm = __esm({
1541
1579
  this.reliableLength = 0;
1542
1580
  this.reliableMessage.reset();
1543
1581
  this.outgoingReliableSequence ^= 1;
1582
+ this.fragmentSendOffset = 0;
1544
1583
  }
1545
1584
  }
1546
1585
  const hasReliableData = (sequence & 2147483648) !== 0;
@@ -1549,13 +1588,45 @@ var init_esm = __esm({
1549
1588
  let reliableData = null;
1550
1589
  if (hasReliableData) {
1551
1590
  if (payloadOffset + 2 > packet.byteLength) return null;
1552
- const reliableLen = view.getUint16(payloadOffset, true);
1591
+ let reliableLen = view.getUint16(payloadOffset, true);
1553
1592
  payloadOffset += 2;
1593
+ const isFragment = (reliableLen & 32768) !== 0;
1594
+ reliableLen &= 32767;
1554
1595
  const expectedBit = this.incomingReliableSequence & 1;
1555
1596
  if (reliableSeqBit === expectedBit) {
1556
- this.incomingReliableSequence++;
1557
- if (payloadOffset + reliableLen > packet.byteLength) return null;
1558
- reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1597
+ if (isFragment) {
1598
+ if (payloadOffset + 8 > packet.byteLength) return null;
1599
+ const fragStart = view.getUint32(payloadOffset, true);
1600
+ payloadOffset += 4;
1601
+ const fragTotal = view.getUint32(payloadOffset, true);
1602
+ payloadOffset += 4;
1603
+ if (fragTotal > _NetChan2.MAX_RELIABLE_BUFFER) {
1604
+ console.warn(`NetChan: received invalid fragment total ${fragTotal} > ${_NetChan2.MAX_RELIABLE_BUFFER}`);
1605
+ return null;
1606
+ }
1607
+ if (!this.fragmentBuffer || this.fragmentBuffer.length !== fragTotal) {
1608
+ this.fragmentBuffer = new Uint8Array(fragTotal);
1609
+ this.fragmentLength = fragTotal;
1610
+ this.fragmentReceived = 0;
1611
+ }
1612
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1613
+ const data = packet.subarray(payloadOffset, payloadOffset + reliableLen);
1614
+ if (fragStart === this.fragmentReceived && fragStart + reliableLen <= fragTotal) {
1615
+ this.fragmentBuffer.set(data, fragStart);
1616
+ this.fragmentReceived += reliableLen;
1617
+ if (this.fragmentReceived >= fragTotal) {
1618
+ reliableData = this.fragmentBuffer;
1619
+ this.incomingReliableSequence++;
1620
+ this.fragmentBuffer = null;
1621
+ this.fragmentLength = 0;
1622
+ this.fragmentReceived = 0;
1623
+ }
1624
+ }
1625
+ } else {
1626
+ this.incomingReliableSequence++;
1627
+ if (payloadOffset + reliableLen > packet.byteLength) return null;
1628
+ reliableData = packet.slice(payloadOffset, payloadOffset + reliableLen);
1629
+ }
1559
1630
  }
1560
1631
  payloadOffset += reliableLen;
1561
1632
  }
@@ -1582,7 +1653,7 @@ var init_esm = __esm({
1582
1653
  * Writes a byte to the reliable message buffer
1583
1654
  */
1584
1655
  writeReliableByte(value) {
1585
- if (this.reliableLength + 1 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1656
+ if (this.reliableLength + 1 > _NetChan2.MAX_RELIABLE_BUFFER) {
1586
1657
  throw new Error("NetChan reliable buffer overflow");
1587
1658
  }
1588
1659
  this.reliableMessage.writeByte(value);
@@ -1592,7 +1663,7 @@ var init_esm = __esm({
1592
1663
  * Writes a short to the reliable message buffer
1593
1664
  */
1594
1665
  writeReliableShort(value) {
1595
- if (this.reliableLength + 2 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1666
+ if (this.reliableLength + 2 > _NetChan2.MAX_RELIABLE_BUFFER) {
1596
1667
  throw new Error("NetChan reliable buffer overflow");
1597
1668
  }
1598
1669
  this.reliableMessage.writeShort(value);
@@ -1602,7 +1673,7 @@ var init_esm = __esm({
1602
1673
  * Writes a long to the reliable message buffer
1603
1674
  */
1604
1675
  writeReliableLong(value) {
1605
- if (this.reliableLength + 4 > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1676
+ if (this.reliableLength + 4 > _NetChan2.MAX_RELIABLE_BUFFER) {
1606
1677
  throw new Error("NetChan reliable buffer overflow");
1607
1678
  }
1608
1679
  this.reliableMessage.writeLong(value);
@@ -1613,7 +1684,7 @@ var init_esm = __esm({
1613
1684
  */
1614
1685
  writeReliableString(value) {
1615
1686
  const len = value.length + 1;
1616
- if (this.reliableLength + len > _NetChan2.MAX_MSGLEN - _NetChan2.HEADER_OVERHEAD) {
1687
+ if (this.reliableLength + len > _NetChan2.MAX_RELIABLE_BUFFER) {
1617
1688
  throw new Error("NetChan reliable buffer overflow");
1618
1689
  }
1619
1690
  this.reliableMessage.writeString(value);
@@ -1646,6 +1717,7 @@ var init_esm = __esm({
1646
1717
  _NetChan.FRAGMENT_SIZE = 1024;
1647
1718
  _NetChan.PACKET_HEADER = 10;
1648
1719
  _NetChan.HEADER_OVERHEAD = _NetChan.PACKET_HEADER + 2;
1720
+ _NetChan.MAX_RELIABLE_BUFFER = 262144;
1649
1721
  WeaponId = /* @__PURE__ */ ((WeaponId22) => {
1650
1722
  WeaponId22["Blaster"] = "blaster";
1651
1723
  WeaponId22["Shotgun"] = "shotgun";
@@ -8704,6 +8776,7 @@ function registerLightSpawns(registry) {
8704
8776
  init_esm();
8705
8777
 
8706
8778
  // src/ai/monster.ts
8779
+ init_esm();
8707
8780
  function M_MoveFrame(self, context) {
8708
8781
  const move = self.monsterinfo.current_move;
8709
8782
  if (!move) {
@@ -8738,8 +8811,20 @@ function M_MoveFrame(self, context) {
8738
8811
  }
8739
8812
  }
8740
8813
  function monster_think(self, context) {
8814
+ if (self.monsterinfo.freeze_time) {
8815
+ if (self.monsterinfo.freeze_time > context.timeSeconds) {
8816
+ self.renderfx |= RenderFx.ShellBlue | RenderFx.ShellGreen;
8817
+ self.nextthink = context.timeSeconds + 0.1;
8818
+ return;
8819
+ } else {
8820
+ self.monsterinfo.freeze_time = 0;
8821
+ self.renderfx &= ~(RenderFx.ShellBlue | RenderFx.ShellGreen);
8822
+ }
8823
+ }
8741
8824
  M_MoveFrame(self, context);
8742
- self.nextthink = context.timeSeconds + 0.1;
8825
+ if (self.nextthink <= context.timeSeconds) {
8826
+ self.nextthink = context.timeSeconds + 0.1;
8827
+ }
8743
8828
  }
8744
8829
 
8745
8830
  // src/entities/monsters/berserk.ts