diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..d163863 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +build/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..d39e7ec --- /dev/null +++ b/.prettierrc @@ -0,0 +1,20 @@ +{ + "arrowParens": "always", + "bracketSpacing": true, + "cursorOffset": -1, + "endOfLine": "lf", + "htmlWhitespaceSensitivity": "css", + "insertPragma": false, + "jsxBracketSameLine": false, + "jsxSingleQuote": false, + "printWidth": 140, + "proseWrap": "preserve", + "quoteProps": "as-needed", + "requirePragma": false, + "semi": true, + "singleQuote": false, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false, + "vueIndentScriptAndStyle": false +} diff --git a/README.md b/README.md index 563f4a7..c680b71 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ ## demo-interp + An experiemental project for interpolating TF2 SourceTV demo files. Normally a SourceTV demo has a Packet every 4 ticks, this fills out the ticks inbetween by interpolating between the Packets. -This may be pointless but there is a visible difference when using `cl_interp` values lower than ~60ms (4 / 66 ticks/s). - +This may be pointless but there is a visible difference when using `cl_interp` values lower than ~60ms (4 / 66 ticks/s). + ## usage + `yarn install` `yarn build` `cd test` -`node test-interp.js` \ No newline at end of file +`node test-interp.js` diff --git a/build/index.js b/build/index.js index fc2ec5f..818270d 100644 --- a/build/index.js +++ b/build/index.js @@ -12,7 +12,7 @@ function lerp(start, end, amount) { } function circleLerp(start, end, amount) { var shortestAngle = ((((end - start) % 360) + 540) % 360) - 180; - return start + (shortestAngle * amount) % 360; + return start + ((shortestAngle * amount) % 360); } function interpNumber(start, end, amount, lowValue, highValue) { if (lowValue === 0 && highValue === 360) { @@ -127,10 +127,7 @@ function interpEntity(start, end, amount) { return start; } function incrementEntityTicks(entity, amount) { - var names = [ - "m_nTickBase", - "m_flSimulationTime" - ]; + var names = ["m_nTickBase", "m_flSimulationTime"]; for (let prop of entity.props) { if (names.includes(prop.definition.name)) { prop.value = prop.value + amount; @@ -194,7 +191,7 @@ class InterpTransformer extends Parser_1.Parser { for (let e of p.entities) { if (p.removedEntities.includes(e.entityIndex)) { //console.log("packet includes removed ent"); - delete (lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`]); + delete lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`]; } // Store from entity for (const prop of e.props) { @@ -233,7 +230,7 @@ class InterpTransformer extends Parser_1.Parser { for (const index of newPacket.removedEntities) { for (let propIndex = Object.keys(lastKnownProps).length - 1; propIndex > 0; propIndex--) { if (Object.keys(lastKnownProps)[propIndex].startsWith(index.toString() + ":")) { - delete (lastKnownProps[Object.keys(lastKnownProps)[propIndex]]); + delete lastKnownProps[Object.keys(lastKnownProps)[propIndex]]; } } } @@ -318,7 +315,7 @@ class InterpTransformer extends Parser_1.Parser { // 0 0.25 1.0 0.25 // 0.25 0.5 1.0 1/3 // 0.5 0.75 1.0 0.5 - var interp = 0.25 * (1 / (1 - (0.25 * i))); + var interp = 0.25 * (1 / (1 - 0.25 * i)); entity = interpEntity(entity, newEntity, interp); } } diff --git a/build/index.js.map b/build/index.js.map index fa283bc..d15b4cb 100644 --- a/build/index.js.map +++ b/build/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 369fe0d..92bc726 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ }, "scripts": { "postinstall": "patch-package", - "build": "tsc" + "build": "tsc", + "format": "prettier --write ." } -} \ No newline at end of file +} diff --git a/src/index.ts b/src/index.ts index 45612be..1dbe991 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,398 +1,406 @@ -import { BitStream } from 'bit-buffer'; -import { readFileSync, writeFileSync } from 'fs'; -import { DynamicBitStream } from '@demostf/demo.js/build/DynamicBitStream'; -import { Message, MessageType, PacketMessage } from '@demostf/demo.js/build/Data/Message'; -import { Parser } from '@demostf/demo.js/build/Parser'; -import { Encoder } from '@demostf/demo.js/build/Encoder'; -import { PacketEntity } from '@demostf/demo.js/build/Data/PacketEntity'; +import { BitStream } from "bit-buffer"; +import { readFileSync, writeFileSync } from "fs"; +import { DynamicBitStream } from "@demostf/demo.js/build/DynamicBitStream"; +import { Message, MessageType, PacketMessage } from "@demostf/demo.js/build/Data/Message"; +import { Parser } from "@demostf/demo.js/build/Parser"; +import { Encoder } from "@demostf/demo.js/build/Encoder"; +import { PacketEntity } from "@demostf/demo.js/build/Data/PacketEntity"; function lerp(start: number, end: number, amount: number) { - return start + (end - start) * amount; + return start + (end - start) * amount; } function circleLerp(start: number, end: number, amount: number) { - var shortestAngle = ((((end - start) % 360) + 540) % 360) - 180; - return start + (shortestAngle * amount) % 360; + var shortestAngle = ((((end - start) % 360) + 540) % 360) - 180; + return start + ((shortestAngle * amount) % 360); } function interpNumber(start: number, end: number, amount: number, lowValue: number, highValue: number) { - if (lowValue === 0 && highValue === 360) { - // angles clamped to 0-360 - start = circleLerp(start, end, amount); - } else { - start = lerp(start, end, amount); - } - return start; + if (lowValue === 0 && highValue === 360) { + // angles clamped to 0-360 + start = circleLerp(start, end, amount); + } else { + start = lerp(start, end, amount); + } + return start; } // Props to interpolate, // most of these are probably not needed const propNames = [ - // These are in a bunch of tables - "m_vecOrigin", + // These are in a bunch of tables + "m_vecOrigin", - // DT_BaseEntity - "m_angRotation", - "m_flElasticity", - "m_flShadowCastDistance", + // DT_BaseEntity + "m_angRotation", + "m_flElasticity", + "m_flShadowCastDistance", - // DT_BaseAnimating - "m_vecForce", - "m_flModelScale", - "m_flFadeScale", + // DT_BaseAnimating + "m_vecForce", + "m_flModelScale", + "m_flFadeScale", - // DT_BasePlayer - "m_flMaxspeed", - "m_flFOVTime", + // DT_BasePlayer + "m_flMaxspeed", + "m_flFOVTime", - // DT_TFLocalPlayerExclusive - // DT_TFNonLocalPlayerExclusive - "m_vecOrigin[2]", - "m_angEyeAngles[0]", - "m_angEyeAngles[1]", + // DT_TFLocalPlayerExclusive + // DT_TFNonLocalPlayerExclusive + "m_vecOrigin[2]", + "m_angEyeAngles[0]", + "m_angEyeAngles[1]", - // DT_LocalPlayerExclusive - "m_vecViewOffset[0]", - "m_vecViewOffset[1]", - "m_vecViewOffset[2]", - "m_vecBaseVelocity", - "m_vecVelocity[0]", - "m_vecVelocity[1]", - "m_vecVelocity[2]", + // DT_LocalPlayerExclusive + "m_vecViewOffset[0]", + "m_vecViewOffset[1]", + "m_vecViewOffset[2]", + "m_vecBaseVelocity", + "m_vecVelocity[0]", + "m_vecVelocity[1]", + "m_vecVelocity[2]", - // DT_LOCAL - "m_flDucktime", - "m_flJumpTime", - "m_flDuckJumpTime", - "m_flFallVelocity", - "m_flNextAttack", - "m_vecPunchAngle", - "m_vecPunchAngleVel", + // DT_LOCAL + "m_flDucktime", + "m_flJumpTime", + "m_flDuckJumpTime", + "m_flFallVelocity", + "m_flNextAttack", + "m_vecPunchAngle", + "m_vecPunchAngleVel", - // DT_TFPlayerShared - "m_flDuckTimer", - "m_flMovementStunTime", - "m_flFirstPrimaryAttack", - "m_flEnergyDrinkMeter", - "m_flHypeMeter", - "m_flChargeMeter", - "m_flInvisChangeCompleteTime", - "m_flCloakMeter", - "m_flSpyTranqBuffDuration", - "m_flRuneCharge", - "m_flHolsterAnimTime", + // DT_TFPlayerShared + "m_flDuckTimer", + "m_flMovementStunTime", + "m_flFirstPrimaryAttack", + "m_flEnergyDrinkMeter", + "m_flHypeMeter", + "m_flChargeMeter", + "m_flInvisChangeCompleteTime", + "m_flCloakMeter", + "m_flSpyTranqBuffDuration", + "m_flRuneCharge", + "m_flHolsterAnimTime", - // DT_CollisionProperty - "m_vecMins", - "m_vecMaxs", - "m_vecMinsPreScaled", - "m_vecMaxsPreScaled", - "m_vecSpecifiedSurroundingMins", - "m_vecSpecifiedSurroundingMaxs", - "m_vecSpecifiedSurroundingMinsPreScaled", - "m_vecSpecifiedSurroundingMaxsPreScaled", + // DT_CollisionProperty + "m_vecMins", + "m_vecMaxs", + "m_vecMinsPreScaled", + "m_vecMaxsPreScaled", + "m_vecSpecifiedSurroundingMins", + "m_vecSpecifiedSurroundingMaxs", + "m_vecSpecifiedSurroundingMinsPreScaled", + "m_vecSpecifiedSurroundingMaxsPreScaled", ]; const vecKeys = ["x", "y", "z"]; -const EF_NOINTERP = 8 +const EF_NOINTERP = 8; function interpEntity(start: PacketEntity, end: PacketEntity, amount: number): PacketEntity { - for (let prop1 of start.props) { - if (!propNames.includes(prop1.definition.name)) continue; + for (let prop1 of start.props) { + if (!propNames.includes(prop1.definition.name)) continue; - for (let prop2 of end.props) { - if (!propNames.includes(prop2.definition.name)) continue; - if (prop1.definition.fullName !== prop2.definition.fullName) continue; + for (let prop2 of end.props) { + if (!propNames.includes(prop2.definition.name)) continue; + if (prop1.definition.fullName !== prop2.definition.fullName) continue; - if (typeof prop1.value === "number") { - prop1.value = interpNumber(prop1.value as number, prop2.value as number, amount, prop1.definition.lowValue, prop1.definition.highValue); - break; - } + if (typeof prop1.value === "number") { + prop1.value = interpNumber( + prop1.value as number, + prop2.value as number, + amount, + prop1.definition.lowValue, + prop1.definition.highValue + ); + break; + } - // Interp vectors - if (typeof prop1.value === "object") { - if (Object.keys(prop1.value).length !== 3) continue; - if (Object.keys(prop2.value).length !== 3) continue; + // Interp vectors + if (typeof prop1.value === "object") { + if (Object.keys(prop1.value).length !== 3) continue; + if (Object.keys(prop2.value).length !== 3) continue; - // Check x,y,z keys - var cont = false; - for (const key of vecKeys) { - if ( - !Object.keys(prop1.value).includes(key) || - !Object.keys(prop2.value).includes(key) || - typeof prop1.value[key] !== "number" || - typeof prop2.value[key] !== "number" - ) { - cont = true; - break; - } - } - if (cont) continue; - - for (const key of vecKeys) { - prop1.value[key] = interpNumber(prop1.value[key] as number, prop2.value[key] as number, amount, prop1.definition.lowValue, prop1.definition.highValue); - } - break; - } + // Check x,y,z keys + var cont = false; + for (const key of vecKeys) { + if ( + !Object.keys(prop1.value).includes(key) || + !Object.keys(prop2.value).includes(key) || + typeof prop1.value[key] !== "number" || + typeof prop2.value[key] !== "number" + ) { + cont = true; + break; + } } - } + if (cont) continue; - return start; + for (const key of vecKeys) { + prop1.value[key] = interpNumber( + prop1.value[key] as number, + prop2.value[key] as number, + amount, + prop1.definition.lowValue, + prop1.definition.highValue + ); + } + break; + } + } + } + + return start; } function incrementEntityTicks(entity: PacketEntity, amount: number): PacketEntity { - var names = [ - "m_nTickBase", - "m_flSimulationTime" - ]; - for (let prop of entity.props) { - if (names.includes(prop.definition.name)) { - prop.value = (prop.value as number) + amount; - } + var names = ["m_nTickBase", "m_flSimulationTime"]; + for (let prop of entity.props) { + if (names.includes(prop.definition.name)) { + prop.value = (prop.value as number) + amount; } - return entity; + } + return entity; } class InterpTransformer extends Parser { - private readonly encoder: Encoder; - private readonly maxVel: number; + private readonly encoder: Encoder; + private readonly maxVel: number; - constructor(sourceStream: BitStream, targetStream: BitStream, maxVel: number = 3500) { - super(sourceStream); - this.encoder = new Encoder(targetStream); - this.maxVel = maxVel; + constructor(sourceStream: BitStream, targetStream: BitStream, maxVel: number = 3500) { + super(sourceStream); + this.encoder = new Encoder(targetStream); + this.maxVel = maxVel; + } + + writeMessage(message: Message) { + this.parserState.handleMessage(message); + if (message.type === MessageType.Packet) { + for (const packet of message.packets) { + this.parserState.handlePacket(packet); + } } - writeMessage(message: Message) { - this.parserState.handleMessage(message); - if (message.type === MessageType.Packet) { - for (const packet of message.packets) { - this.parserState.handlePacket(packet); - } - } + this.encoder.writeMessage(message); + } - this.encoder.writeMessage(message); - } + public transform() { + const header = this.getHeader(); + header.frames *= 4; + this.encoder.encodeHeader(header); - public transform() { - const header = this.getHeader(); - header.frames *= 4; - this.encoder.encodeHeader(header); + var prevProgressPrint = 0; + var prevPacketMessage = null; + var synced = false; + var skippedFirst = false; + var lastKnownProps = {}; + var tickInterval = 0.015; - var prevProgressPrint = 0; - var prevPacketMessage = null; - var synced = false; - var skippedFirst = false; - var lastKnownProps = {}; - var tickInterval = 0.015; + for (let message of this.iterateMessages()) { + if (message.type === MessageType.SyncTick) { + //
+ // + // + // + // + // + // + // | tick 4, the fat network packet - probably contains initial states of everything + // | tick 8, delta packets start here?; i think we only want to manipulate these ones + // ... + // + synced = true; + } - for (let message of this.iterateMessages()) { - if (message.type === MessageType.SyncTick) { - //
- // - // - // - // - // - // - // | tick 4, the fat network packet - probably contains initial states of everything - // | tick 8, delta packets start here?; i think we only want to manipulate these ones - // ... - // - synced = true; + if (synced && skippedFirst && message.type === MessageType.Packet) { + if (prevPacketMessage) { + message.sequenceIn = prevPacketMessage.sequenceIn + 4; + message.sequenceOut = prevPacketMessage.sequenceOut + 4; + + prevPacketMessage.packets = prevPacketMessage.packets.filter((value, index, arr) => { + return ["netTick", "packetEntities"].includes(value.packetType); + }); + + // Packets only contain props if they change during that tick, + // store last known props and restore previously stored ones. + for (let p of prevPacketMessage.packets) { + if (p.packetType !== "packetEntities") { + continue; } - if (synced && skippedFirst && message.type === MessageType.Packet) { - if (prevPacketMessage) { - message.sequenceIn = prevPacketMessage.sequenceIn + 4; - message.sequenceOut = prevPacketMessage.sequenceOut + 4; + for (let e of p.entities as PacketEntity[]) { + if (p.removedEntities.includes(e.entityIndex)) { + //console.log("packet includes removed ent"); + delete lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`]; + } - prevPacketMessage.packets = prevPacketMessage.packets.filter((value, index, arr) => { - return ["netTick", "packetEntities"].includes(value.packetType); - }); + // Store from entity + for (const prop of e.props) { + if (!propNames.includes(prop.definition.name)) continue; - // Packets only contain props if they change during that tick, - // store last known props and restore previously stored ones. - for (let p of prevPacketMessage.packets) { - if (p.packetType !== "packetEntities") { - continue; - } + // Using just entityIndex will sometimes fail + // for some reason, maybe they are recycled. + // This happens even with the newPacket.removedEntities check + // later on... + if (lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`] == null) { + lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`] = {}; + } + lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`][prop.definition.fullName] = prop; + } - for (let e of p.entities as PacketEntity[]) { - if (p.removedEntities.includes(e.entityIndex)) { - //console.log("packet includes removed ent"); - delete (lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`]); - } + // Restore props later on after checking what props the future entities have + } + } - // Store from entity - for (const prop of e.props) { - if (!propNames.includes(prop.definition.name)) continue; + // Add 3 intepolated ticks + for (let i = 0; i < 3; i++) { + prevPacketMessage.tick++; + prevPacketMessage.sequenceIn++; + prevPacketMessage.sequenceOut++; - // Using just entityIndex will sometimes fail - // for some reason, maybe they are recycled. - // This happens even with the newPacket.removedEntities check - // later on... - if (lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`] == null) { - lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`] = {}; - } - lastKnownProps[`${e.entityIndex}:${e.serverClass.id}`][prop.definition.fullName] = prop; - } + for (let packet of prevPacketMessage.packets) { + if (packet.packetType === "netTick") { + packet.tick++; + tickInterval = packet.frameTime / 100000; + continue; + } - // Restore props later on after checking what props the future entities have - } + // packetEntities + for (let entity of packet.entities as PacketEntity[]) { + // Loop through new message and interp + for (let newPacket of message.packets) { + if (newPacket.packetType !== "packetEntities") { + continue; + } + + for (const index of newPacket.removedEntities) { + for (let propIndex = Object.keys(lastKnownProps).length - 1; propIndex > 0; propIndex--) { + if (Object.keys(lastKnownProps)[propIndex].startsWith(index.toString() + ":")) { + delete lastKnownProps[Object.keys(lastKnownProps)[propIndex]]; + } + } + } + + if (newPacket.removedEntities.includes(entity.entityIndex)) { + continue; + } + + for (let newEntity of newPacket.entities) { + if (newEntity.entityIndex !== entity.entityIndex) { + continue; } - // Add 3 intepolated ticks - for (let i = 0; i < 3; i++) { - prevPacketMessage.tick++; - prevPacketMessage.sequenceIn++; - prevPacketMessage.sequenceOut++; + if (newEntity.serverClass.id !== entity.serverClass.id) { + continue; + } - for (let packet of prevPacketMessage.packets) { - if (packet.packetType === "netTick") { - packet.tick++; - tickInterval = packet.frameTime / 100000; - continue; - } + entity = incrementEntityTicks(entity, 1); + newEntity = incrementEntityTicks(newEntity, 1); - // packetEntities - for (let entity of packet.entities as PacketEntity[]) { + // Don't interp if new entity has EF_NOINTERP flag + var m_fEffects = newEntity.getPropValue("DT_BaseEntity.m_fEffects"); + if (m_fEffects !== null) { + if (((m_fEffects as number) & EF_NOINTERP) === EF_NOINTERP) { + break; + } + } - // Loop through new message and interp - for (let newPacket of message.packets) { - if (newPacket.packetType !== "packetEntities") { - continue; - } + // Check for maxVel + if (lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`] != null) { + var lastOrigin = null; + var lastOriginZ = null; + var newOrigin = null; + var newOriginZ = null; - for (const index of newPacket.removedEntities) { - for (let propIndex = Object.keys(lastKnownProps).length - 1; propIndex > 0; propIndex--) { - if (Object.keys(lastKnownProps)[propIndex].startsWith(index.toString() + ":")) { - delete (lastKnownProps[Object.keys(lastKnownProps)[propIndex]]); - } - } - } + for (const p of newEntity.props) { + if (p.definition.name === "m_vecOrigin") { + newOrigin = p.value; + if (lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][p.definition.fullName] != null) { + lastOrigin = lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][p.definition.fullName].value; + } + } else if (p.definition.name === "m_vecOrigin[2]") { + newOriginZ = p.value; + if (lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][p.definition.fullName] != null) { + lastOriginZ = lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][p.definition.fullName].value; + } + } + } - if (newPacket.removedEntities.includes(entity.entityIndex)) { - continue; - } - - for (let newEntity of newPacket.entities) { - if (newEntity.entityIndex !== entity.entityIndex) { - continue; - } - - if (newEntity.serverClass.id !== entity.serverClass.id) { - continue; - } - - entity = incrementEntityTicks(entity, 1); - newEntity = incrementEntityTicks(newEntity, 1); - - // Don't interp if new entity has EF_NOINTERP flag - var m_fEffects = newEntity.getPropValue("DT_BaseEntity.m_fEffects"); - if (m_fEffects !== null) { - if (((m_fEffects as number) & EF_NOINTERP) === EF_NOINTERP) { - break; - } - } - - // Check for maxVel - if (lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`] != null) { - var lastOrigin = null; - var lastOriginZ = null; - var newOrigin = null; - var newOriginZ = null; - - for (const p of newEntity.props) { - if (p.definition.name === "m_vecOrigin") { - newOrigin = p.value; - if (lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][p.definition.fullName] != null) { - lastOrigin = lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][p.definition.fullName].value; - } - } else if (p.definition.name === "m_vecOrigin[2]") { - newOriginZ = p.value; - if (lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][p.definition.fullName] != null) { - lastOriginZ = lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][p.definition.fullName].value; - } - } - } - - if (lastOrigin != null && newOrigin != null) { - if (lastOriginZ) { - lastOrigin.z = lastOriginZ; - } - if (newOriginZ) { - newOrigin.z = newOriginZ; - } - - for (let axis of vecKeys) { - var dist = newOrigin[axis] - lastOrigin[axis]; - if (dist > this.maxVel * tickInterval * 4) { - //console.log(`Entity ${newEntity.serverClass.name} (${newEntity.entityIndex}) moved over maxvel (${dist} > ${this.maxVel * tickInterval * 4})`); - break; - } - } - } - } - - // Restore from previously stored props only the props - // that the future entity has, so we can interp between them. - // Only need to do this the first time, - // since we reuse the message. - if (i < 0) { - if (lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`] != null) { - var propArr = []; - - for (const propKey of Object.keys(lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`])) { - // Check if new entity has this property, - // if not, no need to add it to the old entity for interpolation. - if (newEntity.hasProperty(propKey.split(".")[0], propKey.split(".")[1])) { - propArr.push(lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][propKey]); - } - } - - if (propArr.length > 0) { - //console.log(`Applying ${propArr.length} props`); - entity.applyPropUpdate(propArr); - } - } - } - - // We interpolate same entity multiple times, - // edit interp amount appropriately. - // min target max interp - // 0 0.25 1.0 0.25 - // 0.25 0.5 1.0 1/3 - // 0.5 0.75 1.0 0.5 - var interp = 0.25 * (1 / (1 - (0.25 * i))); - - entity = interpEntity(entity, newEntity, interp); - } - } - } + if (lastOrigin != null && newOrigin != null) { + if (lastOriginZ) { + lastOrigin.z = lastOriginZ; + } + if (newOriginZ) { + newOrigin.z = newOriginZ; } - this.writeMessage(prevPacketMessage); + for (let axis of vecKeys) { + var dist = newOrigin[axis] - lastOrigin[axis]; + if (dist > this.maxVel * tickInterval * 4) { + //console.log(`Entity ${newEntity.serverClass.name} (${newEntity.entityIndex}) moved over maxvel (${dist} > ${this.maxVel * tickInterval * 4})`); + break; + } + } + } } - } - prevPacketMessage = message; + // Restore from previously stored props only the props + // that the future entity has, so we can interp between them. + // Only need to do this the first time, + // since we reuse the message. + if (i < 0) { + if (lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`] != null) { + var propArr = []; - if (message.tick > prevProgressPrint + 10000) { - prevProgressPrint += 10000; - console.log(`Progress: ${message.tick} / ${header.ticks}`); + for (const propKey of Object.keys(lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`])) { + // Check if new entity has this property, + // if not, no need to add it to the old entity for interpolation. + if (newEntity.hasProperty(propKey.split(".")[0], propKey.split(".")[1])) { + propArr.push(lastKnownProps[`${entity.entityIndex}:${entity.serverClass.id}`][propKey]); + } + } + + if (propArr.length > 0) { + //console.log(`Applying ${propArr.length} props`); + entity.applyPropUpdate(propArr); + } + } + } + + // We interpolate same entity multiple times, + // edit interp amount appropriately. + // min target max interp + // 0 0.25 1.0 0.25 + // 0.25 0.5 1.0 1/3 + // 0.5 0.75 1.0 0.5 + var interp = 0.25 * (1 / (1 - 0.25 * i)); + + entity = interpEntity(entity, newEntity, interp); + } } + } } - if (synced && !skippedFirst && message.type === MessageType.Packet) { - // Skip first packet - skippedFirst = true; - } - - // Write current message - this.writeMessage(message); + this.writeMessage(prevPacketMessage); + } } + + prevPacketMessage = message; + + if (message.tick > prevProgressPrint + 10000) { + prevProgressPrint += 10000; + console.log(`Progress: ${message.tick} / ${header.ticks}`); + } + } + + if (synced && !skippedFirst && message.type === MessageType.Packet) { + // Skip first packet + skippedFirst = true; + } + + // Write current message + this.writeMessage(message); } + } } /** @@ -401,16 +409,16 @@ class InterpTransformer extends Parser { * @param output - Output demofile name */ function interp(input: string, output: string, maxVel: number = 3500) { - const decodeStream = new BitStream(readFileSync(input).buffer as ArrayBuffer); - const encodeStream = new DynamicBitStream(32 * 1024 * 1024); + const decodeStream = new BitStream(readFileSync(input).buffer as ArrayBuffer); + const encodeStream = new DynamicBitStream(32 * 1024 * 1024); - const transformer = new InterpTransformer(decodeStream, encodeStream, maxVel); - transformer.transform(); + const transformer = new InterpTransformer(decodeStream, encodeStream, maxVel); + transformer.transform(); - const encodedLength = encodeStream.index; - encodeStream.index = 0; + const encodedLength = encodeStream.index; + encodeStream.index = 0; - writeFileSync(output, encodeStream.readArrayBuffer(Math.ceil(encodedLength / 8))); + writeFileSync(output, encodeStream.readArrayBuffer(Math.ceil(encodedLength / 8))); } -export { interp }; \ No newline at end of file +export { interp }; diff --git a/test/test-interp.js b/test/test-interp.js index 382dc55..ccdc1f1 100644 --- a/test/test-interp.js +++ b/test/test-interp.js @@ -1,3 +1,3 @@ -var interp = require('../build/index.js').interp; +var interp = require("../build/index.js").interp; -interp('test.dem', 'test_out.dem'); \ No newline at end of file +interp("test.dem", "test_out.dem"); diff --git a/tsconfig.json b/tsconfig.json index f468713..0bfb736 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,9 @@ { - "compilerOptions": { - "target": "es6", - "module": "commonjs", - "sourceMap": true, - "outDir": "build", - "rootDir": "src" - } - } \ No newline at end of file + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "sourceMap": true, + "outDir": "build", + "rootDir": "src" + } +}