Merge pull request #2918 from Citadel-Station-13/upstream-merge-30953
[MIRROR] Suiciding with a gun blows your brain out
This commit is contained in:
@@ -465,13 +465,17 @@ Proc for attack log creation, because really why not
|
|||||||
if(H.dna && istype(H.dna.species, species_datum))
|
if(H.dna && istype(H.dna.species, species_datum))
|
||||||
. = TRUE
|
. = TRUE
|
||||||
|
|
||||||
/proc/spawn_atom_to_turf(spawn_type, target, amount, admin_spawn=FALSE)
|
/proc/spawn_atom_to_turf(spawn_type, target, amount, admin_spawn=FALSE, list/extra_args)
|
||||||
var/turf/T = get_turf(target)
|
var/turf/T = get_turf(target)
|
||||||
if(!T)
|
if(!T)
|
||||||
CRASH("attempt to spawn atom type: [spawn_type] in nullspace")
|
CRASH("attempt to spawn atom type: [spawn_type] in nullspace")
|
||||||
|
|
||||||
for(var/j in 1 to amount)
|
var/list/new_args = list(T)
|
||||||
var/atom/X = new spawn_type(T)
|
if(extra_args)
|
||||||
|
new_args += extra_args
|
||||||
|
|
||||||
|
for(var/j in 1 to amount)
|
||||||
|
var/atom/X = new spawn_type(arglist(new_args))
|
||||||
X.admin_spawned = admin_spawn
|
X.admin_spawned = admin_spawn
|
||||||
|
|
||||||
/proc/spawn_and_random_walk(spawn_type, target, amount, walk_chance=100, max_walk=3, always_max_walk=FALSE, admin_spawn=FALSE)
|
/proc/spawn_and_random_walk(spawn_type, target, amount, walk_chance=100, max_walk=3, always_max_walk=FALSE, admin_spawn=FALSE)
|
||||||
|
|||||||
@@ -136,13 +136,27 @@
|
|||||||
boolets += magazine.ammo_count()
|
boolets += magazine.ammo_count()
|
||||||
return boolets
|
return boolets
|
||||||
|
|
||||||
|
#define BRAINS_BLOWN_THROW_RANGE 3
|
||||||
|
#define BRAINS_BLOWN_THROW_SPEED 1
|
||||||
/obj/item/gun/ballistic/suicide_act(mob/user)
|
/obj/item/gun/ballistic/suicide_act(mob/user)
|
||||||
if (chambered && chambered.BB && can_trigger_gun(user) && !chambered.BB.nodamage)
|
var/obj/item/organ/brain/B = user.getorganslot("brain")
|
||||||
|
if (B && chambered && chambered.BB && can_trigger_gun(user) && !chambered.BB.nodamage)
|
||||||
user.visible_message("<span class='suicide'>[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
user.visible_message("<span class='suicide'>[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||||
sleep(25)
|
sleep(25)
|
||||||
if(user.is_holding(src))
|
if(user.is_holding(src))
|
||||||
|
var/turf/T = get_turf(user)
|
||||||
process_fire(user, user, 0, zone_override = "head")
|
process_fire(user, user, 0, zone_override = "head")
|
||||||
user.visible_message("<span class='suicide'>[user] blows [user.p_their()] brain[user.p_s()] out with [src]!</span>")
|
user.visible_message("<span class='suicide'>[user] blows [user.p_their()] brain[user.p_s()] out with [src]!</span>")
|
||||||
|
var/turf/target = get_ranged_target_turf(user, turn(user.dir, 180), BRAINS_BLOWN_THROW_RANGE)
|
||||||
|
B.Remove(user)
|
||||||
|
B.forceMove(T)
|
||||||
|
var/datum/dna/user_dna
|
||||||
|
if(iscarbon(user))
|
||||||
|
var/mob/living/carbon/C = user
|
||||||
|
user_dna = C.dna
|
||||||
|
B.add_blood(user_dna)
|
||||||
|
var/datum/callback/gibspawner = CALLBACK(GLOBAL_PROC, /proc/spawn_atom_to_turf, /obj/effect/gibspawner/generic, B, 1, FALSE, list(user_dna))
|
||||||
|
B.throw_at(target, BRAINS_BLOWN_THROW_RANGE, BRAINS_BLOWN_THROW_SPEED, callback=gibspawner)
|
||||||
return(BRUTELOSS)
|
return(BRUTELOSS)
|
||||||
else
|
else
|
||||||
user.visible_message("<span class='suicide'>[user] panics and starts choking to death!</span>")
|
user.visible_message("<span class='suicide'>[user] panics and starts choking to death!</span>")
|
||||||
@@ -151,8 +165,8 @@
|
|||||||
user.visible_message("<span class='suicide'>[user] is pretending to blow [user.p_their()] brain[user.p_s()] out with [src]! It looks like [user.p_theyre()] trying to commit suicide!</b></span>")
|
user.visible_message("<span class='suicide'>[user] is pretending to blow [user.p_their()] brain[user.p_s()] out with [src]! It looks like [user.p_theyre()] trying to commit suicide!</b></span>")
|
||||||
playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1)
|
playsound(loc, 'sound/weapons/empty.ogg', 50, 1, -1)
|
||||||
return (OXYLOSS)
|
return (OXYLOSS)
|
||||||
|
#undef BRAINS_BLOWN_THROW_SPEED
|
||||||
|
#undef BRAINS_BLOWN_THROW_RANGE
|
||||||
|
|
||||||
/obj/item/gun/ballistic/proc/sawoff(mob/user)
|
/obj/item/gun/ballistic/proc/sawoff(mob/user)
|
||||||
if(sawn_state == SAWN_OFF)
|
if(sawn_state == SAWN_OFF)
|
||||||
|
|||||||
Reference in New Issue
Block a user