/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]")