mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-01-03 06:01:46 +00:00
* non airlock stuff * pain unending * comment local test define back out * this needs a room to spawn mobs in
121 lines
4.5 KiB
Plaintext
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
|