1
0
Fork 0
mirror of https://github.com/demostf/demo.js synced 2026-06-04 00:54:14 +02:00

start tick

This commit is contained in:
Robin Appelman 2015-02-01 17:34:19 +01:00
commit bed36b2701
3 changed files with 24 additions and 33 deletions

View file

@ -39,7 +39,7 @@ Packet.prototype.parse = function () {
while (this.bitsLeft > 6) { // last 6 bits for NOOP while (this.bitsLeft > 6) { // last 6 bits for NOOP
var type = this.stream.readBits(6); var type = this.stream.readBits(6);
if (Packet.parsers[type]) { if (Packet.parsers[type]) {
var packet = Packet.parsers[type](this.stream); var packet = Packet.parsers[type].call(this, this.stream);
//console.log(packet); //console.log(packet);
packets.push(packet); packets.push(packet);
} else { } else {
@ -59,6 +59,7 @@ Packet.parseGameEvent = function (eventId, stream) {
var entry = eventDescription.entries[i]; var entry = eventDescription.entries[i];
values[entry.name] = Packet.getGameEventValue(stream, entry); values[entry.name] = Packet.getGameEventValue(stream, entry);
} }
//console.log(eventDescription.name);
return { return {
name : eventDescription.name, name : eventDescription.name,
type : eventDescription.type, type : eventDescription.type,
@ -93,7 +94,7 @@ Packet.parsers = {
2 : ParserGenerator.make('file', 'transferId{32}fileName{s}requested{b}'), 2 : ParserGenerator.make('file', 'transferId{32}fileName{s}requested{b}'),
3 : ParserGenerator.make('netTick', 'tick{32}frameTime{16}stdDev{16}'), 3 : ParserGenerator.make('netTick', 'tick{32}frameTime{16}stdDev{16}'),
4 : ParserGenerator.make('stringCmd', 'command{s}'), 4 : ParserGenerator.make('stringCmd', 'command{s}'),
5 : function (stream) { 5 : function (stream) { // setconvar
var count = stream.readBits(8); var count = stream.readBits(8);
var vars = {}; var vars = {};
for (var i = 0; i < count; i++) { for (var i = 0; i < count; i++) {
@ -110,7 +111,7 @@ Packet.parsers = {
'version{16}serverCount{32}stv{b}dedicated{b}maxCrc{32}maxClasses{16}' + 'version{16}serverCount{32}stv{b}dedicated{b}maxCrc{32}maxClasses{16}' +
'mapHash{128}playerCount{8}maxPlayerCount{8}intervalPerTick{f32}platform{s1}' + 'mapHash{128}playerCount{8}maxPlayerCount{8}intervalPerTick{f32}platform{s1}' +
'game{s}map{s}skybox{s}serverName{s}replay{b}'), 'game{s}map{s}skybox{s}serverName{s}replay{b}'),
10: function (stream) { 10: function (stream) { //classInfo
var number = stream.readBits(16); var number = stream.readBits(16);
var create = !!stream.readBits(1); var create = !!stream.readBits(1);
var entries = []; var entries = [];
@ -135,18 +136,18 @@ Packet.parsers = {
11: ParserGenerator.make('setPause', 'paused{b}'), 11: ParserGenerator.make('setPause', 'paused{b}'),
12: function (stream) { 12: function (stream) {
var stringTable = new PacketStringTable(stream); var stringTable = new PacketStringTable(stream);
stringTable.parse(); var tables = stringTable.parse();
return { return {
packetType: 'createStringTable', packetType: 'createStringTable',
table : stringTable table : tables
}; };
}, },
13: function (stream) { 13: function (stream) { //updatestringTable
var stringTable = new PacketStringTable(stream); var stringTable = new PacketStringTable(stream);
stringTable.parse(); var tables = stringTable.parse();
return { return {
packetType: 'createStringTable', packetType: 'updateStringTable',
table : stringTable table : tables
}; };
@ -168,20 +169,6 @@ Packet.parsers = {
} else { } else {
stream.readBits(6); stream.readBits(6);
} }
//console.log(a ? 'a' : '!a')
//console.log('table: ' + table.name);
//console.log(' ' + table.entries.length + ' entries');
//for (var i = 0; i < changeEntries; i++) {
// //console.log(stream.readBits(2));
// var string = stream.readASCIIString();
// stream.readBits(16);
// //todo last entry overflows by 13 (3 bits at the end 13 before next entry?)
// strings[i] = string;
//}
//throw false;
//console.log(changeEntries);
//console.log(strings);
//console.log(end - stream._index);
stream._index = end; stream._index = end;
//throw false; //throw false;
return { return {
@ -194,7 +181,7 @@ Packet.parsers = {
}, },
14: ParserGenerator.make('voiceInit', 'codec{s}quality{8}'), 14: ParserGenerator.make('voiceInit', 'codec{s}quality{8}'),
15: ParserGenerator.make('voiceData', 'client{8}proximity{8}length{16}_{$length}'), 15: ParserGenerator.make('voiceData', 'client{8}proximity{8}length{16}_{$length}'),
17: function (stream) { 17: function (stream) { //parseSounds
var reliable = !!stream.readBits(1); var reliable = !!stream.readBits(1);
var num = (reliable) ? 1 : stream.readBits(8); var num = (reliable) ? 1 : stream.readBits(8);
var length = (reliable) ? stream.readBits(8) : stream.readBits(16); var length = (reliable) ? stream.readBits(8) : stream.readBits(16);
@ -208,7 +195,7 @@ Packet.parsers = {
}, },
18: ParserGenerator.make('setView', 'index{11}'), 18: ParserGenerator.make('setView', 'index{11}'),
19: ParserGenerator.make('fixAngle', 'relative{b}x{16}y{16}z{16}'), 19: ParserGenerator.make('fixAngle', 'relative{b}x{16}y{16}z{16}'),
21: function (stream) { 21: function (stream) { //BSPDecal
var getCoord = function (stream) { var getCoord = function (stream) {
var hasInt = !!stream.readBits(1); var hasInt = !!stream.readBits(1);
var hasFract = !!stream.readBits(1); var hasFract = !!stream.readBits(1);
@ -253,7 +240,7 @@ Packet.parsers = {
lowPriority : lowPriority lowPriority : lowPriority
} }
}, },
23: function (stream) { 23: function (stream) { // user message
// user message // user message
var type = stream.readBits(8); var type = stream.readBits(8);
var length = stream.readBits(11); var length = stream.readBits(11);
@ -272,7 +259,7 @@ Packet.parsers = {
return result; return result;
}, },
24: ParserGenerator.make('entityMessage', 'index{11}id{9}length{11}data{$length}'), 24: ParserGenerator.make('entityMessage', 'index{11}id{9}length{11}data{$length}'),
25: function (stream) { 25: function (stream) { //game event
var length = stream.readBits(11); var length = stream.readBits(11);
var end = stream._index + length; var end = stream._index + length;
var eventId = stream.readBits(9); var eventId = stream.readBits(9);
@ -283,7 +270,7 @@ Packet.parsers = {
event : event event : event
} }
}, },
26: function (stream) { 26: function (stream) { //packetEntities
// todo // todo
var maxEntries = stream.readBits(11); var maxEntries = stream.readBits(11);
var isDelta = !!stream.readBits(1); var isDelta = !!stream.readBits(1);
@ -311,7 +298,7 @@ Packet.parsers = {
27: ParserGenerator.make('tempEntities', 'count{8}length{17}_{$length}'), 27: ParserGenerator.make('tempEntities', 'count{8}length{17}_{$length}'),
28: ParserGenerator.make('preFetch', 'index{14}'), 28: ParserGenerator.make('preFetch', 'index{14}'),
29: ParserGenerator.make('menu', 'type{16}length{16}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}'),//length*8 29: ParserGenerator.make('menu', 'type{16}length{16}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}'),//length*8
30: function (stream) { 30: function (stream) { //gameEventList
// list of game events and parameters // list of game events and parameters
var numEvents = stream.readBits(9); var numEvents = stream.readBits(9);
var length = stream.readBits(20); var length = stream.readBits(20);

View file

@ -11,6 +11,7 @@ var Parser = function (steam) {
users : {}, users : {},
deaths : [], deaths : [],
rounds : [], rounds : [],
startTick : 0,
intervalPerTick: 0 intervalPerTick: 0
}; };
this.packets = []; this.packets = [];
@ -59,6 +60,9 @@ Parser.prototype.parseBody = function () {
} }
switch (packet.packetType) { switch (packet.packetType) {
case 'netTick': case 'netTick':
if (this.state.startTick === 0) {
this.state.startTick = packet.tick;
}
tick = packet.tick; tick = packet.tick;
break; break;
case 'serverInfo': case 'serverInfo':
@ -81,7 +85,7 @@ Parser.prototype.parseBody = function () {
var userId = packet.tables.userinfo[j].extraData[1].charCodeAt(0); var userId = packet.tables.userinfo[j].extraData[1].charCodeAt(0);
this.state.users[userId] = { this.state.users[userId] = {
name : name, name : name,
userId: userId, userId : userId,
steamId: steamId steamId: steamId
} }
} }

View file

@ -1,12 +1,12 @@
var Demo = require('./demo'); var Demo = require('./demo');
var fs = require('fs'); var fs = require('fs');
fs.readFile("process.dem", function (err, data) { fs.readFile("upward.dem", function (err, data) {
if (err) throw err; if (err) throw err;
var demo = Demo.fromNodeBuffer(data); var demo = Demo.fromNodeBuffer(data);
var parser = demo.getParser(); var parser = demo.getParser();
var head = parser.readHeader(); var head = parser.readHeader();
//console.log(head); //console.log(head);
var body = parser.parseBody() var body = parser.parseBody();
console.log(body.users); //console.log(body);
}); });