Files
Paradise/code/tests/attack_chain/test_attack_chain_structures.dm
warriorstar-orion df0e69332f fix paper wrapping crates (#30482)
* fix paper wrapping crates

* define magic number
2025-09-19 16:05:48 +00:00

331 lines
15 KiB
Plaintext

/datum/game_test/room_test/attack_chain_structures
testing_area_name = "test_attack_chain_structures.dmm"
var/list/structure_instances_by_type = list()
/datum/game_test/room_test/attack_chain_structures/proc/teleport_to_first(datum/test_puppeteer/player, obj_type, dir=EAST)
if(length(structure_instances_by_type[obj_type]))
for(var/obj/object in structure_instances_by_type[obj_type])
if(!QDELETED(object))
player.puppet.forceMove(get_step(object, dir))
return object
TEST_FAIL("could not find [obj_type] to teleport puppet to")
/datum/game_test/room_test/attack_chain_structures/New()
. = ..()
for(var/turf/T in available_turfs)
for(var/obj/structure/structure in T)
LAZYOR(structure_instances_by_type[structure.type], structure)
/datum/game_test/room_test/attack_chain_structures/Run()
var/datum/test_puppeteer/player = new(src)
player.puppet.name = "Player"
player.puppet.mind.add_antag_datum(/datum/antagonist/cultist)
player.spawn_obj_in_hand(/obj/item/melee/cultblade/dagger)
var/forge = teleport_to_first(player, /obj/structure/cult/functional/forge)
player.click_on(forge)
TEST_ASSERT_LAST_CHATLOG(player, "You unsecure [forge] from the floor")
player.drop_held_item()
var/obj/structure/ai_core/core = teleport_to_first(player, /obj/structure/ai_core)
player.spawn_obj_in_hand(/obj/item/circuitboard/aicore)
player.click_on(core)
TEST_ASSERT_LAST_CHATLOG(player, "You place the circuit board inside the frame")
var/shell = teleport_to_first(player, /obj/structure/constructshell)
var/obj/item/soulstone/soulstone = player.spawn_obj_in_hand(/obj/item/soulstone)
soulstone.purified = TRUE
player.click_on(shell)
TEST_ASSERT_LAST_CHATLOG(player, "An overwhelming feeling of dread comes over you")
player.drop_held_item()
player.rejuvenate()
var/obj/structure/computerframe/frame = teleport_to_first(player, /obj/structure/computerframe)
var/obj/circuitboard = player.spawn_obj_in_hand(/obj/item/circuitboard/computer/sat_control)
player.click_on(frame)
TEST_ASSERT_LAST_CHATLOG(player, "You place [circuitboard] inside the computer frame")
var/barricade = teleport_to_first(player, /obj/structure/barricade/wooden)
player.spawn_obj_in_hand(/obj/item/stack/sheet/wood)
player.click_on(barricade)
TEST_ASSERT_LAST_CHATLOG(player, "You need at least five wooden planks to make a wall")
player.drop_held_item()
var/firelock_frame = teleport_to_first(player, /obj/structure/firelock_frame)
var/obj/item/firelock_electronics/electronics = player.spawn_fast_tool(/obj/item/firelock_electronics)
player.click_on(firelock_frame)
TEST_ASSERT_LAST_CHATLOG(player, "You insert and secure [electronics]")
var/machine_frame = teleport_to_first(player, /obj/structure/machine_frame)
player.spawn_fast_tool(/obj/item/stack/cable_coil{amount = 5})
player.click_on(machine_frame)
TEST_ASSERT_LAST_CHATLOG(player, "You add cables to the frame.")
var/obj/structure/largecrate/large_crate = teleport_to_first(player, /obj/structure/largecrate)
large_crate.manifest = new /obj/item/paper/manifest(null)
player.spawn_obj_in_hand(/obj/item/paper)
player.click_on(large_crate)
TEST_ASSERT_LAST_CHATLOG(player, "You tear the manifest off of the crate")
player.drop_held_item()
var/obj/structure/displaycase/displaycase = teleport_to_first(player, /obj/structure/displaycase)
var/obj/id_card = player.spawn_obj_in_hand(/obj/item/card/id/assistant)
player.click_on(displaycase)
TEST_ASSERT_LAST_CHATLOG(player, "You use [id_card] to open [displaycase]")
player.put_away(id_card)
var/obj/item/toy/crayon/crayon = player.spawn_obj_in_hand(/obj/item/toy/crayon)
player.click_on(displaycase)
TEST_ASSERT_LAST_CHATLOG(player, "You put [crayon] on display")
player.retrieve(id_card)
player.click_on(displaycase)
TEST_ASSERT_LAST_CHATLOG(player, "You use [id_card] to close [displaycase]")
player.put_away(id_card)
var/obj/baton = player.spawn_obj_in_hand(/obj/item/melee/baton/loaded)
player.set_intent(INTENT_HARM)
player.click_on(displaycase)
TEST_ASSERT_LAST_CHATLOG(player, "You hit [displaycase] with [baton]")
qdel(baton)
var/obj/assembly = teleport_to_first(player, /obj/structure/door_assembly)
player.spawn_fast_tool(/obj/item/wrench)
player.click_on(assembly)
TEST_ASSERT_LAST_CHATLOG(player, "You secure [assembly].")
player.drop_held_item()
player.spawn_fast_tool(/obj/item/stack/cable_coil)
player.click_on(assembly)
TEST_ASSERT_LAST_CHATLOG(player, "You wire the airlock assembly.")
player.drop_held_item()
var/obj/girder = teleport_to_first(player, /obj/structure/girder/cult)
player.puppet.mind.add_antag_datum(/datum/antagonist/cultist)
player.spawn_obj_in_hand(/obj/item/melee/cultblade/dagger)
player.click_on(girder)
TEST_ASSERT_LAST_CHATLOG(player, "You demolish [girder].")
player.drop_held_item()
girder = teleport_to_first(player, /obj/structure/girder)
player.spawn_fast_tool(/obj/item/stack/sheet/metal{amount = 2})
player.click_on(girder)
TEST_ASSERT_LAST_CHATLOG(player, "You add the plating.")
girder = teleport_to_first(player, /obj/structure/girder)
player.spawn_fast_tool(/obj/item/gun/energy/plasmacutter)
player.click_on(girder)
TEST_ASSERT_LAST_CHATLOG(player, "You slice apart the girder.")
player.drop_held_item()
var/obj/structure/guillotine/guillotine = teleport_to_first(player, /obj/structure/guillotine)
guillotine.blade_sharpness -= 1
player.spawn_fast_tool(/obj/item/whetstone)
player.click_on(guillotine)
TEST_ASSERT_LAST_CHATLOG(player, "You sharpen the large blade of [guillotine]")
player.drop_held_item()
var/obj/weldingtool = player.spawn_fast_tool(/obj/item/weldingtool)
player.use_item_in_hand()
player.set_intent(INTENT_HARM)
player.click_on(guillotine)
TEST_ASSERT_LAST_CHATLOG(player, "You slice clean through the guillotine!")
player.put_away(weldingtool)
player.set_intent(INTENT_HELP)
var/obj/structure/table_frame/table_frame = teleport_to_first(player, /obj/structure/table_frame)
table_frame.construction_time = 0
player.spawn_obj_in_hand(/obj/item/stack/sheet/metal)
player.click_on(table_frame)
TEST_ASSERT_LAST_CHATLOG(player, "You start adding the metal to [table_frame]")
player.spawn_fast_tool(/obj/item/wrench)
var/table = player.find_nearby(/obj/structure/table)
player.click_on(table)
TEST_ASSERT_LAST_CHATLOG(player, "You dismantle [table]")
player.drop_held_item()
var/obj/inflatable = teleport_to_first(player, /obj/structure/inflatable)
player.spawn_obj_in_hand(/obj/item/kitchen/knife)
player.click_on(inflatable)
TEST_ASSERT_LAST_CHATLOG(player, "[inflatable] rapidly deflates!")
player.drop_held_item()
var/obj/kitchenspike_frame = teleport_to_first(player, /obj/structure/kitchenspike_frame)
player.spawn_obj_in_hand(/obj/item/stack/rods/ten)
player.click_on(kitchenspike_frame)
TEST_ASSERT_LAST_CHATLOG(player, "You add spikes to the frame.")
player.drop_held_item()
var/obj/structure/kitchenspike/spike = teleport_to_first(player, /obj/structure/kitchenspike)
spike.impale_time = 0
var/mob/living/pig = player.spawn_mob_nearby(/mob/living/basic/pig)
pig.grabbedby(player.puppet)
player.click_on(spike)
TEST_ASSERT_LAST_CHATLOG(player, "[player.puppet] slams [pig] onto the meat spike!")
var/obj/structure/lattice/lattice = teleport_to_first(player, /obj/structure/lattice)
var/turf/space_turf = get_turf(lattice)
player.spawn_fast_tool(/obj/item/wirecutters)
player.click_on(lattice)
TEST_ASSERT_LAST_CHATLOG(player, "Slicing [lattice.name] joints...")
player.drop_held_item()
player.spawn_fast_tool(/obj/item/stack/rods/fifty)
player.click_on(space_turf)
TEST_ASSERT_LAST_CHATLOG(player, "Constructing support lattice...")
TEST_ASSERT_NOTNULL(locate(/obj/structure/lattice) in space_turf, "Could not find constructed lattice")
player.drop_held_item()
var/obj/structure/loom/loom = teleport_to_first(player, /obj/structure/loom)
loom.disassemble_speed = 0
var/obj/item/stack/sheet/cotton/cotton = player.spawn_obj_in_hand(/obj/item/stack/sheet/cotton)
cotton.amount = 4
cotton.pull_effort = 0
player.click_on(loom)
TEST_ASSERT_LAST_CHATLOG(player, "You weave [cotton] into a workable fabric.")
player.spawn_fast_tool(/obj/item/crowbar)
player.click_on(loom)
TEST_ASSERT_LAST_CHATLOG(player, "You dismantle [loom]")
player.drop_held_item()
var/obj/structure/mineral_door/iron/door = teleport_to_first(player, /obj/structure/mineral_door/iron)
player.spawn_fast_tool(/obj/item/pickaxe)
player.click_on(door)
TEST_ASSERT_LAST_CHATLOG(player, "You finished digging.")
player.drop_held_item()
var/obj/mirror = teleport_to_first(player, /obj/structure/mirror/magic)
var/starting_integrity = mirror.obj_integrity
player.spawn_fast_tool(/obj/item/weldingtool)
player.set_intent(INTENT_HARM)
player.click_on(mirror)
TEST_ASSERT_EQUAL(mirror.obj_integrity, starting_integrity, "magic mirror took damage")
player.drop_held_item()
player.set_intent(INTENT_HELP)
var/obj/noticeboard = teleport_to_first(player, /obj/structure/noticeboard)
player.spawn_obj_in_hand(/obj/item/paper)
player.click_on(noticeboard)
TEST_ASSERT_LAST_CHATLOG(player, "You pin the paper to the noticeboard.")
var/obj/structure/reflector/reflector = teleport_to_first(player, /obj/structure/reflector)
var/turf/T = get_turf(reflector)
player.spawn_fast_tool(/obj/item/stack/sheet/glass/fifty)
player.click_on(reflector)
// no chat messages for this construction apparently
TEST_ASSERT_NOTNULL(locate(/obj/structure/reflector/single) in T, "could not find constructed reflector")
player.drop_held_item()
var/obj/structure/safe/safe = teleport_to_first(player, /obj/structure/safe)
safe.open = TRUE
var/obj/disk = player.spawn_obj_in_hand(/obj/item/disk/design_disk)
player.click_on(safe)
TEST_ASSERT_LAST_CHATLOG(player, "You put [disk] in [safe].")
safe.open = FALSE
var/obj/gun = player.spawn_obj_in_hand(/obj/item/gun/energy/laser)
player.click_on(safe)
TEST_ASSERT_LAST_CHATLOG(player, "You can't put [gun] into the safe while it is closed!")
player.drop_held_item()
var/obj/structure/shelf/shelf = teleport_to_first(player, /obj/structure/shelf)
var/obj/box = player.spawn_obj_in_hand(/obj/item/storage/box/beakers)
player.click_on(shelf, "icon-x=8;icon-y=10")
TEST_ASSERT_LAST_CHATLOG(player, "You place [box] on [shelf].")
var/obj/wrench = player.spawn_fast_tool(/obj/item/wrench)
player.click_on(shelf, "icon-x=24;icon-y=10")
TEST_ASSERT_LAST_CHATLOG(player, "You place [wrench] on [shelf].")
player.spawn_fast_tool(/obj/item/wrench)
player.set_intent(INTENT_HARM)
player.click_on(shelf)
TEST_ASSERT_LAST_CHATLOG(player, "You disassemble [shelf].")
player.drop_held_item()
var/obj/structure/statue/hop_statue = teleport_to_first(player, /obj/structure/statue/gold/hop)
player.spawn_fast_tool(/obj/item/gun/energy/plasmacutter)
player.click_on(hop_statue)
TEST_ASSERT_LAST_CHATLOG(player, "You slice apart [hop_statue].")
player.drop_held_item()
var/obj/structure/snowman/built/snowman = teleport_to_first(player, /obj/structure/snowman/built)
var/old_integrity = snowman.obj_integrity
player.spawn_fast_tool(/obj/item/weldingtool)
player.set_intent(INTENT_HARM)
player.click_on(snowman)
TEST_ASSERT_NOTEQUAL(snowman.obj_integrity, old_integrity, "snowman didn't take damage")
player.drop_held_item()
player.spawn_obj_in_hand(/obj/item/snowball)
player.set_intent(INTENT_HELP)
player.click_on(snowman)
TEST_ASSERT_LAST_CHATLOG(player, "You patch some of the damage on [snowman]")
var/obj/structure/bed/roller/roller_bed = teleport_to_first(player, /obj/structure/bed/roller)
player.spawn_obj_in_hand(/obj/item/roller_holder)
player.click_on(roller_bed)
TEST_ASSERT_LAST_CHATLOG(player, "You collapse \the [roller_bed].")
player.drop_held_item()
var/obj/structure/big_delivery/delivery = teleport_to_first(player, /obj/structure/big_delivery)
var/obj/item/dest_tagger/tagger = player.spawn_obj_in_hand(/obj/item/dest_tagger)
tagger.currTag = 2
player.click_on(delivery)
TEST_ASSERT_LAST_CHATLOG(player, "*CARGO BAY*")
player.drop_held_item()
var/obj/structure/windoor_assembly/windoor_assembly = teleport_to_first(player, /obj/structure/windoor_assembly)
player.spawn_fast_tool(/obj/item/wrench)
player.click_on(windoor_assembly)
TEST_ASSERT_LAST_CHATLOG(player, "You secure the windoor assembly.")
player.drop_held_item()
player.spawn_fast_tool(/obj/item/stack/cable_coil)
player.click_on(windoor_assembly)
TEST_ASSERT_LAST_CHATLOG(player, "You wire the windoor.")
player.drop_held_item()
var/obj/crate = teleport_to_first(player, /obj/structure/closet/crate/secure/loot)
player.spawn_fast_tool(/obj/item/multitool)
player.click_on(crate)
TEST_ASSERT_LAST_CHATLOG(player, "Anti-Tamper Bomb will activate after 10 failed access attempts")
player.drop_held_item()
var/obj/structure/flora/ash/ashflora = teleport_to_first(player, /obj/structure/flora/ash)
ashflora.harvest_time = 0
ashflora.harvest_amount_high = 1 // so we always get the same chat message
player.spawn_fast_tool(/obj/item/kitchen/knife)
player.click_on(ashflora)
TEST_ASSERT_LAST_CHATLOG(player, "You pick a mushroom, but fail to collect many shavings from its cap.")
player.drop_held_item()
var/obj/orebox = teleport_to_first(player, /obj/structure/ore_box)
var/obj/item/storage/ore_bag = player.spawn_fast_tool(/obj/item/storage/bag/ore)
var/obj/item/stack/ore/iron/iron_ore = new(player.puppet.loc)
iron_ore.amount = 10
ore_bag.handle_item_insertion(iron_ore)
player.click_on(orebox)
TEST_ASSERT_LAST_CHATLOG(player, "You empty the satchel into the box.")
player.drop_held_item()
var/obj/filing_cabinet = teleport_to_first(player, /obj/structure/filingcabinet)
var/obj/paper = player.spawn_fast_tool(/obj/item/paper)
player.click_on(filing_cabinet)
TEST_ASSERT_LAST_CHATLOG(player, "You put [paper.name] in [filing_cabinet].")
var/obj/cable = teleport_to_first(player, /obj/structure/cable, dir = EAST)
player.spawn_fast_tool(/obj/item/stack/cable_coil/ten)
T = get_turf(cable)
TEST_ASSERT_EQUAL(length(T.contents), 1, "couldn't find one cable on tile")
player.click_on(get_turf(cable))
TEST_ASSERT_EQUAL(length(T.contents), 2, "didn't add cable to tile")
player.drop_held_item()
var/obj/structure/fermenting_barrel/barrel = teleport_to_first(player, /obj/structure/fermenting_barrel)
var/obj/item/reagent_containers/glass/bucket/bucket = player.spawn_obj_in_hand(/obj/item/reagent_containers/glass/bucket)
barrel.reagents.add_reagent("beer", 300)
player.click_on(barrel)
TEST_ASSERT_LAST_CHATLOG(player, "You fill [bucket] with 20 units of the contents of [barrel]")
var/obj/water_cooler = teleport_to_first(player, /obj/structure/reagent_dispensers/water_cooler)
player.click_on(water_cooler)
TEST_ASSERT_LAST_CHATLOG(player, "You fill [bucket] with 20 units of the contents of [water_cooler]")
player.drop_held_item()
crate = teleport_to_first(player, /obj/structure/closet/crate/sci)
player.spawn_fast_tool(/obj/item/stack/package_wrap)
player.click_on(crate)
TEST_ASSERT_LAST_CHATLOG(player, "[player.puppet] wraps [crate]")