diff --git a/packages/core/src/protos/index.ts b/packages/core/src/protos/index.ts index a6a400ac7..024a1cebb 100644 --- a/packages/core/src/protos/index.ts +++ b/packages/core/src/protos/index.ts @@ -1,16 +1,16 @@ // @ts-nocheck -export * from './average_definitions.ts'; -export * from './camouflage_definitions.ts'; -export * from './consumable_definitions.ts'; -export * from './equipment_definitions.ts'; -export * from './gallery.ts'; -export * from './game_definitions.ts'; -export * from './i18n.ts'; -export * from './map_definitions.ts'; -export * from './model_definitions.ts'; -export * from './popular_tanks.ts'; -export * from './provision_definitions.ts'; -export * from './rating_leaderboard.ts'; -export * from './reviews.ts'; -export * from './skill_definitions.ts'; -export * from './tank_definitions.ts'; \ No newline at end of file +export * from "./average_definitions.ts"; +export * from "./camouflage_definitions.ts"; +export * from "./consumable_definitions.ts"; +export * from "./equipment_definitions.ts"; +export * from "./gallery.ts"; +export * from "./game_definitions.ts"; +export * from "./i18n.ts"; +export * from "./map_definitions.ts"; +export * from "./model_definitions.ts"; +export * from "./popular_tanks.ts"; +export * from "./provision_definitions.ts"; +export * from "./rating_leaderboard.ts"; +export * from "./reviews.ts"; +export * from "./skill_definitions.ts"; +export * from "./tank_definitions.ts"; diff --git a/packages/core/src/protos/model_definitions.ts b/packages/core/src/protos/model_definitions.ts index b353ae4c3..7fdd45a7a 100644 --- a/packages/core/src/protos/model_definitions.ts +++ b/packages/core/src/protos/model_definitions.ts @@ -115,24 +115,15 @@ function createBaseModelDefinitions(): ModelDefinitions { } export const ModelDefinitions: MessageFns = { - encode( - message: ModelDefinitions, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { - globalThis.Object.entries(message.models).forEach( - ([key, value]: [string, ModelDefinition]) => { - ModelDefinitions_ModelsEntry.encode( - { key: key as any, value }, - writer.uint32(10).fork(), - ).join(); - }, - ); + encode(message: ModelDefinitions, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + globalThis.Object.entries(message.models).forEach(([key, value]: [string, ModelDefinition]) => { + ModelDefinitions_ModelsEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join(); + }); return writer; }, decode(input: BinaryReader | Uint8Array, length?: number): ModelDefinitions { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseModelDefinitions(); while (reader.pos < end) { @@ -143,10 +134,7 @@ export const ModelDefinitions: MessageFns = { break; } - const entry1 = ModelDefinitions_ModelsEntry.decode( - reader, - reader.uint32(), - ); + const entry1 = ModelDefinitions_ModelsEntry.decode(reader, reader.uint32()); if (entry1.value !== undefined) { message.models[entry1.key] = entry1.value; } @@ -165,15 +153,12 @@ export const ModelDefinitions: MessageFns = { return { models: isObject(object.models) ? (globalThis.Object.entries(object.models) as [string, any][]).reduce( - ( - acc: { [key: number]: ModelDefinition }, - [key, value]: [string, any], - ) => { - acc[globalThis.Number(key)] = ModelDefinition.fromJSON(value); - return acc; - }, - {}, - ) + (acc: { [key: number]: ModelDefinition }, [key, value]: [string, any]) => { + acc[globalThis.Number(key)] = ModelDefinition.fromJSON(value); + return acc; + }, + {}, + ) : {}, }; }, @@ -181,10 +166,7 @@ export const ModelDefinitions: MessageFns = { toJSON(message: ModelDefinitions): unknown { const obj: any = {}; if (message.models) { - const entries = globalThis.Object.entries(message.models) as [ - string, - ModelDefinition, - ][]; + const entries = globalThis.Object.entries(message.models) as [string, ModelDefinition][]; if (entries.length > 0) { obj.models = {}; entries.forEach(([k, v]) => { @@ -195,25 +177,13 @@ export const ModelDefinitions: MessageFns = { return obj; }, - create, I>>( - base?: I, - ): ModelDefinitions { + create, I>>(base?: I): ModelDefinitions { return ModelDefinitions.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): ModelDefinitions { + fromPartial, I>>(object: I): ModelDefinitions { const message = createBaseModelDefinitions(); - message.models = ( - globalThis.Object.entries(object.models ?? {}) as [ - string, - ModelDefinition, - ][] - ).reduce( - ( - acc: { [key: number]: ModelDefinition }, - [key, value]: [string, ModelDefinition], - ) => { + message.models = (globalThis.Object.entries(object.models ?? {}) as [string, ModelDefinition][]).reduce( + (acc: { [key: number]: ModelDefinition }, [key, value]: [string, ModelDefinition]) => { if (value !== undefined) { acc[globalThis.Number(key)] = ModelDefinition.fromPartial(value); } @@ -229,94 +199,79 @@ function createBaseModelDefinitions_ModelsEntry(): ModelDefinitions_ModelsEntry return { key: 0, value: undefined }; } -export const ModelDefinitions_ModelsEntry: MessageFns = - { - encode( - message: ModelDefinitions_ModelsEntry, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { - if (message.key !== 0) { - writer.uint32(8).uint32(message.key); - } - if (message.value !== undefined) { - ModelDefinition.encode(message.value, writer.uint32(18).fork()).join(); - } - return writer; - }, +export const ModelDefinitions_ModelsEntry: MessageFns = { + encode(message: ModelDefinitions_ModelsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.key !== 0) { + writer.uint32(8).uint32(message.key); + } + if (message.value !== undefined) { + ModelDefinition.encode(message.value, writer.uint32(18).fork()).join(); + } + return writer; + }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): ModelDefinitions_ModelsEntry { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); - const end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseModelDefinitions_ModelsEntry(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (tag !== 8) { - break; - } - - message.key = reader.uint32(); - continue; + decode(input: BinaryReader | Uint8Array, length?: number): ModelDefinitions_ModelsEntry { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseModelDefinitions_ModelsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (tag !== 8) { + break; } - case 2: { - if (tag !== 18) { - break; - } - message.value = ModelDefinition.decode(reader, reader.uint32()); - continue; + message.key = reader.uint32(); + continue; + } + case 2: { + if (tag !== 18) { + break; } + + message.value = ModelDefinition.decode(reader, reader.uint32()); + continue; } - if ((tag & 7) === 4 || tag === 0) { - break; - } - reader.skip(tag & 7); } - return message; - }, - - fromJSON(object: any): ModelDefinitions_ModelsEntry { - return { - key: isSet(object.key) ? globalThis.Number(object.key) : 0, - value: isSet(object.value) - ? ModelDefinition.fromJSON(object.value) - : undefined, - }; - }, - - toJSON(message: ModelDefinitions_ModelsEntry): unknown { - const obj: any = {}; - if (message.key !== 0) { - obj.key = Math.round(message.key); + if ((tag & 7) === 4 || tag === 0) { + break; } - if (message.value !== undefined) { - obj.value = ModelDefinition.toJSON(message.value); - } - return obj; - }, + reader.skip(tag & 7); + } + return message; + }, - create, I>>( - base?: I, - ): ModelDefinitions_ModelsEntry { - return ModelDefinitions_ModelsEntry.fromPartial(base ?? ({} as any)); - }, - fromPartial, I>>( - object: I, - ): ModelDefinitions_ModelsEntry { - const message = createBaseModelDefinitions_ModelsEntry(); - message.key = object.key ?? 0; - message.value = - object.value !== undefined && object.value !== null - ? ModelDefinition.fromPartial(object.value) - : undefined; - return message; - }, - }; + fromJSON(object: any): ModelDefinitions_ModelsEntry { + return { + key: isSet(object.key) ? globalThis.Number(object.key) : 0, + value: isSet(object.value) ? ModelDefinition.fromJSON(object.value) : undefined, + }; + }, + + toJSON(message: ModelDefinitions_ModelsEntry): unknown { + const obj: any = {}; + if (message.key !== 0) { + obj.key = Math.round(message.key); + } + if (message.value !== undefined) { + obj.value = ModelDefinition.toJSON(message.value); + } + return obj; + }, + + create, I>>(base?: I): ModelDefinitions_ModelsEntry { + return ModelDefinitions_ModelsEntry.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ModelDefinitions_ModelsEntry { + const message = createBaseModelDefinitions_ModelsEntry(); + message.key = object.key ?? 0; + message.value = (object.value !== undefined && object.value !== null) + ? ModelDefinition.fromPartial(object.value) + : undefined; + return message; + }, +}; function createBaseModelDefinition(): ModelDefinition { return { @@ -330,10 +285,7 @@ function createBaseModelDefinition(): ModelDefinition { } export const ModelDefinition: MessageFns = { - encode( - message: ModelDefinition, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: ModelDefinition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.armor !== undefined) { Armor.encode(message.armor, writer.uint32(10).fork()).join(); } @@ -341,39 +293,22 @@ export const ModelDefinition: MessageFns = { Vector3.encode(message.turret_origin, writer.uint32(18).fork()).join(); } if (message.initial_turret_rotation !== undefined) { - InitialTurretRotation.encode( - message.initial_turret_rotation, - writer.uint32(26).fork(), - ).join(); + InitialTurretRotation.encode(message.initial_turret_rotation, writer.uint32(26).fork()).join(); } - globalThis.Object.entries(message.turrets).forEach( - ([key, value]: [string, TurretModelDefinition]) => { - ModelDefinition_TurretsEntry.encode( - { key: key as any, value }, - writer.uint32(34).fork(), - ).join(); - }, - ); - globalThis.Object.entries(message.tracks).forEach( - ([key, value]: [string, TrackModelDefinition]) => { - ModelDefinition_TracksEntry.encode( - { key: key as any, value }, - writer.uint32(42).fork(), - ).join(); - }, - ); + globalThis.Object.entries(message.turrets).forEach(([key, value]: [string, TurretModelDefinition]) => { + ModelDefinition_TurretsEntry.encode({ key: key as any, value }, writer.uint32(34).fork()).join(); + }); + globalThis.Object.entries(message.tracks).forEach(([key, value]: [string, TrackModelDefinition]) => { + ModelDefinition_TracksEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).join(); + }); if (message.bounding_box !== undefined) { - BoundingBox.encode( - message.bounding_box!, - writer.uint32(50).fork(), - ).join(); + BoundingBox.encode(message.bounding_box, writer.uint32(50).fork()).join(); } return writer; }, decode(input: BinaryReader | Uint8Array, length?: number): ModelDefinition { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseModelDefinition(); while (reader.pos < end) { @@ -400,10 +335,7 @@ export const ModelDefinition: MessageFns = { break; } - message.initial_turret_rotation = InitialTurretRotation.decode( - reader, - reader.uint32(), - ); + message.initial_turret_rotation = InitialTurretRotation.decode(reader, reader.uint32()); continue; } case 4: { @@ -411,10 +343,7 @@ export const ModelDefinition: MessageFns = { break; } - const entry4 = ModelDefinition_TurretsEntry.decode( - reader, - reader.uint32(), - ); + const entry4 = ModelDefinition_TurretsEntry.decode(reader, reader.uint32()); if (entry4.value !== undefined) { message.turrets[entry4.key] = entry4.value; } @@ -425,10 +354,7 @@ export const ModelDefinition: MessageFns = { break; } - const entry5 = ModelDefinition_TracksEntry.decode( - reader, - reader.uint32(), - ); + const entry5 = ModelDefinition_TracksEntry.decode(reader, reader.uint32()); if (entry5.value !== undefined) { message.tracks[entry5.key] = entry5.value; } @@ -457,44 +383,36 @@ export const ModelDefinition: MessageFns = { turret_origin: isSet(object.turretOrigin) ? Vector3.fromJSON(object.turretOrigin) : isSet(object.turret_origin) - ? Vector3.fromJSON(object.turret_origin) - : undefined, + ? Vector3.fromJSON(object.turret_origin) + : undefined, initial_turret_rotation: isSet(object.initialTurretRotation) ? InitialTurretRotation.fromJSON(object.initialTurretRotation) : isSet(object.initial_turret_rotation) - ? InitialTurretRotation.fromJSON(object.initial_turret_rotation) - : undefined, + ? InitialTurretRotation.fromJSON(object.initial_turret_rotation) + : undefined, turrets: isObject(object.turrets) ? (globalThis.Object.entries(object.turrets) as [string, any][]).reduce( - ( - acc: { [key: number]: TurretModelDefinition }, - [key, value]: [string, any], - ) => { - acc[globalThis.Number(key)] = - TurretModelDefinition.fromJSON(value); - return acc; - }, - {}, - ) + (acc: { [key: number]: TurretModelDefinition }, [key, value]: [string, any]) => { + acc[globalThis.Number(key)] = TurretModelDefinition.fromJSON(value); + return acc; + }, + {}, + ) : {}, tracks: isObject(object.tracks) ? (globalThis.Object.entries(object.tracks) as [string, any][]).reduce( - ( - acc: { [key: number]: TrackModelDefinition }, - [key, value]: [string, any], - ) => { - acc[globalThis.Number(key)] = - TrackModelDefinition.fromJSON(value); - return acc; - }, - {}, - ) + (acc: { [key: number]: TrackModelDefinition }, [key, value]: [string, any]) => { + acc[globalThis.Number(key)] = TrackModelDefinition.fromJSON(value); + return acc; + }, + {}, + ) : {}, bounding_box: isSet(object.boundingBox) ? BoundingBox.fromJSON(object.boundingBox) : isSet(object.bounding_box) - ? BoundingBox.fromJSON(object.bounding_box) - : undefined, + ? BoundingBox.fromJSON(object.bounding_box) + : undefined, }; }, @@ -507,15 +425,10 @@ export const ModelDefinition: MessageFns = { obj.turretOrigin = Vector3.toJSON(message.turret_origin); } if (message.initial_turret_rotation !== undefined) { - obj.initialTurretRotation = InitialTurretRotation.toJSON( - message.initial_turret_rotation, - ); + obj.initialTurretRotation = InitialTurretRotation.toJSON(message.initial_turret_rotation); } if (message.turrets) { - const entries = globalThis.Object.entries(message.turrets) as [ - string, - TurretModelDefinition, - ][]; + const entries = globalThis.Object.entries(message.turrets) as [string, TurretModelDefinition][]; if (entries.length > 0) { obj.turrets = {}; entries.forEach(([k, v]) => { @@ -524,10 +437,7 @@ export const ModelDefinition: MessageFns = { } } if (message.tracks) { - const entries = globalThis.Object.entries(message.tracks) as [ - string, - TrackModelDefinition, - ][]; + const entries = globalThis.Object.entries(message.tracks) as [string, TrackModelDefinition][]; if (entries.length > 0) { obj.tracks = {}; entries.forEach(([k, v]) => { @@ -541,56 +451,30 @@ export const ModelDefinition: MessageFns = { return obj; }, - create, I>>( - base?: I, - ): ModelDefinition { + create, I>>(base?: I): ModelDefinition { return ModelDefinition.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): ModelDefinition { + fromPartial, I>>(object: I): ModelDefinition { const message = createBaseModelDefinition(); - message.armor = - object.armor !== undefined && object.armor !== null - ? Armor.fromPartial(object.armor) - : undefined; - message.turret_origin = - object.turret_origin !== undefined && object.turret_origin !== null - ? Vector3.fromPartial(object.turret_origin) - : undefined; + message.armor = (object.armor !== undefined && object.armor !== null) ? Armor.fromPartial(object.armor) : undefined; + message.turret_origin = (object.turret_origin !== undefined && object.turret_origin !== null) + ? Vector3.fromPartial(object.turret_origin) + : undefined; message.initial_turret_rotation = - object.initial_turret_rotation !== undefined && - object.initial_turret_rotation !== null + (object.initial_turret_rotation !== undefined && object.initial_turret_rotation !== null) ? InitialTurretRotation.fromPartial(object.initial_turret_rotation) : undefined; - message.turrets = ( - globalThis.Object.entries(object.turrets ?? {}) as [ - string, - TurretModelDefinition, - ][] - ).reduce( - ( - acc: { [key: number]: TurretModelDefinition }, - [key, value]: [string, TurretModelDefinition], - ) => { + message.turrets = (globalThis.Object.entries(object.turrets ?? {}) as [string, TurretModelDefinition][]).reduce( + (acc: { [key: number]: TurretModelDefinition }, [key, value]: [string, TurretModelDefinition]) => { if (value !== undefined) { - acc[globalThis.Number(key)] = - TurretModelDefinition.fromPartial(value); + acc[globalThis.Number(key)] = TurretModelDefinition.fromPartial(value); } return acc; }, {}, ); - message.tracks = ( - globalThis.Object.entries(object.tracks ?? {}) as [ - string, - TrackModelDefinition, - ][] - ).reduce( - ( - acc: { [key: number]: TrackModelDefinition }, - [key, value]: [string, TrackModelDefinition], - ) => { + message.tracks = (globalThis.Object.entries(object.tracks ?? {}) as [string, TrackModelDefinition][]).reduce( + (acc: { [key: number]: TrackModelDefinition }, [key, value]: [string, TrackModelDefinition]) => { if (value !== undefined) { acc[globalThis.Number(key)] = TrackModelDefinition.fromPartial(value); } @@ -598,10 +482,9 @@ export const ModelDefinition: MessageFns = { }, {}, ); - message.bounding_box = - object.bounding_box !== undefined && object.bounding_box !== null - ? BoundingBox.fromPartial(object.bounding_box) - : undefined; + message.bounding_box = (object.bounding_box !== undefined && object.bounding_box !== null) + ? BoundingBox.fromPartial(object.bounding_box) + : undefined; return message; }, }; @@ -610,217 +493,167 @@ function createBaseModelDefinition_TurretsEntry(): ModelDefinition_TurretsEntry return { key: 0, value: undefined }; } -export const ModelDefinition_TurretsEntry: MessageFns = - { - encode( - message: ModelDefinition_TurretsEntry, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { - if (message.key !== 0) { - writer.uint32(8).uint32(message.key); - } - if (message.value !== undefined) { - TurretModelDefinition.encode( - message.value, - writer.uint32(18).fork(), - ).join(); - } - return writer; - }, +export const ModelDefinition_TurretsEntry: MessageFns = { + encode(message: ModelDefinition_TurretsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.key !== 0) { + writer.uint32(8).uint32(message.key); + } + if (message.value !== undefined) { + TurretModelDefinition.encode(message.value, writer.uint32(18).fork()).join(); + } + return writer; + }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): ModelDefinition_TurretsEntry { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); - const end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseModelDefinition_TurretsEntry(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (tag !== 8) { - break; - } - - message.key = reader.uint32(); - continue; + decode(input: BinaryReader | Uint8Array, length?: number): ModelDefinition_TurretsEntry { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseModelDefinition_TurretsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (tag !== 8) { + break; } - case 2: { - if (tag !== 18) { - break; - } - message.value = TurretModelDefinition.decode( - reader, - reader.uint32(), - ); - continue; + message.key = reader.uint32(); + continue; + } + case 2: { + if (tag !== 18) { + break; } + + message.value = TurretModelDefinition.decode(reader, reader.uint32()); + continue; } - if ((tag & 7) === 4 || tag === 0) { - break; - } - reader.skip(tag & 7); } - return message; - }, - - fromJSON(object: any): ModelDefinition_TurretsEntry { - return { - key: isSet(object.key) ? globalThis.Number(object.key) : 0, - value: isSet(object.value) - ? TurretModelDefinition.fromJSON(object.value) - : undefined, - }; - }, - - toJSON(message: ModelDefinition_TurretsEntry): unknown { - const obj: any = {}; - if (message.key !== 0) { - obj.key = Math.round(message.key); + if ((tag & 7) === 4 || tag === 0) { + break; } - if (message.value !== undefined) { - obj.value = TurretModelDefinition.toJSON(message.value); - } - return obj; - }, + reader.skip(tag & 7); + } + return message; + }, - create, I>>( - base?: I, - ): ModelDefinition_TurretsEntry { - return ModelDefinition_TurretsEntry.fromPartial(base ?? ({} as any)); - }, - fromPartial, I>>( - object: I, - ): ModelDefinition_TurretsEntry { - const message = createBaseModelDefinition_TurretsEntry(); - message.key = object.key ?? 0; - message.value = - object.value !== undefined && object.value !== null - ? TurretModelDefinition.fromPartial(object.value) - : undefined; - return message; - }, - }; + fromJSON(object: any): ModelDefinition_TurretsEntry { + return { + key: isSet(object.key) ? globalThis.Number(object.key) : 0, + value: isSet(object.value) ? TurretModelDefinition.fromJSON(object.value) : undefined, + }; + }, + + toJSON(message: ModelDefinition_TurretsEntry): unknown { + const obj: any = {}; + if (message.key !== 0) { + obj.key = Math.round(message.key); + } + if (message.value !== undefined) { + obj.value = TurretModelDefinition.toJSON(message.value); + } + return obj; + }, + + create, I>>(base?: I): ModelDefinition_TurretsEntry { + return ModelDefinition_TurretsEntry.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ModelDefinition_TurretsEntry { + const message = createBaseModelDefinition_TurretsEntry(); + message.key = object.key ?? 0; + message.value = (object.value !== undefined && object.value !== null) + ? TurretModelDefinition.fromPartial(object.value) + : undefined; + return message; + }, +}; function createBaseModelDefinition_TracksEntry(): ModelDefinition_TracksEntry { return { key: 0, value: undefined }; } -export const ModelDefinition_TracksEntry: MessageFns = - { - encode( - message: ModelDefinition_TracksEntry, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { - if (message.key !== 0) { - writer.uint32(8).uint32(message.key); - } - if (message.value !== undefined) { - TrackModelDefinition.encode( - message.value, - writer.uint32(18).fork(), - ).join(); - } - return writer; - }, +export const ModelDefinition_TracksEntry: MessageFns = { + encode(message: ModelDefinition_TracksEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.key !== 0) { + writer.uint32(8).uint32(message.key); + } + if (message.value !== undefined) { + TrackModelDefinition.encode(message.value, writer.uint32(18).fork()).join(); + } + return writer; + }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): ModelDefinition_TracksEntry { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); - const end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseModelDefinition_TracksEntry(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (tag !== 8) { - break; - } - - message.key = reader.uint32(); - continue; + decode(input: BinaryReader | Uint8Array, length?: number): ModelDefinition_TracksEntry { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseModelDefinition_TracksEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (tag !== 8) { + break; } - case 2: { - if (tag !== 18) { - break; - } - message.value = TrackModelDefinition.decode( - reader, - reader.uint32(), - ); - continue; + message.key = reader.uint32(); + continue; + } + case 2: { + if (tag !== 18) { + break; } + + message.value = TrackModelDefinition.decode(reader, reader.uint32()); + continue; } - if ((tag & 7) === 4 || tag === 0) { - break; - } - reader.skip(tag & 7); } - return message; - }, - - fromJSON(object: any): ModelDefinition_TracksEntry { - return { - key: isSet(object.key) ? globalThis.Number(object.key) : 0, - value: isSet(object.value) - ? TrackModelDefinition.fromJSON(object.value) - : undefined, - }; - }, - - toJSON(message: ModelDefinition_TracksEntry): unknown { - const obj: any = {}; - if (message.key !== 0) { - obj.key = Math.round(message.key); + if ((tag & 7) === 4 || tag === 0) { + break; } - if (message.value !== undefined) { - obj.value = TrackModelDefinition.toJSON(message.value); - } - return obj; - }, + reader.skip(tag & 7); + } + return message; + }, - create, I>>( - base?: I, - ): ModelDefinition_TracksEntry { - return ModelDefinition_TracksEntry.fromPartial(base ?? ({} as any)); - }, - fromPartial, I>>( - object: I, - ): ModelDefinition_TracksEntry { - const message = createBaseModelDefinition_TracksEntry(); - message.key = object.key ?? 0; - message.value = - object.value !== undefined && object.value !== null - ? TrackModelDefinition.fromPartial(object.value) - : undefined; - return message; - }, - }; + fromJSON(object: any): ModelDefinition_TracksEntry { + return { + key: isSet(object.key) ? globalThis.Number(object.key) : 0, + value: isSet(object.value) ? TrackModelDefinition.fromJSON(object.value) : undefined, + }; + }, + + toJSON(message: ModelDefinition_TracksEntry): unknown { + const obj: any = {}; + if (message.key !== 0) { + obj.key = Math.round(message.key); + } + if (message.value !== undefined) { + obj.value = TrackModelDefinition.toJSON(message.value); + } + return obj; + }, + + create, I>>(base?: I): ModelDefinition_TracksEntry { + return ModelDefinition_TracksEntry.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): ModelDefinition_TracksEntry { + const message = createBaseModelDefinition_TracksEntry(); + message.key = object.key ?? 0; + message.value = (object.value !== undefined && object.value !== null) + ? TrackModelDefinition.fromPartial(object.value) + : undefined; + return message; + }, +}; function createBaseArmor(): Armor { return { thickness: {}, spaced: [] }; } export const Armor: MessageFns = { - encode( - message: Armor, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { - globalThis.Object.entries(message.thickness).forEach( - ([key, value]: [string, number]) => { - Armor_ThicknessEntry.encode( - { key: key as any, value }, - writer.uint32(10).fork(), - ).join(); - }, - ); + encode(message: Armor, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + globalThis.Object.entries(message.thickness).forEach(([key, value]: [string, number]) => { + Armor_ThicknessEntry.encode({ key: key as any, value }, writer.uint32(10).fork()).join(); + }); for (const v of message.spaced) { writer.uint32(16).uint32(v!); } @@ -828,8 +661,7 @@ export const Armor: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): Armor { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseArmor(); while (reader.pos < end) { @@ -876,29 +708,22 @@ export const Armor: MessageFns = { fromJSON(object: any): Armor { return { thickness: isObject(object.thickness) - ? ( - globalThis.Object.entries(object.thickness) as [string, any][] - ).reduce( - (acc: { [key: number]: number }, [key, value]: [string, any]) => { - acc[globalThis.Number(key)] = globalThis.Number(value); - return acc; - }, - {}, - ) + ? (globalThis.Object.entries(object.thickness) as [string, any][]).reduce( + (acc: { [key: number]: number }, [key, value]: [string, any]) => { + acc[globalThis.Number(key)] = globalThis.Number(value); + return acc; + }, + {}, + ) : {}, - spaced: globalThis.Array.isArray(object?.spaced) - ? object.spaced.map((e: any) => globalThis.Number(e)) - : [], + spaced: globalThis.Array.isArray(object?.spaced) ? object.spaced.map((e: any) => globalThis.Number(e)) : [], }; }, toJSON(message: Armor): unknown { const obj: any = {}; if (message.thickness) { - const entries = globalThis.Object.entries(message.thickness) as [ - string, - number, - ][]; + const entries = globalThis.Object.entries(message.thickness) as [string, number][]; if (entries.length > 0) { obj.thickness = {}; entries.forEach(([k, v]) => { @@ -917,9 +742,7 @@ export const Armor: MessageFns = { }, fromPartial, I>>(object: I): Armor { const message = createBaseArmor(); - message.thickness = ( - globalThis.Object.entries(object.thickness ?? {}) as [string, number][] - ).reduce( + message.thickness = (globalThis.Object.entries(object.thickness ?? {}) as [string, number][]).reduce( (acc: { [key: number]: number }, [key, value]: [string, number]) => { if (value !== undefined) { acc[globalThis.Number(key)] = globalThis.Number(value); @@ -938,10 +761,7 @@ function createBaseArmor_ThicknessEntry(): Armor_ThicknessEntry { } export const Armor_ThicknessEntry: MessageFns = { - encode( - message: Armor_ThicknessEntry, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: Armor_ThicknessEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.key !== 0) { writer.uint32(8).uint32(message.key); } @@ -951,12 +771,8 @@ export const Armor_ThicknessEntry: MessageFns = { return writer; }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): Armor_ThicknessEntry { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + decode(input: BinaryReader | Uint8Array, length?: number): Armor_ThicknessEntry { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseArmor_ThicknessEntry(); while (reader.pos < end) { @@ -1005,14 +821,10 @@ export const Armor_ThicknessEntry: MessageFns = { return obj; }, - create, I>>( - base?: I, - ): Armor_ThicknessEntry { + create, I>>(base?: I): Armor_ThicknessEntry { return Armor_ThicknessEntry.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): Armor_ThicknessEntry { + fromPartial, I>>(object: I): Armor_ThicknessEntry { const message = createBaseArmor_ThicknessEntry(); message.key = object.key ?? 0; message.value = object.value ?? 0; @@ -1025,10 +837,7 @@ function createBaseVector3(): Vector3 { } export const Vector3: MessageFns = { - encode( - message: Vector3, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: Vector3, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.x !== 0) { writer.uint32(13).float(message.x); } @@ -1042,8 +851,7 @@ export const Vector3: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): Vector3 { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseVector3(); while (reader.pos < end) { @@ -1121,10 +929,7 @@ function createBaseInitialTurretRotation(): InitialTurretRotation { } export const InitialTurretRotation: MessageFns = { - encode( - message: InitialTurretRotation, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: InitialTurretRotation, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.yaw !== 0) { writer.uint32(13).float(message.yaw); } @@ -1137,12 +942,8 @@ export const InitialTurretRotation: MessageFns = { return writer; }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): InitialTurretRotation { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + decode(input: BinaryReader | Uint8Array, length?: number): InitialTurretRotation { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseInitialTurretRotation(); while (reader.pos < end) { @@ -1203,14 +1004,10 @@ export const InitialTurretRotation: MessageFns = { return obj; }, - create, I>>( - base?: I, - ): InitialTurretRotation { + create, I>>(base?: I): InitialTurretRotation { return InitialTurretRotation.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): InitialTurretRotation { + fromPartial, I>>(object: I): InitialTurretRotation { const message = createBaseInitialTurretRotation(); message.yaw = object.yaw ?? 0; message.pitch = object.pitch ?? 0; @@ -1220,26 +1017,13 @@ export const InitialTurretRotation: MessageFns = { }; function createBaseTurretModelDefinition(): TurretModelDefinition { - return { - bounding_box: undefined, - armor: undefined, - model_id: 0, - gun_origin: undefined, - guns: {}, - yaw: undefined, - }; + return { bounding_box: undefined, armor: undefined, model_id: 0, gun_origin: undefined, guns: {}, yaw: undefined }; } export const TurretModelDefinition: MessageFns = { - encode( - message: TurretModelDefinition, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: TurretModelDefinition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.bounding_box !== undefined) { - BoundingBox.encode( - message.bounding_box!, - writer.uint32(10).fork(), - ).join(); + BoundingBox.encode(message.bounding_box, writer.uint32(10).fork()).join(); } if (message.armor !== undefined) { Armor.encode(message.armor, writer.uint32(18).fork()).join(); @@ -1250,26 +1034,17 @@ export const TurretModelDefinition: MessageFns = { if (message.gun_origin !== undefined) { Vector3.encode(message.gun_origin, writer.uint32(34).fork()).join(); } - globalThis.Object.entries(message.guns).forEach( - ([key, value]: [string, GunModelDefinition]) => { - TurretModelDefinition_GunsEntry.encode( - { key: key as any, value }, - writer.uint32(42).fork(), - ).join(); - }, - ); + globalThis.Object.entries(message.guns).forEach(([key, value]: [string, GunModelDefinition]) => { + TurretModelDefinition_GunsEntry.encode({ key: key as any, value }, writer.uint32(42).fork()).join(); + }); if (message.yaw !== undefined) { YawLimits.encode(message.yaw, writer.uint32(50).fork()).join(); } return writer; }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): TurretModelDefinition { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + decode(input: BinaryReader | Uint8Array, length?: number): TurretModelDefinition { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseTurretModelDefinition(); while (reader.pos < end) { @@ -1312,10 +1087,7 @@ export const TurretModelDefinition: MessageFns = { break; } - const entry5 = TurretModelDefinition_GunsEntry.decode( - reader, - reader.uint32(), - ); + const entry5 = TurretModelDefinition_GunsEntry.decode(reader, reader.uint32()); if (entry5.value !== undefined) { message.guns[entry5.key] = entry5.value; } @@ -1343,30 +1115,27 @@ export const TurretModelDefinition: MessageFns = { bounding_box: isSet(object.boundingBox) ? BoundingBox.fromJSON(object.boundingBox) : isSet(object.bounding_box) - ? BoundingBox.fromJSON(object.bounding_box) - : undefined, + ? BoundingBox.fromJSON(object.bounding_box) + : undefined, armor: isSet(object.armor) ? Armor.fromJSON(object.armor) : undefined, model_id: isSet(object.modelId) ? globalThis.Number(object.modelId) : isSet(object.model_id) - ? globalThis.Number(object.model_id) - : 0, + ? globalThis.Number(object.model_id) + : 0, gun_origin: isSet(object.gunOrigin) ? Vector3.fromJSON(object.gunOrigin) : isSet(object.gun_origin) - ? Vector3.fromJSON(object.gun_origin) - : undefined, + ? Vector3.fromJSON(object.gun_origin) + : undefined, guns: isObject(object.guns) ? (globalThis.Object.entries(object.guns) as [string, any][]).reduce( - ( - acc: { [key: number]: GunModelDefinition }, - [key, value]: [string, any], - ) => { - acc[globalThis.Number(key)] = GunModelDefinition.fromJSON(value); - return acc; - }, - {}, - ) + (acc: { [key: number]: GunModelDefinition }, [key, value]: [string, any]) => { + acc[globalThis.Number(key)] = GunModelDefinition.fromJSON(value); + return acc; + }, + {}, + ) : {}, yaw: isSet(object.yaw) ? YawLimits.fromJSON(object.yaw) : undefined, }; @@ -1387,10 +1156,7 @@ export const TurretModelDefinition: MessageFns = { obj.gunOrigin = Vector3.toJSON(message.gun_origin); } if (message.guns) { - const entries = globalThis.Object.entries(message.guns) as [ - string, - GunModelDefinition, - ][]; + const entries = globalThis.Object.entries(message.guns) as [string, GunModelDefinition][]; if (entries.length > 0) { obj.guns = {}; entries.forEach(([k, v]) => { @@ -1404,38 +1170,21 @@ export const TurretModelDefinition: MessageFns = { return obj; }, - create, I>>( - base?: I, - ): TurretModelDefinition { + create, I>>(base?: I): TurretModelDefinition { return TurretModelDefinition.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): TurretModelDefinition { + fromPartial, I>>(object: I): TurretModelDefinition { const message = createBaseTurretModelDefinition(); - message.bounding_box = - object.bounding_box !== undefined && object.bounding_box !== null - ? BoundingBox.fromPartial(object.bounding_box) - : undefined; - message.armor = - object.armor !== undefined && object.armor !== null - ? Armor.fromPartial(object.armor) - : undefined; + message.bounding_box = (object.bounding_box !== undefined && object.bounding_box !== null) + ? BoundingBox.fromPartial(object.bounding_box) + : undefined; + message.armor = (object.armor !== undefined && object.armor !== null) ? Armor.fromPartial(object.armor) : undefined; message.model_id = object.model_id ?? 0; - message.gun_origin = - object.gun_origin !== undefined && object.gun_origin !== null - ? Vector3.fromPartial(object.gun_origin) - : undefined; - message.guns = ( - globalThis.Object.entries(object.guns ?? {}) as [ - string, - GunModelDefinition, - ][] - ).reduce( - ( - acc: { [key: number]: GunModelDefinition }, - [key, value]: [string, GunModelDefinition], - ) => { + message.gun_origin = (object.gun_origin !== undefined && object.gun_origin !== null) + ? Vector3.fromPartial(object.gun_origin) + : undefined; + message.guns = (globalThis.Object.entries(object.guns ?? {}) as [string, GunModelDefinition][]).reduce( + (acc: { [key: number]: GunModelDefinition }, [key, value]: [string, GunModelDefinition]) => { if (value !== undefined) { acc[globalThis.Number(key)] = GunModelDefinition.fromPartial(value); } @@ -1443,10 +1192,7 @@ export const TurretModelDefinition: MessageFns = { }, {}, ); - message.yaw = - object.yaw !== undefined && object.yaw !== null - ? YawLimits.fromPartial(object.yaw) - : undefined; + message.yaw = (object.yaw !== undefined && object.yaw !== null) ? YawLimits.fromPartial(object.yaw) : undefined; return message; }, }; @@ -1455,107 +1201,88 @@ function createBaseTurretModelDefinition_GunsEntry(): TurretModelDefinition_Guns return { key: 0, value: undefined }; } -export const TurretModelDefinition_GunsEntry: MessageFns = - { - encode( - message: TurretModelDefinition_GunsEntry, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { - if (message.key !== 0) { - writer.uint32(8).uint32(message.key); - } - if (message.value !== undefined) { - GunModelDefinition.encode( - message.value, - writer.uint32(18).fork(), - ).join(); - } - return writer; - }, +export const TurretModelDefinition_GunsEntry: MessageFns = { + encode(message: TurretModelDefinition_GunsEntry, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.key !== 0) { + writer.uint32(8).uint32(message.key); + } + if (message.value !== undefined) { + GunModelDefinition.encode(message.value, writer.uint32(18).fork()).join(); + } + return writer; + }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): TurretModelDefinition_GunsEntry { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); - const end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseTurretModelDefinition_GunsEntry(); - while (reader.pos < end) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (tag !== 8) { - break; - } - - message.key = reader.uint32(); - continue; + decode(input: BinaryReader | Uint8Array, length?: number): TurretModelDefinition_GunsEntry { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseTurretModelDefinition_GunsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (tag !== 8) { + break; } - case 2: { - if (tag !== 18) { - break; - } - message.value = GunModelDefinition.decode(reader, reader.uint32()); - continue; + message.key = reader.uint32(); + continue; + } + case 2: { + if (tag !== 18) { + break; } + + message.value = GunModelDefinition.decode(reader, reader.uint32()); + continue; } - if ((tag & 7) === 4 || tag === 0) { - break; - } - reader.skip(tag & 7); } - return message; - }, - - fromJSON(object: any): TurretModelDefinition_GunsEntry { - return { - key: isSet(object.key) ? globalThis.Number(object.key) : 0, - value: isSet(object.value) - ? GunModelDefinition.fromJSON(object.value) - : undefined, - }; - }, - - toJSON(message: TurretModelDefinition_GunsEntry): unknown { - const obj: any = {}; - if (message.key !== 0) { - obj.key = Math.round(message.key); + if ((tag & 7) === 4 || tag === 0) { + break; } - if (message.value !== undefined) { - obj.value = GunModelDefinition.toJSON(message.value); - } - return obj; - }, + reader.skip(tag & 7); + } + return message; + }, - create, I>>( - base?: I, - ): TurretModelDefinition_GunsEntry { - return TurretModelDefinition_GunsEntry.fromPartial(base ?? ({} as any)); - }, - fromPartial< - I extends Exact, I>, - >(object: I): TurretModelDefinition_GunsEntry { - const message = createBaseTurretModelDefinition_GunsEntry(); - message.key = object.key ?? 0; - message.value = - object.value !== undefined && object.value !== null - ? GunModelDefinition.fromPartial(object.value) - : undefined; - return message; - }, - }; + fromJSON(object: any): TurretModelDefinition_GunsEntry { + return { + key: isSet(object.key) ? globalThis.Number(object.key) : 0, + value: isSet(object.value) ? GunModelDefinition.fromJSON(object.value) : undefined, + }; + }, + + toJSON(message: TurretModelDefinition_GunsEntry): unknown { + const obj: any = {}; + if (message.key !== 0) { + obj.key = Math.round(message.key); + } + if (message.value !== undefined) { + obj.value = GunModelDefinition.toJSON(message.value); + } + return obj; + }, + + create, I>>(base?: I): TurretModelDefinition_GunsEntry { + return TurretModelDefinition_GunsEntry.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>( + object: I, + ): TurretModelDefinition_GunsEntry { + const message = createBaseTurretModelDefinition_GunsEntry(); + message.key = object.key ?? 0; + message.value = (object.value !== undefined && object.value !== null) + ? GunModelDefinition.fromPartial(object.value) + : undefined; + return message; + }, +}; function createBaseYawLimits(): YawLimits { return { min: 0, max: 0 }; } export const YawLimits: MessageFns = { - encode( - message: YawLimits, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: YawLimits, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.min !== 0) { writer.uint32(13).float(message.min); } @@ -1566,8 +1293,7 @@ export const YawLimits: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): YawLimits { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseYawLimits(); while (reader.pos < end) { @@ -1619,9 +1345,7 @@ export const YawLimits: MessageFns = { create, I>>(base?: I): YawLimits { return YawLimits.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): YawLimits { + fromPartial, I>>(object: I): YawLimits { const message = createBaseYawLimits(); message.min = object.min ?? 0; message.max = object.max ?? 0; @@ -1634,10 +1358,7 @@ function createBaseBoundingBox(): BoundingBox { } export const BoundingBox: MessageFns = { - encode( - message: BoundingBox, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: BoundingBox, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.min !== undefined) { Vector3.encode(message.min, writer.uint32(10).fork()).join(); } @@ -1648,8 +1369,7 @@ export const BoundingBox: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): BoundingBox { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseBoundingBox(); while (reader.pos < end) { @@ -1701,18 +1421,10 @@ export const BoundingBox: MessageFns = { create, I>>(base?: I): BoundingBox { return BoundingBox.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): BoundingBox { + fromPartial, I>>(object: I): BoundingBox { const message = createBaseBoundingBox(); - message.min = - object.min !== undefined && object.min !== null - ? Vector3.fromPartial(object.min) - : undefined; - message.max = - object.max !== undefined && object.max !== null - ? Vector3.fromPartial(object.max) - : undefined; + message.min = (object.min !== undefined && object.min !== null) ? Vector3.fromPartial(object.min) : undefined; + message.max = (object.max !== undefined && object.max !== null) ? Vector3.fromPartial(object.max) : undefined; return message; }, }; @@ -1722,10 +1434,7 @@ function createBaseTrackModelDefinition(): TrackModelDefinition { } export const TrackModelDefinition: MessageFns = { - encode( - message: TrackModelDefinition, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: TrackModelDefinition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.thickness !== 0) { writer.uint32(13).float(message.thickness); } @@ -1735,12 +1444,8 @@ export const TrackModelDefinition: MessageFns = { return writer; }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): TrackModelDefinition { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + decode(input: BinaryReader | Uint8Array, length?: number): TrackModelDefinition { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseTrackModelDefinition(); while (reader.pos < end) { @@ -1773,12 +1478,8 @@ export const TrackModelDefinition: MessageFns = { fromJSON(object: any): TrackModelDefinition { return { - thickness: isSet(object.thickness) - ? globalThis.Number(object.thickness) - : 0, - origin: isSet(object.origin) - ? Vector3.fromJSON(object.origin) - : undefined, + thickness: isSet(object.thickness) ? globalThis.Number(object.thickness) : 0, + origin: isSet(object.origin) ? Vector3.fromJSON(object.origin) : undefined, }; }, @@ -1793,39 +1494,25 @@ export const TrackModelDefinition: MessageFns = { return obj; }, - create, I>>( - base?: I, - ): TrackModelDefinition { + create, I>>(base?: I): TrackModelDefinition { return TrackModelDefinition.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): TrackModelDefinition { + fromPartial, I>>(object: I): TrackModelDefinition { const message = createBaseTrackModelDefinition(); message.thickness = object.thickness ?? 0; - message.origin = - object.origin !== undefined && object.origin !== null - ? Vector3.fromPartial(object.origin) - : undefined; + message.origin = (object.origin !== undefined && object.origin !== null) + ? Vector3.fromPartial(object.origin) + : undefined; return message; }, }; function createBaseGunModelDefinition(): GunModelDefinition { - return { - armor: undefined, - thickness: 0, - model_id: 0, - pitch: undefined, - mask: 0, - }; + return { armor: undefined, thickness: 0, model_id: 0, pitch: undefined, mask: 0 }; } export const GunModelDefinition: MessageFns = { - encode( - message: GunModelDefinition, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: GunModelDefinition, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.armor !== undefined) { Armor.encode(message.armor, writer.uint32(10).fork()).join(); } @@ -1844,12 +1531,8 @@ export const GunModelDefinition: MessageFns = { return writer; }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): GunModelDefinition { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + decode(input: BinaryReader | Uint8Array, length?: number): GunModelDefinition { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGunModelDefinition(); while (reader.pos < end) { @@ -1907,17 +1590,13 @@ export const GunModelDefinition: MessageFns = { fromJSON(object: any): GunModelDefinition { return { armor: isSet(object.armor) ? Armor.fromJSON(object.armor) : undefined, - thickness: isSet(object.thickness) - ? globalThis.Number(object.thickness) - : 0, + thickness: isSet(object.thickness) ? globalThis.Number(object.thickness) : 0, model_id: isSet(object.modelId) ? globalThis.Number(object.modelId) : isSet(object.model_id) - ? globalThis.Number(object.model_id) - : 0, - pitch: isSet(object.pitch) - ? PitchLimits.fromJSON(object.pitch) - : undefined, + ? globalThis.Number(object.model_id) + : 0, + pitch: isSet(object.pitch) ? PitchLimits.fromJSON(object.pitch) : undefined, mask: isSet(object.mask) ? globalThis.Number(object.mask) : 0, }; }, @@ -1942,25 +1621,17 @@ export const GunModelDefinition: MessageFns = { return obj; }, - create, I>>( - base?: I, - ): GunModelDefinition { + create, I>>(base?: I): GunModelDefinition { return GunModelDefinition.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): GunModelDefinition { + fromPartial, I>>(object: I): GunModelDefinition { const message = createBaseGunModelDefinition(); - message.armor = - object.armor !== undefined && object.armor !== null - ? Armor.fromPartial(object.armor) - : undefined; + message.armor = (object.armor !== undefined && object.armor !== null) ? Armor.fromPartial(object.armor) : undefined; message.thickness = object.thickness ?? 0; message.model_id = object.model_id ?? 0; - message.pitch = - object.pitch !== undefined && object.pitch !== null - ? PitchLimits.fromPartial(object.pitch) - : undefined; + message.pitch = (object.pitch !== undefined && object.pitch !== null) + ? PitchLimits.fromPartial(object.pitch) + : undefined; message.mask = object.mask ?? 0; return message; }, @@ -1971,10 +1642,7 @@ function createBasePitchLimits(): PitchLimits { } export const PitchLimits: MessageFns = { - encode( - message: PitchLimits, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: PitchLimits, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.min !== 0) { writer.uint32(13).float(message.min); } @@ -1994,8 +1662,7 @@ export const PitchLimits: MessageFns = { }, decode(input: BinaryReader | Uint8Array, length?: number): PitchLimits { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBasePitchLimits(); while (reader.pos < end) { @@ -2054,15 +1721,9 @@ export const PitchLimits: MessageFns = { return { min: isSet(object.min) ? globalThis.Number(object.min) : 0, max: isSet(object.max) ? globalThis.Number(object.max) : 0, - front: isSet(object.front) - ? PitchLimitsExtrema.fromJSON(object.front) - : undefined, - back: isSet(object.back) - ? PitchLimitsExtrema.fromJSON(object.back) - : undefined, - transition: isSet(object.transition) - ? globalThis.Number(object.transition) - : 0, + front: isSet(object.front) ? PitchLimitsExtrema.fromJSON(object.front) : undefined, + back: isSet(object.back) ? PitchLimitsExtrema.fromJSON(object.back) : undefined, + transition: isSet(object.transition) ? globalThis.Number(object.transition) : 0, }; }, @@ -2089,20 +1750,16 @@ export const PitchLimits: MessageFns = { create, I>>(base?: I): PitchLimits { return PitchLimits.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): PitchLimits { + fromPartial, I>>(object: I): PitchLimits { const message = createBasePitchLimits(); message.min = object.min ?? 0; message.max = object.max ?? 0; - message.front = - object.front !== undefined && object.front !== null - ? PitchLimitsExtrema.fromPartial(object.front) - : undefined; - message.back = - object.back !== undefined && object.back !== null - ? PitchLimitsExtrema.fromPartial(object.back) - : undefined; + message.front = (object.front !== undefined && object.front !== null) + ? PitchLimitsExtrema.fromPartial(object.front) + : undefined; + message.back = (object.back !== undefined && object.back !== null) + ? PitchLimitsExtrema.fromPartial(object.back) + : undefined; message.transition = object.transition ?? 0; return message; }, @@ -2113,10 +1770,7 @@ function createBasePitchLimitsExtrema(): PitchLimitsExtrema { } export const PitchLimitsExtrema: MessageFns = { - encode( - message: PitchLimitsExtrema, - writer: BinaryWriter = new BinaryWriter(), - ): BinaryWriter { + encode(message: PitchLimitsExtrema, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { if (message.min !== 0) { writer.uint32(13).float(message.min); } @@ -2129,12 +1783,8 @@ export const PitchLimitsExtrema: MessageFns = { return writer; }, - decode( - input: BinaryReader | Uint8Array, - length?: number, - ): PitchLimitsExtrema { - const reader = - input instanceof BinaryReader ? input : new BinaryReader(input); + decode(input: BinaryReader | Uint8Array, length?: number): PitchLimitsExtrema { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); const end = length === undefined ? reader.len : reader.pos + length; const message = createBasePitchLimitsExtrema(); while (reader.pos < end) { @@ -2195,14 +1845,10 @@ export const PitchLimitsExtrema: MessageFns = { return obj; }, - create, I>>( - base?: I, - ): PitchLimitsExtrema { + create, I>>(base?: I): PitchLimitsExtrema { return PitchLimitsExtrema.fromPartial(base ?? ({} as any)); }, - fromPartial, I>>( - object: I, - ): PitchLimitsExtrema { + fromPartial, I>>(object: I): PitchLimitsExtrema { const message = createBasePitchLimitsExtrema(); message.min = object.min ?? 0; message.max = object.max ?? 0; @@ -2211,33 +1857,18 @@ export const PitchLimitsExtrema: MessageFns = { }, }; -type Builtin = - | Date - | Function - | Uint8Array - | string - | number - | boolean - | undefined; +type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; -export type DeepPartial = T extends Builtin - ? T - : T extends globalThis.Array - ? globalThis.Array> - : T extends ReadonlyArray - ? ReadonlyArray> - : T extends { $case: string; value: unknown } - ? { $case: T["$case"]; value?: DeepPartial } - : T extends {} - ? { [K in keyof T]?: DeepPartial } - : Partial; +export type DeepPartial = T extends Builtin ? T + : T extends globalThis.Array ? globalThis.Array> + : T extends ReadonlyArray ? ReadonlyArray> + : T extends { $case: string; value: unknown } ? { $case: T["$case"]; value?: DeepPartial } + : T extends {} ? { [K in keyof T]?: DeepPartial } + : Partial; type KeysOfUnion = T extends T ? keyof T : never; -export type Exact = P extends Builtin - ? P - : P & { [K in keyof P]: Exact } & { - [K in Exclude>]: never; - }; +export type Exact = P extends Builtin ? P + : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; function isObject(value: any): boolean { return typeof value === "object" && value !== null; diff --git a/packages/core/src/protos/tank_definitions.proto b/packages/core/src/protos/tank_definitions.proto index 95012f312..f38834482 100644 --- a/packages/core/src/protos/tank_definitions.proto +++ b/packages/core/src/protos/tank_definitions.proto @@ -40,6 +40,15 @@ message TankDefinition { required string equipment_preset = 30; required uint32 weight = 31; required string dev_name = 32; + required Equalizer equalizer = 33; +} + +message Equalizer { + required float health = 1; + required float penetration = 2; + required float module_health = 3; + required float damage = 4; + required float armor = 5; } message ResearchCost { diff --git a/packages/core/src/protos/tank_definitions.ts b/packages/core/src/protos/tank_definitions.ts index 96ce53cc3..16c86e1df 100644 --- a/packages/core/src/protos/tank_definitions.ts +++ b/packages/core/src/protos/tank_definitions.ts @@ -291,6 +291,7 @@ export interface TankDefinition { equipment_preset: string; weight: number; dev_name: string; + equalizer: Equalizer | undefined; } export interface TankDefinition_RolesEntry { @@ -298,6 +299,14 @@ export interface TankDefinition_RolesEntry { value: number; } +export interface Equalizer { + health: number; + penetration: number; + module_health: number; + damage: number; + armor: number; +} + export interface ResearchCost { research_cost_type?: | { $case: "xp"; value: number } @@ -644,6 +653,7 @@ function createBaseTankDefinition(): TankDefinition { equipment_preset: "", weight: 0, dev_name: "", + equalizer: undefined, }; } @@ -742,6 +752,9 @@ export const TankDefinition: MessageFns = { if (message.dev_name !== "") { writer.uint32(258).string(message.dev_name); } + if (message.equalizer !== undefined) { + Equalizer.encode(message.equalizer, writer.uint32(266).fork()).join(); + } return writer; }, @@ -1033,6 +1046,14 @@ export const TankDefinition: MessageFns = { message.dev_name = reader.string(); continue; } + case 33: { + if (tag !== 266) { + break; + } + + message.equalizer = Equalizer.decode(reader, reader.uint32()); + continue; + } } if ((tag & 7) === 4 || tag === 0) { break; @@ -1141,6 +1162,7 @@ export const TankDefinition: MessageFns = { : isSet(object.dev_name) ? globalThis.String(object.dev_name) : "", + equalizer: isSet(object.equalizer) ? Equalizer.fromJSON(object.equalizer) : undefined, }; }, @@ -1245,6 +1267,9 @@ export const TankDefinition: MessageFns = { if (message.dev_name !== "") { obj.devName = message.dev_name; } + if (message.equalizer !== undefined) { + obj.equalizer = Equalizer.toJSON(message.equalizer); + } return obj; }, @@ -1298,6 +1323,9 @@ export const TankDefinition: MessageFns = { message.equipment_preset = object.equipment_preset ?? ""; message.weight = object.weight ?? 0; message.dev_name = object.dev_name ?? ""; + message.equalizer = (object.equalizer !== undefined && object.equalizer !== null) + ? Equalizer.fromPartial(object.equalizer) + : undefined; return message; }, }; @@ -1378,6 +1406,134 @@ export const TankDefinition_RolesEntry: MessageFns = }, }; +function createBaseEqualizer(): Equalizer { + return { health: 0, penetration: 0, module_health: 0, damage: 0, armor: 0 }; +} + +export const Equalizer: MessageFns = { + encode(message: Equalizer, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.health !== 0) { + writer.uint32(13).float(message.health); + } + if (message.penetration !== 0) { + writer.uint32(21).float(message.penetration); + } + if (message.module_health !== 0) { + writer.uint32(29).float(message.module_health); + } + if (message.damage !== 0) { + writer.uint32(37).float(message.damage); + } + if (message.armor !== 0) { + writer.uint32(45).float(message.armor); + } + return writer; + }, + + decode(input: BinaryReader | Uint8Array, length?: number): Equalizer { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + const end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseEqualizer(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: { + if (tag !== 13) { + break; + } + + message.health = reader.float(); + continue; + } + case 2: { + if (tag !== 21) { + break; + } + + message.penetration = reader.float(); + continue; + } + case 3: { + if (tag !== 29) { + break; + } + + message.module_health = reader.float(); + continue; + } + case 4: { + if (tag !== 37) { + break; + } + + message.damage = reader.float(); + continue; + } + case 5: { + if (tag !== 45) { + break; + } + + message.armor = reader.float(); + continue; + } + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skip(tag & 7); + } + return message; + }, + + fromJSON(object: any): Equalizer { + return { + health: isSet(object.health) ? globalThis.Number(object.health) : 0, + penetration: isSet(object.penetration) ? globalThis.Number(object.penetration) : 0, + module_health: isSet(object.moduleHealth) + ? globalThis.Number(object.moduleHealth) + : isSet(object.module_health) + ? globalThis.Number(object.module_health) + : 0, + damage: isSet(object.damage) ? globalThis.Number(object.damage) : 0, + armor: isSet(object.armor) ? globalThis.Number(object.armor) : 0, + }; + }, + + toJSON(message: Equalizer): unknown { + const obj: any = {}; + if (message.health !== 0) { + obj.health = message.health; + } + if (message.penetration !== 0) { + obj.penetration = message.penetration; + } + if (message.module_health !== 0) { + obj.moduleHealth = message.module_health; + } + if (message.damage !== 0) { + obj.damage = message.damage; + } + if (message.armor !== 0) { + obj.armor = message.armor; + } + return obj; + }, + + create, I>>(base?: I): Equalizer { + return Equalizer.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): Equalizer { + const message = createBaseEqualizer(); + message.health = object.health ?? 0; + message.penetration = object.penetration ?? 0; + message.module_health = object.module_health ?? 0; + message.damage = object.damage ?? 0; + message.armor = object.armor ?? 0; + return message; + }, +}; + function createBaseResearchCost(): ResearchCost { return { research_cost_type: undefined }; } diff --git a/packages/scripts/stub/equializer.csv b/packages/scripts/stub/equializer.csv new file mode 100644 index 000000000..8daa17247 --- /dev/null +++ b/packages/scripts/stub/equializer.csv @@ -0,0 +1,619 @@ +name;maxHealthFactor;piercingPowerFactor;moduleHealthFactor;damageFactor;armorFactor +china:Ch01_Type59;1.3;1.33;1.5;1.29;1.35 +china:Ch02_Type62;1.5;1.6;1.5;1.27;1.61 +china:Ch03_WZ-111;1.4;1.17;1.4;1.3;1.35 +china:Ch04_T34_1;1.5;1.54;1.4;1.3;1.61 +china:Ch05_T34_2;1.3;1.33;1.5;1.29;1.34 +china:Ch07_Vickers_MkE_Type_BT26;5.5;5.07;3.3;7.05;8.8 +china:Ch08_Type97_Chi_Ha;3.7;3.71;2.2;3.13;5.56 +china:Ch09_M5;2.9;2.91;1.9;2.54;3.47 +china:Ch10_IS2;1.6;1.44;1.4;1.33;1.61 +china:Ch11_110;1.4;1.17;1.4;1.29;1.35 +china:Ch12_111_1_2_3;1.2;1.02;1.4;1.17;1.14 +china:Ch14_T34_3;1.3;1.37;1.5;1.13;1.17 +china:Ch15_59_16;1.9;1.77;1.6;1.57;2.24 +china:Ch15_59_16_BP;1.9;1.7;1.6;1.56;2.24 +china:Ch16_WZ_131;1.6;1.52;1.5;1.28;1.61 +china:Ch17_WZ131_1_WZ132;1.4;1.22;1.5;1.29;1.34 +china:Ch18_WZ-120;1.1;1.09;1.4;1.11;1.17 +china:Ch20_Type58;1.9;1.88;1.5;1.57;1.86 +china:Ch21_T34;2.7;2.1;1.7;1.97;2.12 +china:Ch23_112;1.4;1.17;1.4;1.31;1.35 +china:Ch24_Type64;1.9;1.86;1.6;1.57;2.35 +china:Ch26_59_Patton;1.3;1.33;1.5;1.1;1.16 +china:Ch28_WZ_132A;1.1;1.04;1.5;1.11;1.24 +china:Ch34_WZ-131G_FT;2.1;1.57;1.4;1.51;1.73 +china:Ch34_WZ-131G_FT_BP;2.1;1.57;1.4;1.51;2.02 +china:Ch35_T-34-2G_FT;1.8;1.48;1.4;1.25;1.61 +china:Ch36_WZ-111-1G_FT;1.6;1.16;1.4;1.25;1.35 +china:Ch37_WZ-111G_FT;1.2;1.05;1.4;1.15;1.13 +china:Ch39_WZ120_1G_FT;1.6;1.16;1.4;1.24;1.35 +china:Ch40_WZ120G_FT;1.1;1.05;1.4;1.08;1.13 +china:Ch42_M41D;1.7;1.49;1.5;1.24;1.61 +china:Ch43_WZ-122_2;1.3;1.21;1.5;1.31;1.35 +china:Ch45_WZ_114;1.2;1.02;1.4;1.19;1.13 +china:Ch47_BZ_176;1.2;1.03;1.4;1.17;1.13 +china:Ch49_BZ_68;1.2;1.02;1.4;1.2;1.16 +china:Ch50_BZ_166;1.4;1.17;1.4;1.3;1.35 +china:Ch51_BZ_58;1.6;1.46;1.4;1.29;1.62 +china:Ch56_BZ_74_1;1.2;1.02;1.4;1.16;1.14 +china:Ch59_BZ58_2;1.2;1.02;1.4;1.19;1.13 +china:Ch60_Type59_spc;1.3;1.37;1.5;1.32;1.35 +china:Ch_LT_vz38;4.3;4.29;2.7;3.99;4.88 +china:Ch_WZ-112v2;1.4;1.17;1.4;1.31;1.35 +china:Type_58BP;1.9;1.88;1.5;1.57;2.04 +european:Cz02_T50;1.1;1.03;1.4;1.12;1.19 +european:Cz05_T34-100;1.5;1.45;1.4;1.29;1.61 +european:Cz07_TVP_46;1.3;1.12;1.5;1.29;1.35 +european:Cz08_T-25;1.9;1.83;1.5;1.56;2.02 +european:Cz08_T-25BP;1.9;1.83;1.5;1.55;2.02 +european:Cz08_T-25BPS;1.9;1.83;1.5;1.57;2.02 +european:Cz13_T-27;1.1;1.07;1.4;1.12;1.19 +european:Cz14_Skoda_T-56;1.4;1.17;1.4;1.33;1.35 +european:Cz15_Skoda_T-45;1.7;1.44;1.4;1.27;1.61 +european:Cz16_TNH_T_vz51;1.2;1.02;1.4;1.17;1.15 +european:Cz18_TNH_105_1000;1.4;1.16;1.4;1.28;1.35 +european:Cz19_Vz_44_1;1.7;1.43;1.4;1.3;1.61 +european:Cz20_ShPTK_TVP_100;1.5;1.16;1.4;1.24;1.34 +european:Cz29_Skoda_P-JS;2.2;1.67;1.4;1.56;1.78 +european:Cz29_Skoda_P-JS_BP;2.2;1.67;1.4;1.57;1.79 +european:F01_Vickers_MkF;5.5;5.07;3.3;6.16;8.8 +european:It09_P43_ter;1.5;1.54;1.4;1.3;1.61 +european:It10_P43_BD;1.9;1.74;1.5;1.57;1.82 +european:It10_P43_bis;1.9;1.74;1.5;1.57;1.82 +european:It10_P43_bis_BP;1.9;1.7;1.5;1.58;1.82 +european:It116_Carro_d_assalto_P88;1.6;1.33;1.4;1.28;1.61 +european:It117_ProgettoCC55mod54;1.3;1.13;1.4;1.29;1.35 +european:It119_ProgettoC50mod66;1.1;1.02;1.4;1.18;1.13 +european:It12_Prototipo_Standard_B;1.1;1.04;1.4;1.14;1.17 +european:It13_Progetto_M35_mod_46;1.3;1.33;1.5;1.27;1.35 +european:It14_P44_Pantera;1.3;1.21;1.5;1.26;1.35 +european:It15_Semovente_M41;3.2;1.98;1.5;1.97;2.13 +european:It16_Bassoto;2;1.59;1.4;1.53;1.8 +european:It17_Semovente_mod_56;1.7;1.4;1.4;1.28;1.62 +european:It18_Semovente_mod_64;1.4;1.2;1.4;1.24;1.35 +european:It19_Controcarro_1MK2_Ciclope;1.1;1.05;1.4;1.19;1.13 +european:It22_Progetto_C45_mod_71;1.3;1.14;1.4;1.23;1.35 +european:It30_CC_mod_64_Prem;1.4;1.17;1.4;1.25;1.35 +european:Pl03_PzV_Pudel;1.9;1.57;1.5;1.56;1.92 +european:Pl05_50TP_Tyszkiewicza;1.2;1.02;1.4;1.18;1.13 +european:Pl06_10TP;4.3;4.29;2.7;4.28;7.66 +european:Pl07_14TP;3.6;3.57;2.1;3.12;5.56 +european:Pl08_50TP_prot;1.2;1.02;1.4;1.17;1.14 +european:Pl10_40TP_Habicha;2.1;1.64;1.4;1.57;1.83 +european:Pl119_CS_52_LIS;1.5;1.56;1.4;1.31;1.61 +european:Pl11_45TP_Habicha;1.6;1.44;1.4;1.3;1.61 +european:Pl13_53TP_Markowskiego;1.4;1.14;1.4;1.32;1.35 +european:Pl17_DS_PZlnz;2.6;2.28;1.7;1.95;2.12 +european:Pl18_BUGI;1.9;1.57;1.5;1.58;1.94 +european:Pl20_CS_44;1.5;1.54;1.4;1.3;1.61 +european:Pl22_CS_59;1.1;1.04;1.4;1.1;1.21 +european:Pl23_CS_53;1.3;1.31;1.5;1.29;1.35 +european:Pl24_56TP;1.4;1.15;1.4;1.29;1.35 +european:Pl27_SDP_Wz_66T;1.5;1.17;1.4;1.27;1.35 +european:Pl28_SDP_Wz_60;1.1;1.05;1.4;1.11;1.12 +european:Pl30_SDP_Wz58T;1.4;1.16;1.4;1.26;1.35 +european:Pl31_SDP_Wz_57D;1.7;1.43;1.4;1.28;1.62 +european:Pl32_SDP_Wz_44;2;1.57;1.4;1.52;1.76 +european:Pl33_SDP_Wz_40;3.2;2.13;1.5;1.96;2.13 +european:S02_StrvM42;2.7;2.22;1.7;1.95;2.11 +european:S04_Lago-I;3.1;2.69;1.9;2.54;2.32 +european:S07_Strv74BP;1.9;1.67;1.5;1.55;1.9 +european:S07_Strv_74;1.9;1.67;1.5;1.55;1.9 +european:S13_Leo;1.5;1.58;1.4;1.3;1.61 +european:S13_Leo_NY;1.5;1.58;1.4;1.3;1.61 +european:S17_EMIL_1952E2;1.2;1.02;1.4;1.16;1.12 +european:S18_EMIL_1951E1;1.3;1.16;1.4;1.29;1.35 +european:S23_Strv_81;1.3;1.14;1.5;1.26;1.35 +european:S25_EMIL_51;1.3;1.12;1.4;1.29;1.35 +european:S26_Lancen_C;1.3;1.22;1.5;1.31;1.35 +european:S32_Bofors_Tornvagn;1.1;1.02;1.4;1.17;1.12 +france:AMX38;4.4;4.29;2.7;4.15;5.95 +france:AMX40;3;2.88;1.9;2.52;3.53 +france:AMX50_Foch;1.2;1.05;1.4;1.11;1.14 +france:AMX_12t;1.9;1.64;1.6;1.6;2.02 +france:AMX_13_75;1.7;1.61;1.5;1.25;1.61 +france:AMX_13_90;1.4;1.37;1.5;1.29;1.34 +france:AMX_50_100;1.4;1.12;1.4;1.26;1.35 +france:AMX_50_120;1.2;1.02;1.4;1.12;1.17 +france:AMX_AC_Mle1946;1.7;1.45;1.4;1.24;1.61 +france:AMX_AC_Mle1948;1.5;1.16;1.4;1.24;1.35 +france:AMX_M4_1945;1.6;1.47;1.4;1.28;1.61 +france:ARL_44;2.1;1.57;1.4;1.53;1.82 +france:ARL_44BP;2.1;1.53;1.4;1.58;1.81 +france:ARL_V39;2;1.59;1.4;1.52;1.82 +france:Achilles_FR;2.1;1.6;1.4;1.52;1.83 +france:B1;4.1;2.8;1.6;2.54;3.64 +france:BDR_G1B;3.2;1.91;1.5;1.95;2.13 +france:Bat-Chat-25CL;1.1;1.05;1.5;1.1;1.22 +france:D1;4.3;4.62;2.7;3.8;6.52 +france:D2;3.7;3.64;2.2;3;5.52 +france:ELC_AMX;2.8;1.97;2.3;2.31;2.09 +france:F113_PzV_FR;1.9;1.65;1.5;1.56;1.89 +france:F114_Projet_4_1;1.1;1.03;1.4;1.09;1.22 +france:F115_Lorraine_50t;1.2;1.02;1.4;1.13;1.16 +france:F116_Bat_Chat_Bourrasque;1.3;1.28;1.5;1.31;1.34 +france:F117_Alt_Proto_AMX_30;1.3;1.15;1.5;1.29;1.35 +france:F11_Renault_G1R;3.2;2;1.5;1.96;2.12 +france:F120_Project_Louis;1.1;1.04;1.4;1.12;1.14 +france:F123_ERAC_105_Proto;1.3;1.22;1.5;1.3;1.35 +france:F126_AMX_13_M24;1.5;1.58;1.4;1.32;1.62 +france:F127_ELC_AMX_901_Proto;1.4;1.28;1.5;1.28;1.34 +france:F140_Sentinelle;1.4;1.15;1.4;1.28;1.35 +france:F19_Lorraine40t;1.3;1.17;1.5;1.3;1.34 +france:F19_Lorraine40t_Com;1.3;1.17;1.5;1.29;1.34 +france:F34_ARL_V39_BP;2.1;1.59;1.4;1.51;1.82 +france:F68_AMX_Chasseur_de_char_46;1.3;1.17;1.5;1.25;1.33 +france:F69_AMX_13D;1.4;1.16;1.5;1.28;1.34 +france:F69_AMX_13_57GF;1.6;1.49;1.5;1.26;1.61 +france:F71_AMX_30_prototype;1.1;1.06;1.4;1.12;1.19 +france:F73_M4A1_Revalorise;1.3;1.23;1.5;1.27;1.34 +france:F74_AMX_M4_1949;1.4;1.12;1.4;1.28;1.35 +france:F75_Char_de_25t;1.1;1.02;1.5;1.11;1.22 +france:F84_Somua_SM;1.4;1.12;1.4;1.14;1.14 +france:F89_Canon_dassaut_105;1.6;1.15;1.4;1.26;1.35 +france:FCM_36Pak40;4.2;2.95;1.9;3.18;5.52 +france:FCM_50t;1.3;1.17;1.5;1.25;1.35 +france:F_AMX-12BP;1.9;1.64;1.6;1.6;2.02 +france:RenaultFT_AC;5.5;4.37;2.2;4.49;8.51 +france:RenaultR35;5.5;5.28;3.3;6.76;7.8 +france:RenaultUE57;4.2;2.79;1.9;2.68;5.95 +france:S_35CA;3.2;2.07;1.5;1.96;2.11 +france:Somua_Sau_40;3.7;2.75;1.8;2.54;3.62 +germany:B-1bis_captured;4.1;2.96;1.6;2.55;3.89 +germany:DW_II;3.7;2.52;1.6;2.52;3.53 +germany:DickerMax;2.1;1.57;1.4;1.53;2.02 +germany:E-25;1.8;1.46;1.4;1.24;1.61 +germany:E-50;1.1;1.09;1.4;1.1;1.15 +germany:E-75;1.2;1.02;1.4;1.17;1.14 +germany:Ferdinand;1.4;1.16;1.4;1.25;1.35 +germany:G100_Gtraktor_Krupp;4.9;3.31;1.9;3.49;5.75 +germany:G103_RU_251;1.4;1.3;1.5;1.25;1.33 +germany:G106_PzKpfwPanther_AusfF;1.3;1.21;1.5;1.26;1.35 +germany:G109_Steyr_WT;1.8;1.37;1.4;1.27;1.6 +germany:G110_Mauschen;1.2;1.02;1.4;1.18;1.12 +germany:G112_JagdPanzer_105;1.2;1.05;1.4;1.04;1.18 +germany:G113_SP_I_C;1.7;1.49;1.5;1.28;1.58 +germany:G114_Rheinmetall_Scorpion;1.6;1.16;1.4;1.24;1.33 +germany:G115_VK10001P;1.4;1.15;1.4;1.33;1.35 +germany:G118_VK4503;1.7;1.3;1.4;1.27;1.61 +germany:G119_Panzer58_SH;1.3;1.22;1.5;1.28;1.35 +germany:G119_Pz58_Mutz;1.3;1.17;1.5;1.26;1.35 +germany:G120_M41_90;1.4;1.29;1.5;1.26;1.34 +germany:G126_HWK_12;1.1;1.05;1.5;1.08;1.29 +germany:G136_Tiger_131;2.1;1.68;1.4;1.55;1.85 +germany:G138_VK16801P;1.5;1.15;1.4;1.16;1.13 +germany:G140_HWK_30;1.4;1.27;1.5;1.27;1.34 +germany:G142_M48RPz;1.3;1.18;1.5;1.27;1.35 +germany:G147_mPanzer_64;1.7;1.49;1.5;1.29;1.61 +germany:G148_Elephant;1.4;1.16;1.4;1.21;1.35 +germany:G154_Kpz_07_RH;1.3;1.15;1.5;1.26;1.35 +germany:G162_Project_Kpz_07P_E;1.1;1.02;1.4;1.16;1.14 +germany:G164_Kpz_Pr_68_P;1.3;1.22;1.5;1.3;1.34 +germany:G165_Erich_Koncept;1.1;1.06;1.4;1.14;1.19 +germany:G166_LKpz_70_K;1.1;1.02;1.5;1.11;1.32 +germany:G167_Tiger_Maus;1.2;1.03;1.4;1.11;1.13 +germany:G168_KJpz_T_III;1.2;1.05;1.4;1.05;1.29 +germany:G190_VK_1602_Quby;1.4;1.36;1.5;1.25;1.34 +germany:G20_Marder_II;4.2;3.01;1.9;3.18;5.54 +germany:G85_Auf_Panther;1.5;1.49;1.5;1.25;1.61 +germany:G_E-75RT;1.4;1.14;1.4;1.3;1.35 +germany:G_E-75TS;1.2;1.03;1.4;1.13;1.13 +germany:G_VK3502_BP;2.1;1.68;1.4;1.57;1.79 +germany:H39_captured;4.3;5.58;2.7;3.99;6.04 +germany:Hetzer;3.7;2.6;1.8;2.54;3.47 +germany:Indien_Panzer;1.3;1.17;1.5;1.25;1.35 +germany:JagdPanther;1.8;1.37;1.4;1.25;1.62 +germany:JagdPantherII;1.6;1.16;1.4;1.23;1.35 +germany:JagdPzIV;2.1;1.58;1.4;1.49;1.8 +germany:JagdPzIV_AusfBP;2;1.58;1.4;1.49;1.8 +germany:JagdTiger;1.1;1.05;1.4;1.04;1.12 +germany:JagdTiger_SdKfz_185;1.4;1.17;1.4;1.21;1.35 +germany:JagdTiger_SdKfz_185_Snowstorm;1.4;1.33;1.4;1.21;1.35 +germany:Krupp-38D;2.6;2.22;1.7;1.95;2.12 +germany:Lowe;1.4;1.11;1.4;1.29;1.35 +germany:Nashorn;2;1.51;1.4;1.51;2.24 +germany:Nashorn_BP;2;1.51;1.4;1.5;2.24 +germany:Panther_II;1.3;1.21;1.5;1.26;1.35 +germany:Panther_M10;1.5;1.54;1.4;1.26;1.61 +germany:PanzerJager_I;5.5;4.33;2.2;4.49;8.8 +germany:Pro_Ag_A;1.1;1.02;1.4;1.1;1.21 +germany:Pz35t;4.4;4.9;2.7;3.94;6.05 +germany:Pz38_NA;2.9;2.78;1.9;2.55;3.65 +germany:Pz38t;3.6;3.88;2.1;3.05;5.58 +germany:PzII;5.5;5.28;3.3;6.67;6.81 +germany:PzIII;3.7;3.69;2.2;3.26;5.49 +germany:PzIII_A;3.7;3.09;2.1;2.98;5.58 +germany:PzIII_IV;2.7;2.22;1.7;1.95;2.12 +germany:PzII_J;3.6;5.5;2.1;2.83;5.46 +germany:PzII_Luchs;2.9;2.94;1.9;2.55;2.2 +germany:PzIV;2.7;2.22;1.7;1.95;2.13 +germany:PzIV_Hydro;2.5;2.22;1.7;1.95;2.11 +germany:PzIV_schmalturm;1.9;1.65;1.5;1.53;1.87 +germany:PzV;1.5;1.33;1.4;1.26;1.61 +germany:PzVI;1.7;1.3;1.4;1.28;1.62 +germany:PzVIB_Tiger_II;1.4;1.14;1.4;1.27;1.35 +germany:PzVI_AusfBP;2.1;1.68;1.4;1.56;1.79 +germany:PzVI_Tiger_P;1.7;1.3;1.4;1.28;1.62 +germany:PzV_PzIV;2.6;2.22;1.7;1.95;2.12 +germany:Pz_II_AusfG;3.8;2.9;2.1;2.85;5.55 +germany:Pz_IV_AusfA;3.6;3.2;2.2;4.05;5.74 +germany:Pz_IV_AusfBT;2.7;2.53;1.7;1.96;2.12 +germany:Pz_IV_AusfD;3.1;2.43;1.9;2.54;3.09 +germany:Pz_Sfl_IVc;3;1.61;1.5;1.98;2.08 +germany:RhB_Waffentrager;1.6;1.26;1.4;1.28;1.33 +germany:S01_Frankentank;1.7;1.33;1.4;1.37;1.62 +germany:S35_captured;3.8;2.85;2.1;2.93;5.52 +germany:StuGIII;3.2;1.93;1.5;1.97;2.12 +germany:Sturer_Emil;1.8;1.31;1.4;1.28;1.61 +germany:T-15;3.8;4.72;2.1;2.82;5.55 +germany:T-25;2.5;2.13;1.7;1.95;2.11 +germany:VK1602;2.8;2.9;2.3;1.96;2.11 +germany:VK2801;1.9;1.53;1.6;1.58;1.95 +germany:VK2801_BP;1.9;1.53;1.6;1.59;1.95 +germany:VK3001H;3.2;1.75;1.5;1.96;2.13 +germany:VK3001P;1.9;1.61;1.5;1.57;1.81 +germany:VK3002DB;1.5;1.58;1.4;1.28;1.61 +germany:VK3002DB_BP;1.9;1.65;1.5;1.56;1.87 +germany:VK3002DB_V1;1.9;1.65;1.5;1.56;1.84 +germany:VK3002M;1.9;1.65;1.5;1.57;1.91 +germany:VK3601H;2.1;1.64;1.4;1.57;1.78 +germany:VK4502A;1.3;1.17;1.4;1.29;1.35 +germany:VK4502P;1.2;1.02;1.4;1.18;1.13 +germany:Waffentrager_IV;1.2;1.06;1.4;1.12;1.19 +germany:Waffentrager_IV_CL;1.2;1.05;1.4;1.06;1.19 +japan:Chi_Ha;3.6;3.8;2.2;3.2;5.54 +japan:Chi_He;3;2.72;1.9;2.55;3.24 +japan:Chi_Ni;4.4;4.62;2.5;4.09;6.52 +japan:Chi_Nu;2.6;2.02;1.7;1.94;2.12 +japan:Chi_Nu_Kai;2.6;2.02;1.7;1.95;2.11 +japan:Chi_Ri;1.5;1.58;1.4;1.25;1.61 +japan:Chi_To;1.9;1.61;1.5;1.55;1.9 +japan:Firefly_GuP;1.9;1.49;1.5;1.55;2.01 +japan:G09_Hetzer_GuP;3.7;2.6;1.8;2.54;3.47 +japan:Ha_Go;5.7;5.36;3.3;5.99;8.2 +japan:IS-2_GuP;1.6;1.44;1.4;1.33;1.61 +japan:J21_Ho_Ri;1.2;1.05;1.4;1.11;1.13 +japan:J22_Ho_Ri_type96;1.5;1.16;1.4;1.25;1.35 +japan:J23_Chi_To_SPG;1.8;1.37;1.4;1.25;1.62 +japan:J24_Type_57;1.4;1.16;1.4;1.33;1.35 +japan:J26_Type_68;1.2;1.02;1.4;1.13;1.13 +japan:J27_Chi_Se;1.4;1.15;1.4;1.27;1.35 +japan:J28_Ju_To;1.7;1.41;1.4;1.32;1.62 +japan:J29_Ju_Nu;2.1;1.73;1.4;1.57;1.8 +japan:J29_Ju_Nu_BP;2.1;1.73;1.4;1.57;1.8 +japan:J30_Mitsu_108;3.2;2.37;1.5;1.97;2.13 +japan:J31_Type_5_Ka_Ri;1.5;1.16;1.4;1.26;1.35 +japan:J36_Type_63_HT;1.4;1.15;1.4;1.29;1.35 +japan:J38_Type_95_Ji_Ro;1.5;1.16;1.4;1.22;1.35 +japan:Ke_Ho;2.9;2.71;1.9;2.55;1 +japan:Ke_Ni;3.8;4.07;2.1;2.67;5.71 +japan:Ke_Ni_B;4.5;4.85;2.1;2.14;5.71 +japan:PzVI_GuP;2.1;1.64;1.4;1.54;1.81 +japan:Pz_IV_AusfH;2.6;2.22;1.7;1.95;2.12 +japan:STA_1;1.3;1.15;1.5;1.28;1.34 +japan:Type_61;1.1;1.02;1.4;1.1;1.24 +other:AMX_dracula;1.5;1.58;1.4;1.3;1.61 +other:Akawara;1.3;1.28;1.5;1.28;1.35 +other:Oth06_Sega_Lupus;1.7;1.44;1.4;1.34;1.62 +other:Oth08_WH_Vindicator;1.8;1.74;1.4;1.24;1.61 +other:Oth09_WH_Predator;1.7;1.47;1.4;1.25;1.62 +other:Oth11_T-55A;1.1;1.1;1.4;1.09;1.16 +other:Oth12_Sega_Hafen;1.6;1.66;1.4;1.27;1.61 +other:Oth14_MdM_AshKnight;1.7;1.47;1.4;1.27;1.62 +other:Oth15_RustCrab;2.6;2.22;1.7;1.96;2.12 +other:Oth16_KV_TG;1.6;1.76;1.4;1.27;1.61 +other:Oth17_BDT-5A;2.6;2.22;1.7;1.95;2.12 +other:Oth18_BDT-5B;1.9;1.85;1.5;1.55;1.94 +other:Oth19_BDT-5C;1.5;1.66;1.4;1.25;1.61 +other:Oth20_M4FL10;1.5;1.67;1.4;1.27;1.61 +other:Oth22_Sega_Vulcan;1.7;1.41;1.4;1.33;1.62 +other:Oth23_Werewolf;1.6;1.44;1.4;1.33;1.61 +other:Oth24_StuH_42HW;3.2;2.6;1.5;1.97;2.13 +other:Oth25_HWT20_FalconFire;1.7;1.47;1.4;1.25;1.62 +other:Oth26_StrvM42HW;2.7;2.22;1.7;1.96;2.11 +other:Oth27_M24_AMX;1.9;1.64;1.6;1.6;2.02 +other:Oth28_Sturmfeur_HW;1.7;1.41;1.4;1.31;1.61 +other:Oth29_A15HW;2.8;1.83;2.3;1.96;2.12 +other:Oth30_T54MS;1.3;1.2;1.5;1.3;1.35 +other:Oth31_T150BP;2.1;1.71;1.4;1.56;1.79 +other:Oth33_Blizzard_BP;2;1.68;1.6;1.56;2.21 +other:Oth34_PanzerMummy;1.7;1.39;1.4;1.3;1.61 +other:Oth35_PanzerMejai;3.2;2.27;1.5;1.95;2.13 +other:Oth36_Indien_Panzer_S1;1.5;1.56;1.4;1.28;1.61 +other:Oth37_T26_E4_SuperPershing_S1;1.3;1.25;1.5;1.3;1.35 +other:Oth38_50TP_Tyszkiewicza_S1;1.1;1.02;1.4;1.17;1.14 +other:Oth39_T20_S2;1.5;1.62;1.4;1.28;1.61 +other:Oth40_TVP_46_S2;1.3;1.15;1.5;1.28;1.35 +other:Oth41_Centurion_Mk3_S2;1.1;1.05;1.4;1.11;1.18 +other:Oth42_ForestWitch_HW23;1.7;1.42;1.4;1.32;1.61 +other:Oth44_Charioteer_T;1.6;1.17;1.4;1.27;1.35 +other:Oth45_Sandstriker;1.4;1.16;1.4;1.33;1.35 +other:Oth46_Charioteer_S3;1.8;1.37;1.4;1.27;1.61 +other:Oth47_AMX_13_90_S3;1.4;1.3;1.5;1.28;1.34 +other:Oth48_EMIL_1951E1_S3;1.1;1.02;1.4;1.15;1.14 +other:Oth49_TM_04_NT;1.5;1.63;1.4;1.34;1.61 +other:Oth50_STT;1.6;1.55;1.5;1.28;1.61 +other:Oth51_FD_24;1.3;1.18;1.5;1.28;1.35 +other:Oth52_Toxique;1.3;1.32;1.5;1.31;1.35 +other:Oth53_Rammer;1.6;1.46;1.4;1.31;1.61 +other:Oth61_Pz_VM_Set;4.1;2.58;1.6;2.54;3.71 +other:Oth62_Pz_VlD_Set;3.2;1.97;1.5;1.96;2.13 +other:Oth63_Pz_VllF_Set;2.1;1.64;1.4;1.57;1.84 +other:Oth64_Pz_VlllK_Set;1.6;1.44;1.4;1.31;1.61 +other:Oth65_PzVIllM_Tigeom;2.1;1.67;1.4;1.59;1.86 +other:Oth66_E100ANN_S4;1.7;1.47;1.4;1.33;1.62 +other:Oth67_FV215b_183ANN_S4;1.5;1.16;1.4;1.24;1.35 +other:Oth68_KV2ANN_S4;1.2;1.03;1.4;1.23;1.14 +other:Oth69_Souleater;1.5;1.17;1.4;1.26;1.35 +other:Oth70_Lightbringer;1.6;1.47;1.4;1.29;1.61 +other:Oth71_Titan_Strife;1.3;1.16;1.4;1.28;1.35 +other:Oth72_Hazard_I;1.5;1.57;1.4;1.3;1.61 +other:Oth73_Nemini;1.4;1.17;1.4;1.31;1.35 +other:Oth74_Argonaut;1.1;1.05;1.4;1.06;1.18 +other:Oth75_Braniaq_DM5;1.1;1.06;1.4;1.14;1.18 +other:Oth76_Destiny;1.2;1.02;1.4;1.17;1.15 +other:Oth77_Prowler;1.4;1.16;1.4;1.3;1.35 +other:Oth78_AC_17_P_Sterope;1.2;1.02;1.4;1.13;1.12 +other:Oth80_AC_16_Celeno;1.2;1.02;1.4;1.13;1.12 +other:Oth81_AC_15_Taygete;1.4;1.24;1.4;1.33;1.35 +other:Oth82_AC_14_Pleione;1.4;1.15;1.4;1.29;1.35 +other:Oth83_AC_13_Merope;1.7;1.4;1.4;1.32;1.61 +other:Oth84_FVE_Defender;1.1;1.12;1.4;1.16;1.15 +other:Oth85_Ghoul;1.3;1.36;1.5;1.28;1.35 +other:Oth86_Survivalist;1.1;1.06;1.4;1.1;1.12 +other:Oth92_JagdPantherII_Titan;1.4;1.17;1.4;1.24;1.35 +other:Oth93_Convoyer;1.4;1.16;1.4;1.24;1.35 +other:Sega_Edelweiss;1.5;1.62;1.4;1.28;1.61 +other:Sega_Nameless;1.7;1.41;1.4;1.29;1.62 +other:Strv_74A2;1.9;1.8;1.5;1.54;1.9 +other:Van_Helsing;1.8;1.59;1.4;1.25;1.61 +other:WZ-135G_FT;1.8;1.5;1.4;1.3;1.61 +uk:GB03_Cruiser_Mk_I;4.4;4.9;2.7;3.96;9.12 +uk:GB04_Valentine;2.9;1.85;1.9;2.53;3.37 +uk:GB05_Vickers_Medium_Mk_II;6.5;3.84;2.2;3.8;12.37 +uk:GB06_Vickers_Medium_Mk_III;4.9;3.9;1.9;2.88;5.74 +uk:GB07_Matilda;4.1;2.83;1.6;2.56;3.64 +uk:GB08_Churchill_I;3.3;1.8;1.5;1.96;2.13 +uk:GB09_Churchill_VII;2.1;1.7;1.4;1.54;1.76 +uk:GB09_Churchill_VII_BP;2.1;1.67;1.4;1.54;1.79 +uk:GB101_FV1066_Senlac;1.4;1.16;1.5;1.24;1.33 +uk:GB106_Cobra;1.1;1.05;1.4;1.14;1.16 +uk:GB108_A46;1.5;1.56;1.5;1.25;1.6 +uk:GB109_GSOR_1008;1.6;1.16;1.4;1.25;1.34 +uk:GB109_GSOR_1008_Fearless;1.6;1.18;1.4;1.24;1.34 +uk:GB10_Black_Prince;1.7;1.47;1.4;1.23;1.62 +uk:GB110_FV4201_Chieftain_Prototype;1.1;1.02;1.4;1.13;1.15 +uk:GB111_Charlemagne;1.4;1.13;1.4;1.31;1.35 +uk:GB112_Caliban;1.4;1.16;1.4;1.45;1.35 +uk:GB114_Vickers_MBT_Mk3;1.3;1.28;1.5;1.12;1.14 +uk:GB116_Harry_Hopkins;2.5;1.97;2.3;1.96;2.12 +uk:GB11_Caernarvon;1.3;1.13;1.4;1.23;1.35 +uk:GB11_Caernarvon_D;1.4;1.16;1.4;1.3;1.35 +uk:GB128_Nemesis;1.3;1.29;1.5;1.28;1.35 +uk:GB12_Conqueror;1.1;1.02;1.4;1.1;1.13 +uk:GB19_Sherman_Firefly;1.9;1.49;1.5;1.55;2.01 +uk:GB20_Crusader;2.7;1.83;2.3;1.96;2.11 +uk:GB21_A27BP;1.9;1.7;1.5;1.55;1.94 +uk:GB21_Cromwell;1.9;1.7;1.5;1.55;1.94 +uk:GB22_Comet;1.5;1.58;1.4;1.25;1.61 +uk:GB23_Centurion;1.3;1.12;1.5;1.25;1.35 +uk:GB24_Centurion_Mk3;1.1;1.02;1.4;1.14;1.15 +uk:GB32_Tortoise;1.1;1.05;1.4;1.05;1.11 +uk:GB35_Sentinel_AC_IV;1.9;1.7;1.5;1.56;1.94 +uk:GB39_Universal_CarrierQF2;5.5;4.89;2.2;3.99;11.07 +uk:GB40_Gun_Carrier_BP;2;1.56;1.4;1.52;1.77 +uk:GB40_Gun_Carrier_Churchill;2.1;1.48;1.4;1.51;1.79 +uk:GB41_Challenger;1.8;1.35;1.4;1.26;1.61 +uk:GB42_Valentine_AT;4.3;2.68;1.9;2.43;5.48 +uk:GB44_Archer_Custom;3.2;1.76;1.5;1.98;2.08 +uk:GB51_Excelsior;3.2;2.27;1.5;1.97;2.13 +uk:GB52_FV201_A45;1.7;1.47;1.4;1.24;1.61 +uk:GB57_Alecto;3.7;2.93;1.8;2.54;1 +uk:GB58_Cruiser_Mk_III;4.4;4.9;2.5;4.26;6.52 +uk:GB59_Cruiser_Mk_IV;3.7;3.82;2.2;3.05;5.52 +uk:GB60_Covenanter;3;3;1.9;2.55;2.68 +uk:GB63_TOG_II;1.9;1.53;1.4;1.54;1.8 +uk:GB63_TOG_II_BP;1.9;1.53;1.4;1.57;1.79 +uk:GB68_Matilda_Black_Prince;2.5;1.96;1.7;1.98;2.12 +uk:GB69_Cruiser_Mk_II;5.9;5.88;3.3;5.32;8.2 +uk:GB71_AT_15A;1.7;1.58;1.4;1.22;1.62 +uk:GB72_AT15;1.4;1.19;1.4;1.19;1.35 +uk:GB73_AT2;3.2;2.45;1.5;1.97;2.13 +uk:GB74_AT8;2;1.6;1.4;1.51;1.76 +uk:GB75_AT7;1.7;1.33;1.4;1.23;1.62 +uk:GB76_Mk_VIC;4.3;5.58;2.7;4.01;9.12 +uk:GB80_Charioteer;1.6;1.16;1.4;1.27;1.34 +uk:GB81_FV4004;1.2;1.05;1.4;1.11;1.2 +uk:GB85_Cromwell_Berlin;1.9;1.7;1.5;1.55;1.94 +uk:GB87_Chieftain_T95_turret;1.4;1.17;1.4;1.25;1.35 +uk:GB93_Caernarvon_AX;1.3;1.13;1.4;1.25;1.35 +uk:GB94_Centurion_Mk5-1_RAAC;1.3;1.12;1.5;1.28;1.35 +uk:GB97_Chimera;1.3;1.15;1.5;1.32;1.35 +uk:GB99_Turtle_Mk1;1.4;1.18;1.4;1.22;1.35 +uk:GB_Centurion_MkDF;1.3;1.12;1.5;1.29;1.35 +uk:GB_Churchill_MkVI;2.1;1.73;1.4;1.54;1.77 +uk:GB_Churchill_MkVIII;2.1;1.64;1.4;1.56;1.79 +uk:GB_FV301;1.4;1.07;1.5;1.25;1.35 +uk:GB_Sherman_V;2.6;2.28;1.7;1.96;2.11 +uk:GB_Vickers_Cruiser;1.1;1;1.5;1.11;1.2 +uk:Sentinel_AC1;3;2.88;1.9;2.55;3.47 +usa:A05_M4_105BD;2.7;2.4;1.7;1.96;2.12 +usa:A100_T49;1.4;1.53;1.5;1.29;1.34 +usa:A102_T28_concept;1.7;1.47;1.4;1.27;1.62 +usa:A104_M4A3E8A;1.9;1.88;1.5;1.54;1.84 +usa:A111_T25_Pilot;1.3;1.27;1.5;1.26;1.35 +usa:A115_Chrysler_K;1.4;1.16;1.4;1.3;1.35 +usa:A117_T26E5;1.4;1.15;1.4;1.27;1.35 +usa:A121_T26E3;1.5;1.54;1.4;1.31;1.61 +usa:A122_TS-5;1.4;1.15;1.4;1.23;1.35 +usa:A124_T54E2;1.4;1.15;1.4;1.29;1.35 +usa:A125_AEP_1;1.1;1.02;1.4;1.15;1.14 +usa:A130_Super_Hellcat;1.7;1.51;1.4;1.24;1.6 +usa:A132_T77;1.3;1.15;1.4;1.29;1.35 +usa:A136_T42;1.5;1.54;1.4;1.29;1.61 +usa:A140_ASTRON_REX_105;1.3;1.31;1.5;1.31;1.35 +usa:A141_M-4-Y;1.4;1.16;1.4;1.27;1.35 +usa:A142_Pawlack_Tank;2.1;1.68;1.4;1.58;1.85 +usa:A146_TL_7_120;1.1;1.02;1.4;1.14;1.14 +usa:A150_MBT_B;1.2;1.02;1.4;1.21;1.13 +usa:A151_TS_60;1.3;1.14;1.4;1.06;1.15 +usa:A175_ATAC;1.1;1.02;1.5;1.11;1.32 +usa:A68_T28D;1.4;1.2;1.4;1.28;1.35 +usa:A77_T6M;3;2.72;1.9;2.52;3.24 +usa:A94_T37;1.9;1.73;1.6;1.55;2.21 +usa:A99_T92E1;1.1;1.1;1.5;1.2;1.2 +usa:M-3-Y;1.4;1.14;1.4;1.28;1.35 +usa:M-3-Y-Midas;1.4;1.14;1.4;1.28;1.35 +usa:M-5-Y;1.1;1.02;1.4;1.2;1.14 +usa:M-7-Y;1.7;1.32;1.4;1.32;1.61 +usa:M103;1.1;1.02;1.4;1.14;1.13 +usa:M10_Wolverine;3.2;2.18;1.5;1.96;2.13 +usa:M18E2BP;1.9;1.65;1.5;1.57;2.02 +usa:M18_Hellcat;2.1;1.58;1.4;1.51;2.99 +usa:M22_Locust;3.8;4.23;2.1;3;5.59 +usa:M24_Chaffee;1.9;1.73;1.6;1.55;2.36 +usa:M24_Chaffee_BP;1.9;1.73;1.6;1.55;2.36 +usa:M2_lt;5.5;5.28;3.3;6.76;7.39 +usa:M2_med;3.6;4.29;2.2;2.93;5.54 +usa:M36_BP;2.1;1.58;1.4;1.53;1.85 +usa:M36_Slagger;2.1;1.58;1.4;1.54;1.85 +usa:M3_Grant;3;2.38;1.9;2.55;3.13 +usa:M3_Stuart;4.4;4.29;2.7;4.23;5.89 +usa:M41_Bulldog;1.6;1.49;1.5;1.25;1.61 +usa:M46_CL;1.1;1.04;1.4;1.08;1.17 +usa:M46_Patton;1.1;1.08;1.4;1.09;1.17 +usa:M4A2E4;2.6;2.28;1.7;1.96;2.13 +usa:M4A3E8_BP;1.9;1.88;1.5;1.55;1.84 +usa:M4A3E8_Sherman;1.9;1.88;1.5;1.55;1.84 +usa:M4_Sherman;2.7;1.98;1.7;1.95;2.12 +usa:M5_Stuart;3.7;3.48;2.1;2.94;5.57 +usa:M6;2.1;1.6;1.4;1.58;1.8 +usa:M6A2E1;1.6;1.32;1.4;1.33;1.62 +usa:M6A2E1_exp;1.4;1.07;1.4;1.33;1.35 +usa:M6E2BP;2.1;1.6;1.4;1.57;1.77 +usa:M6E2V2_BP;2.1;1.64;1.4;1.53;1.78 +usa:M7_med;3.1;2.38;1.9;2.54;2.98 +usa:M8A1;4;2.73;1.8;2.54;2.87 +usa:Pershing;1.3;1.33;1.5;1.25;1.35 +usa:Ram-II;2.5;2.22;1.7;1.97;2.12 +usa:Sherman_Jumbo;1.9;1.88;1.5;1.56;1.8 +usa:T14;3.2;2.35;1.5;1.97;2.13 +usa:T18;5.5;4.48;2.2;4.43;5.65 +usa:T1_E6;4.4;5;2.7;4.12;8.54 +usa:T1_hvy;3.3;2;1.5;1.96;2.13 +usa:T20;1.5;1.54;1.4;1.28;1.61 +usa:T21;1.9;1.81;1.6;1.57;2.27 +usa:T21_BP;1.9;1.81;1.6;1.56;2.24 +usa:T23E3;1.5;1.54;1.4;1.25;1.61 +usa:T25_2;1.7;1.4;1.4;1.23;1.61 +usa:T25_AT;1.7;1.44;1.4;1.26;1.61 +usa:T26_E4_SuperPershing;1.3;1.2;1.5;1.29;1.35 +usa:T28;1.4;1.16;1.4;1.23;1.35 +usa:T28_Prototype;1.4;1.16;1.4;1.24;1.35 +usa:T29;1.7;1.32;1.4;1.31;1.61 +usa:T2_lt;4.3;5.45;2.7;3.9;8.26 +usa:T2_med;4.6;5;2.5;4.23;7.11 +usa:T30;1.1;1.05;1.4;1.12;1.17 +usa:T32;1.4;1.16;1.4;1.29;1.35 +usa:T34_hvy;1.3;1.07;1.4;1.3;1.35 +usa:T34_hvy_Freedom;1.4;1.07;1.4;1.31;1.35 +usa:T40;4;2.38;1.8;2.54;3.13 +usa:T49;3.2;2.18;1.5;1.97;2.08 +usa:T49_Fearless;1.4;1.53;1.5;1.28;1.34 +usa:T54E1;1.1;1.06;1.4;1.1;1.16 +usa:T69;1.3;1.33;1.5;1.27;1.35 +usa:T71;1.6;1.49;1.5;1.27;1.6 +usa:T7_Combat_Car;4.4;5.58;2.7;4.26;8.54 +usa:T82;4.1;13.5;1.9;2.78;5.78 +usa:T95;1.2;1.05;1.4;1.11;1.12 +usa:T95E2;1.3;1.33;1.5;1.25;1.35 +ussr:A-20;3.1;2.72;1.9;2.54;3 +ussr:A-32;3;2.85;1.9;2.52;3.43 +ussr:AT-1;5.5;3.99;2.2;3.99;8.51 +ussr:BT-2;4.3;4.71;2.7;4.18;6.52 +ussr:BT-7;3.6;2.98;2.1;3.06;5.51 +ussr:BT-SV;3.8;2.86;2.1;3.16;5.58 +ussr:Churchill_LL;3.2;2.27;1.5;1.97;2.13 +ussr:GAZ-74b;4;2.48;1.8;2.53;3.05 +ussr:IS;1.6;1.44;1.4;1.32;1.62 +ussr:IS-2Sh;1.4;1.15;1.4;1.31;1.35 +ussr:IS-3;1.4;1.16;1.4;1.3;1.35 +ussr:IS8;1.2;1.02;1.4;1.12;1.15 +ussr:ISU-152;1.6;1.13;1.4;1.38;1.35 +ussr:K-91;1.1;1.02;1.4;1.1;1.12 +ussr:KV-13;1.5;1.67;1.4;1.26;1.61 +ussr:KV-1s;2.3;1.6;1.4;1.6;1.82 +ussr:KV-1s-BP;2.3;1.5;1.4;1.64;1.83 +ussr:KV-220;3.2;2.27;1.5;1.96;2.13 +ussr:KV-3;1.7;1.44;1.4;1.33;1.62 +ussr:KV-5;1.5;1.15;1.4;1.29;1.35 +ussr:KV1;3.2;2.11;1.5;1.95;2.13 +ussr:KV2;2.4;2.25;1.4;1.52;1.85 +ussr:KV4;1.4;1.13;1.4;1.3;1.35 +ussr:LTP;3.8;2.88;2.1;3.16;5.56 +ussr:M3_Stuart_LL;3.7;5.04;2.1;2.86;5.51 +ussr:MS-1obr21;4.3;4.71;2.7;4.18;6.98 +ussr:MT25;2;1.79;1.6;1.56;2.06 +ussr:Matilda_II_LL;2.5;2.22;1.7;1.96;2.12 +ussr:Object252;1.4;1.14;1.4;1.33;1.35 +ussr:Object252_Fearless;1.4;1.41;1.4;1.33;1.35 +ussr:Object_704;1.1;1.05;1.4;1.1;1.13 +ussr:R105_BT_7A;3.8;6.27;2.1;3.86;5.64 +ussr:R107_LTB;1.6;1.56;1.5;1.28;1.61 +ussr:R109_T54S;1.4;1.34;1.5;1.29;1.34 +ussr:R111_ISU130;1.5;1.16;1.4;1.23;1.35 +ussr:R112_T54_45;1.3;1.37;1.5;1.31;1.35 +ussr:R113_Object_730;1.4;1.15;1.4;1.31;1.35 +ussr:R115_IS-3_auto;1.4;1.15;1.4;1.3;1.35 +ussr:R116_ISU122C_Berlin;1.8;1.45;1.4;1.22;1.62 +ussr:R127_T44_100_P;1.3;1.33;1.5;1.27;1.35 +ussr:R131_LTG;1.6;1.61;1.5;1.28;1.61 +ussr:R134_Object_252U;1.4;1.14;1.4;1.33;1.35 +ussr:R140_M4A2_Loza;1.9;1.88;1.5;1.55;1.84 +ussr:R146_STG;1.3;1.33;1.5;1.33;1.35 +ussr:R154_T-34E-43;2.6;2.22;1.7;1.96;2.11 +ussr:R158_LT_432;1.4;1.34;1.5;1.28;1.34 +ussr:R159_SU_130PM;1.6;1.16;1.4;1.26;1.34 +ussr:R160_object_244;2.1;1.71;1.4;1.55;1.82 +ussr:R172_Object_752;1.1;1.02;1.4;1.13;1.13 +ussr:R175_IS_2E;1.6;1.47;1.4;1.31;1.61 +ussr:R180_Object_274A;1.3;1.31;1.5;1.3;1.35 +ussr:R181_Object_452K;1.2;1.02;1.4;1.15;1.13 +ussr:R187_Object_590;1.3;1.32;1.5;1.29;1.35 +ussr:R192_K_2;1.4;1.12;1.4;1.33;1.35 +ussr:R194_ST_62_var_2;1.3;1.31;1.5;1.28;1.35 +ussr:R217_Object_Kust;1.5;1.16;1.4;1.27;1.35 +ussr:R43_T-70_57;3.8;3.41;2.1;3.43;5.49 +ussr:R63_ST_IBD;1.2;1.02;1.4;1.17;1.14 +ussr:R71_IS_2B;1.6;1.44;1.4;1.33;1.61 +ussr:R98_T44_85;1.5;1.64;1.4;1.26;1.61 +ussr:R_Object_84;1.1;1.07;1.5;1.12;1.17 +ussr:ST_I;1.2;1.02;1.4;1.16;1.13 +ussr:SU-100;2.1;1.57;1.4;1.55;1.81 +ussr:SU-101;1.5;1.15;1.4;1.26;1.35 +ussr:SU-152;1.8;2;1.4;1.38;1.61 +ussr:SU-76;4.2;3.6;1.9;3.18;5.56 +ussr:SU-85;3.2;1.99;1.5;1.97;2.12 +ussr:SU100M1;1.7;1.35;1.4;1.25;1.61 +ussr:SU100Y;2.1;1.53;1.4;1.57;1.89 +ussr:SU122_44;1.8;1.45;1.4;1.25;1.61 +ussr:SU122_54;1.2;1.05;1.4;1.03;1.14 +ussr:SU76I;4.1;3.31;1.9;3.18;5.47 +ussr:SU_85I;3.1;2.3;1.5;1.98;2.12 +ussr:T-127;3.8;2.76;2.1;3.16;5.52 +ussr:T-26;5.5;5.07;3.3;6.16;8.2 +ussr:T-28;3;2.85;1.9;2.54;3.09 +ussr:T-34;2.7;2.01;1.7;1.96;2.12 +ussr:T-34-85;1.9;1.71;1.5;1.58;1.87 +ussr:T-34-85_Rudy;1.5;1.67;1.4;1.26;1.61 +ussr:T-34-85_Victory;1.9;1.88;1.5;1.57;1.87 +ussr:T-43;1.5;1.6;1.4;1.25;1.61 +ussr:T-44;1.3;1.33;1.5;1.34;1.35 +ussr:T-46;3.8;4.32;2.1;2.83;5.6 +ussr:T-54;1.1;1.1;1.4;1.09;1.16 +ussr:T150;2.1;1.55;1.4;1.59;1.82 +ussr:T34_85BP;1.9;1.88;1.5;1.57;1.87 +ussr:T34_85TUR;1.5;1.58;1.4;1.29;1.62 +ussr:Tetrarch_LL;4.3;3.88;2.7;3.88;8.51 +ussr:Valentine_LL;2.9;4.55;1.9;2.55;3.42