quake2ts 0.0.289 → 0.0.291

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 (44) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +11 -11
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs +22 -12
  5. package/packages/client/dist/cjs/index.cjs.map +1 -1
  6. package/packages/client/dist/esm/index.js +22 -12
  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/net/connection.d.ts +1 -0
  10. package/packages/client/dist/types/net/connection.d.ts.map +1 -1
  11. package/packages/engine/dist/browser/index.global.js +16 -16
  12. package/packages/engine/dist/browser/index.global.js.map +1 -1
  13. package/packages/engine/dist/cjs/index.cjs +33 -35
  14. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  15. package/packages/engine/dist/esm/index.js +33 -35
  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/audio/constants.d.ts +1 -23
  19. package/packages/engine/dist/types/audio/constants.d.ts.map +1 -1
  20. package/packages/game/dist/browser/index.global.js +3 -3
  21. package/packages/game/dist/browser/index.global.js.map +1 -1
  22. package/packages/game/dist/cjs/index.cjs +65 -19
  23. package/packages/game/dist/cjs/index.cjs.map +1 -1
  24. package/packages/game/dist/esm/index.js +65 -19
  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/monsters/actor.d.ts.map +1 -1
  28. package/packages/game/dist/types/entities/monsters/arachnid.d.ts.map +1 -1
  29. package/packages/game/dist/types/entities/system.d.ts +1 -0
  30. package/packages/game/dist/types/entities/system.d.ts.map +1 -1
  31. package/packages/game/dist/types/index.d.ts +2 -0
  32. package/packages/game/dist/types/index.d.ts.map +1 -1
  33. package/packages/shared/dist/browser/index.global.js +1 -1
  34. package/packages/shared/dist/browser/index.global.js.map +1 -1
  35. package/packages/shared/dist/cjs/index.cjs +53 -0
  36. package/packages/shared/dist/cjs/index.cjs.map +1 -1
  37. package/packages/shared/dist/esm/index.js +42 -0
  38. package/packages/shared/dist/esm/index.js.map +1 -1
  39. package/packages/shared/dist/tsconfig.tsbuildinfo +1 -1
  40. package/packages/shared/dist/types/audio/constants.d.ts +24 -0
  41. package/packages/shared/dist/types/audio/constants.d.ts.map +1 -0
  42. package/packages/shared/dist/types/index.d.ts +1 -0
  43. package/packages/shared/dist/types/index.d.ts.map +1 -1
  44. package/packages/tools/dist/tsconfig.tsbuildinfo +1 -1
@@ -446,7 +446,7 @@ function G_SetPowerupStat(stats, powerupId, val) {
446
446
  if (safeVal < 0) safeVal = 0;
447
447
  setCompressedInteger(stats, 41, index, safeVal, NUM_BITS_FOR_POWERUP);
448
448
  }
