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