quake2ts 0.0.236 → 0.0.237
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.
- package/package.json +1 -1
- package/packages/cgame/dist/index.cjs +10 -2
- package/packages/cgame/dist/index.cjs.map +1 -1
- package/packages/cgame/dist/index.d.cts +1 -0
- package/packages/cgame/dist/index.d.ts +1 -0
- package/packages/cgame/dist/index.js +10 -2
- package/packages/cgame/dist/index.js.map +1 -1
- package/packages/client/dist/browser/index.global.js +13 -13
- package/packages/client/dist/browser/index.global.js.map +1 -1
- package/packages/client/dist/cjs/index.cjs +237 -2
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +264 -29
- package/packages/client/dist/esm/index.js.map +1 -1
- package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/client/dist/types/demo/handler.d.ts +4 -1
- package/packages/client/dist/types/demo/handler.d.ts.map +1 -1
- package/packages/client/dist/types/index.d.ts.map +1 -1
- package/packages/engine/dist/browser/index.global.js +5 -5
- package/packages/engine/dist/browser/index.global.js.map +1 -1
- package/packages/engine/dist/cjs/index.cjs.map +1 -1
- package/packages/engine/dist/esm/index.js.map +1 -1
- package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/engine/dist/types/render/scene.d.ts +2 -0
- package/packages/engine/dist/types/render/scene.d.ts.map +1 -1
- package/packages/game/dist/browser/index.global.js +2 -2
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +2 -0
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +2 -0
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/combat/weapons/firing.d.ts.map +1 -1
- package/packages/game/dist/types/index.d.ts +1 -0
- package/packages/game/dist/types/index.d.ts.map +1 -1
- package/packages/server/dist/index.cjs +1 -0
- package/packages/server/dist/index.js +1 -0
- package/packages/shared/dist/browser/index.global.js +1 -1
- package/packages/shared/dist/browser/index.global.js.map +1 -1
- package/packages/shared/dist/cjs/index.cjs +42 -0
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +28 -0
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/protocol/constants.d.ts +14 -0
- package/packages/shared/dist/types/protocol/constants.d.ts.map +1 -1
- package/packages/shared/dist/types/protocol/player-state.d.ts +1 -0
- package/packages/shared/dist/types/protocol/player-state.d.ts.map +1 -1
- package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
|
@@ -8219,6 +8219,67 @@ function mouseDeltaToViewDelta(delta, options) {
|
|
|
8219
8219
|
z: 0
|
|
8220
8220
|
};
|
|
8221
8221
|
}
|
|
8222
|
+
var MZ_BLASTER = 0;
|
|
8223
|
+
var MZ_MACHINEGUN = 1;
|
|
8224
|
+
var MZ_SHOTGUN = 2;
|
|
8225
|
+
var MZ_CHAINGUN1 = 3;
|
|
8226
|
+
var MZ_CHAINGUN2 = 4;
|
|
8227
|
+
var MZ_CHAINGUN3 = 5;
|
|
8228
|
+
var MZ_RAILGUN = 6;
|
|
8229
|
+
var MZ_ROCKET = 7;
|
|
8230
|
+
var MZ_GRENADE = 8;
|
|
8231
|
+
var MZ_SSHOTGUN = 11;
|
|
8232
|
+
var MZ_BFG = 12;
|
|
8233
|
+
var MZ_HYPERBLASTER = 13;
|
|
8234
|
+
function readUint16LE(stats, startIndex, byteOffset) {
|
|
8235
|
+
const elementIndex = Math.floor(byteOffset / 2);
|
|
8236
|
+
const isOdd = byteOffset % 2 !== 0;
|
|
8237
|
+
const index = startIndex + elementIndex;
|
|
8238
|
+
const val0 = stats[index] || 0;
|
|
8239
|
+
if (!isOdd) {
|
|
8240
|
+
return val0 & 65535;
|
|
8241
|
+
} else {
|
|
8242
|
+
const val1 = stats[index + 1] || 0;
|
|
8243
|
+
const low = val0 >>> 8 & 255;
|
|
8244
|
+
const high = val1 & 255;
|
|
8245
|
+
return high << 8 | low;
|
|
8246
|
+
}
|
|
8247
|
+
}
|
|
8248
|
+
function getCompressedInteger(stats, startIndex, id, bitsPerValue) {
|
|
8249
|
+
const bitOffset = bitsPerValue * id;
|
|
8250
|
+
const byteOffset = Math.floor(bitOffset / 8);
|
|
8251
|
+
const bitShift = bitOffset % 8;
|
|
8252
|
+
const mask = (1 << bitsPerValue) - 1 << bitShift;
|
|
8253
|
+
const base = readUint16LE(stats, startIndex, byteOffset);
|
|
8254
|
+
return (base & mask) >>> bitShift;
|
|
8255
|
+
}
|
|
8256
|
+
var PowerupId = /* @__PURE__ */ ((PowerupId22) => {
|
|
8257
|
+
PowerupId22["QuadDamage"] = "quad";
|
|
8258
|
+
PowerupId22["Invulnerability"] = "invulnerability";
|
|
8259
|
+
PowerupId22["EnviroSuit"] = "enviro_suit";
|
|
8260
|
+
PowerupId22["Rebreather"] = "rebreather";
|
|
8261
|
+
PowerupId22["Silencer"] = "silencer";
|
|
8262
|
+
PowerupId22["PowerScreen"] = "power_screen";
|
|
8263
|
+
PowerupId22["PowerShield"] = "power_shield";
|
|
8264
|
+
PowerupId22["QuadFire"] = "quad_fire";
|
|
8265
|
+
PowerupId22["Invisibility"] = "invisibility";
|
|
8266
|
+
PowerupId22["Bandolier"] = "bandolier";
|
|
8267
|
+
PowerupId22["AmmoPack"] = "ammo_pack";
|
|
8268
|
+
PowerupId22["IRGoggles"] = "ir_goggles";
|
|
8269
|
+
PowerupId22["DoubleDamage"] = "double_damage";
|
|
8270
|
+
PowerupId22["SphereVengeance"] = "sphere_vengeance";
|
|
8271
|
+
PowerupId22["SphereHunter"] = "sphere_hunter";
|
|
8272
|
+
PowerupId22["SphereDefender"] = "sphere_defender";
|
|
8273
|
+
PowerupId22["Doppelganger"] = "doppelganger";
|
|
8274
|
+
PowerupId22["TagToken"] = "tag_token";
|
|
8275
|
+
PowerupId22["TechResistance"] = "tech_resistance";
|
|
8276
|
+
PowerupId22["TechStrength"] = "tech_strength";
|
|
8277
|
+
PowerupId22["TechHaste"] = "tech_haste";
|
|
8278
|
+
PowerupId22["TechRegeneration"] = "tech_regeneration";
|
|
8279
|
+
PowerupId22["Flashlight"] = "flashlight";
|
|
8280
|
+
PowerupId22["Compass"] = "compass";
|
|
8281
|
+
return PowerupId22;
|
|
8282
|
+
})(PowerupId || {});
|
|
8222
8283
|
var PlayerStat = /* @__PURE__ */ ((PlayerStat2) => {
|
|
8223
8284
|
PlayerStat2[PlayerStat2["STAT_HEALTH_ICON"] = 0] = "STAT_HEALTH_ICON";
|
|
8224
8285
|
PlayerStat2[PlayerStat2["STAT_HEALTH"] = 1] = "STAT_HEALTH";
|
|
@@ -8275,6 +8336,104 @@ var NUM_AMMO_STATS2 = Math.ceil(AMMO_MAX2 * NUM_BITS_FOR_AMMO2 / 16);
|
|
|
8275
8336
|
var POWERUP_MAX2 = 23;
|
|
8276
8337
|
var NUM_BITS_FOR_POWERUP2 = 2;
|
|
8277
8338
|
var NUM_POWERUP_STATS2 = Math.ceil(POWERUP_MAX2 * NUM_BITS_FOR_POWERUP2 / 16);
|
|
8339
|
+
var POWERUP_STAT_MAP = {
|
|
8340
|
+
[
|
|
8341
|
+
"power_screen"
|
|
8342
|
+
/* PowerScreen */
|
|
8343
|
+
]: 0,
|
|
8344
|
+
[
|
|
8345
|
+
"power_shield"
|
|
8346
|
+
/* PowerShield */
|
|
8347
|
+
]: 1,
|
|
8348
|
+
// 2 is POWERUP_AM_BOMB (not in PowerupId?)
|
|
8349
|
+
[
|
|
8350
|
+
"quad"
|
|
8351
|
+
/* QuadDamage */
|
|
8352
|
+
]: 3,
|
|
8353
|
+
[
|
|
8354
|
+
"quad_fire"
|
|
8355
|
+
/* QuadFire */
|
|
8356
|
+
]: 4,
|
|
8357
|
+
[
|
|
8358
|
+
"invulnerability"
|
|
8359
|
+
/* Invulnerability */
|
|
8360
|
+
]: 5,
|
|
8361
|
+
[
|
|
8362
|
+
"invisibility"
|
|
8363
|
+
/* Invisibility */
|
|
8364
|
+
]: 6,
|
|
8365
|
+
[
|
|
8366
|
+
"silencer"
|
|
8367
|
+
/* Silencer */
|
|
8368
|
+
]: 7,
|
|
8369
|
+
[
|
|
8370
|
+
"rebreather"
|
|
8371
|
+
/* Rebreather */
|
|
8372
|
+
]: 8,
|
|
8373
|
+
[
|
|
8374
|
+
"enviro_suit"
|
|
8375
|
+
/* EnviroSuit */
|
|
8376
|
+
]: 9,
|
|
8377
|
+
// 10 is POWERUP_ADRENALINE (not in PowerupId?)
|
|
8378
|
+
[
|
|
8379
|
+
"ir_goggles"
|
|
8380
|
+
/* IRGoggles */
|
|
8381
|
+
]: 11,
|
|
8382
|
+
[
|
|
8383
|
+
"double_damage"
|
|
8384
|
+
/* DoubleDamage */
|
|
8385
|
+
]: 12,
|
|
8386
|
+
[
|
|
8387
|
+
"sphere_vengeance"
|
|
8388
|
+
/* SphereVengeance */
|
|
8389
|
+
]: 13,
|
|
8390
|
+
[
|
|
8391
|
+
"sphere_hunter"
|
|
8392
|
+
/* SphereHunter */
|
|
8393
|
+
]: 14,
|
|
8394
|
+
[
|
|
8395
|
+
"sphere_defender"
|
|
8396
|
+
/* SphereDefender */
|
|
8397
|
+
]: 15,
|
|
8398
|
+
[
|
|
8399
|
+
"doppelganger"
|
|
8400
|
+
/* Doppelganger */
|
|
8401
|
+
]: 16,
|
|
8402
|
+
[
|
|
8403
|
+
"flashlight"
|
|
8404
|
+
/* Flashlight */
|
|
8405
|
+
]: 17,
|
|
8406
|
+
[
|
|
8407
|
+
"compass"
|
|
8408
|
+
/* Compass */
|
|
8409
|
+
]: 18,
|
|
8410
|
+
[
|
|
8411
|
+
"tech_resistance"
|
|
8412
|
+
/* TechResistance */
|
|
8413
|
+
]: 19,
|
|
8414
|
+
[
|
|
8415
|
+
"tech_strength"
|
|
8416
|
+
/* TechStrength */
|
|
8417
|
+
]: 20,
|
|
8418
|
+
[
|
|
8419
|
+
"tech_haste"
|
|
8420
|
+
/* TechHaste */
|
|
8421
|
+
]: 21,
|
|
8422
|
+
[
|
|
8423
|
+
"tech_regeneration"
|
|
8424
|
+
/* TechRegeneration */
|
|
8425
|
+
]: 22
|
|
8426
|
+
};
|
|
8427
|
+
function G_GetPowerupStat(stats, powerupId) {
|
|
8428
|
+
let index;
|
|
8429
|
+
if (typeof powerupId === "number") {
|
|
8430
|
+
index = powerupId;
|
|
8431
|
+
} else {
|
|
8432
|
+
index = POWERUP_STAT_MAP[powerupId];
|
|
8433
|
+
}
|
|
8434
|
+
if (index === void 0 || index < 0 || index >= POWERUP_MAX2) return 0;
|
|
8435
|
+
return getCompressedInteger(stats, 41, index, NUM_BITS_FOR_POWERUP2);
|
|
8436
|
+
}
|
|
8278
8437
|
var entityFlags_exports2 = {};
|
|
8279
8438
|
__export3(entityFlags_exports2, {
|
|
8280
8439
|
U_ANGLE1: () => U_ANGLE13,
|
|
@@ -8869,6 +9028,7 @@ var ClientNetworkHandler = class {
|
|
|
8869
9028
|
// Stats for HUD
|
|
8870
9029
|
this.stats = new Array(32).fill(0);
|
|
8871
9030
|
this.inventory = new Array(256).fill(0);
|
|
9031
|
+
this.playerNum = 0;
|
|
8872
9032
|
this.imports = imports;
|
|
8873
9033
|
this.callbacks = callbacks;
|
|
8874
9034
|
}
|
|
@@ -8878,12 +9038,16 @@ var ClientNetworkHandler = class {
|
|
|
8878
9038
|
setCallbacks(callbacks) {
|
|
8879
9039
|
this.callbacks = callbacks;
|
|
8880
9040
|
}
|
|
9041
|
+
setView(view) {
|
|
9042
|
+
this.view = view;
|
|
9043
|
+
}
|
|
8881
9044
|
onServerData(protocol, serverCount, attractLoop, gameDir, playerNum, levelName) {
|
|
8882
9045
|
console.log(`Demo: Server Data - Protocol: ${protocol}, Level: ${levelName}`);
|
|
8883
9046
|
this.configstrings.fill("");
|
|
8884
9047
|
this.entities.clear();
|
|
8885
9048
|
this.baselines.clear();
|
|
8886
9049
|
this.latestFrame = null;
|
|
9050
|
+
this.playerNum = playerNum;
|
|
8887
9051
|
}
|
|
8888
9052
|
onConfigString(index, str3) {
|
|
8889
9053
|
this.configstrings[index] = str3;
|
|
@@ -9005,6 +9169,63 @@ var ClientNetworkHandler = class {
|
|
|
9005
9169
|
onMuzzleFlash2(ent, weapon) {
|
|
9006
9170
|
}
|
|
9007
9171
|
onMuzzleFlash3(ent, weapon) {
|
|
9172
|
+
const isLocalPlayer = ent === this.playerNum + 1;
|
|
9173
|
+
if (isLocalPlayer && this.view) {
|
|
9174
|
+
let pitch = 0;
|
|
9175
|
+
let yaw = 0;
|
|
9176
|
+
let roll = 0;
|
|
9177
|
+
let kickOrigin = ZERO_VEC3;
|
|
9178
|
+
const quad = G_GetPowerupStat(this.stats, PowerupId.QuadDamage);
|
|
9179
|
+
const scale3 = quad ? 4 : 1;
|
|
9180
|
+
switch (weapon) {
|
|
9181
|
+
case MZ_SHOTGUN:
|
|
9182
|
+
pitch = -2;
|
|
9183
|
+
kickOrigin = { x: -2, y: 0, z: 0 };
|
|
9184
|
+
break;
|
|
9185
|
+
case MZ_SSHOTGUN:
|
|
9186
|
+
pitch = -4;
|
|
9187
|
+
kickOrigin = { x: -4, y: 0, z: 0 };
|
|
9188
|
+
break;
|
|
9189
|
+
case MZ_MACHINEGUN:
|
|
9190
|
+
pitch = -1;
|
|
9191
|
+
yaw = Math.random() - 0.5;
|
|
9192
|
+
break;
|
|
9193
|
+
case MZ_CHAINGUN1:
|
|
9194
|
+
case MZ_CHAINGUN2:
|
|
9195
|
+
case MZ_CHAINGUN3:
|
|
9196
|
+
pitch = -0.5;
|
|
9197
|
+
yaw = Math.random() - 0.5;
|
|
9198
|
+
break;
|
|
9199
|
+
case MZ_RAILGUN:
|
|
9200
|
+
pitch = -3;
|
|
9201
|
+
kickOrigin = { x: -3, y: 0, z: 0 };
|
|
9202
|
+
break;
|
|
9203
|
+
case MZ_ROCKET:
|
|
9204
|
+
case MZ_GRENADE:
|
|
9205
|
+
pitch = -2;
|
|
9206
|
+
kickOrigin = { x: -2, y: 0, z: 0 };
|
|
9207
|
+
break;
|
|
9208
|
+
case MZ_BFG:
|
|
9209
|
+
pitch = -5;
|
|
9210
|
+
kickOrigin = { x: -2, y: 0, z: 0 };
|
|
9211
|
+
break;
|
|
9212
|
+
case MZ_HYPERBLASTER:
|
|
9213
|
+
case MZ_BLASTER:
|
|
9214
|
+
pitch = -0.5;
|
|
9215
|
+
break;
|
|
9216
|
+
}
|
|
9217
|
+
if (pitch !== 0 || yaw !== 0 || roll !== 0) {
|
|
9218
|
+
this.view.addKick({
|
|
9219
|
+
pitch: pitch * scale3,
|
|
9220
|
+
roll: roll * scale3,
|
|
9221
|
+
durationMs: 200,
|
|
9222
|
+
origin: kickOrigin
|
|
9223
|
+
// Should origin be scaled? Q2 source P_AddWeaponKick only scales angles.
|
|
9224
|
+
// But we have origin kick logic now. Let's assume origin kick is physical recoil and maybe doesn't scale with quad (magic damage)?
|
|
9225
|
+
// P_AddWeaponKick only scales kick_angles.
|
|
9226
|
+
});
|
|
9227
|
+
}
|
|
9228
|
+
}
|
|
9008
9229
|
if (this.callbacks?.onMuzzleFlash3) {
|
|
9009
9230
|
this.callbacks.onMuzzleFlash3(ent, weapon);
|
|
9010
9231
|
}
|
|
@@ -9121,6 +9342,7 @@ var ClientNetworkHandler = class {
|
|
|
9121
9342
|
// Stubs
|
|
9122
9343
|
stats: [...ps.stats],
|
|
9123
9344
|
kick_angles: ZERO_VEC3,
|
|
9345
|
+
kick_origin: ZERO_VEC3,
|
|
9124
9346
|
gunoffset: ZERO_VEC3,
|
|
9125
9347
|
gunangles: ZERO_VEC3,
|
|
9126
9348
|
gunindex: 0,
|
|
@@ -10512,11 +10734,20 @@ function buildRenderableEntities(latestEntities, previousEntities, alpha, config
|
|
|
10512
10734
|
};
|
|
10513
10735
|
const frame = ent.frame;
|
|
10514
10736
|
const prevFrame = prev.frame;
|
|
10737
|
+
const scaleA = prev.scale !== void 0 ? prev.scale : 1;
|
|
10738
|
+
const scaleB = ent.scale !== void 0 ? ent.scale : 1;
|
|
10739
|
+
const scale3 = lerp2(scaleA, scaleB, alpha);
|
|
10740
|
+
const getAlpha = (val) => val === void 0 || val === 0 ? 255 : val;
|
|
10741
|
+
const alphaA = getAlpha(prev.alpha);
|
|
10742
|
+
const alphaB = getAlpha(ent.alpha);
|
|
10743
|
+
const alphaVal = lerp2(alphaA, alphaB, alpha);
|
|
10744
|
+
const normalizedAlpha = alphaVal / 255;
|
|
10515
10745
|
const mat = mat4_exports.create();
|
|
10516
10746
|
mat4_exports.translate(mat, mat, [origin.x, origin.y, origin.z]);
|
|
10517
10747
|
mat4_exports.rotateZ(mat, mat, angles.z * Math.PI / 180);
|
|
10518
10748
|
mat4_exports.rotateY(mat, mat, angles.y * Math.PI / 180);
|
|
10519
10749
|
mat4_exports.rotateX(mat, mat, angles.x * Math.PI / 180);
|
|
10750
|
+
mat4_exports.scale(mat, mat, [scale3, scale3, scale3]);
|
|
10520
10751
|
if (model.header.magic === 844121161) {
|
|
10521
10752
|
renderables.push({
|
|
10522
10753
|
type: "md2",
|
|
@@ -10528,7 +10759,8 @@ function buildRenderableEntities(latestEntities, previousEntities, alpha, config
|
|
|
10528
10759
|
lerp: alpha
|
|
10529
10760
|
},
|
|
10530
10761
|
transform: mat,
|
|
10531
|
-
skin: ent.skinNum > 0 ? configStrings.getImageName(ent.skinNum) : void 0
|
|
10762
|
+
skin: ent.skinNum > 0 ? configStrings.getImageName(ent.skinNum) : void 0,
|
|
10763
|
+
alpha: normalizedAlpha
|
|
10532
10764
|
});
|
|
10533
10765
|
} else if (model.header.magic === 860898377) {
|
|
10534
10766
|
renderables.push({
|
|
@@ -10539,7 +10771,8 @@ function buildRenderableEntities(latestEntities, previousEntities, alpha, config
|
|
|
10539
10771
|
frame1: frame,
|
|
10540
10772
|
lerp: alpha
|
|
10541
10773
|
},
|
|
10542
|
-
transform: mat
|
|
10774
|
+
transform: mat,
|
|
10775
|
+
alpha: normalizedAlpha
|
|
10543
10776
|
// Lighting? Skins?
|
|
10544
10777
|
});
|
|
10545
10778
|
}
|
|
@@ -10551,6 +10784,7 @@ function createClient(imports) {
|
|
|
10551
10784
|
const view = new import_cgame3.ViewEffects();
|
|
10552
10785
|
const demoPlayback = new DemoPlaybackController();
|
|
10553
10786
|
const demoHandler = new ClientNetworkHandler(imports);
|
|
10787
|
+
demoHandler.setView(view);
|
|
10554
10788
|
const menuSystem = new MenuSystem();
|
|
10555
10789
|
const loadingScreen = new LoadingScreen();
|
|
10556
10790
|
const errorDialog = new ErrorDialog();
|
|
@@ -10876,6 +11110,7 @@ function createClient(imports) {
|
|
|
10876
11110
|
// Ensure stats are safely initialized
|
|
10877
11111
|
stats: lastRendered.stats ? [...lastRendered.stats] : new Array(32).fill(0),
|
|
10878
11112
|
kick_angles: ZERO_VEC32,
|
|
11113
|
+
kick_origin: ZERO_VEC32,
|
|
10879
11114
|
gunoffset: ZERO_VEC32,
|
|
10880
11115
|
gunangles: ZERO_VEC32,
|
|
10881
11116
|
gunindex: 0,
|