Files
Paradise/code/tests/attack_chain/test_attack_chain_mobs.dm
warriorstar-orion 064f0ce221 fix some tests (#29729)
* non airlock stuff

* pain unending

* comment local test define back out

* this needs a room to spawn mobs in
2025-07-09 14:16:36 +00:00

121 lines
4.5 KiB
Plaintext

/datum/game_test/room_test/attack_chain_mobs/Run()
var/datum/test_puppeteer/player = new(src)
player.puppet.name = "Player"
// To ensure punches do damage without knockdowns
player.puppet.dna.species.punchdamagelow = 5
player.puppet.dna.species.punchdamagehigh = 5
var/mob/living/simple_animal/hostile/morph/morph = player.spawn_mob_nearby(/mob/living/simple_animal/hostile/morph)
morph.ambush_prepared = TRUE
player.spawn_obj_in_hand(/obj/item/screwdriver)
player.click_on(morph)
TEST_ASSERT_ANY_CHATLOG(player, "You try to use")
TEST_ASSERT_ANY_CHATLOG(player, "suddenly collapses in on itself")
qdel(morph)
// Get us back up
player.rejuvenate()
var/datum/test_puppeteer/victim = player.spawn_puppet_nearby()
victim.puppet.name = "Victim"
player.click_on(victim)
TEST_ASSERT_LAST_CHATLOG(player, "You hug Victim")
player.set_intent(INTENT_HARM)
player.click_on(victim)
TEST_ASSERT_LAST_CHATLOG(player, "Player punched Victim")
victim.rejuvenate()
var/obj/knife = player.spawn_obj_in_hand(/obj/item/kitchen/knife)
player.puppet.zone_selected = BODY_ZONE_PRECISE_L_FOOT
player.click_on(victim)
TEST_ASSERT_LAST_CHATLOG(player, "Victim in the left foot")
victim.rejuvenate()
player.put_away(knife)
// Test CQC attack interception
var/datum/martial_art/cqc/cqc = new()
cqc.teach(player.puppet)
player.puppet.swap_hand()
victim.puppet.lay_down()
player.click_on(victim)
TEST_ASSERT_LAST_CHATLOG(player, "stomps on Victim")
victim.rejuvenate()
cqc.remove(player.puppet)
player.set_intent(INTENT_HELP)
var/mob/mining_drone = player.spawn_mob_nearby(/mob/living/basic/mining_drone)
var/obj/scanner = player.spawn_obj_in_hand(/obj/item/mining_scanner)
player.click_on(mining_drone)
TEST_ASSERT_LAST_CHATLOG(player, "drop any collected ore.")
qdel(scanner)
player.spawn_obj_in_hand(/obj/item/borg/upgrade/modkit/cooldown/minebot)
player.click_on(mining_drone)
TEST_ASSERT_LAST_CHATLOG(player, "You install the modkit")
player.retrieve(knife)
player.set_intent(INTENT_HARM)
player.click_on(mining_drone)
TEST_ASSERT_LAST_CHATLOG(player, "the nanotrasen minebot with the kitchen knife")
qdel(mining_drone)
RegisterSignal(victim.puppet, COMSIG_HUMAN_ATTACKED, PROC_REF(cancel_attack_chain))
player.click_on(victim)
TEST_ASSERT_LAST_CHATLOG(player, "Attack chain cancelled by signal")
UnregisterSignal(victim.puppet, COMSIG_HUMAN_ATTACKED)
var/mob/living/simple_animal/pet/dog/corgi/corgi = player.spawn_mob_nearby(/mob/living/simple_animal/pet/dog/corgi)
corgi.anchored = TRUE
player.click_on(corgi)
TEST_ASSERT_LAST_CHATLOG(player, "corgi with the kitchen knife")
player.put_away(knife)
corgi.rejuvenate()
player.set_intent(INTENT_HELP)
var/obj/collar = player.spawn_obj_in_hand(/obj/item/petcollar)
player.click_on(corgi)
TEST_ASSERT(collar in corgi.contents, "did not put collar on corgi")
var/obj/razor = player.spawn_obj_in_hand(/obj/item/razor)
corgi.razor_shave_delay = 0
player.click_on(corgi)
TEST_ASSERT(corgi.shaved, "corgi was not shaved")
player.put_away(razor)
corgi.death()
var/obj/laz_injector = player.spawn_obj_in_hand(/obj/item/lazarus_injector)
player.click_on(corgi)
TEST_ASSERT_LAST_CHATLOG(player, "injects the corgi")
qdel(laz_injector)
var/mob/slime = player.spawn_mob_nearby(/mob/living/simple_animal/slime)
slime.anchored = TRUE
player.spawn_obj_in_hand(/obj/item/slimepotion/slime/docility)
player.click_on(corgi)
TEST_ASSERT_LAST_CHATLOG(player, "only works on slimes!")
player.click_on(slime)
TEST_ASSERT_LAST_CHATLOG(player, "You feed the slime the potion")
var/obj/mind_transfer_slime_potion = player.spawn_obj_in_hand(/obj/item/slimepotion/transference)
player.click_on(corgi)
var/datum/tgui_alert/alert = player.get_last_tgui()
TEST_ASSERT_NOTNULL(alert, "no TGUI")
TEST_ASSERT_SUBSTRING(alert.message, "transfer your consciousness to the corgi")
alert.set_choice("No")
player.click_on(slime)
alert = player.get_last_tgui()
TEST_ASSERT_NOTNULL(alert, "no TGUI")
TEST_ASSERT_SUBSTRING(alert.message, "transfer your consciousness to the pet slime")
alert.set_choice("No")
qdel(mind_transfer_slime_potion)
qdel(corgi)
qdel(slime)
victim.puppet.death()
player.spawn_obj_in_hand(/obj/item/kitchen/knife/butcher/meatcleaver)
player.set_intent(INTENT_HARM)
player.click_on(victim)
// Even before this test, butchering items included a second attack message
TEST_ASSERT_ANY_CHATLOG(player, "You hack off a chunk of meat from Victim")
/datum/game_test/room_test/attack_chain_mobs/proc/cancel_attack_chain(datum/source, mob/user)
to_chat(user, "Attack chain cancelled by signal")
return COMPONENT_CANCEL_ATTACK_CHAIN