292 lines
7.1 KiB
Lua
292 lines
7.1 KiB
Lua
local util = require("util")
|
|
|
|
local is_sprite_def = function(array)
|
|
return array.width and array.height and (array.filename or array.stripes or array.filenames)
|
|
end
|
|
|
|
util.is_sprite_def = is_sprite_def
|
|
|
|
local recursive_hack_scale
|
|
recursive_hack_scale = function(array, scale)
|
|
for k, v in pairs (array) do
|
|
if type(v) == "table" then
|
|
if is_sprite_def(v) then
|
|
v.scale = (v.scale or 1) * scale
|
|
if v.shift then
|
|
v.shift[1], v.shift[2] = v.shift[1] * scale, v.shift[2] * scale
|
|
end
|
|
end
|
|
if v.source_offset then
|
|
v.source_offset[1] = v.source_offset[1] * scale
|
|
v.source_offset[2] = v.source_offset[2] * scale
|
|
end
|
|
if v.projectile_center then
|
|
v.projectile_center[1] = v.projectile_center[1] * scale
|
|
v.projectile_center[2] = v.projectile_center[2] * scale
|
|
end
|
|
if v.projectile_creation_distance then
|
|
v.projectile_creation_distance = v.projectile_creation_distance * scale
|
|
end
|
|
recursive_hack_scale(v, scale)
|
|
end
|
|
end
|
|
end
|
|
util.recursive_hack_scale = recursive_hack_scale
|
|
|
|
local recursive_hack_animation_speed
|
|
recursive_hack_animation_speed = function(array, scale)
|
|
for k, v in pairs (array) do
|
|
if type(v) == "table" then
|
|
if is_sprite_def(v) then
|
|
v.animation_speed = v.animation_speed * scale
|
|
end
|
|
recursive_hack_animation_speed(v, scale)
|
|
end
|
|
end
|
|
end
|
|
util.recursive_hack_animation_speed = recursive_hack_animation_speed
|
|
|
|
local recursive_hack_tint
|
|
recursive_hack_tint = function(array, tint, check_runtime)
|
|
for k, v in pairs (array) do
|
|
if type(v) == "table" then
|
|
if is_sprite_def(v) then
|
|
if not check_runtime or v.apply_runtime_tint then
|
|
v.tint = tint
|
|
v.apply_runtime_tint = false
|
|
if v.hr_version then
|
|
v.hr_version.apply_runtime_tint = false
|
|
v.hr_version.tint = tint
|
|
end
|
|
end
|
|
end
|
|
recursive_hack_tint(v, tint, check_runtime)
|
|
end
|
|
end
|
|
end
|
|
util.recursive_hack_tint = recursive_hack_tint
|
|
|
|
local recursive_hack_make_hr
|
|
recursive_hack_make_hr = function(prototype)
|
|
for k, v in pairs (prototype) do
|
|
if type(v) == "table" then
|
|
if is_sprite_def(v) and v.hr_version then
|
|
prototype[k] = v.hr_version
|
|
--v.scale = v.scale * 0.5
|
|
v.hr_version = nil
|
|
end
|
|
recursive_hack_make_hr(v)
|
|
end
|
|
end
|
|
end
|
|
util.recursive_hack_make_hr = recursive_hack_make_hr
|
|
|
|
util.scale_box = function(box, scale)
|
|
box[1][1] = box[1][1] * scale
|
|
box[1][2] = box[1][2] * scale
|
|
box[2][1] = box[2][1] * scale
|
|
box[2][2] = box[2][2] * scale
|
|
return box
|
|
end
|
|
|
|
util.scale_boxes = function(prototype, scale)
|
|
for k, v in pairs {"collision_box", "selection_box"} do
|
|
local box = prototype[v]
|
|
if box then
|
|
local width = (box[2][1] - box[1][1]) * (scale / 2)
|
|
local height = (box[2][2] - box[1][2]) * (scale / 2)
|
|
local x = (box[1][1] + box[2][1]) / 2
|
|
local y = (box[1][2] + box[2][2]) / 2
|
|
box[1][1], box[2][1] = x - width, x + width
|
|
box[1][2], box[2][2] = y - height, y + height
|
|
end
|
|
end
|
|
end
|
|
|
|
util.remove_flag = function(prototype, flag)
|
|
if not prototype.flags then return end
|
|
for k, v in pairs (prototype.flags) do
|
|
if v == flag then
|
|
table.remove(prototype.flags, k)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
util.has_flag = function(prototype, flag)
|
|
if not prototype.flags then return false end
|
|
for k, v in pairs (prototype.flags) do
|
|
if v == flag then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
|
|
util.add_flag = function(prototype, flag)
|
|
if not prototype.flags then return end
|
|
table.insert(prototype.flags, flag)
|
|
end
|
|
|
|
util.base_player = function()
|
|
|
|
local player = util.table.deepcopy(data.raw.player.player or error("Wat man cmon why"))
|
|
player.ticks_to_keep_gun = (600)
|
|
player.ticks_to_keep_aiming_direction = (100)
|
|
player.ticks_to_stay_in_combat = (600)
|
|
util.remove_flag(player, "not-flammable")
|
|
return player
|
|
end
|
|
|
|
util.path = function(str)
|
|
return "__MIRV__/" .. str
|
|
end
|
|
|
|
util.empty_sound = function()
|
|
return
|
|
{
|
|
filename = util.path("tf_util/empty-sound.ogg"),
|
|
volume = 0
|
|
}
|
|
end
|
|
|
|
util.empty_sprite = function()
|
|
return
|
|
{
|
|
filename = util.path("tf_util/empty-sprite.png"),
|
|
height = 1,
|
|
width = 1,
|
|
frame_count = 1,
|
|
direction_count = 1
|
|
}
|
|
end
|
|
|
|
util.damage_type = function(name)
|
|
if not data.raw["damage-type"][name] then
|
|
data:extend{{type = "damage-type", name = name, localised_name = {name}}}
|
|
end
|
|
return name
|
|
end
|
|
|
|
util.ammo_category = function(name)
|
|
if not data.raw["ammo-category"][name] then
|
|
data:extend{{type = "ammo-category", name = name, localised_name = {name}}}
|
|
end
|
|
return name
|
|
end
|
|
|
|
util.base_gun = function(name)
|
|
return
|
|
{
|
|
name = name,
|
|
localised_name = {name},
|
|
type = "gun",
|
|
stack_size = 10,
|
|
flags = {}
|
|
}
|
|
end
|
|
|
|
util.base_ammo = function(name)
|
|
return
|
|
{
|
|
name = name,
|
|
localised_name = {name},
|
|
type = "ammo",
|
|
stack_size = 10,
|
|
magazine_size = 1,
|
|
flags = {}
|
|
}
|
|
end
|
|
|
|
local base_speed = 0.25
|
|
util.speed = function(multiplier)
|
|
return multiplier * (base_speed)
|
|
end
|
|
|
|
util.remove_from_list = function(list, name)
|
|
local remove = table.remove
|
|
for i = #list, 1, -1 do
|
|
if list[i] == name then
|
|
remove(list, i)
|
|
end
|
|
end
|
|
end
|
|
|
|
local recursive_hack_something
|
|
recursive_hack_something = function(prototype, key, value)
|
|
for k, v in pairs (prototype) do
|
|
if type(v) == "table" then
|
|
recursive_hack_something(v, key, value)
|
|
end
|
|
end
|
|
prototype[key] = value
|
|
end
|
|
util.recursive_hack_something = recursive_hack_something
|
|
|
|
local recursive_hack_blend_mode
|
|
recursive_hack_blend_mode = function(prototype, value)
|
|
for k, v in pairs (prototype) do
|
|
if type(v) == "table" then
|
|
if util.is_sprite_def(v) then
|
|
v.blend_mode = value
|
|
end
|
|
recursive_hack_blend_mode(v, value)
|
|
end
|
|
end
|
|
end
|
|
|
|
local recursive_hack_runtime_tint
|
|
recursive_hack_runtime_tint = function(prototype, value)
|
|
for k, v in pairs (prototype) do
|
|
if type(v) == "table" then
|
|
if util.is_sprite_def(v) then
|
|
v.apply_runtime_tint = value
|
|
if v.hr_version then
|
|
v.hr_version.apply_runtime_tint = value
|
|
end
|
|
end
|
|
recursive_hack_runtime_tint(v, value)
|
|
end
|
|
end
|
|
end
|
|
util.recursive_hack_runtime_tint = recursive_hack_runtime_tint
|
|
|
|
util.copy = util.table.deepcopy
|
|
|
|
--util.prototype = require("data/tf_util/prototype_util")
|
|
|
|
util.flying_unit_collision_mask = function()
|
|
return {"not-colliding-with-itself", "layer-15"}
|
|
end
|
|
|
|
util.ground_unit_collision_mask = function()
|
|
return {"not-colliding-with-itself", "player-layer", "train-layer"}
|
|
end
|
|
|
|
util.projectile_collision_mask = function()
|
|
return {"layer-15", "player-layer", "train-layer"}
|
|
end
|
|
|
|
util.unit_flags = function()
|
|
return {"player-creation", "placeable-off-grid"}
|
|
end
|
|
|
|
util.shift_box = function(box, shift)
|
|
local left_top = box[1]
|
|
local right_bottom = box[2]
|
|
left_top[1] = left_top[1] + shift[1]
|
|
left_top[2] = left_top[2] + shift[2]
|
|
right_bottom[1] = right_bottom[1] + shift[1]
|
|
right_bottom[2] = right_bottom[2] + shift[2]
|
|
return box
|
|
end
|
|
|
|
|
|
util.shift_layer = function(layer, shift)
|
|
layer.shift = layer.shift or {0,0}
|
|
layer.shift[1] = layer.shift[1] + shift[1]
|
|
layer.shift[2] = layer.shift[2] + shift[2]
|
|
return layer
|
|
end
|
|
|
|
return util
|