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
|
@@ -678,12 +678,12 @@ function addReplayFrame(session, cmd, serverFrame, startTime) {
|
|
|
678
678
|
timestamp: Date.now() - startTime
|
|
679
679
|
});
|
|
680
680
|
}
|
|
681
|
-
var WaterLevel = /* @__PURE__ */ ((
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
return
|
|
681
|
+
var WaterLevel = /* @__PURE__ */ ((WaterLevel4) => {
|
|
682
|
+
WaterLevel4[WaterLevel4["None"] = 0] = "None";
|
|
683
|
+
WaterLevel4[WaterLevel4["Feet"] = 1] = "Feet";
|
|
684
|
+
WaterLevel4[WaterLevel4["Waist"] = 2] = "Waist";
|
|
685
|
+
WaterLevel4[WaterLevel4["Under"] = 3] = "Under";
|
|
686
|
+
return WaterLevel4;
|
|
687
687
|
})(WaterLevel || {});
|
|
688
688
|
function applyPmoveFriction(params) {
|
|
689
689
|
const {
|
|
@@ -760,12 +760,14 @@ function buildWaterWish(params) {
|
|
|
760
760
|
let wishvel = {
|
|
761
761
|
x: forward.x * cmd.forwardmove + right.x * cmd.sidemove,
|
|
762
762
|
y: forward.y * cmd.forwardmove + right.y * cmd.sidemove,
|
|
763
|
-
z:
|
|
763
|
+
z: forward.z * cmd.forwardmove + right.z * cmd.sidemove
|
|
764
764
|
};
|
|
765
765
|
if (cmd.upmove > 10) {
|
|
766
766
|
wishvel = addVec3(wishvel, { x: 0, y: 0, z: cmd.upmove });
|
|
767
767
|
} else if (cmd.upmove < -10) {
|
|
768
768
|
wishvel = addVec3(wishvel, { x: 0, y: 0, z: cmd.upmove });
|
|
769
|
+
} else if (Math.abs(cmd.forwardmove) < 10 && Math.abs(cmd.sidemove) < 10) {
|
|
770
|
+
wishvel = addVec3(wishvel, { x: 0, y: 0, z: -60 });
|
|
769
771
|
} else {
|
|
770
772
|
wishvel = addVec3(wishvel, { x: 0, y: 0, z: 10 });
|
|
771
773
|
}
|
|
@@ -1153,6 +1155,13 @@ var U_MODEL3 = 1 << 1;
|
|
|
1153
1155
|
var U_MODEL4 = 1 << 2;
|
|
1154
1156
|
var U_REMOVE = 32768;
|
|
1155
1157
|
var FRAMETIME = 0.025;
|
|
1158
|
+
var MASK_WATER2 = 33554432;
|
|
1159
|
+
var WaterLevel3 = {
|
|
1160
|
+
None: 0,
|
|
1161
|
+
Feet: 1,
|
|
1162
|
+
Waist: 2,
|
|
1163
|
+
Under: 3
|
|
1164
|
+
};
|
|
1156
1165
|
var categorizePosition2 = (state, trace) => {
|
|
1157
1166
|
const point = { ...state.origin };
|
|
1158
1167
|
point.z -= 0.25;
|
|
@@ -1164,12 +1173,26 @@ var categorizePosition2 = (state, trace) => {
|
|
|
1164
1173
|
};
|
|
1165
1174
|
var checkWater = (state, pointContents2) => {
|
|
1166
1175
|
const point = { ...state.origin };
|
|
1167
|
-
|
|
1176
|
+
const { mins, maxs } = state;
|
|
1177
|
+
point.z = state.origin.z + mins.z + 1;
|
|
1168
1178
|
const contents = pointContents2(point);
|
|
1169
|
-
if (contents &
|
|
1170
|
-
return { ...state, waterLevel:
|
|
1171
|
-
}
|
|
1172
|
-
|
|
1179
|
+
if (!(contents & MASK_WATER2)) {
|
|
1180
|
+
return { ...state, waterLevel: WaterLevel3.None };
|
|
1181
|
+
}
|
|
1182
|
+
let waterLevel = WaterLevel3.Feet;
|
|
1183
|
+
const waist = state.origin.z + (mins.z + maxs.z) * 0.5;
|
|
1184
|
+
point.z = waist;
|
|
1185
|
+
const waistContents = pointContents2(point);
|
|
1186
|
+
if (waistContents & MASK_WATER2) {
|
|
1187
|
+
waterLevel = WaterLevel3.Waist;
|
|
1188
|
+
const head = state.origin.z + 22;
|
|
1189
|
+
point.z = head;
|
|
1190
|
+
const headContents = pointContents2(point);
|
|
1191
|
+
if (headContents & MASK_WATER2) {
|
|
1192
|
+
waterLevel = WaterLevel3.Under;
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
return { ...state, waterLevel };
|
|
1173
1196
|
};
|
|
1174
1197
|
var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
1175
1198
|
let newState = { ...state };
|
|
@@ -1209,7 +1232,8 @@ var applyPmove = (state, cmd, trace, pointContents2) => {
|
|
|
1209
1232
|
velocity: frictionedVelocity,
|
|
1210
1233
|
wishdir: wish.wishdir,
|
|
1211
1234
|
wishspeed: wish.wishspeed,
|
|
1212
|
-
|
|
1235
|
+
// Water movement uses ground acceleration (10), not air acceleration (1)
|
|
1236
|
+
accel: onGround || waterLevel >= 2 ? 10 : 1,
|
|
1213
1237
|
frametime: FRAMETIME
|
|
1214
1238
|
});
|
|
1215
1239
|
const traceResult = trace(origin, {
|
|
@@ -4600,6 +4624,131 @@ function useTargetBlaster(self, other, activator, context) {
|
|
|
4600
4624
|
}
|
|
4601
4625
|
context.entities.sound(self, 2, "weapons/laser2.wav", 1, ATTN_NORM, 0);
|
|
4602
4626
|
}
|
|
4627
|
+
var TARGET_LASER_START_ON = 1;
|
|
4628
|
+
var TARGET_LASER_RED = 2;
|
|
4629
|
+
var TARGET_LASER_GREEN = 4;
|
|
4630
|
+
var TARGET_LASER_BLUE = 8;
|
|
4631
|
+
var TARGET_LASER_YELLOW = 16;
|
|
4632
|
+
var TARGET_LASER_ORANGE = 32;
|
|
4633
|
+
var TARGET_LASER_FAT = 64;
|
|
4634
|
+
function target_laser_think(self, context) {
|
|
4635
|
+
let count;
|
|
4636
|
+
if (self.spawnflags & 2147483648) {
|
|
4637
|
+
count = 8;
|
|
4638
|
+
} else {
|
|
4639
|
+
count = 4;
|
|
4640
|
+
}
|
|
4641
|
+
if (self.enemy) {
|
|
4642
|
+
const last_movedir = { ...self.movedir };
|
|
4643
|
+
const size = subtractVec3(self.enemy.maxs, self.enemy.mins);
|
|
4644
|
+
const centerOffset = scaleVec3(size, 0.5);
|
|
4645
|
+
const enemyCenter = addVec3(self.enemy.mins, centerOffset);
|
|
4646
|
+
const dir = subtractVec3(enemyCenter, self.origin);
|
|
4647
|
+
self.movedir = normalizeVec3(dir);
|
|
4648
|
+
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) {
|
|
4649
|
+
self.spawnflags |= 2147483648;
|
|
4650
|
+
}
|
|
4651
|
+
}
|
|
4652
|
+
let ignore = self;
|
|
4653
|
+
let start = { ...self.origin };
|
|
4654
|
+
const end = addVec3(start, scaleVec3(self.movedir, 2048));
|
|
4655
|
+
let traceResult;
|
|
4656
|
+
while (true) {
|
|
4657
|
+
traceResult = context.entities.trace(start, end, ZERO_VEC3, ZERO_VEC3, ignore, CONTENTS_SOLID | CONTENTS_MONSTER | CONTENTS_DEADMONSTER);
|
|
4658
|
+
if (!traceResult.ent) {
|
|
4659
|
+
break;
|
|
4660
|
+
}
|
|
4661
|
+
const trEnt = traceResult.ent;
|
|
4662
|
+
if (trEnt.takedamage && !(trEnt.flags & 2)) {
|
|
4663
|
+
T_Damage(trEnt, self, self.activator, self.movedir, traceResult.endpos, ZERO_VEC3, self.dmg, 1, 4 /* ENERGY */, 31 /* TARGET_LASER */, context.entities.timeSeconds);
|
|
4664
|
+
}
|
|
4665
|
+
if (!(trEnt.svflags & 1) && !trEnt.client) {
|
|
4666
|
+
if (self.spawnflags & 2147483648) {
|
|
4667
|
+
self.spawnflags &= ~2147483648;
|
|
4668
|
+
context.entities.multicast(traceResult.endpos, 1 /* Pvs */, ServerCommand.temp_entity, TempEntity.LASER_SPARKS, count, traceResult.endpos, traceResult.plane?.normal || ZERO_VEC3, self.skin);
|
|
4669
|
+
}
|
|
4670
|
+
break;
|
|
4671
|
+
}
|
|
4672
|
+
ignore = trEnt;
|
|
4673
|
+
start = { ...traceResult.endpos };
|
|
4674
|
+
}
|
|
4675
|
+
self.old_origin = { ...traceResult.endpos };
|
|
4676
|
+
self.nextthink = context.entities.timeSeconds + 0.1;
|
|
4677
|
+
}
|
|
4678
|
+
function target_laser_on(self, context) {
|
|
4679
|
+
if (!self.activator) {
|
|
4680
|
+
self.activator = self;
|
|
4681
|
+
}
|
|
4682
|
+
self.spawnflags |= 2147483649;
|
|
4683
|
+
self.svflags &= ~1 /* NoClient */;
|
|
4684
|
+
target_laser_think(self, context);
|
|
4685
|
+
}
|
|
4686
|
+
function target_laser_off(self) {
|
|
4687
|
+
self.spawnflags &= ~1;
|
|
4688
|
+
self.svflags |= 1 /* NoClient */;
|
|
4689
|
+
self.nextthink = 0;
|
|
4690
|
+
}
|
|
4691
|
+
function target_laser_use(self, other, activator, context) {
|
|
4692
|
+
self.activator = activator;
|
|
4693
|
+
if (self.spawnflags & 1) {
|
|
4694
|
+
target_laser_off(self);
|
|
4695
|
+
} else {
|
|
4696
|
+
target_laser_on(self, context);
|
|
4697
|
+
}
|
|
4698
|
+
}
|
|
4699
|
+
function target_laser_start(self, context) {
|
|
4700
|
+
self.movetype = 0 /* None */;
|
|
4701
|
+
self.solid = 0 /* Not */;
|
|
4702
|
+
self.renderfx |= 8 | 64;
|
|
4703
|
+
self.modelindex = 1;
|
|
4704
|
+
if (self.spawnflags & TARGET_LASER_FAT) {
|
|
4705
|
+
self.frame = 16;
|
|
4706
|
+
} else {
|
|
4707
|
+
self.frame = 4;
|
|
4708
|
+
}
|
|
4709
|
+
if (self.spawnflags & TARGET_LASER_RED) {
|
|
4710
|
+
self.skin = 4076007664;
|
|
4711
|
+
} else if (self.spawnflags & TARGET_LASER_GREEN) {
|
|
4712
|
+
self.skin = 3503411923;
|
|
4713
|
+
} else if (self.spawnflags & TARGET_LASER_BLUE) {
|
|
4714
|
+
self.skin = 4092850673;
|
|
4715
|
+
} else if (self.spawnflags & TARGET_LASER_YELLOW) {
|
|
4716
|
+
self.skin = 3705528031;
|
|
4717
|
+
} else if (self.spawnflags & TARGET_LASER_ORANGE) {
|
|
4718
|
+
self.skin = 3772900067;
|
|
4719
|
+
}
|
|
4720
|
+
if (!self.enemy) {
|
|
4721
|
+
if (self.target) {
|
|
4722
|
+
let found = null;
|
|
4723
|
+
context.entities.forEachEntity((ent) => {
|
|
4724
|
+
if (ent.targetname === self.target) {
|
|
4725
|
+
found = ent;
|
|
4726
|
+
}
|
|
4727
|
+
});
|
|
4728
|
+
if (found) {
|
|
4729
|
+
self.enemy = found;
|
|
4730
|
+
} else {
|
|
4731
|
+
context.warn(`${self.classname} at ${self.origin}: ${self.target} is a bad target`);
|
|
4732
|
+
self.movedir = setMovedir(self.angles);
|
|
4733
|
+
}
|
|
4734
|
+
} else {
|
|
4735
|
+
self.movedir = setMovedir(self.angles);
|
|
4736
|
+
}
|
|
4737
|
+
}
|
|
4738
|
+
self.use = (s, o, a) => target_laser_use(s, o, a || null, context);
|
|
4739
|
+
self.think = (s) => target_laser_think(s, context);
|
|
4740
|
+
if (!self.dmg) {
|
|
4741
|
+
self.dmg = 1;
|
|
4742
|
+
}
|
|
4743
|
+
self.absmin = addVec3(self.origin, { x: -8, y: -8, z: -8 });
|
|
4744
|
+
self.absmax = addVec3(self.origin, { x: 8, y: 8, z: 8 });
|
|
4745
|
+
context.entities.linkentity(self);
|
|
4746
|
+
if (self.spawnflags & TARGET_LASER_START_ON) {
|
|
4747
|
+
target_laser_on(self, context);
|
|
4748
|
+
} else {
|
|
4749
|
+
target_laser_off(self);
|
|
4750
|
+
}
|
|
4751
|
+
}
|
|
4603
4752
|
function registerTargetSpawns(registry) {
|
|
4604
4753
|
registry.register("target_temp_entity", (entity, context) => {
|
|
4605
4754
|
entity.style = context.keyValues.style ? parseInt(context.keyValues.style) : 0;
|
|
@@ -4682,6 +4831,10 @@ function registerTargetSpawns(registry) {
|
|
|
4682
4831
|
if (!entity.speed) entity.speed = 1e3;
|
|
4683
4832
|
entity.svflags |= 1 /* NoClient */;
|
|
4684
4833
|
});
|
|
4834
|
+
registry.register("target_laser", (entity, context) => {
|
|
4835
|
+
entity.think = (self) => target_laser_start(self, context);
|
|
4836
|
+
entity.nextthink = context.entities.timeSeconds + 1;
|
|
4837
|
+
});
|
|
4685
4838
|
}
|
|
4686
4839
|
|
|
4687
4840
|
// src/entities/triggers.ts
|