1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-11-23 22:22:34 +02:00
This commit is contained in:
hanakocz
2020-04-14 16:24:32 +02:00
parent 3adc32953d
commit bd4adad200
9 changed files with 86 additions and 56 deletions

View File

@@ -67,6 +67,7 @@ map_info_main_caption=Chronosphere
map_info_sub_caption= ..Comfylatron gone wild..
map_info_text_old=Comfylatron has seized The Fish Train and turned it into a time machine.\nIt is your job to make sure the cargo is safe throughout the times and places we travel through!\nThis however will not be an easy task,\nas Comfylatron does not have any idea how to control this machine at all.\n\nThe destinations of quantum time jumps are completely random, and the machine always needs time to recharge.\nYou can speed it up greatly by charging acumulators in Locomotive.\nSo be sure to grab as many resources as you can before the train jump away!\nComfylatron manages to run teleporting devices to transport items into train from his chests. Also to save people from staying in wrong universe.\n\nOnce a quantum jump is initiated, be sure to have everything packed up, there is nearly zero chance to revisit that place again!\nMining productivity research will overhaul your mining equipment,\nreinforcing your pickaxes, as well as increasing the size of your backpack.\nGood luck on your journey!
map_info_text=Comfylatron has seized the Fish Train and turned it into a time machine.\n Your job as his slave is:\n\n[1] Keep train alive at all costs\n[2] Gather resources while travelling through different maps.\n[3a] Press enter on cargo wagons to enter insides of train.\n[3b] Press enter on cars to exit the train.\n[4] Charging acumulators inside train speeds up jumps when leaving early is needed.\nCharging and jumping creates huge pollution so be ready to get attacked.\n[5] Items inserted into comfylatron chests get teleported into train.\n[6] Some planets are poor, some are rich, and some are just too dangerous.\n\n Loot, but also evolution grows with jumps performed.\n During jump, personnel will be teleported in,\n however dead bodies nor buildings won't.\nMining productivity grants inventory space and handmining speed.\n\nGood luck. Don't let biters ruin the show!
planet_jump=Destination: __1__, Ore Richness: __2__, Daynight cycle: __3__
message_danger1=Comfylatron: We have a problem! We got disrupted in mid-jump, only part of energy got used, and here we landed. It might have been a trap!
message_danger2=Comfylatron: My analysis says that charging needs full energy reset to work again, so we are stuck there until next full jump.
message_danger3=Robot voice: INTRUDER ALERT! Lifeforms detected! Must eliminate!
@@ -95,6 +96,25 @@ message_game_won1=Comfylatron: Thank you with helping me on this delivery. It wa
message_overstay=Comfylatron: Looks like you stayed on previous planet for so long that enemies on other planets had additional time to evolve!
message_poison_defense=Comfylatron: Triggering poison defense. Let's kill everything!
map_1=Terra Ferrata
map_2=Malachite Hills
map_3=Granite Plains
map_4=Petroleum Basin
map_5=Pitchblende Mountain
map_6=Mixed Deposits
map_7=Biter Homelands
map_8=Gangue Dumps
map_9=Antracite Valley
map_10=Ancient Battlefield
map_11=Cave Systems
map_12=Strange Forest
map_13=Riverlands
map_14=Burning Hell
map_15=Starting Area
map_16=Hedge Maze
map_17=Fish Market
map_18=Methane Swamps
map_19=ERROR DESTINATION NOT FOUND
ore_richness_very_rich=Very Rich
ore_richness_rich=Rich
ore_richness_normal=Normal
@@ -137,7 +157,7 @@ upgrade_storage_message=Comfylatron: Cargo wagons now have upgraded storage.
upgrade_storage_tooltip=Add and upgrade storage chests to the sides of wagons.
upgrade_poison=Poison Defense
upgrade_poison_message=Comfylatron: I don't believe in your defense skills. I equipped train with poison defense.
upgrade_poison_tooltip=Poison defense. Triggers automatically when train has low HP.\nRecharge timer for next use: __1__ min
upgrade_poison_tooltip=Poison defense. Triggers automatically when train has low HP.\nMax charges : 4. Recharge timer for next use: __1__ min.
upgrade_fusion=Fusion Reactor
upgrade_fusion_message=Comfylatron: One personal fusion reactor ready.
upgrade_fusion_tooltip=Creates one Fusion Reactor.
@@ -145,10 +165,10 @@ upgrade_mk2=Power Armor MK2
upgrade_mk2_message=Comfylatron: I upgraded one armor to mk2.
upgrade_mk2_tooltip=Creates one Power Armor MK2
upgrade_computer1=Comfylatron's Quest 1
upgrade_computer1_message=Comfylatron: Thanks for fixing train navigation. I can now get us rid of very poor worlds. It will still need more work though.
upgrade_computer1_message=Comfylatron: Thanks for fixing train navigation. I can now get us rid of very poor worlds. It will still need more work though, come back after jump.
upgrade_computer1_tooltip=Progresses main quest.\nAll next worlds won't have "very poor" ore distribution.
upgrade_computer2=Comfylatron's Quest 2
upgrade_computer2_message=Comfylatron: Perfect! Now we have train reactor and even better destination precision. I will get to you later what still needs to be done.
upgrade_computer2_message=Comfylatron: Perfect! Now we have train reactor and even better destination precision. I will get to you after jump with what still needs to be done.
upgrade_computer2_tooltip=Progresses main quest.\nAll next worlds won't have "poor" ore distribution.
upgrade_computer3=Comfylatron's Quest 3
upgrade_computer3_message=Comfylatron: That's __1__ / 10 processor parts done!

