quake2ts 0.0.70 → 0.0.72

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 (36) hide show
  1. package/package.json +1 -1
  2. package/packages/client/dist/browser/index.global.js +1 -1
  3. package/packages/client/dist/browser/index.global.js.map +1 -1
  4. package/packages/client/dist/cjs/index.cjs.map +1 -1
  5. package/packages/client/dist/esm/index.js.map +1 -1
  6. package/packages/client/dist/tsconfig.tsbuildinfo +1 -1
  7. package/packages/engine/dist/browser/index.global.js +14 -14
  8. package/packages/engine/dist/browser/index.global.js.map +1 -1
  9. package/packages/engine/dist/cjs/index.cjs +84 -0
  10. package/packages/engine/dist/cjs/index.cjs.map +1 -1
  11. package/packages/engine/dist/esm/index.js +81 -0
  12. package/packages/engine/dist/esm/index.js.map +1 -1
  13. package/packages/engine/dist/tsconfig.tsbuildinfo +1 -1
  14. package/packages/engine/dist/types/assets/manager.d.ts +4 -1
  15. package/packages/engine/dist/types/assets/manager.d.ts.map +1 -1
  16. package/packages/engine/dist/types/assets/sprite.d.ts +23 -0
  17. package/packages/engine/dist/types/assets/sprite.d.ts.map +1 -0
  18. package/packages/engine/dist/types/index.d.ts +1 -0
  19. package/packages/engine/dist/types/index.d.ts.map +1 -1
  20. package/packages/game/dist/browser/index.global.js +1 -1
  21. package/packages/game/dist/browser/index.global.js.map +1 -1
  22. package/packages/game/dist/cjs/index.cjs +259 -40
  23. package/packages/game/dist/cjs/index.cjs.map +1 -1
  24. package/packages/game/dist/esm/index.js +259 -40
  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/entity.d.ts +4 -1
  28. package/packages/game/dist/types/entities/entity.d.ts.map +1 -1
  29. package/packages/game/dist/types/entities/funcs.d.ts.map +1 -1
  30. package/packages/game/dist/types/entities/lights.d.ts +3 -0
  31. package/packages/game/dist/types/entities/lights.d.ts.map +1 -0
  32. package/packages/game/dist/types/entities/paths.d.ts +3 -0
  33. package/packages/game/dist/types/entities/paths.d.ts.map +1 -0
  34. package/packages/game/dist/types/entities/spawn.d.ts.map +1 -1
  35. package/packages/game/dist/types/entities/utils.d.ts +5 -0
  36. package/packages/game/dist/types/entities/utils.d.ts.map +1 -1
