1
0
mirror of https://github.com/veden/Rampant.git synced 2025-01-26 03:20:07 +02:00

see changelog

This commit is contained in:
Aaron Veden 2019-02-27 18:53:59 -08:00
parent 0c2e0b7dc4
commit 0ac25d84a7
33 changed files with 428 additions and 286 deletions

View File

@ -268,7 +268,12 @@ function upgrade.attempt(natives)
game.surfaces[natives.activeSurface].print("Rampant - Version 0.16.42")
global.version = constants.VERSION_77
end
if (global.version < constants.VERSION_78) then
game.surfaces[natives.activeSurface].print("Rampant - Version 0.17.0")
global.version = constants.VERSION_78
end
return starting ~= global.version, natives
end

View File

@ -1,3 +1,19 @@
---------------------------------------------------------------------------------------------------
Version: 0.17.0
Date: 2. 26. 2019
Improvements:
- Added thumbnail
Tweaks:
- Updated to 0.17
- Synced worm vanilla to worm template
- Changed ground shakes warning message to off by default
- For now, acid-splash-purple replaced explosion
Bugfixes:
- Require statement path changes
- Removed unused chunk scanner entity causing load errors
- Removed acid splash spitter and worm decal as it no longer exist
- Fixed 0.17.2 hide-from-bonus-gui
---------------------------------------------------------------------------------------------------
Version: 0.16.42
Date: 2. 18. 2019

View File

@ -1,10 +1,10 @@
{
"name" : "Rampant",
"factorio_version" : "0.16",
"version" : "0.16.42",
"factorio_version" : "0.17",
"version" : "0.17.0",
"title" : "Rampant",
"author" : "Veden",
"homepage" : "https://forums.factorio.com/viewtopic.php?f=94&t=31445",
"description" : "Improves the enemies tactics by using potential fields/pheromones allowing probing of defenses, retreats, reinforcements, counterattacking, breaching, raids, rallying death cry, and player hunting. Uses nonhoming blockable biter projectiles. Adds new Enemies (disabled by default). Can completely replace the vanilla AI. Difficulty setting in mod options menu.",
"dependencies" : ["base >= 0.16.43", "? bobenemies", "? Natural_Evolution_Enemies >= 9.0.3", "? Clockwork", "? Orbital Ion Cannon", "? RampantArsenal"]
"dependencies" : ["base >= 0.17.0", "? bobenemies", "? Natural_Evolution_Enemies >= 9.0.3", "? Clockwork", "? Orbital Ion Cannon", "? RampantArsenal"]
}

View File

@ -11,8 +11,7 @@ local chunkPropertyUtils = require("ChunkPropertyUtils")
local unitGroupUtils = require("UnitGroupUtils")
local movementUtils = require("MovementUtils")
local mathUtils = require("MathUtils")
package.path = "../?.lua;" .. package.path
local config = require("config")
local config = require("__Rampant__/config")
-- constants

View File

@ -29,6 +29,7 @@ constants.VERSION_73 = 73
constants.VERSION_75 = 75
constants.VERSION_76 = 76
constants.VERSION_77 = 77
constants.VERSION_78 = 78
-- misc

View File

@ -35,6 +35,7 @@
(string->path "Upgrade.lua")
(string->path "settings.lua")
(string->path "README.md")
(string->path "thumbnail.png")
(string->path "NOTICE")
(string->path "libs")
(string->path "sounds")
@ -73,6 +74,7 @@
(copyFile "changelog.txt" modFolder)
(copyFile "Upgrade.lua" modFolder)
(copyFile "tests.lua" modFolder)
(copyFile "thumbnail.png" modFolder)
(copyDirectory "libs" modFolder)
(copyDirectory "locale" modFolder)
(copyDirectory "sounds" modFolder)

View File