449
- var __defProp2, __export2, ZERO_VEC3, STOP_EPSILON, DEG_TO_RAD, PITCH, YAW, ROLL, DEG2RAD_FACTOR, RAD2DEG_FACTOR, ANORMS, STATE_SIZE, MIDDLE_WORD, MATRIX_A, UPPER_MASK, LOWER_MASK, TWO_POW_32, MersenneTwister19937, RandomGenerator, CONTENTS_SOLID, CONTENTS_WINDOW, CONTENTS_AUX, CONTENTS_LAVA, CONTENTS_SLIME, CONTENTS_WATER, CONTENTS_MIST, CONTENTS_NO_WATERJUMP, CONTENTS_PROJECTILECLIP, CONTENTS_AREAPORTAL, CONTENTS_PLAYERCLIP, CONTENTS_MONSTERCLIP, CONTENTS_CURRENT_0, CONTENTS_CURRENT_90, CONTENTS_CURRENT_180, CONTENTS_CURRENT_270, CONTENTS_CURRENT_UP, CONTENTS_CURRENT_DOWN, CONTENTS_ORIGIN, CONTENTS_MONSTER, CONTENTS_DEADMONSTER, CONTENTS_DETAIL, CONTENTS_TRANSLUCENT, CONTENTS_LADDER, CONTENTS_PLAYER, CONTENTS_PROJECTILE, SURF_LIGHT, SURF_SLICK, SURF_SKY, SURF_WARP, SURF_TRANS33, SURF_TRANS66, SURF_FLOWING, SURF_NODRAW, SURF_ALPHATEST, SURF_N64_UV, SURF_N64_SCROLL_X, SURF_N64_SCROLL_Y, SURF_N64_SCROLL_FLIP, MASK_SOLID, MASK_PLAYERSOLID, MASK_DEADSOLID, MASK_MONSTERSOLID, MASK_WATER, MASK_OPAQUE, MASK_SHOT, MASK_CURRENT, MASK_BLOCK_SIGHT, MASK_NAV_SOLID, MASK_LADDER_NAV_SOLID, MASK_WALK_NAV_SOLID, MASK_PROJECTILE, MAX_CHECKCOUNT, CvarFlags, MAX_CLIENTS, MAX_LIGHTSTYLES, MAX_MODELS, MAX_SOUNDS, MAX_IMAGES, MAX_ITEMS, MAX_GENERAL, MAX_SHADOW_LIGHTS, MAX_WHEEL_ITEMS, ConfigStringIndex, MAX_CONFIGSTRINGS, replay_exports, WaterLevel, WATERJUMP_CLEAR, ServerCommand, TempEntity, MZ_BLASTER, MZ_MACHINEGUN, MZ_SHOTGUN, MZ_CHAINGUN1, MZ_RAILGUN, MZ_ROCKET, MZ_GRENADE, MZ_SSHOTGUN, MZ_BFG, MZ_HYPERBLASTER, PowerupId, PlayerStat, AMMO_MAX, NUM_BITS_FOR_AMMO, NUM_AMMO_STATS, POWERUP_MAX, NUM_BITS_FOR_POWERUP, NUM_POWERUP_STATS, POWERUP_STAT_MAP, RenderFx, entityFlags_exports, U_NUMBER, U_MODEL, U_SOUND, U_ORIGIN1, U_ORIGIN2, U_ORIGIN3, U_ANGLE1, U_ANGLE2, U_ANGLE3, U_FRAME, U_SKIN, U_EFFECTS, U_RENDERFX, U_SOLID, U_EVENT, U_MOREBITS, U_MODEL2, U_MODEL3, U_MODEL4, U_REMOVE, FRAMETIME, MASK_WATER2, WaterLevel3, categorizePosition2, checkWater, applyPmove, BinaryWriter, _NetChan, WeaponId, AmmoType, AMMO_TYPE_COUNT, AmmoItemId, WEAPON_WHEEL_ORDER;
449
+ var __defProp2, __export2, ZERO_VEC3, STOP_EPSILON, DEG_TO_RAD, PITCH, YAW, ROLL, DEG2RAD_FACTOR, RAD2DEG_FACTOR, ANORMS, STATE_SIZE, MIDDLE_WORD, MATRIX_A, UPPER_MASK, LOWER_MASK, TWO_POW_32, MersenneTwister19937, RandomGenerator, CONTENTS_SOLID, CONTENTS_WINDOW, CONTENTS_AUX, CONTENTS_LAVA, CONTENTS_SLIME, CONTENTS_WATER, CONTENTS_MIST, CONTENTS_NO_WATERJUMP, CONTENTS_PROJECTILECLIP, CONTENTS_AREAPORTAL, CONTENTS_PLAYERCLIP, CONTENTS_MONSTERCLIP, CONTENTS_CURRENT_0, CONTENTS_CURRENT_90, CONTENTS_CURRENT_180, CONTENTS_CURRENT_270, CONTENTS_CURRENT_UP, CONTENTS_CURRENT_DOWN, CONTENTS_ORIGIN, CONTENTS_MONSTER, CONTENTS_DEADMONSTER, CONTENTS_DETAIL, CONTENTS_TRANSLUCENT, CONTENTS_LADDER, CONTENTS_PLAYER, CONTENTS_PROJECTILE, SURF_LIGHT, SURF_SLICK, SURF_SKY, SURF_WARP, SURF_TRANS33, SURF_TRANS66, SURF_FLOWING, SURF_NODRAW, SURF_ALPHATEST, SURF_N64_UV, SURF_N64_SCROLL_X, SURF_N64_SCROLL_Y, SURF_N64_SCROLL_FLIP, MASK_SOLID, MASK_PLAYERSOLID, MASK_DEADSOLID, MASK_MONSTERSOLID, MASK_WATER, MASK_OPAQUE, MASK_SHOT, MASK_CURRENT, MASK_BLOCK_SIGHT, MASK_NAV_SOLID, MASK_LADDER_NAV_SOLID, MASK_WALK_NAV_SOLID, MASK_PROJECTILE, MAX_CHECKCOUNT, CvarFlags, MAX_CLIENTS, MAX_LIGHTSTYLES, MAX_MODELS, MAX_SOUNDS, MAX_IMAGES, MAX_ITEMS, MAX_GENERAL, MAX_SHADOW_LIGHTS, MAX_WHEEL_ITEMS, ConfigStringIndex, MAX_CONFIGSTRINGS, replay_exports, WaterLevel, WATERJUMP_CLEAR, ServerCommand, TempEntity, MZ_BLASTER, MZ_MACHINEGUN, MZ_SHOTGUN, MZ_CHAINGUN1, MZ_RAILGUN, MZ_ROCKET, MZ_GRENADE, MZ_SSHOTGUN, MZ_BFG, MZ_HYPERBLASTER, PowerupId, PlayerStat, AMMO_MAX, NUM_BITS_FOR_AMMO, NUM_AMMO_STATS, POWERUP_MAX, NUM_BITS_FOR_POWERUP, NUM_POWERUP_STATS, POWERUP_STAT_MAP, RenderFx, entityFlags_exports, U_NUMBER, U_MODEL, U_SOUND, U_ORIGIN1, U_ORIGIN2, U_ORIGIN3, U_ANGLE1, U_ANGLE2, U_ANGLE3, U_FRAME, U_SKIN, U_EFFECTS, U_RENDERFX, U_SOLID, U_EVENT, U_MOREBITS, U_MODEL2, U_MODEL3, U_MODEL4, U_REMOVE, FRAMETIME, MASK_WATER2, WaterLevel3, categorizePosition2, checkWater, applyPmove, BinaryWriter, _NetChan, WeaponId, AmmoType, AMMO_TYPE_COUNT, AmmoItemId, WEAPON_WHEEL_ORDER, SoundChannel, ATTN_NORM, ATTN_IDLE;
450
450
  var init_esm = __esm({
451
451
  "../shared/dist/esm/index.js"() {
452
452
  "use strict";
@@ -1727,6 +1727,22 @@ var init_esm = __esm({
1727
1727
  "bfg10k"
1728
1728
  /* BFG10K */
1729
1729
  ];
1730
+ SoundChannel = /* @__PURE__ */ ((SoundChannel2) => {
1731
+ SoundChannel2[SoundChannel2["Auto"] = 0] = "Auto";
1732
+ SoundChannel2[SoundChannel2["Weapon"] = 1] = "Weapon";
1733
+ SoundChannel2[SoundChannel2["Voice"] = 2] = "Voice";
1734
+ SoundChannel2[SoundChannel2["Item"] = 3] = "Item";
1735
+ SoundChannel2[SoundChannel2["Body"] = 4] = "Body";
1736
+ SoundChannel2[SoundChannel2["Aux"] = 5] = "Aux";
1737
+ SoundChannel2[SoundChannel2["Footstep"] = 6] = "Footstep";
1738
+ SoundChannel2[SoundChannel2["Aux3"] = 7] = "Aux3";
1739
+ SoundChannel2[SoundChannel2["NoPhsAdd"] = 8] = "NoPhsAdd";
1740
+ SoundChannel2[SoundChannel2["Reliable"] = 16] = "Reliable";
1741
+ SoundChannel2[SoundChannel2["ForcePos"] = 32] = "ForcePos";
1742
+ return SoundChannel2;
1743
+ })(SoundChannel || {});
1744
+ ATTN_NORM = 1;
1745
+ ATTN_IDLE = 2;
1730
1746
  }
1731
1747
  });
1732
1748
 
@@ -4131,6 +4147,9 @@ var EntitySystem = class {
4131
4147
  sound(entity, channel, sound, volume, attenuation, timeofs) {
4132
4148
  this.engine.sound?.(entity, channel, sound, volume, attenuation, timeofs);
4133
4149
  }
4150
+ soundIndex(sound) {
4151
+ return this.engine.soundIndex?.(sound) || 0;
4152
+ }
4134
4153
  modelIndex(model) {
4135
4154
  return this.engine.modelIndex?.(model) || 0;
4136
4155
  }
@@ -5289,7 +5308,7 @@ function createBfgBall(sys, owner, start, dir, damage, speed, damageRadius) {
5289
5308
 
5290
5309
  // src/entities/targets.ts
5291
5310
  var ATTN_NONE = 0;
5292
- var ATTN_NORM = 1;
5311
+ var ATTN_NORM2 = 1;
5293
5312
  var SPEAKER_SPAWNFLAGS = {
5294
5313
  LoopedOn: 1 << 0,
5295
5314
  LoopedOff: 1 << 1,
@@ -5381,7 +5400,7 @@ function useTargetBlaster(self, other, activator, context) {
5381
5400
  bolt.effects = 0;
5382
5401
  }
5383
5402
  }
5384
- context.entities.sound(self, 2, "weapons/laser2.wav", 1, ATTN_NORM, 0);
5403
+ context.entities.sound(self, 2, "weapons/laser2.wav", 1, ATTN_NORM2, 0);
5385
5404
  }
5386
5405
  var SPAWNFLAG_EARTHQUAKE_SILENT = 1;
5387
5406
  var SPAWNFLAG_EARTHQUAKE_TOGGLE = 2;
@@ -5606,7 +5625,7 @@ function registerTargetSpawns(registry) {
5606
5625
  if (attenuation) {
5607
5626
  entity.attenuation = Number.parseFloat(attenuation);
5608
5627
  } else {
5609
- entity.attenuation = ATTN_NORM;
5628
+ entity.attenuation = ATTN_NORM2;
5610
5629
  }
5611
5630
  if (context.keyValues.volume) {
5612
5631
  entity.volume = Number.parseFloat(context.keyValues.volume);
@@ -13117,6 +13136,12 @@ var actor_names = [
13117
13136
  "Titus",
13118
13137
  "Bitterman"
13119
13138
  ];
13139
+ var sound_pain1 = "player/male/pain100.wav";
13140
+ var sound_pain2 = "player/male/pain75.wav";
13141
+ var sound_pain3 = "player/male/pain50.wav";
13142
+ var sound_die1 = "player/male/death1.wav";
13143
+ var sound_die2 = "player/male/death2.wav";
13144
+ var sound_gib = "misc/udeath.wav";
13120
13145
  var FRAME_stand101 = 0;
13121
13146
  var FRAME_stand140 = 39;
13122
13147
  var FRAME_walk01 = 40;
@@ -13191,6 +13216,11 @@ function actor_pain(self, other, kick, damage) {
13191
13216
  if (context.timeSeconds < self.pain_debounce_time)
13192
13217
  return;
13193
13218
  self.pain_debounce_time = context.timeSeconds + 3;
13219
+ const n = Math.floor(Math.random() * 3);
13220
+ let sound = sound_pain1;
13221
+ if (n === 1) sound = sound_pain2;
13222
+ if (n === 2) sound = sound_pain3;
13223
+ context.sound(self, SoundChannel.Voice, sound, 1, ATTN_NORM, 0);
13194
13224
  const random13 = Math.random();
13195
13225
  if (other && other.client && random13 < 0.4) {
13196
13226
  const v = subtractVec3(other.origin, self.origin);
@@ -13205,7 +13235,6 @@ function actor_pain(self, other, kick, damage) {
13205
13235
  `);
13206
13236
  return;
13207
13237
  }
13208
- const n = Math.floor(Math.random() * 3);
13209
13238
  if (n === 0)
13210
13239
  self.monsterinfo.current_move = actor_move_pain1;
13211
13240
  else if (n === 1)
@@ -13254,15 +13283,19 @@ function actor_die(self, inflictor, attacker, damage, point, mod) {
13254
13283
  const context = self.monsterinfo.context;
13255
13284
  if (!context) return;
13256
13285
  if (self.health <= -80) {
13286
+ context.sound(self, SoundChannel.Voice, sound_gib, 1, ATTN_NORM, 0);
13257
13287
  throwGibs(context, self.origin, damage);
13258
13288
  self.deadflag = 2 /* Dead */;
13259
13289
  return;
13260
13290
  }
13261
13291
  if (self.deadflag === 2 /* Dead */)
13262
13292
  return;
13293
+ const n = Math.floor(Math.random() * 2);
13294
+ const sound = n === 0 ? sound_die1 : sound_die2;
13295
+ context.sound(self, SoundChannel.Voice, sound, 1, ATTN_NORM, 0);
13263
13296
  self.deadflag = 2 /* Dead */;
13264
13297
  self.takedamage = true;
13265
- if (Math.random() < 0.5)
13298
+ if (n === 0)
13266
13299
  self.monsterinfo.current_move = actor_move_death1;
13267
13300
  else
13268
13301
  self.monsterinfo.current_move = actor_move_death2;
@@ -13530,6 +13563,13 @@ function SP_misc_actor(self, context) {
13530
13563
  self.mass = 200;
13531
13564
  self.pain = actor_pain;
13532
13565
  self.die = actor_die;
13566
+ context.entities.soundIndex(sound_pain1);
13567
+ context.entities.soundIndex(sound_pain2);
13568
+ context.entities.soundIndex(sound_pain3);
13569
+ context.entities.soundIndex(sound_die1);
13570
+ context.entities.soundIndex(sound_die2);
13571
+ context.entities.soundIndex(sound_gib);
13572
+ context.entities.soundIndex("player/male/jump1.wav");
13533
13573
  self.monsterinfo = {
13534
13574
  ...self.monsterinfo,
13535
13575
  // Preserve default properties like last_sighting, trail_time, pausetime
@@ -13580,7 +13620,7 @@ function target_actor_touch(self, other, plane, surf) {
13580
13620
  if (other.groundentity) {
13581
13621
  other.groundentity = null;
13582
13622
  v.z = self.movedir.z;
13583
- context.sound(other, 2, "player/male/jump1.wav", 1, 1, 0);
13623
+ context.sound(other, SoundChannel.Voice, "player/male/jump1.wav", 1, ATTN_NORM, 0);
13584
13624
  }
13585
13625
  }
13586
13626
  if (self.spawnflags & SPAWNFLAG_TARGET_ACTOR_SHOOT) {
@@ -16901,11 +16941,6 @@ var FRAME_rails_up16 = 113;
16901
16941
  var MODEL_SCALE = 1;
16902
16942
  var MELEE_DISTANCE5 = 64;
16903
16943
  var MONSTER_TICK27 = 0.1;
16904
- var CHAN_WEAPON = 1;
16905
- var CHAN_VOICE = 2;
16906
- var CHAN_BODY = 4;
16907
- var ATTN_NORM2 = 1;
16908
- var ATTN_IDLE = 2;
16909
16944
  var MZ2_ARACHNID_RAIL1 = 20;
16910
16945
  var MZ2_ARACHNID_RAIL2 = 21;
16911
16946
  var MZ2_ARACHNID_RAIL_UP1 = 22;
@@ -16957,7 +16992,7 @@ function arachnid_stand(self, context) {
16957
16992
  M_SetAnimation3(self, arachnid_move_stand, context);
16958
16993
  }
16959
16994
  function arachnid_footstep(self, context) {
16960
- context.engine.sound?.(self, CHAN_BODY, sound_step, 0.5, ATTN_IDLE, 0);
16995
+ context.engine.sound?.(self, SoundChannel.Body, sound_step, 0.5, ATTN_IDLE, 0);
16961
16996
  }
16962
16997
  var arachnid_frames_walk = [
16963
16998
  { ai: monster_ai_walk22, dist: 8, think: arachnid_footstep },
@@ -17036,7 +17071,7 @@ function arachnid_pain(self, other, kick, damage, context) {
17036
17071
  return;
17037
17072
  }
17038
17073
  self.pain_debounce_time = context.timeSeconds + 3;
17039
- context.engine.sound?.(self, CHAN_VOICE, sound_pain, 1, ATTN_NORM2, 0);
17074
+ context.engine.sound?.(self, SoundChannel.Voice, sound_pain, 1, ATTN_NORM, 0);
17040
17075
  if (!M_ShouldReactToPain(self)) {
17041
17076
  return;
17042
17077
  }
@@ -17050,7 +17085,7 @@ function arachnid_charge_rail(self, context) {
17050
17085
  if (!self.enemy || !self.enemy.inUse) {
17051
17086
  return;
17052
17087
  }
17053
- context.engine.sound?.(self, CHAN_WEAPON, sound_charge, 1, ATTN_NORM2, 0);
17088
+ context.engine.sound?.(self, SoundChannel.Weapon, sound_charge, 1, ATTN_NORM, 0);
17054
17089
  self.pos1 = { ...self.enemy.origin };
17055
17090
  self.pos1 = { ...self.pos1, z: self.pos1.z + self.enemy.viewheight };
17056
17091
  }
@@ -17121,7 +17156,7 @@ var arachnid_attack_up1 = {
17121
17156
  endfunc: arachnid_run
17122
17157
  };
17123
17158
  function arachnid_melee_charge(self, context) {
17124
- context.engine.sound?.(self, CHAN_WEAPON, sound_melee, 1, ATTN_NORM2, 0);
17159
+ context.engine.sound?.(self, SoundChannel.Weapon, sound_melee, 1, ATTN_NORM, 0);
17125
17160
  }
17126
17161
  function arachnid_melee_hit(self, context) {
17127
17162
  if (!monster_fire_hit(self, { x: MELEE_DISTANCE5, y: 0, z: 0 }, 15, 50, context)) {
@@ -17198,7 +17233,7 @@ var arachnid_move_death = {
17198
17233
  };
17199
17234
  function arachnid_die(self, inflictor, attacker, damage, point, mod, context) {
17200
17235
  if (M_CheckGib(self, context)) {
17201
- context.engine.sound?.(self, CHAN_VOICE, "misc/udeath.wav", 1, ATTN_NORM2, 0);
17236
+ context.engine.sound?.(self, SoundChannel.Voice, "misc/udeath.wav", 1, ATTN_NORM, 0);
17202
17237
  throwGibs(context, self.origin, damage);
17203
17238
  self.deadflag = 2 /* Dead */;
17204
17239
  return;
@@ -17206,7 +17241,7 @@ function arachnid_die(self, inflictor, attacker, damage, point, mod, context) {
17206
17241
  if (self.deadflag === 2 /* Dead */) {
17207
17242
  return;
17208
17243
  }
17209
- context.engine.sound?.(self, CHAN_VOICE, sound_death, 1, ATTN_NORM2, 0);
17244
+ context.engine.sound?.(self, SoundChannel.Voice, sound_death, 1, ATTN_NORM, 0);
17210
17245
  self.deadflag = 2 /* Dead */;
17211
17246
  self.takedamage = true;
17212
17247
  M_SetAnimation3(self, arachnid_move_death, context);
@@ -17224,6 +17259,14 @@ function SP_monster_arachnid(self, context) {
17224
17259
  sound_pain = "arachnid/pain.wav";
17225
17260
  sound_death = "arachnid/death.wav";
17226
17261
  sound_sight = "arachnid/sight.wav";
17262
+ context.soundIndex(sound_step);
17263
+ context.soundIndex(sound_charge);
17264
+ context.soundIndex(sound_melee);
17265
+ context.soundIndex(sound_melee_hit);
17266
+ context.soundIndex(sound_pain);
17267
+ context.soundIndex(sound_death);
17268
+ context.soundIndex(sound_sight);
17269
+ context.soundIndex("misc/udeath.wav");
17227
17270
  self.model = "models/monsters/arachnid/tris.md2";
17228
17271
  self.mins = { x: -48, y: -48, z: -20 };
17229
17272
  self.maxs = { x: 48, y: 48, z: 48 };
@@ -17240,7 +17283,7 @@ function SP_monster_arachnid(self, context) {
17240
17283
  walk: arachnid_walk,
17241
17284
  run: arachnid_run,
17242
17285
  attack: arachnid_attack,
17243
- sight: (e, o) => context.engine.sound?.(e, CHAN_VOICE, sound_sight, 1, ATTN_NORM2, 0),
17286
+ sight: (e, o) => context.engine.sound?.(e, SoundChannel.Voice, sound_sight, 1, ATTN_NORM, 0),
17244
17287
  scale: MODEL_SCALE,
17245
17288
  aiflags: self.monsterinfo?.aiflags || 0
17246
17289
  };
@@ -19513,6 +19556,9 @@ function createGame(imports, engine, options) {
19513
19556
  sound(entity, channel, sound, volume, attenuation, timeofs) {
19514
19557
  entities.sound(entity, channel, sound, volume, attenuation, timeofs);
19515
19558
  },
19559
+ soundIndex(sound) {
19560
+ return entities.soundIndex(sound);
19561
+ },
19516
19562
  centerprintf(entity, message) {
19517
19563
  engine.centerprintf?.(entity, message);
19518
19564
  },