From 2e29a40ef72229e8c15f0a48106dd698da4e6f22 Mon Sep 17 00:00:00 2001 From: Heroman Date: Sat, 4 Dec 2021 15:51:40 +1000 Subject: [PATCH] Makes Bluespace Harpoon capable of televore --- .../projectiles/guns/energy/bsharpoon_vr.dm | 59 ++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/bsharpoon_vr.dm b/code/modules/projectiles/guns/energy/bsharpoon_vr.dm index 005741bfe41..a8927dfc2ce 100644 --- a/code/modules/projectiles/guns/energy/bsharpoon_vr.dm +++ b/code/modules/projectiles/guns/energy/bsharpoon_vr.dm @@ -80,7 +80,7 @@ playsound(src, 'sound/weapons/wave.ogg', 60, 1) return var/turf/T = get_turf(A) - if(!T || (T.check_density() && mode == 1)) + if(!T || (T.check_density(ignore_mobs = TRUE) && mode == 1)) to_chat(user,"That's a little too solid to harpoon into!") return var/turf/ownturf = get_turf(src) @@ -118,12 +118,45 @@ for(var/rider in L.buckled_mobs) sendfailchance += 15 + var/mob/living/living_user = user + var/can_dropnom = TRUE + if(!istype(living_user)) + can_dropnom = FALSE + if(mode) if(user in FromTurf) if(prob(sendfailchance)) user.forceMove(pick(trange(24,user))) else user.forceMove(ToTurf) + if(can_dropnom && living_user.can_be_drop_pred) + var/obj/belly/belly_dest + if(living_user.vore_selected) + belly_dest = living_user.vore_selected + else if(living_user.vore_organs.len) + belly_dest = pick(living_user.vore_organs) + if(belly_dest) + for(var/mob/living/prey in ToTurf) + if(prey.can_be_drop_prey) + prey.forceMove(belly_dest) + to_chat(prey, "[living_user] materializes around you, as you end up in their [belly_dest]!") + to_chat(living_user, "You materialize around [prey] as they end up in your [belly_dest]!") + else if(can_dropnom && living_user.can_be_drop_prey) + var/mob/living/pred + for(var/mob/living/potential_pred in ToTurf) + if(potential_pred.can_be_drop_pred) + pred = potential_pred + if(pred) + var/obj/belly/belly_dest + if(pred.vore_selected) + belly_dest = pred.vore_selected + else if(pred.vore_organs.len) + belly_dest = pick(pred.vore_organs) + if(belly_dest) + living_user.forceMove(belly_dest) + to_chat(pred, "[living_user] materializes inside you as they end up in your [belly_dest]!") + to_chat(living_user, "You materialize inside [pred] as you end up in your [belly_dest]!") + else for(var/obj/O in FromTurf) if(O.anchored) continue @@ -132,11 +165,35 @@ else O.forceMove(ToTurf) + var/user_vored = FALSE + for(var/mob/living/M in FromTurf) if(prob(recievefailchance)) M.forceMove(pick(trange(24,user))) else M.forceMove(ToTurf) + if(can_dropnom && living_user.can_be_drop_pred && M.can_be_drop_prey) + var/obj/belly/belly_dest + if(living_user.vore_selected) + belly_dest = living_user.vore_selected + else if(living_user.vore_organs.len) + belly_dest = pick(living_user.vore_organs) + if(belly_dest) + M.forceMove(belly_dest) + to_chat(living_user, "[M] materializes inside you as they end up in your [belly_dest]!") + to_chat(M, "You materialize inside [living_user] as you end up in your [belly_dest]!") + else if(can_dropnom && living_user.can_be_drop_prey && M.can_be_drop_pred && !user_vored) + var/obj/belly/belly_dest + if(M.vore_selected) + belly_dest = M.vore_selected + else if(M.vore_organs.len) + belly_dest = pick(M.vore_organs) + if(belly_dest) + living_user.forceMove(belly_dest) + user_vored = TRUE + to_chat(living_user, "[M] materializes around you, as you end up in their [belly_dest]!") + to_chat(M, "You materialize around [living_user] as they end up in your [belly_dest]!") + /obj/item/weapon/bluespace_harpoon/attack_self(mob/living/user as mob) return chande_fire_mode(user)