@ -3,8 +3,7 @@
local acidBall = require("utils/AttackBall")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -4,8 +4,7 @@ local biterUtils = require("utils/BiterUtils")
local beamUtils = require("utils/BeamUtils")
local attackBall = require("utils/AttackBall")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -6,8 +6,7 @@ local biterUtils = require("utils/BiterUtils")
local beamUtils = require("utils/BeamUtils")
local attackBall = require("utils/AttackBall")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants
@ -513,9 +512,9 @@ function energyThief.addFaction()
{
filename = "__core__/graphics/empty.png",
priority = "extra-high",
width = 46,
height = 33,
shift = {0.25, 0.015625}
width = 1,
height = 1,
shift = {0, 0}
}
},
@ -525,7 +524,7 @@ function energyThief.addFaction()
icon = "__Rampant__/graphics/icons/thief/crystal-drain.png",
icon_size = 32,
hidden = true,
flags = {"goes-to-quickbar"},
flags = {},
subgroup = "energy",
order = "e[accumulator]-a[accumulator]",
place_result = "drain-trigger-rampant",
@ -537,7 +536,7 @@ function energyThief.addFaction()
name = "crystal-drain-pole-rampant",
icon = "__Rampant__/graphics/icons/thief/crystal-drain.png",
icon_size = 32,
flags = {"goes-to-quickbar"},
flags = {},
subgroup = "energy",
order = "e[accumulator]-a[accumulator]",
place_result = "crystal-drain-pole-rampant",
@ -667,11 +666,11 @@ function energyThief.addFaction()
{
filename = "__core__/graphics/empty.png",
priority = "low",
width = 46,
height = 49,
width = 1,
height = 1,
direction_count = 1,
line_length = 1,
shift = {0.1875, -0.2}
shift = {0, 0}
}
}}
chest.max_health = 750
@ -716,7 +715,7 @@ function energyThief.addFaction()
name = "pylon-target-rampant",
icon = "__Rampant__/graphics/icons/thief/crystal-drain.png",
icon_size = 32,
flags = {"goes-to-quickbar"},
flags = {},
subgroup = "storage",
hidden = true,
order = "a[items]-h[steel-collector]",

View File

@ -3,8 +3,7 @@
local acidBall = require("utils/AttackBall")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -3,8 +3,7 @@
local acidBall = require("utils/AttackBall")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -3,8 +3,8 @@
local attackFlame = require("utils/AttackFlame")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
local math3d = require("math3d")
-- constants

View File

