465 lines
13 KiB
Lua

local basept = {}
-- This file is about direct copy-and-paste from vanilla code, for later modification by code of this mod.
-- This is done instead of direct table.deepcopy of tank,
-- in order to prevent possible game-breaking conflicts caused by modification from other mods (like removal of sprite layer).
-- Even changes can be non-game-breaking, but can still be unbalanced. (e.g., modified health, resistances.)
local hit_effects = require("__base__.prototypes.entity.hit-effects")
local sounds = require("__base__.prototypes.entity.sounds")
local movement_triggers = require("__base__.prototypes.entity.movement-triggers")
local tank_shift_y = 6
basept.tank = { }
basept.tank.entity =
{
type = "car",
name = "tank",
icon = "__base__/graphics/icons/tank.png",
icon_size = 64, icon_mipmaps = 4,
flags = {"placeable-neutral", "player-creation", "placeable-off-grid", "not-flammable"},
minable = {mining_time = 0.5, result = "tank"},
mined_sound = {filename = "__core__/sound/deconstruct-large.ogg",volume = 0.8},
max_health = 2000,
corpse = "tank-remnants",
dying_explosion = "tank-explosion",
alert_icon_shift = util.by_pixel(0, -13),
immune_to_tree_impacts = true,
immune_to_rock_impacts = true,
energy_per_hit_point = 0.5,
resistances =
{
{
type = "fire",
decrease = 15,
percent = 60
},
{
type = "physical",
decrease = 15,
percent = 60
},
{
type = "impact",
decrease = 50,
percent = 80
},
{
type = "explosion",
decrease = 15,
percent = 70
},
{
type = "acid",
decrease = 0,
percent = 70
}
},
collision_box = {{-0.9, -1.3}, {0.9, 1.3}},
selection_box = {{-0.9, -1.3}, {0.9, 1.3}},
damaged_trigger_effect = hit_effects.entity(),
drawing_box = {{-1.8, -1.8}, {1.8, 1.5}},
effectivity = 0.9,
braking_power = "400kW",
burner =
{
fuel_category = "chemical",
effectivity = 1,
fuel_inventory_size = 2,
smoke =
{
{
name = "tank-smoke",
deviation = {0.25, 0.25},
frequency = 50,
position = {0, 1.5},
starting_frame = 0,
starting_frame_deviation = 60
}
}
},
consumption = "600kW",
terrain_friction_modifier = 0.2,
friction = 0.002,
light =
{
{
type = "oriented",
minimum_darkness = 0.3,
picture =
{
filename = "__core__/graphics/light-cone.png",
priority = "extra-high",
flags = { "light" },
scale = 2,
width = 200,
height = 200
},
shift = {-0.6, -14 + tank_shift_y / 32},
size = 2,
intensity = 0.6,
color = {r = 0.9, g = 1.0, b = 1.0}
},
{
type = "oriented",
minimum_darkness = 0.3,
picture =
{
filename = "__core__/graphics/light-cone.png",
priority = "extra-high",
flags = { "light" },
scale = 2,
width = 200,
height = 200
},
shift = {0.6, -14 + tank_shift_y / 32},
size = 2,
intensity = 0.6,
color = {r = 0.9, g = 1.0, b = 1.0}
}
},
animation =
{
layers =
{
{
priority = "low",
width = 136,
height = 106,
frame_count = 2,
direction_count = 64,
shift = util.by_pixel(0, -16 + tank_shift_y),
animation_speed = 8,
max_advance = 1,
stripes =
{
{
filename = "__base__/graphics/entity/tank/tank-base-1.png",
width_in_frames = 2,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/tank-base-2.png",
width_in_frames = 2,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/tank-base-3.png",
width_in_frames = 2,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/tank-base-4.png",
width_in_frames = 2,
height_in_frames = 16
}
},
hr_version =
{
priority = "low",
width = 270,
height = 212,
frame_count = 2,
direction_count = 64,
shift = util.by_pixel(0, -16 + tank_shift_y),
animation_speed = 8,
max_advance = 1,
stripes =
{
{
filename = "__base__/graphics/entity/tank/hr-tank-base-1.png",
width_in_frames = 2,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/hr-tank-base-2.png",
width_in_frames = 2,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/hr-tank-base-3.png",
width_in_frames = 2,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/hr-tank-base-4.png",
width_in_frames = 2,
height_in_frames = 16
}
},
scale = 0.5
}
},
{
priority = "low",
width = 104,
height = 83,
frame_count = 2,
apply_runtime_tint = true,
direction_count = 64,
shift = util.by_pixel(0, -27.5 + tank_shift_y),
max_advance = 1,
line_length = 2,
stripes = util.multiplystripes(2,
{
{
filename = "__base__/graphics/entity/tank/tank-base-mask-1.png",
width_in_frames = 1,
height_in_frames = 22
},
{
filename = "__base__/graphics/entity/tank/tank-base-mask-2.png",
width_in_frames = 1,
height_in_frames = 22
},
{
filename = "__base__/graphics/entity/tank/tank-base-mask-3.png",
width_in_frames = 1,
height_in_frames = 20
}
}),
hr_version =
{
priority = "low",
width = 208,
height = 166,
frame_count = 2,
apply_runtime_tint = true,
direction_count = 64,
shift = util.by_pixel(0, -27.5 + tank_shift_y),
max_advance = 1,
line_length = 2,
stripes = util.multiplystripes(2,
{
{
filename = "__base__/graphics/entity/tank/hr-tank-base-mask-1.png",
width_in_frames = 1,
height_in_frames = 22
},
{
filename = "__base__/graphics/entity/tank/hr-tank-base-mask-2.png",
width_in_frames = 1,
height_in_frames = 22
},
{
filename = "__base__/graphics/entity/tank/hr-tank-base-mask-3.png",
width_in_frames = 1,
height_in_frames = 20
}
}),
scale = 0.5
}
},
{
priority = "low",
width = 151,
height = 98,
frame_count = 2,
draw_as_shadow = true,
direction_count = 64,
shift = util.by_pixel(22.5, 1 + tank_shift_y),
max_advance = 1,
stripes = util.multiplystripes(2,
{
{
filename = "__base__/graphics/entity/tank/tank-base-shadow-1.png",
width_in_frames = 1,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/tank-base-shadow-2.png",
width_in_frames = 1,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/tank-base-shadow-3.png",
width_in_frames = 1,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/tank-base-shadow-4.png",
width_in_frames = 1,
height_in_frames = 16
}
}),
hr_version =
{
priority = "low",
width = 302,
height = 194,
frame_count = 2,
draw_as_shadow = true,
direction_count = 64,
shift = util.by_pixel(22.5, 1 + tank_shift_y),
max_advance = 1,
stripes = util.multiplystripes(2,
{
{
filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-1.png",
width_in_frames = 1,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-2.png",
width_in_frames = 1,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-3.png",
width_in_frames = 1,
height_in_frames = 16
},
{
filename = "__base__/graphics/entity/tank/hr-tank-base-shadow-4.png",
width_in_frames = 1,
height_in_frames = 16
}
}),
scale = 0.5
}
}
}
},
turret_animation =
{
layers =
{
{
filename = "__base__/graphics/entity/tank/tank-turret.png",
priority = "low",
line_length = 8,
width = 90,
height = 67,
frame_count = 1,
direction_count = 64,
shift = util.by_pixel(2-2, -40.5 + tank_shift_y),
animation_speed = 8,
hr_version =
{
filename = "__base__/graphics/entity/tank/hr-tank-turret.png",
priority = "low",
line_length = 8,
width = 179,
height = 132,
frame_count = 1,
direction_count = 64,
shift = util.by_pixel(2.25-2, -40.5 + tank_shift_y),
animation_speed = 8,
scale = 0.5
}
},
{
filename = "__base__/graphics/entity/tank/tank-turret-mask.png",
priority = "low",
line_length = 8,
width = 36,
height = 33,
frame_count = 1,
apply_runtime_tint = true,
direction_count = 64,
shift = util.by_pixel(2-2, -41.5 + tank_shift_y),
hr_version =
{
filename = "__base__/graphics/entity/tank/hr-tank-turret-mask.png",
priority = "low",
line_length = 8,
width = 72,
height = 66,
frame_count = 1,
apply_runtime_tint = true,
direction_count = 64,
shift = util.by_pixel(2-2, -41.5 + tank_shift_y),
scale = 0.5
}
},
{
filename = "__base__/graphics/entity/tank/tank-turret-shadow.png",
priority = "low",
line_length = 8,
width = 97,
height = 67,
frame_count = 1,
draw_as_shadow = true,
direction_count = 64,
shift = util.by_pixel(58.5-2, 0.5 + tank_shift_y),
hr_version =
{
filename = "__base__/graphics/entity/tank/hr-tank-turret-shadow.png",
priority = "low",
line_length = 8,
width = 193,
height = 134,
frame_count = 1,
draw_as_shadow = true,
direction_count = 64,
shift = util.by_pixel(58.25-2, 0.5 + tank_shift_y),
scale = 0.5
}
}
}
},
turret_rotation_speed = 0.35 / 60,
turret_return_timeout = 300,
sound_no_fuel =
{
{
filename = "__base__/sound/fight/tank-no-fuel-1.ogg",
volume = 0.4
}
},
sound_minimum_speed = 0.2,
sound_scaling_ratio = 0.8,
vehicle_impact_sound = sounds.generic_impact,
working_sound =
{
sound =
{
filename = "__base__/sound/fight/tank-engine.ogg",
volume = 0.37
},
activate_sound =
{
filename = "__base__/sound/fight/tank-engine-start.ogg",
volume = 0.37
},
deactivate_sound =
{
filename = "__base__/sound/fight/tank-engine-stop.ogg",
volume = 0.37
},
match_speed_to_activity = true
},
stop_trigger_speed = 0.1,
stop_trigger =
{
{
type = "play-sound",
sound =
{
{
filename = "__base__/sound/fight/tank-brakes.ogg",
volume = 0.3
}
}
}
},
open_sound = { filename = "__base__/sound/fight/tank-door-open.ogg", volume=0.48 },
close_sound = { filename = "__base__/sound/fight/tank-door-close.ogg", volume = 0.43 },
rotation_speed = 0.0035,
tank_driving = true,
weight = 20000,
inventory_size = 80,
track_particle_triggers = movement_triggers.tank,
guns = { "tank-cannon", "tank-machine-gun", "tank-flamethrower" },
water_reflection = car_reflection(1.2)
}
return basept