diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index bf18e43040..32838765e8 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -43,7 +43,7 @@ proc/random_name(gender, species = "Human")
if(species)
current_species = all_species[species]
- if(!current_species)
+ if(!current_species || current_species.name == "Human")
if(gender==FEMALE)
return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
else
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index cad72d9d96..e81b27fbb3 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -1,17 +1,18 @@
/obj/machinery/gibber
- name = "Gibber"
+ name = "gibber"
desc = "The name isn't descriptive enough?"
icon = 'icons/obj/kitchen.dmi'
icon_state = "grinder"
density = 1
anchored = 1
+ req_access = list(access_kitchen,access_morgue)
+
var/operating = 0 //Is it on?
var/dirty = 0 // Does it need cleaning?
var/mob/living/occupant // Mob who has been put inside
-
- var/gib_time = 40 // Time from starting until meat appears
- var/gib_throw_dir // Direction to spit meat and gibs in.
+ var/gib_time = 40 // Time from starting until meat appears
+ var/gib_throw_dir = WEST // Direction to spit meat and gibs in.
use_power = 1
idle_power_usage = 2
@@ -29,6 +30,7 @@
if(input_obj)
if(isturf(input_obj.loc))
input_plate = input_obj.loc
+ gib_throw_dir = i
del(input_obj)
break
@@ -78,14 +80,18 @@
else
src.startgibbing(user)
+/obj/machinery/gibber/examine()
+ ..()
+ usr << "The safety guard is [emagged ? "disabled" : "enabled"]."
+
/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
- if(istype(W,/obj/item/weapon/card/emag))
- if(emagged)
- user << "The gibber safety guard is already disabled."
+ if(istype(W,/obj/item/weapon/card))
+ if(!allowed(user) && !istype(W,/obj/item/weapon/card/emag))
+ user << "Access denied."
return
- user << "You disable the gibber safety guard."
- emagged = 1
+ emagged = !emagged
+ user << "You [emagged ? "disable" : "enable"] the gibber safety guard."
return
var/obj/item/weapon/grab/G = W
@@ -199,7 +205,7 @@
slab_nutrition /= slab_count
for(var/i=1 to slab_count)
- var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(get_turf(src))
+ var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src)
new_meat.name = "[slab_name] [new_meat.name]"
new_meat.reagents.add_reagent("nutriment",slab_nutrition)
@@ -220,9 +226,14 @@
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
operating = 0
- for (var/obj/item/thing in contents)
+ for (var/obj/thing in contents)
+ // Todo: unify limbs and internal organs
+ // There's a chance that the gibber will fail to destroy some evidence.
+ if((istype(thing,/obj/item/weapon/organ) || istype(thing,/obj/item/organ)) && prob(80))
+ del(thing)
+ continue
thing.loc = get_turf(thing) // Drop it onto the turf for throwing.
- thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15) // Being pelted with bits of meat and bone would hurt.
+ thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),emagged ? 15 : 30) // Being pelted with bits of meat and bone would hurt.
update_icon()
diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm
index c112e55fce..808e46c2a3 100644
--- a/code/game/objects/effects/gibs.dm
+++ b/code/game/objects/effects/gibs.dm
@@ -1,6 +1,4 @@
-/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, var/spawn_inside, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor)
- if(!spawn_inside)
- location = get_turf(location)
+/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor)
new gibber_type(location,viruses,MobDNA,fleshcolor,bloodcolor)
/obj/effect/gibspawner
@@ -17,9 +15,7 @@
if(fleshcolor) src.fleshcolor = fleshcolor
if(bloodcolor) src.bloodcolor = bloodcolor
-
- if(istype(loc,/turf)) //basically if a badmin spawns it
- Gib(loc,viruses,MobDNA)
+ Gib(loc,viruses,MobDNA)
proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null)
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
@@ -33,7 +29,7 @@
if(sparks)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(2, 1, location)
+ s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo
s.start()
for(var/i = 1, i<= gibtypes.len, i++)
@@ -62,8 +58,9 @@
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
gib.blood_DNA["Non-human DNA"] = "A+"
- var/list/directions = gibdirections[i]
- if(directions.len)
- gib.streak(directions)
+ if(istype(location,/turf/))
+ var/list/directions = gibdirections[i]
+ if(directions.len)
+ gib.streak(directions)
del(src)
\ No newline at end of file
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 9ff88218bf..0531ecab98 100755
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -641,13 +641,13 @@ datum/preferences
else if((current_species.flags & IS_WHITELISTED) && !is_alien_whitelisted(user,current_species))
restricted = 1
- if(restricted && !check_rights(R_ADMIN, 0))
+ if(restricted)
if(restricted == 1)
- dat += "You cannot play as this species.If you wish to be whitelisted, you can make an application post on the forums."
+ dat += "You cannot play as this species.If you wish to be whitelisted, you can make an application post on the forums."
else if(restricted == 2)
- dat += "You cannot play as this species.This species is not available for play as a station race.."
- else
- dat += "\[select\]"
+ dat += "You cannot play as this species.This species is not available for play as a station race.."
+ if(!restricted || check_rights(R_ADMIN, 0))
+ dat += "\[select\]"
dat += "