@@ -634,6 +634,9 @@ var Entity = class {
634
634
  this.takedamage = false;
635
635
  this.dmg = 0;
636
636
  this.speed = 0;
637
+ this.accel = 0;
638
+ this.decel = 0;
639
+ this.height = 0;
637
640
  this.deadflag = 0 /* Alive */;
638
641
  this.count = 0;
639
642
  this.wait = 0;
@@ -714,6 +717,9 @@ var Entity = class {
714
717
  this.takedamage = false;
715
718
  this.dmg = 0;
716
719
  this.speed = 0;
720
+ this.accel = 0;
721
+ this.decel = 0;
722
+ this.height = 0;
717
723
  this.deadflag = 0 /* Alive */;
718
724
  this.count = 0;
719
725
  this.wait = 0;
@@ -795,6 +801,9 @@ var ENTITY_FIELD_METADATA = [
795
801
  { name: "takedamage", type: "boolean", save: true },
796
802
  { name: "dmg", type: "int", save: true },
797
803
  { name: "speed", type: "float", save: true },
804
+ { name: "accel", type: "float", save: true },
805
+ { name: "decel", type: "float", save: true },
806
+ { name: "height", type: "float", save: true },
798
807
  { name: "deadflag", type: "int", save: true },
799
808
  { name: "count", type: "int", save: true },
800
809
  { name: "wait", type: "float", save: true },
@@ -3032,17 +3041,9 @@ function door_go_down(door, context) {
3032
3041
  }
3033
3042
  const move = distance(door.origin, door.pos1);
3034
3043
  const speed = Math.min(door.speed, move);
3035
- door.velocity = {
3036
- x: (door.pos1.x - door.origin.x) / distance(door.pos1, door.origin) * door.speed,
3037
- y: (door.pos1.y - door.origin.y) / distance(door.pos1, door.origin) * door.speed,
3038
- z: (door.pos1.z - door.origin.z) / distance(door.pos1, door.origin) * door.speed
3039
- };
3044
+ door.velocity = scaleVec3(normalizeVec3(subtractVec3(door.pos1, door.origin)), speed);
3040
3045
  if (move <= door.speed * 0.1) {
3041
- door.velocity = {
3042
- x: (door.pos1.x - door.origin.x) / 0.1,
3043
- y: (door.pos1.y - door.origin.y) / 0.1,
3044
- z: (door.pos1.z - door.origin.z) / 0.1
3045
- };
3046
+ door.velocity = scaleVec3(subtractVec3(door.pos1, door.origin), 10);
3046
3047
  }
3047
3048
  context?.scheduleThink(door, context.timeSeconds + 0.1);
3048
3049
  }
@@ -3055,48 +3056,26 @@ function door_go_up(door, context) {
3055
3056
  return;
3056
3057
  }
3057
3058
  const move = distance(door.origin, door.pos2);
3058
- door.velocity = {
3059
- x: (door.pos2.x - door.origin.x) / distance(door.pos2, door.origin) * door.speed,
3060
- y: (door.pos2.y - door.origin.y) / distance(door.pos2, door.origin) * door.speed,
3061
- z: (door.pos2.z - door.origin.z) / distance(door.pos2, door.origin) * door.speed
3062
- };
3059
+ door.velocity = scaleVec3(normalizeVec3(subtractVec3(door.pos2, door.origin)), door.speed);
3063
3060
  if (move <= door.speed * 0.1) {
3064
- door.velocity = {
3065
- x: (door.pos2.x - door.origin.x) / 0.1,
3066
- y: (door.pos2.y - door.origin.y) / 0.1,
3067
- z: (door.pos2.z - door.origin.z) / 0.1
3068
- };
3061
+ door.velocity = scaleVec3(subtractVec3(door.pos2, door.origin), 10);
3069
3062
  }
3070
3063
  context?.scheduleThink(door, context.timeSeconds + 0.1);
3071
3064
  }
3072
3065
  var func_door = (entity, context) => {
3073
3066
  entity.movedir = setMovedir(entity.angles);
3074
- if (!entity.speed) {
3075
- entity.speed = 100;
3076
- }
3077
- if (!entity.wait) {
3078
- entity.wait = 3;
3079
- }
3080
- if (!entity.lip) {
3081
- entity.lip = 8;
3082
- }
3083
- if (!entity.dmg) {
3084
- entity.dmg = 2;
3085
- }
3086
- if (!entity.health) {
3087
- entity.health = 0;
3088
- }
3067
+ if (!entity.speed) entity.speed = 100;
3068
+ if (!entity.wait) entity.wait = 3;
3069
+ if (!entity.lip) entity.lip = 8;
3070
+ if (!entity.dmg) entity.dmg = 2;
3071
+ if (!entity.health) entity.health = 0;
3089
3072
  entity.solid = 3 /* Bsp */;
3090
3073
  entity.movetype = 2 /* Push */;
3091
3074
  entity.blocked = door_blocked;
3092
3075
  entity.state = 2 /* Closed */;
3093
3076
  entity.pos1 = { ...entity.origin };
3094
3077
  const move = entity.movedir.x * (Math.abs(entity.maxs.x - entity.mins.x) - entity.lip) + entity.movedir.y * (Math.abs(entity.maxs.y - entity.mins.y) - entity.lip) + entity.movedir.z * (Math.abs(entity.maxs.z - entity.mins.z) - entity.lip);
3095
- entity.pos2 = {
3096
- x: entity.pos1.x + entity.movedir.x * move,
3097
- y: entity.pos1.y + entity.movedir.y * move,
3098
- z: entity.pos1.z + entity.movedir.z * move
3099
- };
3078
+ entity.pos2 = addVec3(entity.pos1, scaleVec3(entity.movedir, move));
3100
3079
  entity.use = (self) => {
3101
3080
  if (self.state !== 2 /* Closed */) return;
3102
3081
  self.state = 1 /* Opening */;
@@ -3111,9 +3090,247 @@ var func_button = (entity, context) => {
3111
3090
  context.entities.useTargets(self, self);
3112
3091
  };
3113
3092
  };
3093
+ var TRAIN_START_ON = 1;
3094
+ var TRAIN_BLOCK_STOPS = 4;
3095
+ function train_blocked(self, other) {
3096
+ if (other && other.takedamage) {
3097
+ other.health -= self.dmg || 0;
3098
+ }
3099
+ if (!(self.spawnflags & TRAIN_BLOCK_STOPS)) {
3100
+ return;
3101
+ }
3102
+ self.velocity = { x: 0, y: 0, z: 0 };
3103
+ self.nextthink = 0;
3104
+ }
3105
+ function train_wait(self, context) {
3106
+ if (self.target_ent && self.target_ent.pathtarget) {
3107
+ context.useTargets(self.target_ent, self);
3108
+ }
3109
+ if (self.target_ent && self.target_ent.target) {
3110
+ const next = context.pickTarget(self.target_ent.target);
3111
+ if (!next) return;
3112
+ self.target_ent = next;
3113
+ const dist = distance(self.origin, next.origin);
3114
+ const speed = self.speed || 100;
3115
+ const time = dist / speed;
3116
+ const dir = normalizeVec3(subtractVec3(next.origin, self.origin));
3117
+ self.velocity = scaleVec3(dir, speed);
3118
+ self.think = train_next;
3119
+ context.scheduleThink(self, context.timeSeconds + time);
3120
+ }
3121
+ }
3122
+ function train_next(self, context) {
3123
+ self.velocity = { x: 0, y: 0, z: 0 };
3124
+ if (self.target_ent) {
3125
+ self.origin = { ...self.target_ent.origin };
3126
+ }
3127
+ const wait = self.wait || 0;
3128
+ if (wait > 0) {
3129
+ self.think = train_wait;
3130
+ context.scheduleThink(self, context.timeSeconds + wait);
3131
+ } else {
3132
+ train_wait(self, context);
3133
+ }
3134
+ }
3135
+ function train_find(self, context) {
3136
+ const target = context.pickTarget(self.target);
3137
+ if (!target) return;
3138
+ self.target_ent = target;
3139
+ self.origin = { ...target.origin };
3140
+ if (self.spawnflags & TRAIN_START_ON) {
3141
+ train_wait(self, context);
3142
+ } else {
3143
+ self.use = (ent) => {
3144
+ if (ent.velocity.x !== 0 || ent.velocity.y !== 0 || ent.velocity.z !== 0) return;
3145
+ train_wait(ent, context);
3146
+ };
3147
+ }
3148
+ }
3149
+ var func_train = (entity, context) => {
3150
+ entity.solid = 3 /* Bsp */;
3151
+ entity.movetype = 2 /* Push */;
3152
+ entity.blocked = train_blocked;
3153
+ if (!entity.speed) entity.speed = 100;
3154
+ if (!entity.dmg) entity.dmg = 2;
3155
+ entity.think = (self) => train_find(self, context.entities);
3156
+ context.entities.scheduleThink(entity, context.entities.timeSeconds + 0.1);
3157
+ };
3158
+ function plat_go_down(ent, context) {
3159
+ if (vec3Equals(ent.origin, ent.pos2)) {
3160
+ ent.state = 1 /* Down */;
3161
+ ent.velocity = { x: 0, y: 0, z: 0 };
3162
+ return;
3163
+ }
3164
+ const move = distance(ent.origin, ent.pos2);
3165
+ ent.velocity = scaleVec3(normalizeVec3(subtractVec3(ent.pos2, ent.origin)), ent.speed);
3166
+ if (move <= ent.speed * 0.1) {
3167
+ ent.velocity = scaleVec3(subtractVec3(ent.pos2, ent.origin), 10);
3168
+ }
3169
+ context.scheduleThink(ent, context.timeSeconds + 0.1);
3170
+ }
3171
+ function plat_go_up(ent, context) {
3172
+ if (vec3Equals(ent.origin, ent.pos1)) {
3173
+ ent.state = 0 /* Up */;
3174
+ ent.velocity = { x: 0, y: 0, z: 0 };
3175
+ if (!(ent.spawnflags & 1)) {
3176
+ ent.think = plat_wait_top;
3177
+ context.scheduleThink(ent, context.timeSeconds + ent.wait);
3178
+ }
3179
+ return;
3180
+ }
3181
+ const move = distance(ent.origin, ent.pos1);
3182
+ ent.velocity = scaleVec3(normalizeVec3(subtractVec3(ent.pos1, ent.origin)), ent.speed);
3183
+ if (move <= ent.speed * 0.1) {
3184
+ ent.velocity = scaleVec3(subtractVec3(ent.pos1, ent.origin), 10);
3185
+ }
3186
+ context.scheduleThink(ent, context.timeSeconds + 0.1);
3187
+ }
3188
+ function plat_wait_top(ent, context) {
3189
+ ent.state = 3 /* GoingDown */;
3190
+ ent.think = plat_go_down;
3191
+ plat_go_down(ent, context);
3192
+ }
3193
+ var func_plat = (entity, context) => {
3194
+ entity.movedir = setMovedir(entity.angles);
3195
+ if (!entity.speed) entity.speed = 200;
3196
+ if (!entity.accel) entity.accel = 500;
3197
+ if (!entity.decel) entity.decel = 500;
3198
+ if (!entity.wait) entity.wait = 3;
3199
+ if (!entity.lip) entity.lip = 8;
3200
+ if (!entity.height) entity.height = entity.size.z - entity.lip;
3201
+ entity.solid = 3 /* Bsp */;
3202
+ entity.movetype = 2 /* Push */;
3203
+ entity.pos1 = { ...entity.origin };
3204
+ entity.pos2 = {
3205
+ x: entity.origin.x,
3206
+ y: entity.origin.y,
3207
+ z: entity.origin.z - entity.height
3208
+ };
3209
+ entity.origin = { ...entity.pos2 };
3210
+ entity.state = 1 /* Down */;
3211
+ entity.blocked = (self, other) => {
3212
+ if (other && other.takedamage) {
3213
+ other.health -= self.dmg || 2;
3214
+ }
3215
+ if (self.state === 2 /* GoingUp */) {
3216
+ self.state = 3 /* GoingDown */;
3217
+ self.think = (e) => plat_go_down(e, context.entities);
3218
+ } else if (self.state === 3 /* GoingDown */) {
3219
+ self.state = 2 /* GoingUp */;
3220
+ self.think = (e) => plat_go_up(e, context.entities);
3221
+ }
3222
+ };
3223
+ entity.use = (self) => {
3224
+ if (self.state === 1 /* Down */) {
3225
+ self.state = 2 /* GoingUp */;
3226
+ self.think = (e) => plat_go_up(e, context.entities);
3227
+ context.entities.scheduleThink(self, context.entities.timeSeconds + 0.1);
3228
+ }
3229
+ };
3230
+ const trigger = context.entities.spawn();
3231
+ trigger.classname = "plat_trigger";
3232
+ trigger.movetype = 0 /* None */;
3233
+ trigger.solid = 1 /* Trigger */;
3234
+ trigger.mins = { x: entity.mins.x + 25, y: entity.mins.y + 25, z: entity.maxs.z };
3235
+ trigger.maxs = { x: entity.maxs.x - 25, y: entity.maxs.y - 25, z: entity.maxs.z + 8 };
3236
+ trigger.touch = (t, other) => {
3237
+ if (entity.state === 1 /* Down */) {
3238
+ entity.use?.(entity, other, other);
3239
+ }
3240
+ };
3241
+ };
3242
+ var func_rotating = (entity, context) => {
3243
+ entity.solid = 3 /* Bsp */;
3244
+ entity.movetype = 2 /* Push */;
3245
+ if (!entity.speed) {
3246
+ entity.speed = 100;
3247
+ }
3248
+ if (entity.spawnflags & 4) {
3249
+ entity.avelocity = { x: entity.speed, y: 0, z: 0 };
3250
+ } else if (entity.spawnflags & 8) {
3251
+ entity.avelocity = { x: 0, y: entity.speed, z: 0 };
3252
+ } else {
3253
+ entity.avelocity = { x: 0, y: 0, z: entity.speed };
3254
+ }
3255
+ if (entity.dmg) {
3256
+ entity.blocked = (self, other) => {
3257
+ if (other && other.takedamage) {
3258
+ other.health -= self.dmg;
3259
+ }
3260
+ };
3261
+ }
3262
+ };
3263
+ var func_conveyor = (entity, context) => {
3264
+ entity.solid = 3 /* Bsp */;
3265
+ if (!entity.speed) entity.speed = 100;
3266
+ entity.movetype = 0 /* None */;
3267
+ };
3268
+ var func_water = (entity, context) => {
3269
+ entity.solid = 3 /* Bsp */;
3270
+ entity.movetype = 2 /* Push */;
3271
+ };
3272
+ var func_explosive = (entity, context) => {
3273
+ entity.solid = 3 /* Bsp */;
3274
+ entity.movetype = 2 /* Push */;
3275
+ if (!entity.health) entity.health = 100;
3276
+ if (!entity.dmg) entity.dmg = 120;
3277
+ entity.takedamage = true;
3278
+ entity.die = (self, inflictor, attacker, damage) => {
3279
+ context.entities.free(self);
3280
+ };
3281
+ };
3282
+ var func_killbox = (entity, context) => {
3283
+ entity.solid = 0 /* Not */;
3284
+ entity.movetype = 0 /* None */;
3285
+ entity.use = (self) => {
3286
+ context.entities.killBox(self);
3287
+ };
3288
+ };
3289
+ var func_areaportal = (entity, context) => {
3290
+ entity.use = (self, other, activator) => {
3291
+ entity.state = entity.state === 0 /* Open */ ? 2 /* Closed */ : 0 /* Open */;
3292
+ };
3293
+ };
3114
3294
  function registerFuncSpawns(registry) {
3115
3295
  registry.register("func_door", func_door);
3116
3296
  registry.register("func_button", func_button);
3297
+ registry.register("func_train", func_train);
3298
+ registry.register("func_plat", func_plat);
3299
+ registry.register("func_rotating", func_rotating);
3300
+ registry.register("func_conveyor", func_conveyor);
3301
+ registry.register("func_water", func_water);
3302
+ registry.register("func_explosive", func_explosive);
3303
+ registry.register("func_killbox", func_killbox);
3304
+ registry.register("func_areaportal", func_areaportal);
3305
+ }
3306
+
3307
+ // src/entities/paths.ts
3308
+ function pathCornerTouch(self, other) {
3309
+ if (other !== self.owner) {
3310
+ return;
3311
+ }
3312
+ }
3313
+ function registerPathSpawns(registry) {
3314
+ registry.register("path_corner", (entity) => {
3315
+ entity.solid = 0 /* Not */;
3316
+ entity.touch = pathCornerTouch;
3317
+ });
3318
+ }
3319
+
3320
+ // src/entities/lights.ts
3321
+ function registerLightSpawns(registry) {
3322
+ registry.register("light", (entity) => {
3323
+ entity.movetype = 0 /* None */;
3324
+ entity.solid = 0 /* Not */;
3325
+ });
3326
+ registry.register("light_mine1", (entity) => {
3327
+ entity.movetype = 0 /* None */;
3328
+ entity.solid = 0 /* Not */;
3329
+ });
3330
+ registry.register("light_mine2", (entity) => {
3331
+ entity.movetype = 0 /* None */;
3332
+ entity.solid = 0 /* Not */;
3333
+ });
3117
3334
  }
3118
3335
 
3119
3336
  // src/entities/spawn.ts
@@ -3328,6 +3545,8 @@ function registerDefaultSpawns(game, registry) {
3328
3545
  registerMiscSpawns(registry);
3329
3546
  registerItemSpawns(game, registry);
3330
3547
  registerFuncSpawns(registry);
3548
+ registerPathSpawns(registry);
3549
+ registerLightSpawns(registry);
3331
3550
  }
3332
3551
  function createDefaultSpawnRegistry(game) {
3333
3552
  const registry = new SpawnRegistry();