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 += "" user << browse(null, "window=preferences") diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index 87e784c338..0fc9b5447a 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -14,8 +14,7 @@ New() ..() - var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, - /obj/item/clothing/under/golem, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits. + var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits. for(var/U in typesof(/obj/item/clothing/under)-blocked) var/obj/item/clothing/under/V = new U src.clothing_choices[V.name] = U @@ -67,8 +66,7 @@ New() ..() - var/blocked = list(/obj/item/clothing/head/chameleon, - /obj/item/clothing/head/space/golem, /obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats. + var/blocked = list(/obj/item/clothing/head/chameleon,/obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats. for(var/U in typesof(/obj/item/clothing/head)-blocked) var/obj/item/clothing/head/V = new U src.clothing_choices[V.name] = U @@ -119,8 +117,7 @@ New() ..() - var/blocked = list(/obj/item/clothing/suit/chameleon, - /obj/item/clothing/suit/golem, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice, + var/blocked = list(/obj/item/clothing/suit/chameleon, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice, /obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits. for(var/U in typesof(/obj/item/clothing/suit)-blocked) var/obj/item/clothing/suit/V = new U @@ -172,8 +169,7 @@ New() ..() - var/blocked = list(/obj/item/clothing/shoes/chameleon, - /obj/item/clothing/shoes/golem, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes. + var/blocked = list(/obj/item/clothing/shoes/chameleon, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes. for(var/U in typesof(/obj/item/clothing/shoes)-blocked) var/obj/item/clothing/shoes/V = new U src.clothing_choices[V.name] = U diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 1d5760cb60..5c22c47bab 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -30,7 +30,7 @@ brainmob.client.screen.len = null //clear the hud /obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H) - name = "[H]'s brain" + name = "\the [H]'s [initial(src.name)]" brainmob = new(src) brainmob.name = H.real_name brainmob.real_name = H.real_name @@ -39,7 +39,7 @@ if(H.mind) H.mind.transfer_to(brainmob) - brainmob << "\blue You feel slightly disoriented. That's normal when you're just a brain." + brainmob << "You feel slightly disoriented. That's normal when you're just a [initial(src.name)]." callHook("debrain", list(brainmob)) /obj/item/organ/brain/examine(mob/user) // -- TLE @@ -72,4 +72,22 @@ if(brainmob.mind) brainmob.mind.transfer_to(target) else - target.key = brainmob.key \ No newline at end of file + target.key = brainmob.key + +/obj/item/organ/brain/slime + name = "slime core" + desc = "A complex, organic knot of jelly and crystalline particles." + prosthetic_name = null + prosthetic_icon = null + robotic = 2 + icon = 'icons/mob/slimes.dmi' + icon_state = "green slime extract" + +/obj/item/organ/brain/golem + name = "chem" + desc = "A tightly furled roll of paper, covered with indecipherable runes." + prosthetic_name = null + prosthetic_icon = null + robotic = 2 + icon = 'icons/obj/wizard.dmi' + icon_state = "scroll" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 743221af8c..ef5856026c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -57,7 +57,7 @@ for(var/mob/N in viewers(src, null)) if(N.client) N.show_message(text("\red [M] bursts out of [src]!"), 2) - . = ..(null,1) + ..() /mob/living/carbon/attack_hand(mob/M as mob) if(!istype(M, /mob/living/carbon)) return diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 601705ecc2..7bc0fc51fb 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -8,8 +8,26 @@ // Override the current limb status and don't cause an explosion E.droplimb(1,1) + for(var/datum/organ/internal/I in internal_organs) + var/obj/item/organ/current_organ = I.remove() + current_organ.loc = src.loc + current_organ.organ_data.rejecting = null + var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in current_organ.reagents.reagent_list + if(!organ_blood || !organ_blood.data["blood_DNA"]) + src.vessel.trans_to(current_organ, 5, 1, 1) + + current_organ.removed(src) + + if(current_organ && istype(loc,/turf)) + var/target_dir = pick(cardinal) + var/turf/target_turf = loc + var/steps = rand(1,2) + for(var/i = 0;iYou feel nauseous..." + src << "You feel nauseous..." spawn(150) //15 seconds until second warning - src << "You feel like you are about to throw up!" + src << "You feel like you are about to throw up!" spawn(100) //and you have 10 more for mad dash to the bucket Stun(5) - src.visible_message("[src] throws up!","You throw up!") + src.visible_message("[src] throws up!","You throw up!") playsound(loc, 'sound/effects/splat.ogg', 50, 1) var/turf/location = loc diff --git a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm index 3e7612b211..e9584143ee 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm @@ -1,8 +1,25 @@ /datum/species/shadow name = "Shadow" name_plural = "shadows" + + icobase = 'icons/mob/human_races/r_shadow.dmi' + deform = 'icons/mob/human_races/r_shadow.dmi' + language = "Sol Common" //todo? unarmed_types = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/sharp) light_dam = 2 darksight = 8 - flags = IS_RESTRICTED | NO_SCAN | NO_SLIP | NO_POISON \ No newline at end of file + has_organ = list() + + blood_color = "#CCCCCC" + flesh_color = "#AAAAAA" + + remains_type = /obj/effect/decal/cleanable/ash + death_message = "dissolves into ash..." + + flags = IS_RESTRICTED | NO_BLOOD | NO_POISON | NO_SCAN | NO_SLIP | NO_POISON + +/datum/species/shadow/handle_death(var/mob/living/carbon/human/H) + spawn(1) + new /obj/effect/decal/cleanable/ash(H.loc) + del(H) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 9f668117b8..defd0de8c7 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -175,10 +175,6 @@ add_inherent_verbs(H) /datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). - if(flags & IS_SYNTHETIC) - H.h_style = "" - spawn(100) - H.update_hair() return // Only used for alien plasma weeds atm, but could be used for Dionaea later. diff --git a/code/modules/mob/living/carbon/human/species/station/golem.dm b/code/modules/mob/living/carbon/human/species/station/golem.dm index b115b75b29..137472a23a 100644 --- a/code/modules/mob/living/carbon/human/species/station/golem.dm +++ b/code/modules/mob/living/carbon/human/species/station/golem.dm @@ -1,6 +1,10 @@ /datum/species/golem name = "Golem" name_plural = "golems" + + icobase = 'icons/mob/human_races/r_golem.dmi' + deform = 'icons/mob/human_races/r_golem.dmi' + language = "Sol Common" //todo? unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch) flags = IS_RESTRICTED | NO_BREATHE | NO_PAIN | NO_BLOOD | IS_SYNTHETIC | NO_SCAN | NO_POISON @@ -8,6 +12,15 @@ breath_type = null poison_type = null + blood_color = "#515573" + flesh_color = "#137E8F" + + has_organ = list( + "brain" = /datum/organ/internal/brain/golem + ) + + death_message = "becomes completely motionless..." + /datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H) if(H.mind) H.mind.assigned_role = "Golem" diff --git a/code/modules/mob/living/carbon/human/species/station/slime.dm b/code/modules/mob/living/carbon/human/species/station/slime.dm index 63a7061926..9fc44f7e30 100644 --- a/code/modules/mob/living/carbon/human/species/station/slime.dm +++ b/code/modules/mob/living/carbon/human/species/station/slime.dm @@ -1,10 +1,24 @@ /datum/species/slime name = "Slime" name_plural = "slimes" + + icobase = 'icons/mob/human_races/r_slime.dmi' + deform = 'icons/mob/human_races/r_slime.dmi' + language = "Sol Common" //todo? unarmed_types = list(/datum/unarmed_attack/slime_glomp) - flags = IS_RESTRICTED | NO_SCAN | NO_SLIP | NO_BREATHE + flags = IS_RESTRICTED | NO_BLOOD | NO_SCAN | NO_SLIP | NO_BREATHE darksight = 3 + blood_color = "#05FF9B" + flesh_color = "#05FFFB" + + has_organ = list( + "brain" = /datum/organ/internal/brain/slime + ) + + inherent_verbs = list( + ) + breath_type = null poison_type = null \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 6b2a01b468..83fa48e48f 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -201,7 +201,11 @@ blood_color = "#1F181F" flesh_color = "#575757" - has_organ = list( - "heart" = /datum/organ/internal/heart, - "brain" = /datum/organ/internal/brain, - ) \ No newline at end of file + has_organ = list() //TODO: Positronic brain. + +/datum/species/machine/handle_death(var/mob/living/carbon/human/H) + ..() + if(flags & IS_SYNTHETIC) + H.h_style = "" + spawn(100) + if(H) H.update_hair() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index ae9a733fec..88000af9eb 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -490,7 +490,10 @@ proc/get_damage_icon_part(damage_state, body_part) /mob/living/carbon/human/regenerate_icons() ..() if(monkeyizing) return + update_mutations(0) + update_body(0) + update_hair(0) update_inv_w_uniform(0) update_inv_wear_id(0) update_inv_gloves(0) diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 42a9c858f5..e6a1938a05 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -678,90 +678,6 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 target.enahnced = 1 del(src)*/ -////////Adamantine Golem stuff I dunno where else to put it - -// This will eventually be removed. - -/obj/item/clothing/under/golem - name = "adamantine skin" - desc = "a golem's skin" - icon_state = "golem" - item_state = "golem" - item_color = "golem" - has_sensor = 0 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - canremove = 0 - -/obj/item/clothing/suit/golem - name = "adamantine shell" - desc = "a golem's thick outter shell" - icon_state = "golem" - item_state = "golem" - w_class = 4//bulky item - gas_transfer_coefficient = 0.90 - permeability_coefficient = 0.50 - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|HEAD - slowdown = 1.0 - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - flags = FPRINT | TABLEPASS | ONESIZEFITSALL | STOPSPRESSUREDMAGE - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS | HEAD - max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE - cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD - min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE - canremove = 0 - armor = list(melee = 80, bullet = 20, laser = 20, energy = 10, bomb = 0, bio = 0, rad = 0) - -/obj/item/clothing/shoes/golem - name = "golem's feet" - desc = "sturdy adamantine feet" - icon_state = "golem" - item_state = null - canremove = 0 - flags = NOSLIP - slowdown = SHOES_SLOWDOWN+1 - - -/obj/item/clothing/mask/gas/golem - name = "golem's face" - desc = "the imposing face of an adamantine golem" - icon_state = "golem" - item_state = "golem" - canremove = 0 - siemens_coefficient = 0 - unacidable = 1 - -/obj/item/clothing/mask/gas/golem - name = "golem's face" - desc = "the imposing face of an adamantine golem" - icon_state = "golem" - item_state = "golem" - canremove = 0 - siemens_coefficient = 0 - unacidable = 1 - - -/obj/item/clothing/gloves/golem - name = "golem's hands" - desc = "strong adamantine hands" - icon_state = "golem" - item_state = null - siemens_coefficient = 0 - canremove = 0 - - -/obj/item/clothing/head/space/golem - icon_state = "golem" - item_state = "dermal" - item_color = "dermal" - name = "golem's head" - desc = "a golem's head" - canremove = 0 - unacidable = 1 - flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE - armor = list(melee = 80, bullet = 20, laser = 20, energy = 10, bomb = 0, bio = 0, rad = 0) - /obj/effect/golemrune anchored = 1 desc = "a strange rune used to create golems. It glows when spirits are nearby." diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index ccc9f5f536..8b0bfdf56b 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -1,6 +1,6 @@ /mob/living/silicon/gib() ..("gibbed-r") - gibs(loc, viruses, null, null, /obj/effect/gibspawner/robot) + gibs(loc, viruses, null, /obj/effect/gibspawner/robot) /mob/living/silicon/dust() ..("dust-r", /obj/effect/decal/remains/robot) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 92052b84e1..a2073de1ee 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -197,6 +197,9 @@ else ..() +/mob/living/simple_animal/gib() + ..(icon_gib,1) + /mob/living/simple_animal/emote(var/act, var/type, var/desc) if(act) ..(act, type, desc) @@ -263,14 +266,14 @@ return else if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch)) - - if(meat_type && (stat == DEAD)) - if(meat_amount && (meat_amount/2) >= 1) - for(var/i = 0; i < meat_amount/2; i++) - var/obj/item/meat = new meat_type(get_turf(src)) - meat.name = "[src.name] [meat.name]" + var/actual_meat_amount = max(1,(meat_amount/2)) + if(meat_type && actual_meat_amount>0 && (stat == DEAD)) + for(var/i=0;i[user] chops up \the [src]!") + new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) del(src) else user.visible_message("[user] butchers \the [src] messily!") diff --git a/code/modules/organs/organ_alien.dm b/code/modules/organs/organ_alien.dm index ae70f485d9..0024865acf 100644 --- a/code/modules/organs/organ_alien.dm +++ b/code/modules/organs/organ_alien.dm @@ -39,6 +39,7 @@ /obj/item/organ/diona/removed(var/mob/living/target,var/mob/living/user) + ..() var/mob/living/carbon/human/H = target if(!istype(target)) del(src) @@ -51,10 +52,10 @@ if(!diona) del(src) - var/mob/living/carbon/alien/diona/D = new(get_turf(src)) - diona.request_player(D) - - del(src) + spawn(1) // So it has time to be thrown about by the gib() proc. + var/mob/living/carbon/alien/diona/D = new(get_turf(src)) + diona.request_player(D) + del(src) // These are different to the standard diona organs as they have a purpose in other // species (absorbing radiation and light respectively) @@ -221,6 +222,8 @@ icon_state = "brain-prosthetic" organ_tag = "stack" robotic = 2 + prosthetic_name = null + prosthetic_icon = null /obj/item/organ/stack/vox name = "vox cortical stack" \ No newline at end of file diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 7816b914cf..3b24d353fb 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -662,10 +662,9 @@ Note that amputating the affected organ does in fact remove the infection from t "Your [display_name] goes flying off!",\ "You hear a terrible sound of ripping tendons and flesh.") - if(organ) - //Throw organs around - var/lol = pick(cardinal) - step(organ,lol) + //Throw organs around + if(istype(owner.loc,/turf) && organ) + step(organ,pick(cardinal)) owner.update_body(1) diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 183197dfbb..ef1b6e2116 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -250,6 +250,14 @@ /datum/organ/internal/brain/xeno removed_type = /obj/item/organ/brain/xeno +/datum/organ/internal/brain/golem + name = "golem chem" + removed_type = /obj/item/organ/brain/golem + +/datum/organ/internal/brain/slime + name = "slime core" + removed_type = /obj/item/organ/brain/slime + /datum/organ/internal/eyes name = "eyes" parent_organ = "head" @@ -271,7 +279,13 @@ if(!removed_type) return 0 - var/obj/item/organ/removed_organ = new removed_type(get_turf(user)) + var/turf/target_loc + if(user) + target_loc = get_turf(user) + else + target_loc = get_turf(owner) + + var/obj/item/organ/removed_organ = new removed_type(target_loc) if(istype(removed_organ)) removed_organ.organ_data = src diff --git a/code/modules/organs/organ_objects.dm b/code/modules/organs/organ_objects.dm index 178958d936..b0e0963fef 100644 --- a/code/modules/organs/organ_objects.dm +++ b/code/modules/organs/organ_objects.dm @@ -153,10 +153,10 @@ /obj/item/organ/proc/removed(var/mob/living/target,var/mob/living/user) - if(!target || !user) + if(!target) return - if(organ_data.vital) + if(target && user && organ_data.vital) user.attack_log += "\[[time_stamp()]\] removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)])" target.attack_log += "\[[time_stamp()]\] had a vital organ ([src]) removed by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])" msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)]) (JMP)") diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b36359ccf6..f41ba5967b 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -92,7 +92,7 @@ if(istype(user, /mob/living)) var/mob/living/M = user if (HULK in M.mutations) - M << "\red Your fingers are much too large for the trigger guard!" + M << "Your fingers are much too large for the trigger guard!" return add_fingerprint(user) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index b6f9c36b77..7aaad7a678 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -665,7 +665,7 @@ /obj/item/weapon/reagent_containers/food/snacks/xenomeat name = "meat" - desc = "A slab of meat" + desc = "A slab of green meat. Smells like acid." icon_state = "xenomeat" filling_color = "#43DE18" diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm index ac888c00a6..efd73c3a4e 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm @@ -1,6 +1,6 @@ /obj/item/weapon/reagent_containers/food/snacks/meat name = "meat" - desc = "A slab of meat" + desc = "A slab of meat." icon_state = "meat" health = 180 filling_color = "#FF1C1C" @@ -14,7 +14,7 @@ new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src) - user << "You cut the meat in thin strips." + user << "You cut the meat into thin strips." del(src) else ..() @@ -32,4 +32,4 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/corgi name = "Corgi meat" - desc = "Tastes like... well you know..." \ No newline at end of file + desc = "Tastes like... well, you know." \ No newline at end of file