View File

@@ -160,19 +160,19 @@ function Public_chrono.process_jump(choice)
Server.to_discord_embed(message)
if objective.chronojumps == 6 then
game.print({"chronosphere.message_evolve"}, {r=0.98, g=0.66, b=0.22})
game.print({"chronosphere.message_evolve"}, {r=0.98, g=0.36, b=0.22})
elseif objective.chronojumps >= 15 and objective.computermessage == 0 then
game.print({"chronosphere.message_quest1"}, {r=0.98, g=0.66, b=0.22})
game.print({"chronosphere.message_quest1"}, {r=0.98, g=0.36, b=0.22})
objective.computermessage = 1
elseif objective.chronojumps >= 20 and objective.computermessage == 2 then
game.print({"chronosphere.message_quest3"}, {r=0.98, g=0.66, b=0.22})
game.print({"chronosphere.message_quest3"}, {r=0.98, g=0.36, b=0.22})
objective.computermessage = 3
elseif objective.chronojumps >= 25 and objective.computermessage == 4 then
game.print({"chronosphere.message_quest5"}, {r=0.98, g=0.66, b=0.22})
game.print({"chronosphere.message_quest5"}, {r=0.98, g=0.36, b=0.22})
objective.computermessage = 5
end
if overstayed then
game.print({"chronosphere.message_overstay"}, {r=0.98, g=0.66, b=0.22})
game.print({"chronosphere.message_overstay"}, {r=0.98, g=0.36, b=0.22})
end
if objective.planet[1].name.id == 19 then
check_nuke_silos()

View File

