Skip to content

Commit d6da3bc

Browse files
authored
Factorio: add Atomic Cliff Remover Trap (ArchipelagoMW#4282)
1 parent 9eaca95 commit d6da3bc

File tree

4 files changed

+35
-6
lines changed

4 files changed

+35
-6
lines changed

worlds/factorio/Options.py

+8
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,12 @@ class AtomicRocketTrapCount(TrapCount):
272272
display_name = "Atomic Rocket Traps"
273273

274274

275+
class AtomicCliffRemoverTrapCount(TrapCount):
276+
"""Trap items that when received trigger an atomic rocket explosion on a random cliff.
277+
Warning: there is no warning. The launch is instantaneous."""
278+
display_name = "Atomic Cliff Remover Traps"
279+
280+
275281
class EvolutionTrapCount(TrapCount):
276282
"""Trap items that when received increase the enemy evolution."""
277283
display_name = "Evolution Traps"
@@ -467,6 +473,7 @@ class FactorioOptions(PerGameCommonOptions):
467473
cluster_grenade_traps: ClusterGrenadeTrapCount
468474
artillery_traps: ArtilleryTrapCount
469475
atomic_rocket_traps: AtomicRocketTrapCount
476+
atomic_cliff_remover_traps: AtomicCliffRemoverTrapCount
470477
attack_traps: AttackTrapCount
471478
evolution_traps: EvolutionTrapCount
472479
evolution_trap_increase: EvolutionTrapIncrease
@@ -500,6 +507,7 @@ class FactorioOptions(PerGameCommonOptions):
500507
ClusterGrenadeTrapCount,
501508
ArtilleryTrapCount,
502509
AtomicRocketTrapCount,
510+
AtomicCliffRemoverTrapCount,
503511
],
504512
start_collapsed=True
505513
),

worlds/factorio/__init__.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class FactorioItem(Item):
7777
all_items["Cluster Grenade Trap"] = factorio_base_id - 5
7878
all_items["Artillery Trap"] = factorio_base_id - 6
7979
all_items["Atomic Rocket Trap"] = factorio_base_id - 7
80+
all_items["Atomic Cliff Remover Trap"] = factorio_base_id - 8
8081

8182

8283
class Factorio(World):
@@ -142,6 +143,7 @@ def create_regions(self):
142143
self.options.grenade_traps + \
143144
self.options.cluster_grenade_traps + \
144145
self.options.atomic_rocket_traps + \
146+
self.options.atomic_cliff_remover_traps + \
145147
self.options.artillery_traps
146148

147149
location_pool = []
@@ -194,7 +196,8 @@ def sorter(loc: FactorioScienceLocation):
194196
def create_items(self) -> None:
195197
self.custom_technologies = self.set_custom_technologies()
196198
self.set_custom_recipes()
197-
traps = ("Evolution", "Attack", "Teleport", "Grenade", "Cluster Grenade", "Artillery", "Atomic Rocket")
199+
traps = ("Evolution", "Attack", "Teleport", "Grenade", "Cluster Grenade", "Artillery", "Atomic Rocket",
200+
"Atomic Cliff Remover")
198201
for trap_name in traps:
199202
self.multiworld.itempool.extend(self.create_item(f"{trap_name} Trap") for _ in
200203
range(getattr(self.options,

worlds/factorio/data/mod/lib.lua

+16-5
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,23 @@ function random_offset_position(position, offset)
2828
end
2929

3030
function fire_entity_at_players(entity_name, speed)
31+
local entities = {}
3132
for _, player in ipairs(game.forces["player"].players) do
32-
current_character = player.character
33-
if current_character ~= nil then
34-
current_character.surface.create_entity{name=entity_name,
35-
position=random_offset_position(current_character.position, 128),
36-
target=current_character, speed=speed}
33+
if player.character ~= nil then
34+
table.insert(entities, player.character)
3735
end
3836
end
37+
return fire_entity_at_entities(entity_name, entities, speed)
38+
end
39+
40+
function fire_entity_at_entities(entity_name, entities, speed)
41+
for _, current_entity in ipairs(entities) do
42+
local target = current_entity
43+
if target.health == nil then
44+
target = target.position
45+
end
46+
current_entity.surface.create_entity{name=entity_name,
47+
position=random_offset_position(current_entity.position, 128),
48+
target=target, speed=speed}
49+
end
3950
end

worlds/factorio/data/mod_template/control.lua

+7
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,13 @@ end,
737737
["Atomic Rocket Trap"] = function ()
738738
fire_entity_at_players("atomic-rocket", 0.1)
739739
end,
740+
["Atomic Cliff Remover Trap"] = function ()
741+
local cliffs = game.surfaces["nauvis"].find_entities_filtered{type = "cliff"}
742+
743+
if #cliffs > 0 then
744+
fire_entity_at_entities("atomic-rocket", {cliffs[math.random(#cliffs)]}, 0.1)
745+
end
746+
end,
740747
}
741748

742749
commands.add_command("ap-get-technology", "Grant a technology, used by the Archipelago Client.", function(call)

0 commit comments

Comments
 (0)