@ -4,8 +4,7 @@ local acidBall = require("utils/AttackBall")
local beamUtils = require("utils/BeamUtils")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -3,8 +3,7 @@
local acidBall = require("utils/AttackBall")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -5,8 +5,7 @@ local biterUtils = require("utils/BiterUtils")
local stickerUtils = require("utils/StickerUtils")
local bombUtils = require("utils/BombUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -3,8 +3,7 @@
local physicalBall = require("utils/AttackBall")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -4,8 +4,7 @@ local physicalBall = require("utils/AttackBall")
local biterUtils = require("utils/BiterUtils")
local smokeUtils = require("utils/SmokeUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -4,8 +4,7 @@ local acidBall = require("utils/AttackBall")
local droneUtils = require("utils/DroneUtils")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -4,8 +4,7 @@ local acidBall = require("utils/AttackBall")
local biterUtils = require("utils/BiterUtils")
local stickerUtils = require("utils/StickerUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -3,9 +3,9 @@ local swarmUtils = {}
local droneUtils = require("utils/DroneUtils")
local biterUtils = require("utils/BiterUtils")
package.path = "../?.lua;" .. package.path
local mathUtils = require("libs/MathUtils")
local constants = require("libs/Constants")
local constants = require("__Rampant__/libs/Constants")
local mathUtils = require("__Rampant__/libs/MathUtils")
-- imported functions

View File

@ -3,8 +3,7 @@
local acidBall = require("utils/AttackBall")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants

View File

@ -4,8 +4,7 @@ local acidBall = require("utils/AttackBall")
local droneUtils = require("utils/DroneUtils")
local biterUtils = require("utils/BiterUtils")
local swarmUtils = require("SwarmUtils")
package.path = "../libs/?.lua;" .. package.path
local constants = require("Constants")
local constants = require("__Rampant__/libs/Constants")
-- constants
@ -64,8 +63,9 @@ buildUnits(
type = "instant",
target_effects =
{
--FIXME
type = "create-entity",
entity_name = "acid-splash-purple"
entity_name = "explosion"
}
}
}
@ -274,8 +274,9 @@ buildUnits(
type = "instant",
target_effects =
{
--FIXME
type = "create-entity",
entity_name = "acid-splash-purple"
entity_name = "explosion"
}
}
}

View File

@ -19,95 +19,23 @@ data:extend({
vehicle_impact_sound = { filename = "__base__/sound/car-wood-impact.ogg", volume = 1.0 },
picture =
{
filename = "__base__/graphics/entity/wooden-chest/wooden-chest.png",
priority = "extra-high",
width = 46,
height = 33,
shift = {0.25, 0.015625}
},
filename = "__base__/graphics/entity/wooden-chest/wooden-chest.png",
priority = "extra-high",
width = 32,
height = 36,
shift = util.by_pixel(0.5, -2),
hr_version =
{
filename = "__base__/graphics/entity/wooden-chest/hr-wooden-chest.png",
priority = "extra-high",
width = 62,
height = 72,
shift = util.by_pixel(0.5, -2),
scale = 0.5
}
},
circuit_wire_connection_point = circuit_connector_definitions["chest"].points,
circuit_connector_sprites = circuit_connector_definitions["chest"].sprites,
circuit_wire_max_distance = default_circuit_wire_max_distance
},
{
type = "container",
name = "chunk-scanner-ns-rampant",
icon = "__base__/graphics/icons/wooden-chest.png",
icon_size = 32,
flags = {},
collision_mask = {"player-layer", "object-layer", "water-tile"},
collision_box = {{-0.5, 0}, {0, 32}},
-- minable = {mining_time = 1, result = "chunk-scanner-ns-rampant"},
minable = {mining_time = 1, result = "wooden-chest"},
max_health = 100,
corpse = "small-remnants",
fast_replaceable_group = "container",
selection_box = {{-0.5, 0}, {0, 32}},
inventory_size = 16,
open_sound = { filename = "__base__/sound/wooden-chest-open.ogg" },
close_sound = { filename = "__base__/sound/wooden-chest-close.ogg" },
vehicle_impact_sound = { filename = "__base__/sound/car-wood-impact.ogg", volume = 1.0 },
picture =
{
filename = "__base__/graphics/entity/wooden-chest/wooden-chest.png",
priority = "extra-high",
width = 46,
height = 33,
shift = {0.25, 0.015625}
},
circuit_wire_connection_point = circuit_connector_definitions["chest"].points,
circuit_connector_sprites = circuit_connector_definitions["chest"].sprites,
circuit_wire_max_distance = default_circuit_wire_max_distance
},
{
type = "container",
name = "chunk-scanner-ew-rampant",
icon = "__base__/graphics/icons/wooden-chest.png",
icon_size = 32,
flags = {},
collision_box = {{0, -0.5}, {32, 0}},
collision_mask = {"player-layer", "object-layer", "water-tile"},
-- minable = {mining_time = 1, result = "chunk-scanner-ew-rampant"},
minable = {mining_time = 1, result = "wooden-chest"},
max_health = 100,
corpse = "small-remnants",
fast_replaceable_group = "container",
selection_box = {{0, -0.5}, {32, 0}},
inventory_size = 16,
open_sound = { filename = "__base__/sound/wooden-chest-open.ogg" },
close_sound = { filename = "__base__/sound/wooden-chest-close.ogg" },
vehicle_impact_sound = { filename = "__base__/sound/car-wood-impact.ogg", volume = 1.0 },
picture =
{
filename = "__base__/graphics/entity/wooden-chest/wooden-chest.png",
priority = "extra-high",
width = 46,
height = 33,
shift = {0.25, 0.015625}
},
circuit_wire_connection_point = circuit_connector_definitions["chest"].points,
circuit_connector_sprites = circuit_connector_definitions["chest"].sprites,
circuit_wire_max_distance = default_circuit_wire_max_distance
}
}
})
-- local d = table.deepcopy(data.raw["item"]["wooden-chest"])
-- d.name = "chunk-scanner-ew-rampant"
-- d.hidden = true
-- d.place_result = "chunk-scanner-ew-rampant"
-- data:extend({
-- d
-- })
-- d = table.deepcopy(data.raw["item"]["wooden-chest"])
-- d.name = "chunk-scanner-ns-rampant"
-- d.hidden = true
-- d.place_result = "chunk-scanner-ns-rampant"
-- data:extend({
-- d
-- })

View File