@@ -3,47 +3,47 @@ local math_random = math.random
--cumul_chance must be sum of this and all previous chances, add new planets at the end only, or recalculate
--biters: used in spawner generation within math_random(1, 52 - biters), so higher number gives better chance. not to be greater than 50.
local variants = {
[1] = {id = 1, name = "iron planet", iron = 6, copper = 1, coal = 1, stone = 1, uranium = 0, oil = 1, biters = 16, moisture = -0.2, chance = 1, cumul_chance = 1},
[2] = {id = 2, name = "copper planet", iron = 1, copper = 6, coal = 1, stone = 1, uranium = 0, oil = 1, biters = 16, moisture = 0.2, chance = 1, cumul_chance = 2},
[3] = {id = 3, name = "stone planet", iron = 1, copper = 1, coal = 1, stone = 6, uranium = 0, oil = 1, biters = 16, moisture = -0.2, chance = 1, cumul_chance = 3},
[4] = {id = 4, name = "oil planet", iron = 1, copper = 1, coal = 1, stone = 1, uranium = 0, oil = 6, biters = 16, moisture = 0.1, chance = 1, cumul_chance = 4},
[5] = {id = 5, name = "uranium planet", iron = 1, copper = 1, coal = 1, stone = 1, uranium = 6, oil = 1, biters = 16, moisture = -0.2, chance = 1, cumul_chance = 5},
[6] = {id = 6, name = "mixed planet", iron = 2, copper = 2, coal = 2, stone = 2, uranium = 0, oil = 2, biters = 10, moisture = 0, chance = 3, cumul_chance = 8},
[7] = {id = 7, name = "biter planet", iron = 2, copper = 2, coal = 2, stone = 2, uranium = 4, oil = 3, biters = 40, moisture = 0.2, chance = 4, cumul_chance = 12},
[8] = {id = 8, name = "poor planet", iron = 1, copper = 1, coal = 1, stone = 1, uranium = 0, oil = 0, biters = 16, moisture = 0.1, chance = 1, cumul_chance = 13},
[9] = {id = 9, name = "coal planet", iron = 1, copper = 1, coal = 6, stone = 1, uranium = 0, oil = 1, biters = 16, moisture = 0, chance = 1, cumul_chance = 14},
[10] = {id = 10, name = "scrapyard", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 0, biters = 0, moisture = -0.2, chance = 3, cumul_chance = 17},
[11] = {id = 11, name = "rocky planet", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 0, biters = 6, moisture = -0.2, chance = 2, cumul_chance = 19},
[12] = {id = 12, name = "choppy planet", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 1, biters = 6, moisture = 0.4, chance = 2, cumul_chance = 21},
[13] = {id = 13, name = "river planet", iron = 1, copper = 1, coal = 3, stone = 1, uranium = 0, oil = 0, biters = 8, moisture = 0.5, chance = 2, cumul_chance = 23},
[14] = {id = 14, name = "lava planet", iron = 2, copper = 2, coal = 2, stone = 2, uranium = 0, oil = 0, biters = 6, moisture = -0.5, chance = 1, cumul_chance = 24},
[15] = {id = 15, name = "start planet", iron = 5, copper = 3, coal = 5, stone = 2, uranium = 0, oil = 0, biters = 1, moisture = -0.3, chance = 0, cumul_chance = 24},
[16] = {id = 16, name = "hedge maze", iron = 3, copper = 3, coal = 3, stone = 3, uranium = 1, oil = 2, biters = 16, moisture = -0.1, chance = 2, cumul_chance = 26},
[17] = {id = 17, name = "fish market", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 0, biters = 100, moisture = 0, chance = 0, cumul_chance = 26},
[18] = {id = 18, name = "swamp planet", iron = 2, copper = 0, coal = 3, stone = 0, uranium = 0, oil = 2, biters = 16, moisture = 0.5, chance = 2, cumul_chance = 28},
[19] = {id = 19, name = "jump failure", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 0, biters = 0, moisture = 0, chance = 0, cumul_chance = 28}
[1] = {id = 1, name = {"chronosphere.map_1"}, dname = "Terra Ferrata", iron = 6, copper = 1, coal = 1, stone = 1, uranium = 0, oil = 1, biters = 16, moisture = -0.2, chance = 1, cumul_chance = 1},
[2] = {id = 2, name = {"chronosphere.map_2"}, dname = "Malachite Hills", iron = 1, copper = 6, coal = 1, stone = 1, uranium = 0, oil = 1, biters = 16, moisture = 0.2, chance = 1, cumul_chance = 2},
[3] = {id = 3, name = {"chronosphere.map_3"}, dname = "Granite Plains", iron = 1, copper = 1, coal = 1, stone = 6, uranium = 0, oil = 1, biters = 16, moisture = -0.2, chance = 1, cumul_chance = 3},
[4] = {id = 4, name = {"chronosphere.map_4"}, dname = "Petroleum Basin", iron = 1, copper = 1, coal = 1, stone = 1, uranium = 0, oil = 6, biters = 16, moisture = 0.1, chance = 1, cumul_chance = 4},
[5] = {id = 5, name = {"chronosphere.map_5"}, dname = "Pitchblende Mountain", iron = 1, copper = 1, coal = 1, stone = 1, uranium = 6, oil = 1, biters = 16, moisture = -0.2, chance = 1, cumul_chance = 5},
[6] = {id = 6, name = {"chronosphere.map_6"}, dname = "Mixed Deposits", iron = 2, copper = 2, coal = 2, stone = 2, uranium = 0, oil = 2, biters = 10, moisture = 0, chance = 3, cumul_chance = 8},
[7] = {id = 7, name = {"chronosphere.map_7"}, dname = "Biter Homelands", iron = 2, copper = 2, coal = 2, stone = 2, uranium = 4, oil = 3, biters = 40, moisture = 0.2, chance = 4, cumul_chance = 12},
[8] = {id = 8, name = {"chronosphere.map_8"}, dname = "Gangue Dumps", iron = 1, copper = 1, coal = 1, stone = 1, uranium = 0, oil = 0, biters = 16, moisture = 0.1, chance = 1, cumul_chance = 13},
[9] = {id = 9, name = {"chronosphere.map_9"}, dname = "Antracite Valley", iron = 1, copper = 1, coal = 6, stone = 1, uranium = 0, oil = 1, biters = 16, moisture = 0, chance = 1, cumul_chance = 14},
[10] = {id = 10, name = {"chronosphere.map_10"}, dname = "Ancient Battlefield", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 0, biters = 0, moisture = -0.2, chance = 3, cumul_chance = 17},
[11] = {id = 11, name = {"chronosphere.map_11"}, dname = "Cave Systems", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 0, biters = 6, moisture = -0.2, chance = 2, cumul_chance = 19},
[12] = {id = 12, name = {"chronosphere.map_12"}, dname = "Strange Forest", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 1, biters = 6, moisture = 0.4, chance = 2, cumul_chance = 21},
[13] = {id = 13, name = {"chronosphere.map_13"}, dname = "Riverlands", iron = 1, copper = 1, coal = 3, stone = 1, uranium = 0, oil = 0, biters = 8, moisture = 0.5, chance = 2, cumul_chance = 23},
[14] = {id = 14, name = {"chronosphere.map_14"}, dname = "Burning Hell", iron = 2, copper = 2, coal = 2, stone = 2, uranium = 0, oil = 0, biters = 6, moisture = -0.5, chance = 1, cumul_chance = 24},
[15] = {id = 15, name = {"chronosphere.map_15"}, dname = "Starting Area", iron = 5, copper = 3, coal = 5, stone = 2, uranium = 0, oil = 0, biters = 1, moisture = -0.3, chance = 0, cumul_chance = 24},
[16] = {id = 16, name = {"chronosphere.map_16"}, dname = "Hedge Maze", iron = 3, copper = 3, coal = 3, stone = 3, uranium = 1, oil = 2, biters = 16, moisture = -0.1, chance = 2, cumul_chance = 26},
[17] = {id = 17, name = {"chronosphere.map_17"}, dname = "Fish Market", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 0, biters = 100, moisture = 0, chance = 0, cumul_chance = 26},
[18] = {id = 18, name = {"chronosphere.map_18"}, dname = "Methane Swamps", iron = 2, copper = 0, coal = 3, stone = 0, uranium = 0, oil = 2, biters = 16, moisture = 0.5, chance = 2, cumul_chance = 28},
[19] = {id = 19, name = {"chronosphere.map_19"}, dname = "ERROR DESTINATION NOT FOUND", iron = 0, copper = 0, coal = 0, stone = 0, uranium = 0, oil = 0, biters = 0, moisture = 0, chance = 0, cumul_chance = 28}
}
local time_speed_variants = {
[1] = {name = {"chronosphere.daynight_static"}, timer = 0},
[2] = {name = {"chronosphere.daynight_normal"}, timer = 100},
[3] = {name = {"chronosphere.daynight_slow"}, timer = 200},
[4] = {name = {"chronosphere.daynight_superslow"}, timer = 400},
[5] = {name = {"chronosphere.daynight_fast"}, timer = 50},
[6] = {name = {"chronosphere.daynight_superfast"}, timer = 25}
[1] = {name = {"chronosphere.daynight_static"}, dname = "static", timer = 0},
[2] = {name = {"chronosphere.daynight_normal"}, dname = "normal", timer = 100},
[3] = {name = {"chronosphere.daynight_slow"}, dname = "slow", timer = 200},
[4] = {name = {"chronosphere.daynight_superslow"}, dname = "superslow", timer = 400},
[5] = {name = {"chronosphere.daynight_fast"}, dname = "fast", timer = 50},
[6] = {name = {"chronosphere.daynight_superfast"}, dname = "superfast", timer = 25}
}
local richness = {
[1] = {name = {"chronosphere.ore_richness_very_rich"}, factor = 3},
[2] = {name = {"chronosphere.ore_richness_rich"}, factor = 2},
[3] = {name = {"chronosphere.ore_richness_rich"}, factor = 2},
[4] = {name = {"chronosphere.ore_richness_normal"}, factor = 1},
[5] = {name = {"chronosphere.ore_richness_normal"}, factor = 1},
[6] = {name = {"chronosphere.ore_richness_normal"}, factor = 1},
[7] = {name = {"chronosphere.ore_richness_poor"}, factor = 0.6},
[8] = {name = {"chronosphere.ore_richness_poor"}, factor = 0.6},
[9] = {name = {"chronosphere.ore_richness_very_poor"}, factor = 0.3},
[10] = {name = {"chronosphere.ore_richness_none"}, factor = 0}
[1] = {name = {"chronosphere.ore_richness_very_rich"}, dname = "very rich", factor = 3},
[2] = {name = {"chronosphere.ore_richness_rich"}, dname = "rich", factor = 2},
[3] = {name = {"chronosphere.ore_richness_rich"}, dname = "rich", factor = 2},
[4] = {name = {"chronosphere.ore_richness_normal"}, dname = "normal", factor = 1},
[5] = {name = {"chronosphere.ore_richness_normal"}, dname = "normal", factor = 1},
[6] = {name = {"chronosphere.ore_richness_normal"}, dname = "normal", factor = 1},
[7] = {name = {"chronosphere.ore_richness_poor"}, dname = "poor", factor = 0.6},
[8] = {name = {"chronosphere.ore_richness_poor"}, dname = "poor", factor = 0.6},
[9] = {name = {"chronosphere.ore_richness_very_poor"}, dname = "very poor", factor = 0.3},
[10] = {name = {"chronosphere.ore_richness_none"}, dname = "none", factor = 0}
}
local function roll(weight)
for i = 1, 100, 1 do

