quake2ts 0.0.266 → 0.0.268
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/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 +6 -6
- package/packages/client/dist/cjs/index.cjs.map +1 -1
- package/packages/client/dist/esm/index.js +6 -6
- package/packages/client/dist/esm/index.js.map +1 -1
- 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/game/dist/browser/index.global.js +3 -3
- package/packages/game/dist/browser/index.global.js.map +1 -1
- package/packages/game/dist/cjs/index.cjs +166 -13
- package/packages/game/dist/cjs/index.cjs.map +1 -1
- package/packages/game/dist/esm/index.js +166 -13
- package/packages/game/dist/esm/index.js.map +1 -1
- package/packages/game/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/game/dist/types/entities/targets.d.ts.map +1 -1
- 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 +36 -12
- package/packages/shared/dist/cjs/index.cjs.map +1 -1
- package/packages/shared/dist/esm/index.js +36 -12
- package/packages/shared/dist/esm/index.js.map +1 -1
- package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
- package/packages/shared/dist/types/pmove/apply.d.ts.map +1 -1
- package/packages/shared/dist/types/pmove/pmove.d.ts.map +1 -1
|
@@ -512,12 +512,12 @@ function addReplayFrame(session, cmd, serverFrame, startTime) {
|
|
|
512
512
|
timestamp: Date.now() - startTime
|
|
513
513
|
});
|
|
514
514
|
}
|
|
515
|
-
var WaterLevel = /* @__PURE__ */ ((
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
return
|
|
515
|
+
var WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
516
|
+
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
517
|
+
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
518
|
+
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
519
|
+
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
520
|
+
return WaterLevel4;
|
|
521
521
|
})(WaterLevel || {});
|
|
522
522
|
function applyPmoveFriction(params) {
|
|
523
523
|
const {
|
|
@@ -594,12 +594,14 @@ function buildWaterWish(params) {
|
|
|
594
594
|
let wishvel = {
|
|
595
595
|
x: forward.x * cmd.forwardmove + right.x * cmd.sidemove,
|
|
596
596
|
y: forward.y * cmd.forwardmove + right.y * cmd.sidemove,
|
|
597
|
-
z:
|
|
597
|
+
z: forward.z * cmd.forwardmove + right.z * cmd.sidemove
|
|
598
598
|
};
|
|
599
599
|
if (cmd.upmove > 10) {
|
|
600
600
|
wishvel = addVec3(wishvel, { x: 0, y: 0, z: cmd.upmove });
|
|
601
601
|
} else if (cmd.upmove < -10) {
|
|
602
602
|
wishvel = addVec3(wishvel, { x: 0, y: 0, z: cmd.upmove });
|
|
603
|
+
} else if (Math.abs(cmd.forwardmove) < 10 && Math.abs(cmd.sidemove) < 10) {
|
|
604
|
+
wishvel = addVec3(wishvel, { x: 0, y: 0, z: -60 });
|
|
603
605
|
} else {
|
|
604
606
|
wishvel = addVec3(wishvel, { x: 0, y: 0, z: 10 });
|
|
605
607
|
}
|
|
@@ -987,6 +989,13 @@ var U_MODEL3 = 1 << 1;
|
|
|
987
989
|
var U_MODEL4 = 1 << 2;
|
|
988
990
|
var U_REMOVE = 32768;
|
|
989
991
|
var FRAMETIME = 0.025;
|
|
992
|
+
var MASK_WATER2 = 33554432;
|
|
993
|
+
var WaterLevel3 = {
|
|
994
|
+
None: 0,
|
|
995
|
+
Feet: 1,
|
|
996
|
+
Waist: 2,
|
|
997
|
+
Under: 3
|
|
998
|
+
};
|
|
990
999
|
var categorizePosition2 = (state, trace) => {
|
|
991
1000
|
const point = { ...state.origin };
|
|
992
1001
|
point.z -= 0.25;
|
|
@@ -998,12 +1007,26 @@ var categorizePosition2 = (state, trace) => {
|
|
|
998
1007
|
};
|
|
999
1008
|
var checkWater = (state, pointContents2) => {
|
|
1000
1009
|
const point = { ...state.origin };
|
|
1001
|
-
|
|
1010
|
+
const { mins, maxs } = state;
|
|
1011
|
+
point.z = state.origin.z + mins.z + 1;
|
|
1002
1012
|
const contents = pointContents2(point);
|
|
1003
|
-
if (contents &
|
|
1004
|
-
return { ...state, waterLevel:
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1013
|
+
if (!(contents & MASK_WATER2)) {
|
|
1014
|
+
return { ...state, waterLevel: WaterLevel3.None };
|
|
1015
|
+
}
|
|
1016
|
+
let waterLevel = WaterLevel3.Feet;
|
|
1017
|
+
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1018
|
+
point.z = waist;
|
|
1019
|
+
const waistContents = pointContents2(point);
|
|
1020
|
+
if (waistContents & MASK_WATER2) {
|
|
1021
|
+
waterLevel = WaterLevel3.Waist;
|
|
1022
|
+
const head = state.origin.z + 22;
|
|
1023
|
+
point.z = head;
|
|
1024
|
+
const headContents = pointContents2(point);
|
|
1025
|
+
if (headContents & MASK_WATER2) {
|
|
1026
|
+
waterLevel = WaterLevel3.Under;
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
return { ...state, waterLevel };
|
|
1007
1030
|
};
|
|
1008
1031
|
var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1009
1032
|
let newState = { ...state };
|
|
@@ -1043,7 +1066,8 @@ var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
|
1043
1066
|
velocity: frictionedVelocity,
|
|
1044
1067
|
wishdir: wish.wishdir,
|
|
1045
1068
|
wishspeed: wish.wishspeed,
|
|
1046
|
-
|
|
1069
|
+
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1070
|
+
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1047
1071
|
frametime: FRAMETIME
|
|
1048
1072
|
});
|
|
1049
1073
|
const traceResult = trace(origin, {
|
|
@@ -4434,6 +4458,131 @@ function useTargetBlaster(self, other, activator, context) {
|
|
|
4434
4458
|
}
|
|
4435
4459
|
context.entities.sound(self, 2, "weapons/laser2.wav", 1, ATTN_NORM, 0);
|
|
4436
4460
|
}
|
|
4461
|
+
var TARGET_LASER_START_ON = 1;
|
|
4462
|
+
var TARGET_LASER_RED = 2;
|
|
4463
|
+
var TARGET_LASER_GREEN = 4;
|
|
4464
|
+
var TARGET_LASER_BLUE = 8;
|
|
4465
|
+
var TARGET_LASER_YELLOW = 16;
|
|
4466
|
+
var TARGET_LASER_ORANGE = 32;
|
|
4467
|
+
var TARGET_LASER_FAT = 64;
|
|
4468
|
+
function target_laser_think(self, context) {
|
|
4469
|
+
let count;
|
|
4470
|
+
if (self.spawnflags & 2147483648) {
|
|
4471
|
+
count = 8;
|
|
4472
|
+
} else {
|
|
4473
|
+
count = 4;
|
|
4474
|
+
}
|
|
4475
|
+
if (self.enemy) {
|
|
4476
|
+
const last_movedir = { ...self.movedir };
|
|
4477
|
+
const size = subtractVec3(self.enemy.maxs, self.enemy.mins);
|
|
4478
|
+
const centerOffset = scaleVec3(size, 0.5);
|
|
4479
|
+
const enemyCenter = addVec3(self.enemy.mins, centerOffset);
|
|
4480
|
+
const dir = subtractVec3(enemyCenter, self.origin);
|
|
4481
|
+
self.movedir = normalizeVec3(dir);
|
|
4482
|
+
if (Math.abs(self.movedir.x - last_movedir.x) > 1e-3 || Math.abs(self.movedir.y - last_movedir.y) > 1e-3 || Math.abs(self.movedir.z - last_movedir.z) > 1e-3) {
|
|
4483
|
+
self.spawnflags |= 2147483648;
|
|
4484
|
+
}
|
|
4485
|
+
}
|
|
4486
|
+
let ignore = self;
|
|
4487
|
+
let start = { ...self.origin };
|
|
4488
|
+
const end = addVec3(start, scaleVec3(self.movedir, 2048));
|
|
4489
|
+
let traceResult;
|
|
4490
|
+
while (true) {
|
|
4491
|
+
traceResult = context.entities.trace(start, end, ZERO_VEC3, ZERO_VEC3, ignore, CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_DEADMONSTER);
|
|
4492
|
+
if (!traceResult.ent) {
|
|
4493
|
+
break;
|
|
4494
|
+
}
|
|
4495
|
+
const trEnt = traceResult.ent;
|
|
4496
|
+
if (trEnt.takedamage && !(trEnt.flags & 2)) {
|
|
4497
|
+
T_Damage(trEnt, self, self.activator, self.movedir, traceResult.endpos, ZERO_VEC3, self.dmg, 1, 4 /* ENERGY */, 31 /* TARGET_LASER */, context.entities.timeSeconds);
|
|
4498
|
+
}
|
|
4499
|
+
if (!(trEnt.svflags & 1) && !trEnt.client) {
|
|
4500
|
+
if (self.spawnflags & 2147483648) {
|
|
4501
|
+
self.spawnflags &= ~2147483648;
|
|
4502
|
+
context.entities.multicast(traceResult.endpos, 1 /* Pvs */, ServerCommand.temp_entity, TempEntity.LASER_SPARKS, count, traceResult.endpos, traceResult.plane?.normal || ZERO_VEC3, self.skin);
|
|
4503
|
+
}
|
|
4504
|
+
break;
|
|
4505
|
+
}
|
|
4506
|
+
ignore = trEnt;
|
|
4507
|
+
start = { ...traceResult.endpos };
|
|
4508
|
+
}
|
|
4509
|
+
self.old_origin = { ...traceResult.endpos };
|
|
4510
|
+
self.nextthink = context.entities.timeSeconds + 0.1;
|
|
4511
|
+
}
|
|
4512
|
+
function target_laser_on(self, context) {
|
|
4513
|
+
if (!self.activator) {
|
|
4514
|
+
self.activator = self;
|
|
4515
|
+
}
|
|
4516
|
+
self.spawnflags |= 2147483649;
|
|
4517
|
+
self.svflags &= ~1 /* NoClient */;
|
|
4518
|
+
target_laser_think(self, context);
|
|
4519
|
+
}
|
|
4520
|
+
function target_laser_off(self) {
|
|
4521
|
+
self.spawnflags &= ~1;
|
|
4522
|
+
self.svflags |= 1 /* NoClient */;
|
|
4523
|
+
self.nextthink = 0;
|
|
4524
|
+
}
|
|
4525
|
+
function target_laser_use(self, other, activator, context) {
|
|
4526
|
+
self.activator = activator;
|
|
4527
|
+
if (self.spawnflags & 1) {
|
|
4528
|
+
target_laser_off(self);
|
|
4529
|
+
} else {
|
|
4530
|
+
target_laser_on(self, context);
|
|
4531
|
+
}
|
|
4532
|
+
}
|
|
4533
|
+
function target_laser_start(self, context) {
|
|
4534
|
+
self.movetype = 0 /* None */;
|
|
4535
|
+
self.solid = 0 /* Not */;
|
|
4536
|
+
self.renderfx |= 8 | 64;
|
|
4537
|
+
self.modelindex = 1;
|
|
4538
|
+
if (self.spawnflags & TARGET_LASER_FAT) {
|
|
4539
|
+
self.frame = 16;
|
|
4540
|
+
} else {
|
|
4541
|
+
self.frame = 4;
|
|
4542
|
+
}
|
|
4543
|
+
if (self.spawnflags & TARGET_LASER_RED) {
|
|
4544
|
+
self.skin = 4076007664;
|
|
4545
|
+
} else if (self.spawnflags & TARGET_LASER_GREEN) {
|
|
4546
|
+
self.skin = 3503411923;
|
|
4547
|
+
} else if (self.spawnflags & TARGET_LASER_BLUE) {
|
|
4548
|
+
self.skin = 4092850673;
|
|
4549
|
+
} else if (self.spawnflags & TARGET_LASER_YELLOW) {
|
|
4550
|
+
self.skin = 3705528031;
|
|
4551
|
+
} else if (self.spawnflags & TARGET_LASER_ORANGE) {
|
|
4552
|
+
self.skin = 3772900067;
|
|
4553
|
+
}
|
|
4554
|
+
if (!self.enemy) {
|
|
4555
|
+
if (self.target) {
|
|
4556
|
+
let found = null;
|
|
4557
|
+
context.entities.forEachEntity((ent) => {
|
|
4558
|
+
if (ent.targetname === self.target) {
|
|
4559
|
+
found = ent;
|
|
4560
|
+
}
|
|
4561
|
+
});
|
|
4562
|
+
if (found) {
|
|
4563
|
+
self.enemy = found;
|
|
4564
|
+
} else {
|
|
4565
|
+
context.warn(`${self.classname} at ${self.origin}: ${self.target} is a bad target`);
|
|
4566
|
+
self.movedir = setMovedir(self.angles);
|
|
4567
|
+
}
|
|
4568
|
+
} else {
|
|
4569
|
+
self.movedir = setMovedir(self.angles);
|
|
4570
|
+
}
|
|
4571
|
+
}
|
|
4572
|
+
self.use = (s, o, a) => target_laser_use(s, o, a || null, context);
|
|
4573
|
+
self.think = (s) => target_laser_think(s, context);
|
|
4574
|
+
if (!self.dmg) {
|
|
4575
|
+
self.dmg = 1;
|
|
4576
|
+
}
|
|
4577
|
+
self.absmin = addVec3(self.origin, { x: -8, y: -8, z: -8 });
|
|
4578
|
+
self.absmax = addVec3(self.origin, { x: 8, y: 8, z: 8 });
|
|
4579
|
+
context.entities.linkentity(self);
|
|
4580
|
+
if (self.spawnflags & TARGET_LASER_START_ON) {
|
|
4581
|
+
target_laser_on(self, context);
|
|
4582
|
+
} else {
|
|
4583
|
+
target_laser_off(self);
|
|
4584
|
+
}
|
|
4585
|
+
}
|
|
4437
4586
|
function registerTargetSpawns(registry) {
|
|
4438
4587
|
registry.register("target_temp_entity", (entity, context) => {
|
|
4439
4588
|
entity.style = context.keyValues.style ? parseInt(context.keyValues.style) : 0;
|
|
@@ -4516,6 +4665,10 @@ function registerTargetSpawns(registry) {
|
|
|
4516
4665
|
if (!entity.speed) entity.speed = 1e3;
|
|
4517
4666
|
entity.svflags |= 1 /* NoClient */;
|
|
4518
4667
|
});
|
|
4668
|
+
registry.register("target_laser", (entity, context) => {
|
|
4669
|
+
entity.think = (self) => target_laser_start(self, context);
|
|
4670
|
+
entity.nextthink = context.entities.timeSeconds + 1;
|
|
4671
|
+
});
|
|
4519
4672
|
}
|
|
4520
4673
|
|
|
4521
4674
|
// src/entities/triggers.ts
|