teeworlds 2.1.3 → 2.1.5

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/lib/huffman.js DELETED
@@ -1,190 +0,0 @@
1
- "use strict";
2
- var FREQ_TABLE = [
3
- 1 << 30, 4545, 2657, 431, 1950, 919, 444, 482, 2244, 617, 838, 542, 715, 1814, 304, 240, 754, 212, 647, 186,
4
- 283, 131, 146, 166, 543, 164, 167, 136, 179, 859, 363, 113, 157, 154, 204, 108, 137, 180, 202, 176,
5
- 872, 404, 168, 134, 151, 111, 113, 109, 120, 126, 129, 100, 41, 20, 16, 22, 18, 18, 17, 19,
6
- 16, 37, 13, 21, 362, 166, 99, 78, 95, 88, 81, 70, 83, 284, 91, 187, 77, 68, 52, 68,
7
- 59, 66, 61, 638, 71, 157, 50, 46, 69, 43, 11, 24, 13, 19, 10, 12, 12, 20, 14, 9,
8
- 20, 20, 10, 10, 15, 15, 12, 12, 7, 19, 15, 14, 13, 18, 35, 19, 17, 14, 8, 5,
9
- 15, 17, 9, 15, 14, 18, 8, 10, 2173, 134, 157, 68, 188, 60, 170, 60, 194, 62, 175, 71,
10
- 148, 67, 167, 78, 211, 67, 156, 69, 1674, 90, 174, 53, 147, 89, 181, 51, 174, 63, 163, 80,
11
- 167, 94, 128, 122, 223, 153, 218, 77, 200, 110, 190, 73, 174, 69, 145, 66, 277, 143, 141, 60,
12
- 136, 53, 180, 57, 142, 57, 158, 61, 166, 112, 152, 92, 26, 22, 21, 28, 20, 26, 30, 21,
13
- 32, 27, 20, 17, 23, 21, 30, 22, 22, 21, 27, 25, 17, 27, 23, 18, 39, 26, 15, 21,
14
- 12, 18, 18, 27, 20, 18, 15, 19, 11, 17, 33, 12, 18, 15, 19, 18, 16, 26, 17, 18,
15
- 9, 10, 25, 22, 22, 17, 20, 16, 6, 16, 15, 20, 14, 18, 24, 335, 1517
16
- ], HUFFMAN_EOF_SYMBOL = 256, HUFFMAN_MAX_SYMBOLS = HUFFMAN_EOF_SYMBOL + 1, HUFFMAN_MAX_NODES = HUFFMAN_MAX_SYMBOLS * 2 - 1, HUFFMAN_LUTBITS = 10, HUFFMAN_LUTSIZE = 1 << HUFFMAN_LUTBITS, HUFFMAN_LUTMASK = HUFFMAN_LUTSIZE - 1;
17
- var Huffman = /** @class */ (function () {
18
- function Huffman(frequencies) {
19
- if (frequencies === void 0) { frequencies = FREQ_TABLE; }
20
- this.nodes = new Array(HUFFMAN_MAX_NODES);
21
- for (var i = 0; i < HUFFMAN_MAX_NODES; i++) {
22
- this.nodes[i] = {};
23
- }
24
- this.decode_lut = new Array(HUFFMAN_LUTSIZE);
25
- this.num_nodes = 0;
26
- this.start_node_index = 0;
27
- this.construct_tree(frequencies);
28
- for (var i = 0; i < HUFFMAN_LUTSIZE; i++) {
29
- var bits = i;
30
- var broke = false;
31
- var index = this.start_node_index;
32
- for (var x = 0; x < HUFFMAN_LUTBITS; x++) {
33
- if (bits & 1)
34
- index = this.nodes[index].right;
35
- else
36
- index = this.nodes[index].left;
37
- bits >>= 1;
38
- if (this.nodes[index].numbits) {
39
- this.decode_lut[i] = index;
40
- broke = true;
41
- break;
42
- }
43
- }
44
- if (!broke) {
45
- this.decode_lut[i] = index;
46
- }
47
- }
48
- }
49
- Huffman.prototype.set_bits_r = function (node_index, bits, depth) {
50
- if (this.nodes[node_index].right != 0xffff)
51
- this.set_bits_r(this.nodes[node_index].right, bits | (1 << depth), depth + 1);
52
- if (this.nodes[node_index].left != 0xffff)
53
- this.set_bits_r(this.nodes[node_index].left, bits, depth + 1);
54
- if (this.nodes[node_index].numbits) {
55
- this.nodes[node_index].bits = bits;
56
- this.nodes[node_index].numbits = depth;
57
- }
58
- };
59
- Huffman.prototype.bubble_sort = function (index_list, node_list, size) {
60
- var changed = true;
61
- while (changed) {
62
- changed = false;
63
- for (var i = 0; i < size - 1; i++) {
64
- if (node_list[index_list[i]].frequency < node_list[index_list[i + 1]].frequency) {
65
- var temp = index_list[i];
66
- index_list[i] = index_list[i + 1];
67
- index_list[i + 1] = temp;
68
- changed = true;
69
- }
70
- }
71
- size--;
72
- }
73
- return index_list;
74
- };
75
- Huffman.prototype.construct_tree = function (frequencies) {
76
- if (frequencies === void 0) { frequencies = FREQ_TABLE; }
77
- var nodes_left_storage = new Array(HUFFMAN_MAX_SYMBOLS);
78
- for (var i = 0; i < HUFFMAN_MAX_SYMBOLS; i++) {
79
- nodes_left_storage[i] = {};
80
- }
81
- var nodes_left = new Array(HUFFMAN_MAX_SYMBOLS);
82
- var num_nodes_left = HUFFMAN_MAX_SYMBOLS;
83
- for (var i = 0; i < HUFFMAN_MAX_SYMBOLS; i++) {
84
- this.nodes[i].numbits = 0xFFFFFFFF;
85
- this.nodes[i].symbol = i;
86
- this.nodes[i].left = 0xFFFF;
87
- this.nodes[i].right = 0xFFFF;
88
- if (i == HUFFMAN_EOF_SYMBOL) {
89
- nodes_left_storage[i].frequency = 1;
90
- }
91
- else
92
- nodes_left_storage[i].frequency = frequencies[i];
93
- nodes_left_storage[i].node_id = i;
94
- nodes_left[i] = i;
95
- }
96
- this.num_nodes = HUFFMAN_MAX_SYMBOLS;
97
- while (num_nodes_left > 1) {
98
- nodes_left = this.bubble_sort(nodes_left, nodes_left_storage, num_nodes_left);
99
- this.nodes[this.num_nodes].numbits = 0;
100
- this.nodes[this.num_nodes].left = nodes_left_storage[nodes_left[num_nodes_left - 1]].node_id;
101
- this.nodes[this.num_nodes].right = nodes_left_storage[nodes_left[num_nodes_left - 2]].node_id;
102
- nodes_left_storage[nodes_left[num_nodes_left - 2]].node_id = this.num_nodes;
103
- nodes_left_storage[nodes_left[num_nodes_left - 2]].frequency = nodes_left_storage[nodes_left[num_nodes_left - 1]].frequency
104
- + nodes_left_storage[nodes_left[num_nodes_left - 2]].frequency;
105
- this.num_nodes++;
106
- num_nodes_left--;
107
- }
108
- this.start_node_index = this.num_nodes - 1;
109
- this.set_bits_r(this.start_node_index, 0, 0);
110
- };
111
- Huffman.prototype.compress = function (inp_buffer, start_index, size) {
112
- if (start_index === void 0) { start_index = 0; }
113
- if (size === void 0) { size = 0; }
114
- var output = [];
115
- var bits = 0;
116
- var bitcount = 0;
117
- if (size == 0)
118
- size = inp_buffer.byteLength;
119
- inp_buffer = inp_buffer.slice(start_index, start_index + size);
120
- for (var i = 0; i < size; i++) {
121
- var x = inp_buffer[i];
122
- bits |= this.nodes[x].bits << bitcount;
123
- bitcount += this.nodes[x].numbits;
124
- while (bitcount >= 8) {
125
- output.push(bits & 0xff);
126
- bits >>= 8;
127
- bitcount -= 8;
128
- }
129
- }
130
- bits |= this.nodes[HUFFMAN_EOF_SYMBOL].bits << bitcount;
131
- bitcount += this.nodes[HUFFMAN_EOF_SYMBOL].numbits;
132
- while (bitcount >= 8) {
133
- output.push(bits & 0xff);
134
- bits >>= 8;
135
- bitcount -= 8;
136
- }
137
- output.push(bits);
138
- return Buffer.from(output);
139
- };
140
- Huffman.prototype.decompress = function (inp_buffer, size) {
141
- if (size === void 0) { size = 0; }
142
- var bits = 0;
143
- var bitcount = 0;
144
- var eof = this.nodes[HUFFMAN_EOF_SYMBOL];
145
- var output = [];
146
- if (size == 0)
147
- size = inp_buffer.byteLength;
148
- inp_buffer = inp_buffer.slice(0, size);
149
- var src_index = 0;
150
- while (true) {
151
- var node_i = -1;
152
- if (bitcount >= HUFFMAN_LUTBITS)
153
- node_i = this.decode_lut[bits & HUFFMAN_LUTMASK];
154
- while (bitcount < 24 && src_index != size) {
155
- bits |= inp_buffer[src_index] << bitcount;
156
- bitcount += 8;
157
- src_index++;
158
- }
159
- if (node_i == -1)
160
- node_i = this.decode_lut[bits & HUFFMAN_LUTMASK];
161
- if (this.nodes[node_i].numbits) {
162
- bits >>= this.nodes[node_i].numbits;
163
- bitcount -= this.nodes[node_i].numbits;
164
- }
165
- else {
166
- bits >>= HUFFMAN_LUTBITS;
167
- bitcount -= HUFFMAN_LUTBITS;
168
- while (true) {
169
- if (bits & 1) {
170
- node_i = this.nodes[node_i].right;
171
- }
172
- else
173
- node_i = this.nodes[node_i].left;
174
- bitcount -= 1;
175
- bits >>= 1;
176
- if (this.nodes[node_i].numbits)
177
- break;
178
- if (bitcount == 0)
179
- throw new Error("No more bits, decoding error");
180
- }
181
- }
182
- if (this.nodes[node_i] == eof)
183
- break;
184
- output.push(this.nodes[node_i].symbol);
185
- }
186
- return Buffer.from(output);
187
- };
188
- return Huffman;
189
- }());
190
- module.exports = Huffman;
package/lib/snapshot.js DELETED
@@ -1,349 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Snapshot = void 0;
4
- var MsgUnpacker_1 = require("./MsgUnpacker");
5
- var decoder = new TextDecoder('utf-8');
6
- var itemAppendix = [
7
- { "type_id": 0, "size": 0, "name": "obj_ex" },
8
- { "type_id": 1, "size": 10, "name": "obj_player_input" },
9
- { "type_id": 2, "size": 6, "name": "obj_projectile" },
10
- { "type_id": 3, "size": 5, "name": "obj_laser" },
11
- { "type_id": 4, "size": 4, "name": "obj_pickup" },
12
- { "type_id": 5, "size": 3, "name": "obj_flag" },
13
- { "type_id": 6, "size": 8, "name": "obj_game_info" },
14
- { "type_id": 7, "size": 4, "name": "obj_game_data" },
15
- { "type_id": 8, "size": 15, "name": "obj_character_core" },
16
- { "type_id": 9, "size": 22, "name": "obj_character" },
17
- { "type_id": 10, "size": 5, "name": "obj_player_info" },
18
- { "type_id": 11, "size": 17, "name": "obj_client_info" },
19
- { "type_id": 12, "size": 3, "name": "obj_spectator_info" },
20
- { "type_id": 13, "size": 2, "name": "event_common" },
21
- { "type_id": 14, "size": 2, "name": "event_explosion" },
22
- { "type_id": 15, "size": 2, "name": "event_spawn" },
23
- { "type_id": 16, "size": 2, "name": "event_hammerhit" },
24
- { "type_id": 17, "size": 3, "name": "event_death" },
25
- { "type_id": 18, "size": 3, "name": "event_sound_global" },
26
- { "type_id": 19, "size": 3, "name": "event_sound_world" },
27
- { "type_id": 20, "size": 3, "name": "event_damage_indicator" }
28
- ];
29
- var items;
30
- (function (items) {
31
- items[items["OBJ_EX"] = 0] = "OBJ_EX";
32
- items[items["OBJ_PLAYER_INPUT"] = 1] = "OBJ_PLAYER_INPUT";
33
- items[items["OBJ_PROJECTILE"] = 2] = "OBJ_PROJECTILE";
34
- items[items["OBJ_LASER"] = 3] = "OBJ_LASER";
35
- items[items["OBJ_PICKUP"] = 4] = "OBJ_PICKUP";
36
- items[items["OBJ_FLAG"] = 5] = "OBJ_FLAG";
37
- items[items["OBJ_GAME_INFO"] = 6] = "OBJ_GAME_INFO";
38
- items[items["OBJ_GAME_DATA"] = 7] = "OBJ_GAME_DATA";
39
- items[items["OBJ_CHARACTER_CORE"] = 8] = "OBJ_CHARACTER_CORE";
40
- items[items["OBJ_CHARACTER"] = 9] = "OBJ_CHARACTER";
41
- items[items["OBJ_PLAYER_INFO"] = 10] = "OBJ_PLAYER_INFO";
42
- items[items["OBJ_CLIENT_INFO"] = 11] = "OBJ_CLIENT_INFO";
43
- items[items["OBJ_SPECTATOR_INFO"] = 12] = "OBJ_SPECTATOR_INFO";
44
- items[items["EVENT_COMMON"] = 13] = "EVENT_COMMON";
45
- items[items["EVENT_EXPLOSION"] = 14] = "EVENT_EXPLOSION";
46
- items[items["EVENT_SPAWN"] = 15] = "EVENT_SPAWN";
47
- items[items["EVENT_HAMMERHIT"] = 16] = "EVENT_HAMMERHIT";
48
- items[items["EVENT_DEATH"] = 17] = "EVENT_DEATH";
49
- items[items["EVENT_SOUND_GLOBAL"] = 18] = "EVENT_SOUND_GLOBAL";
50
- items[items["EVENT_SOUND_WORLD"] = 19] = "EVENT_SOUND_WORLD";
51
- items[items["EVENT_DAMAGE_INDICATOR"] = 20] = "EVENT_DAMAGE_INDICATOR";
52
- })(items || (items = {}));
53
- var Snapshot = /** @class */ (function () {
54
- function Snapshot() {
55
- }
56
- Snapshot.prototype.IntsToStr = function (pInts) {
57
- var pIntz = [];
58
- var pStr = '';
59
- for (var _i = 0, pInts_1 = pInts; _i < pInts_1.length; _i++) {
60
- var x = pInts_1[_i];
61
- pStr += String.fromCharCode((((x) >> 24) & 0xff) - 128);
62
- pIntz.push((((x) >> 24) & 0xff) - 128);
63
- pStr += String.fromCharCode((((x) >> 16) & 0xff) - 128);
64
- pIntz.push((((x) >> 16) & 0xff) - 128);
65
- pStr += String.fromCharCode((((x) >> 8) & 0xff) - 128);
66
- pIntz.push((((x) >> 8) & 0xff) - 128);
67
- pStr += String.fromCharCode(((x) & 0xff) - 128);
68
- pIntz.push(((x) & 0xff) - 128);
69
- }
70
- pIntz.splice(-1, 1);
71
- pStr = decoder.decode(new Uint8Array(pIntz));
72
- pStr = pStr.replace(/\x00|\u0000/g, ""); //.replace(/タ/g, "")
73
- return pStr;
74
- };
75
- Snapshot.prototype.parseItem = function (data, Type) {
76
- var _item = {};
77
- switch (Type) {
78
- case items.OBJ_EX:
79
- break;
80
- case items.OBJ_PLAYER_INPUT:
81
- _item = {
82
- direction: data[0],
83
- target_x: data[1],
84
- target_y: data[2],
85
- jump: data[3],
86
- fire: data[4],
87
- hook: data[5],
88
- player_flags: data[6],
89
- wanted_weapon: data[7],
90
- next_weapon: data[8],
91
- prev_weapon: data[9],
92
- };
93
- break;
94
- case items.OBJ_PROJECTILE:
95
- _item = {
96
- x: data[0],
97
- y: data[1],
98
- vel_x: data[2],
99
- vel_y: data[3],
100
- type_: data[4],
101
- start_tick: data[5],
102
- };
103
- break;
104
- case items.OBJ_LASER:
105
- _item = {
106
- x: data[0],
107
- y: data[1],
108
- from_x: data[2],
109
- from_y: data[3],
110
- start_tick: data[4],
111
- };
112
- break;
113
- case items.OBJ_PICKUP:
114
- _item = {
115
- x: data[0],
116
- y: data[1],
117
- type_: data[2],
118
- subtype: data[3],
119
- };
120
- break;
121
- case items.OBJ_FLAG:
122
- _item = {
123
- x: data[0],
124
- y: data[1],
125
- team: data[2],
126
- };
127
- break;
128
- case items.OBJ_GAME_INFO:
129
- _item = {
130
- game_flags: data[0],
131
- game_state_flags: data[1],
132
- round_start_tick: data[2],
133
- warmup_timer: data[3],
134
- score_limit: data[4],
135
- time_limit: data[5],
136
- round_num: data[6],
137
- round_current: data[7],
138
- };
139
- break;
140
- case items.OBJ_GAME_DATA:
141
- _item = {
142
- teamscore_red: data[0],
143
- teamscore_blue: data[1],
144
- flag_carrier_red: data[2],
145
- flag_carrier_blue: data[3],
146
- };
147
- break;
148
- case items.OBJ_CHARACTER_CORE:
149
- _item = {
150
- tick: data[0],
151
- x: data[1],
152
- y: data[2],
153
- vel_x: data[3],
154
- vel_y: data[4],
155
- angle: data[5],
156
- direction: data[6],
157
- jumped: data[7],
158
- hooked_player: data[8],
159
- hook_state: data[9],
160
- hook_tick: data[10],
161
- hook_x: data[11],
162
- hook_y: data[12],
163
- hook_dx: data[13],
164
- hook_dy: data[14],
165
- };
166
- break;
167
- case items.OBJ_CHARACTER:
168
- _item = {
169
- character_core: {
170
- tick: data[0],
171
- x: data[1],
172
- y: data[2],
173
- vel_x: data[3],
174
- vel_y: data[4],
175
- angle: data[5],
176
- direction: data[6],
177
- jumped: data[7],
178
- hooked_player: data[8],
179
- hook_state: data[9],
180
- hook_tick: data[10],
181
- hook_x: data[11],
182
- hook_y: data[12],
183
- hook_dx: data[13],
184
- hook_dy: data[14],
185
- },
186
- player_flags: data[15],
187
- health: data[16],
188
- armor: data[17],
189
- ammo_count: data[18],
190
- weapon: data[19],
191
- emote: data[20],
192
- attack_tick: data[21],
193
- };
194
- break;
195
- case items.OBJ_PLAYER_INFO:
196
- _item = {
197
- local: data[0],
198
- client_id: data[1],
199
- team: data[2],
200
- score: data[3],
201
- latency: data[4],
202
- };
203
- break;
204
- case items.OBJ_CLIENT_INFO:
205
- _item = {
206
- name: this.IntsToStr([data[0], data[1], data[2], data[3]]),
207
- clan: this.IntsToStr([data[4], data[5], data[6]]),
208
- country: data[7],
209
- skin: this.IntsToStr([data[8], data[9], data[10], data[11], data[12], data[13]]),
210
- use_custom_color: Number(data.slice(14, 15)),
211
- color_body: Number(data.slice(15, 16)),
212
- color_feet: Number(data.slice(16, 17)),
213
- };
214
- break;
215
- case items.OBJ_SPECTATOR_INFO:
216
- _item = {
217
- spectator_id: data[0],
218
- x: data[1],
219
- y: data[2],
220
- };
221
- break;
222
- case items.EVENT_COMMON:
223
- _item = {
224
- x: data[0],
225
- y: data[1],
226
- };
227
- break;
228
- case items.EVENT_EXPLOSION:
229
- _item = {
230
- common: {
231
- x: data[0],
232
- y: data[1]
233
- }
234
- };
235
- break;
236
- case items.EVENT_SPAWN:
237
- _item = {
238
- common: {
239
- x: data[0],
240
- y: data[1]
241
- }
242
- };
243
- break;
244
- case items.EVENT_HAMMERHIT:
245
- _item = {
246
- common: {
247
- x: data[0],
248
- y: data[1]
249
- }
250
- };
251
- break;
252
- case items.EVENT_DEATH:
253
- _item = {
254
- client_id: data[0],
255
- common: {
256
- x: data[1],
257
- y: data[2]
258
- }
259
- };
260
- break;
261
- case items.EVENT_SOUND_GLOBAL:
262
- _item = {
263
- common: {
264
- x: data[0],
265
- y: data[1]
266
- },
267
- sound_id: data[2]
268
- };
269
- break;
270
- case items.EVENT_SOUND_WORLD:
271
- _item = {
272
- common: {
273
- x: data[0],
274
- y: data[1]
275
- },
276
- sound_id: data[2]
277
- };
278
- break;
279
- case items.EVENT_DAMAGE_INDICATOR:
280
- _item = {
281
- angle: data[0],
282
- common: {
283
- x: data[0],
284
- y: data[1]
285
- },
286
- };
287
- break;
288
- }
289
- return _item;
290
- };
291
- Snapshot.prototype.unpackSnapshot = function (snap, lost) {
292
- if (lost === void 0) { lost = 0; }
293
- // var size = unpackInt(snap).result;
294
- var unpacker = new MsgUnpacker_1.MsgUnpacker(snap);
295
- // snap = unpackInt(snap).remaining; // size
296
- /* key = (((type_id) << 16) | (id))
297
- * key_to_id = ((key) & 0xffff)
298
- * key_to_type_id = ((key >> 16) & 0xffff)
299
- * https://github.com/heinrich5991/libtw2/blob/master/snapshot/src/
300
- * https://github.com/heinrich5991/libtw2/blob/master/doc/snapshot.md
301
- */
302
- // snap = unpackInt(snap).remaining;
303
- // console.log(unpackInt(snap).result, "tick?") // key?
304
- // snap = unpackInt(snap).remaining;
305
- var num_removed_items = unpacker.unpackInt();
306
- var num_item_deltas = unpacker.unpackInt();
307
- unpacker.unpackInt(); // _zero padding
308
- /*snapshot_delta:
309
- [ 4] num_removed_items
310
- [ 4] num_item_deltas
311
- [ 4] _zero
312
- [*4] removed_item_keys
313
- [ ] item_deltas
314
- */
315
- for (var i = 0; i < num_removed_items; i++) {
316
- unpacker.unpackInt(); // removed_item_keys
317
- }
318
- /*item_delta:
319
- [ 4] type_id
320
- [ 4] id
321
- [ 4] _size
322
- [*4] data_delta*/
323
- var items = { items: [], /* client_infos: client_infos, player_infos: player_infos,*/ lost: 0 };
324
- for (var i = 0; i < num_item_deltas; i++) {
325
- var type_id = unpacker.unpackInt();
326
- var id = unpacker.unpackInt();
327
- var key = (((type_id) << 16) | (id));
328
- var _size = void 0;
329
- if (type_id > 0 && type_id < itemAppendix.length) {
330
- _size = itemAppendix[type_id].size;
331
- }
332
- else
333
- _size = unpacker.unpackInt();
334
- var data = [];
335
- for (var j = 0; j < _size; j++) {
336
- if (unpacker.remaining.length > 0)
337
- data.push(unpacker.unpackInt());
338
- }
339
- // console.log(type_id, id, _size, data);
340
- var parsed = this.parseItem(data, type_id);
341
- // console.log(data)
342
- // console.log('')
343
- items.items.push({ data: data, parsed: parsed, type_id: type_id, id: id, key: key });
344
- }
345
- return items;
346
- };
347
- return Snapshot;
348
- }());
349
- exports.Snapshot = Snapshot;