View File

@@ -309,7 +309,7 @@ function Public.create_wagon_room()
powerpole.minable = false
powerpole.destructible = false
local market = surface.create_entity({name = "market", position = {-30, height * -0.5 + 4}, force="neutral", create_build_effect_smoke = false})
local market = surface.create_entity({name = "market", position = {-29, height * -0.5 + 4}, force="neutral", create_build_effect_smoke = false})
market.minable = false
market.destructible = false
local repairchest = surface.create_entity({name = "compilatron-chest", position = {-24, height * -0.5 + 3}, force = "player"})

View File

@@ -1,6 +1,7 @@
-- chronosphere --
global.objective = {}
global.objective.upgrades = {}
require "modules.difficulty_vote"
require "modules.biters_yield_coins"
require "modules.no_deconstruction_of_neutral_entities"
@@ -37,9 +38,10 @@ local starting_items = {['pistol'] = 1, ['firearm-magazine'] = 32, ['grenade'] =
local function generate_overworld(surface, optplanet)
Planets.determine_planet(optplanet)
local planet = global.objective.planet
--local message = "Planet info: " .. planet[1].name.name .. ", Ore richness: " .. planet[1].ore_richness.name .. ", Speed of day: " .. planet[1].day_speed.name
--game.print(message, {r=0.98, g=0.66, b=0.22})
--Server.to_discord_embed(message)
local message = {"chronosphere.planet_jump", planet[1].name.name, planet[1].ore_richness.name, planet[1].day_speed.name}
game.print(message, {r=0.98, g=0.66, b=0.22})
local discordmessage = "Destination: "..planet[1].name.dname..", Ore Richness: "..planet[1].ore_richness.dname..", Daynight cycle: "..planet[1].day_speed.dname
Server.to_discord_embed(discordmessage)
if planet[1].name.id == 12 then
game.print({"chronosphere.message_choppy"}, {r=0.98, g=0.66, b=0.22})
elseif planet[1].name.id == 14 then

View File

@@ -209,7 +209,7 @@ function Public.upgrades()
name = {"chronosphere.upgrade_computer3"},
sprite = "item/rocket-control-unit",
max_level = 10,
message = {"chronosphere.upgrade_computer3_message", global.objective.upgrades[15]},
message = {"chronosphere.upgrade_computer3_message", global.objective.upgrades[15] + 1},
tooltip = {"chronosphere.upgrade_computer3_tooltip"},
jump_limit = 25,
cost = {

View File

@@ -181,8 +181,8 @@ local function process_upgrade(index)
global.objective.computermessage = 2
elseif index == 14 then
global.objective.computermessage = 4
elseif index = 15 then
if gobal.objective.upgrades[15] == 10 then
elseif index == 15 then
if global.objective.upgrades[15] == 10 then
game.print({"chronosphere.message_quest6"}, {r=0.98, g=0.66, b=0.22})
end
end
@@ -191,6 +191,13 @@ end
local function check_single_upgrade(index)
local upgrades = Upgrades.upgrades()
if global.upgradechest[index] and global.upgradechest[index].valid then
if index == 14 and (global.objective.upgrades[13] ~= 1 or global.objective.computermessage ~= 3) then
return
elseif index == 15 and (global.objective.upgrades[14] ~= 1 or global.objective.computermessage ~= 5) then
return
elseif index == 16 and global.objective.upgrades[15] ~= 10 then
return
end
local inv = global.upgradechest[index].get_inventory(defines.inventory.chest)
if global.objective.upgrades[index] < upgrades[index].max_level and global.objective.chronojumps >= upgrades[index].jump_limit then
for _, item in pairs(upgrades[index].cost) do
@@ -199,13 +206,14 @@ local function check_single_upgrade(index)
else
return
end
for _, item in pairs(upgrades[index].cost) do
if item.count > 0 then
inv.remove({name = item.name, count = item.count})
end
end
game.print(upgrades[index].message, {r=0.98, g=0.66, b=0.22})
global.objective.upgrades[index] = global.objective.upgrades[index] + 1
game.print(upgrades[index].message, {r=0.98, g=0.66, b=0.22})
process_upgrade(index)
end
end
@@ -232,9 +240,9 @@ end
function Public.trigger_poison()
local objective = global.objective
if objective.game_lost then return end
if objective.poisondefense > 0 and objective.poisontimeout == 0 then
if objective.upgrades[10] > 0 and objective.poisontimeout == 0 then
local objective = global.objective
objective.poisondefense = objective.poisondefense - 1
objective.upgrades[10] = objective.upgrades[10] - 1
objective.poisontimeout = 120
local objs = {global.locomotive, global.locomotive_cargo[1], global.locomotive_cargo[2], global.locomotive_cargo[3]}
local surface = objective.surface

View File

@@ -446,7 +446,7 @@ local function biter_panel(player)
drop_down.style.right_padding = 12
drop_down.style.left_padding = 12
t0.add({type = "sprite-button", name = "info", sprite = "virtual-signal/signal-info"})
t0.add({type = "sprite-button", name = "close", sprite = "virtual-signal/signal-X"})
t0.add({type = "sprite-button", name = "close_biters", sprite = "virtual-signal/signal-X"})
local l1 = frame.add({type = "label", caption = "Camera"})
local t1 = frame.add({type = "table", name = "camera", column_count = 2})
@@ -570,7 +570,7 @@ local function on_gui_click(event)
if event.element.type ~= "button" and event.element.type ~= "sprite-button" then return end
--if event.frame.name ~= "biter_panel" then return end
local name = event.element.name
if name == "close" then biter_panel(player) return end
if name == "close_biters" then biter_panel(player) return end
if name == "info" then show_info(player) return end
if name == "close_info" then show_info(player) return end
if comm_functions[name] then

View File

@@ -15,7 +15,7 @@ local function on_entity_damaged(event)
if not weapon.valid_for_read or not ammo.valid_for_read then return end
if weapon.name ~= "pistol" then return end
if ammo.name ~= "firearm-magazine" and ammo.name ~= "piercing-rounds-magazine" and ammo.name ~= "uranium-rounds-magazine" then return end
event.entity.damage(event.final_damage_amount * 4, player.force, "physical", player)
event.entity.damage(event.final_damage_amount * 4, player.force, "impact", player)
end
event.add(defines.events.on_entity_damaged, on_entity_damaged)