@ -25,7 +25,7 @@ stickerUtils.makeSticker({
function AttackBall.createAttackBall(attributes)
if (attributes.type == "stream") or FORCE_OLD_PROJECTILES then
elseif attributes.damage and (attributes.type == "projectile") then
attributes.damage = attributes.damage * 2.7
end
@ -59,9 +59,10 @@ function AttackBall.createAttackBall(attributes)
type = "instant",
target_effects = (attributes.pointEffects and attributes.pointEffects(attributes)) or
{
--FIXME
{
type= "create-entity",
entity_name = attributes.crater or "acid-splash-purple"
entity_name = attributes.crater or "small-scorchmark"
},
{
type = "damage",

View File

@ -81,8 +81,9 @@ function attacks.addAttacks()
sticker = "slowdown-sticker",
},
{
type = "create-entity",
entity_name = "acid-splash-purple"
type = "create-entity",
--FIXME
entity_name = "explosion"
}
}
end,
@ -184,8 +185,9 @@ function attacks.addAttacks()
pointEffects = function (attributes)
return {
{
type = "create-entity",
entity_name = "acid-splash-purple"
--FIXME
type = "create-entity",
entity_name = "explosion"
}
}
end,
@ -218,8 +220,9 @@ function attacks.addAttacks()
pointEffects = function (attributes)
return {
{
--FIXME
type = "create-entity",
entity_name = "acid-splash-purple"
entity_name = "explosion"
}
}
end,

View File

@ -1,57 +1,145 @@
local biterFunctions = {}
local unitSpawnerUtils = require("UnitSpawnerUtils")
local unitUtils = require("UnitUtils")
local FORCE_OLD_PROJECTILES = settings.startup["rampant-forceOldProjectiles"].value
local spitter_alternative_attacking_animation_sequence = unitUtils.spitter_alternative_attacking_animation_sequence
local spawner_integration = unitSpawnerUtils.spawner_integration
local spawner_idle_animation = unitSpawnerUtils.spawner_idle_animation
local spawner_die_animation = unitSpawnerUtils.spawner_die_animation
function biterFunctions.makeSpitterCorpse(attributes)
local name = attributes.name .. "-corpse-rampant"
local corpse = {
type = "corpse",
name = name,
icon = "__base__/graphics/icons/big-biter-corpse.png",
icon_size = 32,
selectable_in_game = false,
selection_box = {{-1, -1}, {1, 1}},
subgroup="corpses",
order = "c[corpse]-b[spitter]-a[small]",
flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map"},
}
corpse.animation = spitterdyinganimation(attributes.scale, attributes.tint1, attributes.tint2)
corpse.dying_speed = 0.04
corpse.time_before_removed = 15 * 60 * 60
corpse.direction_shuffle = { { 1, 2, 3, 16 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } }
corpse.shuffle_directions_at_frame = 4
corpse.final_render_layer = "lower-object-above-shadow"
corpse.ground_patch_render_layer = "decals" -- "transport-belt-integration"
corpse.ground_patch_fade_in_delay = 1 / 0.02 -- in ticks; 1/dying_speed to delay the animation until dying animation finishes
corpse.ground_patch_fade_in_speed = 0.002
corpse.ground_patch_fade_out_start = 50 * 60
corpse.ground_patch_fade_out_duration = 20 * 60
local a = 1
local d = 0.9
corpse.ground_patch =
{
sheet =
{
filename = "__base__/graphics/entity/biter/blood-puddle-var-main.png",
flags = { "low-object" },
line_length = 4,
variation_count = 4,
frame_count = 1,
width = 84,
height = 68,
shift = util.by_pixel(1, 0),
tint = {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a},
scale = attributes.scale * 2,
hr_version =
{
filename = "__base__/graphics/entity/biter/hr-blood-puddle-var-main.png",
flags = { "low-object" },
line_length = 4,
variation_count = 4,
frame_count = 1,
width = 164,
height = 134,
shift = util.by_pixel(-0.5,-0.5),
tint = {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a},
scale = attributes.scale
}
}
}
data:extend(
{
{
type = "corpse",
name = name,
icon = "__base__/graphics/icons/big-biter-corpse.png",
icon_size = 32,
selectable_in_game = false,
selection_box = {{-1, -1}, {1, 1}},
subgroup="corpses",
order = "c[corpse]-b[spitter]-a[small]",
flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map"},
dying_speed = 0.04,
time_before_removed = 15 * 60 * 60,
final_render_layer = "corpse",
animation = spitterdyinganimation(attributes.scale, attributes.tint)
}
corpse
})
return name
end
function biterFunctions.makeBiterCorpse(attributes)
local name = attributes.name .. "-corpse-rampant"
local corpse = {
type = "corpse",
name = name,
icon = "__base__/graphics/icons/small-biter-corpse.png",
icon_size = 32,
selection_box = {{-0.8, -0.8}, {0.8, 0.8}},
selectable_in_game = false,
subgroup="corpses",
order = "c[corpse]-a[biter]-a[small]",
flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-repairable", "not-on-map"}
}
corpse.animation = biterdieanimation(attributes.scale, attributes.tint1, attributes.tint2)
corpse.dying_speed = 0.04
corpse.time_before_removed = 15 * 60 * 60
corpse.direction_shuffle = { { 1, 2, 3, 16 }, { 4, 5, 6, 7 }, { 8, 9, 10, 11 }, { 12, 13, 14, 15 } }
corpse.shuffle_directions_at_frame = 7
corpse.final_render_layer = "lower-object-above-shadow"
corpse.ground_patch_render_layer = "decals" -- "transport-belt-integration"
corpse.ground_patch_fade_in_delay = 1 / 0.02 -- in ticks; 1/dying_speed to delay the animation until dying animation finishes
corpse.ground_patch_fade_in_speed = 0.002
corpse.ground_patch_fade_out_start = 50 * 60
corpse.ground_patch_fade_out_duration = 20 * 60
local a = 1
local d = 0.9
corpse.ground_patch =
{
sheet =
{
filename = "__base__/graphics/entity/biter/blood-puddle-var-main.png",
flags = { "low-object" },
line_length = 4,
variation_count = 4,
frame_count = 1,
width = 84,
height = 68,
shift = util.by_pixel(1, 0),
tint = {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a},
scale = attributes.scale * 2,
hr_version =
{
filename = "__base__/graphics/entity/biter/hr-blood-puddle-var-main.png",
flags = { "low-object" },
line_length = 4,
variation_count = 4,
frame_count = 1,
width = 164,
height = 134,
shift = util.by_pixel(-0.5,-0.5),
tint = {r = 0.6 * d * a, g = 0.1 * d * a, b = 0.6 * d * a, a = a},
scale = attributes.scale
}
}
}
data:extend({
{
type = "corpse",
name = name,
icon = "__base__/graphics/icons/big-biter-corpse.png",
icon_size = 32,
selectable_in_game = false,
selection_box = {{-1, -1}, {1, 1}},
subgroup="corpses",
order = "c[corpse]-b[spitter]-a[small]",
flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-on-map"},
dying_speed = 0.04,
time_before_removed = 15 * 60 * 60,
final_render_layer = "corpse",
animation = biterdieanimation(attributes.scale, attributes.tint1, attributes.tint2)
}
corpse
})
return name
end
@ -100,8 +188,12 @@ function biterFunctions.makeWormCorpse(attributes)
flags = {"placeable-neutral", "placeable-off-grid", "building-direction-8-way", "not-repairable", "not-on-map"},
dying_speed = 0.01,
time_before_removed = 15 * 60 * 60,
final_render_layer = "corpse",
animation = worm_die_animation(attributes.scale, attributes.tint)
final_render_layer = "lower-object-above-shadow",
animation = worm_die_animation(attributes.scale, attributes.tint),
ground_patch =
{
sheet = worm_integration(attributes.scale)
}
}
})
return name
@ -113,7 +205,7 @@ function biterFunctions.makeBiter(name, biterAttributes, biterAttack, biterResis
v.type = k
resistances[#resistances+1] = v
end
-- print(name .. " " .. biterAttributes.health)
-- print(name .. " " .. biterAttributes.health)
return {
type = "unit",
name = name .. "-rampant",
@ -153,7 +245,7 @@ function biterFunctions.makeSpitter(name, biterAttributes, biterAttack, biterRes
v.type = k
resistances[#resistances+1] = v
end
-- print(name .. " " .. biterAttributes.health)
-- print(name .. " " .. biterAttributes.health)
return {
type = "unit",
name = name .. "-rampant",
@ -179,6 +271,7 @@ function biterFunctions.makeSpitter(name, biterAttributes, biterAttack, biterRes
distance_per_frame = biterAttributes.distancePerFrame or 0.1,
pollution_to_join_attack = biterAttributes.pollutionToAttack or 200,
distraction_cooldown = biterAttributes.distractionCooldown or 300,
alternative_attacking_frame_sequence = spitter_alternative_attacking_animation_sequence(),
corpse = biterAttributes.corpse,
dying_explosion = biterAttributes.explosion,
dying_sound = make_spitter_dying_sounds(0.8),
@ -193,7 +286,7 @@ function biterFunctions.makeUnitSpawner(name, biterAttributes, biterResistances,
v.type = k
resistances[#resistances+1] = v
end
-- print(name .. " " .. biterAttributes.health)
-- print(name .. " " .. biterAttributes.health)
local o = {
type = "unit-spawner",
name = name .. "-rampant",
@ -243,6 +336,10 @@ function biterFunctions.makeUnitSpawner(name, biterAttributes, biterResistances,
spawner_idle_animation(2, biterAttributes.tint, biterAttributes.scale),
spawner_idle_animation(3, biterAttributes.tint, biterAttributes.scale)
},
integration =
{
sheet = spawner_integration(biterAttributes.scale)
},
result_units = unitSet,
-- With zero evolution the spawn rate is 6 seconds, with max evolution it is 2.5 seconds
spawning_cooldown = biterAttributes.spawningCooldown or {360, 150},
@ -265,7 +362,7 @@ function biterFunctions.makeWorm(name, attributes, attack, wormResistances)
v.type = k
resistances[#resistances+1] = v
end
-- print(name .. " " .. attributes.health)
-- print(name .. " " .. attributes.health)
local o = {
type = "turret",
name = name .. "-rampant",
@ -276,6 +373,7 @@ function biterFunctions.makeWorm(name, attributes, attack, wormResistances)
subgroup="enemies",
max_health = attributes.health,
loot = attributes.loot,
shooting_cursor_size = 3.5 * attributes.scale,
resistances = resistances,
healing_per_tick = attributes.healing or 0.01,
collision_box = {{-1.1 * attributes.scale, -1.0 * attributes.scale}, {1.1 * attributes.scale, 1.0 * attributes.scale}},
@ -287,22 +385,39 @@ function biterFunctions.makeWorm(name, attributes, attack, wormResistances)
inventory_size = attributes.inventorySize,
dying_sound = make_worm_dying_sounds(0.9),
folded_speed = 0.01,
folded_animation = worm_folded_animation(attributes.scale, attributes.tint),
preparing_speed = attributes.preparingSpeed or 0.025,
folded_speed_secondary = 0.024,
folded_animation = worm_folded_animation(attributes.scale, attributes.tint),
preparing_speed = attributes.preparingSpeed or 0.024,
preparing_animation = worm_preparing_animation(attributes.scale, attributes.tint, "forward"),
prepared_speed = 0.015,
prepared_animation = worm_prepared_animation(attributes.scale, attributes.tint),
starting_attack_speed = 0.03,
starting_attack_animation = worm_attack_animation(attributes.scale, attributes.tint, "forward"),
preparing_sound = make_worm_standup_sounds(1),
prepared_speed = 0.024,
prepared_speed_secondary = 0.012,
prepared_animation = worm_prepared_animation(attributes.scale, attributes.tint),
prepared_sound = make_worm_breath(0.8),
prepared_alternative_speed = 0.014,
prepared_alternative_speed_secondary = 0.010,
prepared_alternative_chance = 0.2,
prepared_alternative_animation = worm_prepared_alternative_animation(attributes.scale, attributes.tint),
prepared_alternative_sound = make_worm_roar_alternative(0.8),
starting_attack_speed = 0.034,
starting_attack_animation = worm_start_attack_animation(attributes.scale, attributes.tint),
starting_attack_sound = make_worm_roars(0.8),
ending_attack_speed = 0.03,
ending_attack_animation = worm_attack_animation(attributes.scale, attributes.tint, "backward"),
ending_attack_speed = 0.016,
ending_attack_animation = worm_end_attack_animation(attributes.scale, attributes.tint),
folding_speed = attributes.foldingSpeed or 0.015,
folding_animation = worm_preparing_animation(attributes.scale, attributes.tint, "backward"),
folding_sound = make_worm_fold_sounds(1),
prepare_range = attributes.prepareRange or 30,
attack_parameters = attack,
integration = worm_integration(attributes.scale),
attack_parameters = attack,
secondary_animation = true,
random_animation_offset = true,
attack_from_start_frame = true,
allow_turning_when_starting_attack = true,
build_base_evolution_requirement = attributes.evolutionRequirement or 0.0,
call_for_help_radius = 40
call_for_help_radius = 60
}
if attributes.autoplace then

View File

@ -16,7 +16,7 @@ function droneUtils.makeDrone(name, attributes, biterResistances, biterAttack, b
name = n,
icon = "__base__/graphics/icons/defender.png",
icon_size = 32,
flags = {"placeable-off-grid", "not-on-map", "not-repairable", "breaths-air", "hide-from-bonus-gui"},
flags = {"placeable-off-grid", "not-on-map", "not-repairable", "breaths-air", "hidden"},
subgroup="capsule",
order="e-a-a",
max_health = attributes.health or 60,

View File

@ -12,7 +12,7 @@ function thiefUtils.makeDrainCrystal(attributes)
name = itemName,
icon = "__Rampant__/graphics/icons/thief/crystal-drain.png",
icon_size = 32,
flags = {"goes-to-quickbar"},
flags = {},
subgroup = "energy",
order = "e[accumulator]-a[accumulator]",
place_result = name,

View File

@ -1,103 +1,154 @@
local unitSpawnerUtils = {}
function unitSpawnerUtils.spawner_integration(scale)
return
{
filename = "__base__/graphics/entity/spawner/spawner-idle-integration.png",
variation_count = 4,
width = 258,
height = 188,
shift = util.by_pixel(2, -2),
frame_count = 1,
scale = scale,
line_length = 1,
hr_version =
{
filename = "__base__/graphics/entity/spawner/hr-spawner-idle-integration.png",
variation_count = 4,
width = 522,
height = 380,
shift = util.by_pixel(3, -3),
frame_count = 1,
line_length = 1,
scale = scale * 0.5
}
}
end
function unitSpawnerUtils.spawner_idle_animation(variation, tint, scale)
return
{
layers =
{
{
filename = "__base__/graphics/entity/spawner/spawner-idle.png",
line_length = 8,
width = 243,
height = 181,
frame_count = 8,
animation_speed = 0.18,
direction_count = 1,
scale = scale,
run_mode = "forward-then-backward",
shift = {0.140625 - 0.65, -0.234375},
y = variation * 181
},
{
filename = "__base__/graphics/entity/spawner/spawner-idle-mask.png",
flags = { "mask" },
width = 166,
height = 148,
frame_count = 8,
scale = scale,
animation_speed = 0.18,
run_mode = "forward-then-backward",
shift = {-0.34375 - 0.65, -0.375},
line_length = 8,
tint = tint,
y = variation * 148
}
}
}
{
layers =
{
{
filename = "__base__/graphics/entity/spawner/spawner-idle.png",
line_length = 4,
width = 248,
height = 180,
frame_count = 8,
animation_speed = 0.18,
direction_count = 1,
scale = scale,
run_mode = "forward-then-backward",
shift = util.by_pixel(2, -4),
y = variation * 180 * 2,
hr_version =
{
filename = "__base__/graphics/entity/spawner/hr-spawner-idle.png",
line_length = 4,
width = 490,
height = 354,
frame_count = 8,
animation_speed = 0.18,
direction_count = 1,
scale = scale * 0.5,
run_mode = "forward-then-backward",
shift = util.by_pixel(3, -2),
y = variation * 354 * 2,
}
},
{
filename = "__base__/graphics/entity/spawner/spawner-idle-mask.png",
flags = { "mask" },
width = 140,
height = 118,
frame_count = 8,
animation_speed = 0.18,
run_mode = "forward-then-backward",
shift = util.by_pixel(-2, -14),
line_length = 4,
tint = tint,
scale = scale,
y = variation * 118 * 2,
hr_version =
{
filename = "__base__/graphics/entity/spawner/hr-spawner-idle-mask.png",
flags = { "mask" },
width = 276,
height = 234,
frame_count = 8,
animation_speed = 0.18,
run_mode = "forward-then-backward",
shift = util.by_pixel(-1, -14),
line_length = 4,
tint = tint,
y = variation * 234 * 2,
scale = scale * 0.5
}
}
}
}
end
function unitSpawnerUtils.spawner_die_animation(variation, tint, scale)
return
{
layers =
{
{
width = 255,
height = 184,
frame_count = 20,
direction_count = 1,
scale = scale,
shift = {-0.015625 - 0.65, -0.28125},
stripes =
{
{
filename = "__base__/graphics/entity/spawner/spawner-die-01.png",
width_in_frames = 7,
height_in_frames = 4,
y = variation * 184
},
{
filename = "__base__/graphics/entity/spawner/spawner-die-02.png",
width_in_frames = 7,
height_in_frames = 4,
y = variation * 184
},
{
filename = "__base__/graphics/entity/spawner/spawner-die-03.png",
width_in_frames = 6,
height_in_frames = 4,
y = variation * 184
}
}
},
{
flags = { "mask" },
width = 166,
height = 148,
frame_count = 20,
direction_count = 1,
scale = scale,
shift = {-0.34375 - 0.65, -0.375},
tint = tint,
stripes =
{
{
filename = "__base__/graphics/entity/spawner/spawner-die-mask-01.png",
width_in_frames = 10,
height_in_frames = 4,
y = variation * 148
},
{
filename = "__base__/graphics/entity/spawner/spawner-die-mask-02.png",
width_in_frames = 10,
height_in_frames = 4,
y = variation * 148
}
}
}
}
}
layers =
{
{
filename = "__base__/graphics/entity/spawner/spawner-die.png",
line_length = 8,
width = 248,
height = 178,
frame_count = 8,
direction_count = 1,
shift = util.by_pixel(2, -2),
y = variation * 178,
scale = scale,
hr_version =
{
filename = "__base__/graphics/entity/spawner/hr-spawner-die.png",
line_length = 8,
width = 490,
height = 354,
frame_count = 8,
direction_count = 1,
shift = util.by_pixel(3, -2),
y = variation * 354,
scale = scale * 0.5
}
},
{
filename = "__base__/graphics/entity/spawner/spawner-die-mask.png",
flags = { "mask" },
width = 140,
height = 118,
frame_count = 8,
direction_count = 1,
shift = util.by_pixel(-2, -14),
scale = scale,
line_length = 8,
tint = tint,
y = variation * 118,
he_version =
{
filename = "__base__/graphics/entity/spawner/hr-spawner-die-mask.png",
flags = { "mask" },
width = 276,
height = 234,
frame_count = 8,
direction_count = 1,
shift = util.by_pixel(-1, -14),
line_length = 8,
tint = tint,
y = variation * 234,
scale = scale * 0.5
}
}
}
}
end
return unitSpawnerUtils

20
prototypes/utils/UnitUtils.lua Executable file
View File

@ -0,0 +1,20 @@
local unitUtils = {}
function unitUtils.spitter_alternative_attacking_animation_sequence()
return {
warmup_frame_sequence = { 1, 2, 3, 4, 5, 6 },
warmup2_frame_sequence = { 7, 7, 7, 7, 7, 7 },
attacking_frame_sequence = { 7, 8, 9, 10, 11, 12, 13, 14, 13, 14, 13, 12, 11, 10, 9, 8 },
cooldown_frame_sequence = { 7 },
prepared_frame_sequence = { 7 },
back_to_walk_frame_sequence = { 6, 5, 4, 3, 2, 1 },
warmup_animation_speed = 1 / 6 * 0.4,
attacking_animation_speed = 1 / 16 * 0.4,
cooldown_animation_speed = 1 / 1 * 0.4 * 0.125;
prepared_animation_speed = 1 / 1 * 0.5 * 0.4,
back_to_walk_animation_speed = 1 / 6 * 0.4,
}
end
return unitUtils

View File

@ -49,6 +49,19 @@ function vanillaUpdates.useDumbProjectiles()
},
"acid-ball-4-" .. attackType .. "-rampant")
turrets["behemoth-worm-turret"]["attack_parameters"] = biterUtils.createRangedAttack(
{
cooldown = 60,
range = 26,
min_range = 3,
type = "projectile",
turn_range = 1,
fire_penalty = 0,
scale = 1.2
},
"acid-ball-5-" .. attackType .. "-rampant")
local units = data.raw["unit"];
local unit = units["small-spitter"]

View File

@ -543,7 +543,7 @@ data:extend({
name = "rampant-attack-warning",
description = "rampant-attack-warning",
setting_type = "runtime-per-user",
default_value = true,
default_value = false,
order = "o[modifer]-a[message]",
per_user = true
},

BIN
thumbnail.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB