mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
Fixes and tweaks to the previous.
This commit is contained in:
@@ -43,7 +43,7 @@ proc/random_name(gender, species = "Human")
|
|||||||
if(species)
|
if(species)
|
||||||
current_species = all_species[species]
|
current_species = all_species[species]
|
||||||
|
|
||||||
if(!current_species)
|
if(!current_species || current_species.name == "Human")
|
||||||
if(gender==FEMALE)
|
if(gender==FEMALE)
|
||||||
return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
|
return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
|
|
||||||
/obj/machinery/gibber
|
/obj/machinery/gibber
|
||||||
name = "Gibber"
|
name = "gibber"
|
||||||
desc = "The name isn't descriptive enough?"
|
desc = "The name isn't descriptive enough?"
|
||||||
icon = 'icons/obj/kitchen.dmi'
|
icon = 'icons/obj/kitchen.dmi'
|
||||||
icon_state = "grinder"
|
icon_state = "grinder"
|
||||||
density = 1
|
density = 1
|
||||||
anchored = 1
|
anchored = 1
|
||||||
|
req_access = list(access_kitchen,access_morgue)
|
||||||
|
|
||||||
var/operating = 0 //Is it on?
|
var/operating = 0 //Is it on?
|
||||||
var/dirty = 0 // Does it need cleaning?
|
var/dirty = 0 // Does it need cleaning?
|
||||||
var/mob/living/occupant // Mob who has been put inside
|
var/mob/living/occupant // Mob who has been put inside
|
||||||
|
var/gib_time = 40 // Time from starting until meat appears
|
||||||
var/gib_time = 40 // Time from starting until meat appears
|
var/gib_throw_dir = WEST // Direction to spit meat and gibs in.
|
||||||
var/gib_throw_dir // Direction to spit meat and gibs in.
|
|
||||||
|
|
||||||
use_power = 1
|
use_power = 1
|
||||||
idle_power_usage = 2
|
idle_power_usage = 2
|
||||||
@@ -29,6 +30,7 @@
|
|||||||
if(input_obj)
|
if(input_obj)
|
||||||
if(isturf(input_obj.loc))
|
if(isturf(input_obj.loc))
|
||||||
input_plate = input_obj.loc
|
input_plate = input_obj.loc
|
||||||
|
gib_throw_dir = i
|
||||||
del(input_obj)
|
del(input_obj)
|
||||||
break
|
break
|
||||||
|
|
||||||
@@ -78,14 +80,18 @@
|
|||||||
else
|
else
|
||||||
src.startgibbing(user)
|
src.startgibbing(user)
|
||||||
|
|
||||||
|
/obj/machinery/gibber/examine()
|
||||||
|
..()
|
||||||
|
usr << "The safety guard is [emagged ? "<span class='danger'>disabled</span>" : "enabled"]."
|
||||||
|
|
||||||
/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
|
/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
|
||||||
|
|
||||||
if(istype(W,/obj/item/weapon/card/emag))
|
if(istype(W,/obj/item/weapon/card))
|
||||||
if(emagged)
|
if(!allowed(user) && !istype(W,/obj/item/weapon/card/emag))
|
||||||
user << "The gibber safety guard is already disabled."
|
user << "<span class='danger'>Access denied.</span>"
|
||||||
return
|
return
|
||||||
user << "<span class='danger'>You disable the gibber safety guard.</span>"
|
emagged = !emagged
|
||||||
emagged = 1
|
user << "<span class='danger'>You [emagged ? "disable" : "enable"] the gibber safety guard.</span>"
|
||||||
return
|
return
|
||||||
|
|
||||||
var/obj/item/weapon/grab/G = W
|
var/obj/item/weapon/grab/G = W
|
||||||
@@ -199,7 +205,7 @@
|
|||||||
slab_nutrition /= slab_count
|
slab_nutrition /= slab_count
|
||||||
|
|
||||||
for(var/i=1 to 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.name = "[slab_name] [new_meat.name]"
|
||||||
new_meat.reagents.add_reagent("nutriment",slab_nutrition)
|
new_meat.reagents.add_reagent("nutriment",slab_nutrition)
|
||||||
|
|
||||||
@@ -220,9 +226,14 @@
|
|||||||
|
|
||||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||||
operating = 0
|
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.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()
|
update_icon()
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor)
|
||||||
if(!spawn_inside)
|
|
||||||
location = get_turf(location)
|
|
||||||
new gibber_type(location,viruses,MobDNA,fleshcolor,bloodcolor)
|
new gibber_type(location,viruses,MobDNA,fleshcolor,bloodcolor)
|
||||||
|
|
||||||
/obj/effect/gibspawner
|
/obj/effect/gibspawner
|
||||||
@@ -17,9 +15,7 @@
|
|||||||
|
|
||||||
if(fleshcolor) src.fleshcolor = fleshcolor
|
if(fleshcolor) src.fleshcolor = fleshcolor
|
||||||
if(bloodcolor) src.bloodcolor = bloodcolor
|
if(bloodcolor) src.bloodcolor = bloodcolor
|
||||||
|
Gib(loc,viruses,MobDNA)
|
||||||
if(istype(loc,/turf)) //basically if a badmin spawns it
|
|
||||||
Gib(loc,viruses,MobDNA)
|
|
||||||
|
|
||||||
proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null)
|
proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null)
|
||||||
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
|
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
|
||||||
@@ -33,7 +29,7 @@
|
|||||||
|
|
||||||
if(sparks)
|
if(sparks)
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
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()
|
s.start()
|
||||||
|
|
||||||
for(var/i = 1, i<= gibtypes.len, i++)
|
for(var/i = 1, i<= gibtypes.len, i++)
|
||||||
@@ -62,8 +58,9 @@
|
|||||||
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
|
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
|
||||||
else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
|
else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
|
||||||
gib.blood_DNA["Non-human DNA"] = "A+"
|
gib.blood_DNA["Non-human DNA"] = "A+"
|
||||||
var/list/directions = gibdirections[i]
|
if(istype(location,/turf/))
|
||||||
if(directions.len)
|
var/list/directions = gibdirections[i]
|
||||||
gib.streak(directions)
|
if(directions.len)
|
||||||
|
gib.streak(directions)
|
||||||
|
|
||||||
del(src)
|
del(src)
|
||||||
@@ -641,13 +641,13 @@ datum/preferences
|
|||||||
else if((current_species.flags & IS_WHITELISTED) && !is_alien_whitelisted(user,current_species))
|
else if((current_species.flags & IS_WHITELISTED) && !is_alien_whitelisted(user,current_species))
|
||||||
restricted = 1
|
restricted = 1
|
||||||
|
|
||||||
if(restricted && !check_rights(R_ADMIN, 0))
|
if(restricted)
|
||||||
if(restricted == 1)
|
if(restricted == 1)
|
||||||
dat += "<font color='red'><b>You cannot play as this species.</br><small>If you wish to be whitelisted, you can make an application post on <a href='http://baystation12.net/forums/viewtopic.php?f=46&t=5319'>the forums</a>.</small></b></font>"
|
dat += "<font color='red'><b>You cannot play as this species.</br><small>If you wish to be whitelisted, you can make an application post on <a href='http://baystation12.net/forums/viewtopic.php?f=46&t=5319'>the forums</a>.</small></b></font></br>"
|
||||||
else if(restricted == 2)
|
else if(restricted == 2)
|
||||||
dat += "<font color='red'><b>You cannot play as this species.</br><small>This species is not available for play as a station race..</small></b></font>"
|
dat += "<font color='red'><b>You cannot play as this species.</br><small>This species is not available for play as a station race..</small></b></font></br>"
|
||||||
else
|
if(!restricted || check_rights(R_ADMIN, 0))
|
||||||
dat += "\[<a href='?src=\ref[user];preference=species;task=input;newspecies=[species_preview]'>select</a>\]"
|
dat += "\[<a href='?src=\ref[user];preference=species;task=input;newspecies=[species_preview]'>select</a>\]"
|
||||||
dat += "</center></body>"
|
dat += "</center></body>"
|
||||||
|
|
||||||
user << browse(null, "window=preferences")
|
user << browse(null, "window=preferences")
|
||||||
|
|||||||
@@ -14,8 +14,7 @@
|
|||||||
|
|
||||||
New()
|
New()
|
||||||
..()
|
..()
|
||||||
var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud,
|
var/blocked = list(/obj/item/clothing/under/chameleon, /obj/item/clothing/under/cloud, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits.
|
||||||
/obj/item/clothing/under/golem, /obj/item/clothing/under/gimmick)//Prevent infinite loops and bad jumpsuits.
|
|
||||||
for(var/U in typesof(/obj/item/clothing/under)-blocked)
|
for(var/U in typesof(/obj/item/clothing/under)-blocked)
|
||||||
var/obj/item/clothing/under/V = new U
|
var/obj/item/clothing/under/V = new U
|
||||||
src.clothing_choices[V.name] = U
|
src.clothing_choices[V.name] = U
|
||||||
@@ -67,8 +66,7 @@
|
|||||||
|
|
||||||
New()
|
New()
|
||||||
..()
|
..()
|
||||||
var/blocked = list(/obj/item/clothing/head/chameleon,
|
var/blocked = list(/obj/item/clothing/head/chameleon,/obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats.
|
||||||
/obj/item/clothing/head/space/golem, /obj/item/clothing/head/justice,)//Prevent infinite loops and bad hats.
|
|
||||||
for(var/U in typesof(/obj/item/clothing/head)-blocked)
|
for(var/U in typesof(/obj/item/clothing/head)-blocked)
|
||||||
var/obj/item/clothing/head/V = new U
|
var/obj/item/clothing/head/V = new U
|
||||||
src.clothing_choices[V.name] = U
|
src.clothing_choices[V.name] = U
|
||||||
@@ -119,8 +117,7 @@
|
|||||||
|
|
||||||
New()
|
New()
|
||||||
..()
|
..()
|
||||||
var/blocked = list(/obj/item/clothing/suit/chameleon,
|
var/blocked = list(/obj/item/clothing/suit/chameleon, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice,
|
||||||
/obj/item/clothing/suit/golem, /obj/item/clothing/suit/cyborg_suit, /obj/item/clothing/suit/justice,
|
|
||||||
/obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits.
|
/obj/item/clothing/suit/greatcoat)//Prevent infinite loops and bad suits.
|
||||||
for(var/U in typesof(/obj/item/clothing/suit)-blocked)
|
for(var/U in typesof(/obj/item/clothing/suit)-blocked)
|
||||||
var/obj/item/clothing/suit/V = new U
|
var/obj/item/clothing/suit/V = new U
|
||||||
@@ -172,8 +169,7 @@
|
|||||||
|
|
||||||
New()
|
New()
|
||||||
..()
|
..()
|
||||||
var/blocked = list(/obj/item/clothing/shoes/chameleon,
|
var/blocked = list(/obj/item/clothing/shoes/chameleon, /obj/item/clothing/shoes/syndigaloshes, /obj/item/clothing/shoes/cyborg)//prevent infinite loops and bad shoes.
|
||||||
/obj/item/clothing/shoes/golem, /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)
|
for(var/U in typesof(/obj/item/clothing/shoes)-blocked)
|
||||||
var/obj/item/clothing/shoes/V = new U
|
var/obj/item/clothing/shoes/V = new U
|
||||||
src.clothing_choices[V.name] = U
|
src.clothing_choices[V.name] = U
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
brainmob.client.screen.len = null //clear the hud
|
brainmob.client.screen.len = null //clear the hud
|
||||||
|
|
||||||
/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H)
|
/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 = new(src)
|
||||||
brainmob.name = H.real_name
|
brainmob.name = H.real_name
|
||||||
brainmob.real_name = H.real_name
|
brainmob.real_name = H.real_name
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
if(H.mind)
|
if(H.mind)
|
||||||
H.mind.transfer_to(brainmob)
|
H.mind.transfer_to(brainmob)
|
||||||
|
|
||||||
brainmob << "\blue You feel slightly disoriented. That's normal when you're just a brain."
|
brainmob << "<span class='notice'>You feel slightly disoriented. That's normal when you're just a [initial(src.name)].</span>"
|
||||||
callHook("debrain", list(brainmob))
|
callHook("debrain", list(brainmob))
|
||||||
|
|
||||||
/obj/item/organ/brain/examine(mob/user) // -- TLE
|
/obj/item/organ/brain/examine(mob/user) // -- TLE
|
||||||
@@ -73,3 +73,21 @@
|
|||||||
brainmob.mind.transfer_to(target)
|
brainmob.mind.transfer_to(target)
|
||||||
else
|
else
|
||||||
target.key = brainmob.key
|
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"
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
for(var/mob/N in viewers(src, null))
|
for(var/mob/N in viewers(src, null))
|
||||||
if(N.client)
|
if(N.client)
|
||||||
N.show_message(text("\red <B>[M] bursts out of [src]!</B>"), 2)
|
N.show_message(text("\red <B>[M] bursts out of [src]!</B>"), 2)
|
||||||
. = ..(null,1)
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/attack_hand(mob/M as mob)
|
/mob/living/carbon/attack_hand(mob/M as mob)
|
||||||
if(!istype(M, /mob/living/carbon)) return
|
if(!istype(M, /mob/living/carbon)) return
|
||||||
|
|||||||
@@ -8,8 +8,26 @@
|
|||||||
// Override the current limb status and don't cause an explosion
|
// Override the current limb status and don't cause an explosion
|
||||||
E.droplimb(1,1)
|
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;i<steps;i++)
|
||||||
|
target_turf = get_step(target_turf,target_dir)
|
||||||
|
current_organ.throw_at(target_turf)
|
||||||
|
|
||||||
..(species.gibbed_anim)
|
..(species.gibbed_anim)
|
||||||
gibs(loc, viruses, dna, null, null, species.flesh_color, species.blood_color)
|
gibs(loc, viruses, dna, null, species.flesh_color, species.blood_color)
|
||||||
|
|
||||||
/mob/living/carbon/human/dust()
|
/mob/living/carbon/human/dust()
|
||||||
if(species)
|
if(species)
|
||||||
|
|||||||
@@ -52,7 +52,10 @@
|
|||||||
t_his = "her"
|
t_his = "her"
|
||||||
t_him = "her"
|
t_him = "her"
|
||||||
|
|
||||||
msg += "<EM>[src.name]</EM>!\n"
|
msg += "<EM>[src.name]</EM>"
|
||||||
|
if(species.name != "Human")
|
||||||
|
msg += ", a <b><font color='[species.flesh_color]'>[species.name]</font></b>"
|
||||||
|
msg += "!\n"
|
||||||
|
|
||||||
//uniform
|
//uniform
|
||||||
if(w_uniform && !skipjumpsuit)
|
if(w_uniform && !skipjumpsuit)
|
||||||
|
|||||||
@@ -751,13 +751,13 @@
|
|||||||
|
|
||||||
if(!lastpuke)
|
if(!lastpuke)
|
||||||
lastpuke = 1
|
lastpuke = 1
|
||||||
src << "<spawn class='warning'>You feel nauseous..."
|
src << "<span class='warning'>You feel nauseous...</span>"
|
||||||
spawn(150) //15 seconds until second warning
|
spawn(150) //15 seconds until second warning
|
||||||
src << "<spawn class='warning'>You feel like you are about to throw up!"
|
src << "<span class='warning'>You feel like you are about to throw up!</span>"
|
||||||
spawn(100) //and you have 10 more for mad dash to the bucket
|
spawn(100) //and you have 10 more for mad dash to the bucket
|
||||||
Stun(5)
|
Stun(5)
|
||||||
|
|
||||||
src.visible_message("<spawn class='warning'>[src] throws up!","<spawn class='warning'>You throw up!")
|
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
|
||||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||||
|
|
||||||
var/turf/location = loc
|
var/turf/location = loc
|
||||||
|
|||||||
@@ -1,8 +1,25 @@
|
|||||||
/datum/species/shadow
|
/datum/species/shadow
|
||||||
name = "Shadow"
|
name = "Shadow"
|
||||||
name_plural = "shadows"
|
name_plural = "shadows"
|
||||||
|
|
||||||
|
icobase = 'icons/mob/human_races/r_shadow.dmi'
|
||||||
|
deform = 'icons/mob/human_races/r_shadow.dmi'
|
||||||
|
|
||||||
language = "Sol Common" //todo?
|
language = "Sol Common" //todo?
|
||||||
unarmed_types = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/sharp)
|
unarmed_types = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/sharp)
|
||||||
light_dam = 2
|
light_dam = 2
|
||||||
darksight = 8
|
darksight = 8
|
||||||
flags = IS_RESTRICTED | NO_SCAN | NO_SLIP | NO_POISON
|
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)
|
||||||
@@ -175,10 +175,6 @@
|
|||||||
add_inherent_verbs(H)
|
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).
|
/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
|
return
|
||||||
|
|
||||||
// Only used for alien plasma weeds atm, but could be used for Dionaea later.
|
// Only used for alien plasma weeds atm, but could be used for Dionaea later.
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
/datum/species/golem
|
/datum/species/golem
|
||||||
name = "Golem"
|
name = "Golem"
|
||||||
name_plural = "golems"
|
name_plural = "golems"
|
||||||
|
|
||||||
|
icobase = 'icons/mob/human_races/r_golem.dmi'
|
||||||
|
deform = 'icons/mob/human_races/r_golem.dmi'
|
||||||
|
|
||||||
language = "Sol Common" //todo?
|
language = "Sol Common" //todo?
|
||||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch)
|
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
|
flags = IS_RESTRICTED | NO_BREATHE | NO_PAIN | NO_BLOOD | IS_SYNTHETIC | NO_SCAN | NO_POISON
|
||||||
@@ -8,6 +12,15 @@
|
|||||||
breath_type = null
|
breath_type = null
|
||||||
poison_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)
|
/datum/species/golem/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||||
if(H.mind)
|
if(H.mind)
|
||||||
H.mind.assigned_role = "Golem"
|
H.mind.assigned_role = "Golem"
|
||||||
|
|||||||
@@ -1,10 +1,24 @@
|
|||||||
/datum/species/slime
|
/datum/species/slime
|
||||||
name = "Slime"
|
name = "Slime"
|
||||||
name_plural = "slimes"
|
name_plural = "slimes"
|
||||||
|
|
||||||
|
icobase = 'icons/mob/human_races/r_slime.dmi'
|
||||||
|
deform = 'icons/mob/human_races/r_slime.dmi'
|
||||||
|
|
||||||
language = "Sol Common" //todo?
|
language = "Sol Common" //todo?
|
||||||
unarmed_types = list(/datum/unarmed_attack/slime_glomp)
|
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
|
darksight = 3
|
||||||
|
|
||||||
|
blood_color = "#05FF9B"
|
||||||
|
flesh_color = "#05FFFB"
|
||||||
|
|
||||||
|
has_organ = list(
|
||||||
|
"brain" = /datum/organ/internal/brain/slime
|
||||||
|
)
|
||||||
|
|
||||||
|
inherent_verbs = list(
|
||||||
|
)
|
||||||
|
|
||||||
breath_type = null
|
breath_type = null
|
||||||
poison_type = null
|
poison_type = null
|
||||||
@@ -201,7 +201,11 @@
|
|||||||
blood_color = "#1F181F"
|
blood_color = "#1F181F"
|
||||||
flesh_color = "#575757"
|
flesh_color = "#575757"
|
||||||
|
|
||||||
has_organ = list(
|
has_organ = list() //TODO: Positronic brain.
|
||||||
"heart" = /datum/organ/internal/heart,
|
|
||||||
"brain" = /datum/organ/internal/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()
|
||||||
|
|||||||
@@ -490,7 +490,10 @@ proc/get_damage_icon_part(damage_state, body_part)
|
|||||||
/mob/living/carbon/human/regenerate_icons()
|
/mob/living/carbon/human/regenerate_icons()
|
||||||
..()
|
..()
|
||||||
if(monkeyizing) return
|
if(monkeyizing) return
|
||||||
|
|
||||||
update_mutations(0)
|
update_mutations(0)
|
||||||
|
update_body(0)
|
||||||
|
update_hair(0)
|
||||||
update_inv_w_uniform(0)
|
update_inv_w_uniform(0)
|
||||||
update_inv_wear_id(0)
|
update_inv_wear_id(0)
|
||||||
update_inv_gloves(0)
|
update_inv_gloves(0)
|
||||||
|
|||||||
@@ -678,90 +678,6 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
|
|||||||
target.enahnced = 1
|
target.enahnced = 1
|
||||||
del(src)*/
|
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
|
/obj/effect/golemrune
|
||||||
anchored = 1
|
anchored = 1
|
||||||
desc = "a strange rune used to create golems. It glows when spirits are nearby."
|
desc = "a strange rune used to create golems. It glows when spirits are nearby."
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/mob/living/silicon/gib()
|
/mob/living/silicon/gib()
|
||||||
..("gibbed-r")
|
..("gibbed-r")
|
||||||
gibs(loc, viruses, null, null, /obj/effect/gibspawner/robot)
|
gibs(loc, viruses, null, /obj/effect/gibspawner/robot)
|
||||||
|
|
||||||
/mob/living/silicon/dust()
|
/mob/living/silicon/dust()
|
||||||
..("dust-r", /obj/effect/decal/remains/robot)
|
..("dust-r", /obj/effect/decal/remains/robot)
|
||||||
|
|||||||
@@ -197,6 +197,9 @@
|
|||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/mob/living/simple_animal/gib()
|
||||||
|
..(icon_gib,1)
|
||||||
|
|
||||||
/mob/living/simple_animal/emote(var/act, var/type, var/desc)
|
/mob/living/simple_animal/emote(var/act, var/type, var/desc)
|
||||||
if(act)
|
if(act)
|
||||||
..(act, type, desc)
|
..(act, type, desc)
|
||||||
@@ -263,14 +266,14 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
else if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch))
|
else if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch))
|
||||||
|
var/actual_meat_amount = max(1,(meat_amount/2))
|
||||||
if(meat_type && (stat == DEAD))
|
if(meat_type && actual_meat_amount>0 && (stat == DEAD))
|
||||||
if(meat_amount && (meat_amount/2) >= 1)
|
for(var/i=0;i<actual_meat_amount;i++)
|
||||||
for(var/i = 0; i < meat_amount/2; i++)
|
var/obj/item/meat = new meat_type(get_turf(src))
|
||||||
var/obj/item/meat = new meat_type(get_turf(src))
|
meat.name = "[src.name] [meat.name]"
|
||||||
meat.name = "[src.name] [meat.name]"
|
|
||||||
if(small)
|
if(small)
|
||||||
user.visible_message("<span class='danger'>[user] chops up \the [src]!</span>")
|
user.visible_message("<span class='danger'>[user] chops up \the [src]!</span>")
|
||||||
|
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
|
||||||
del(src)
|
del(src)
|
||||||
else
|
else
|
||||||
user.visible_message("<span class='danger'>[user] butchers \the [src] messily!</span>")
|
user.visible_message("<span class='danger'>[user] butchers \the [src] messily!</span>")
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
/obj/item/organ/diona/removed(var/mob/living/target,var/mob/living/user)
|
/obj/item/organ/diona/removed(var/mob/living/target,var/mob/living/user)
|
||||||
|
|
||||||
|
..()
|
||||||
var/mob/living/carbon/human/H = target
|
var/mob/living/carbon/human/H = target
|
||||||
if(!istype(target))
|
if(!istype(target))
|
||||||
del(src)
|
del(src)
|
||||||
@@ -51,10 +52,10 @@
|
|||||||
if(!diona)
|
if(!diona)
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
var/mob/living/carbon/alien/diona/D = new(get_turf(src))
|
spawn(1) // So it has time to be thrown about by the gib() proc.
|
||||||
diona.request_player(D)
|
var/mob/living/carbon/alien/diona/D = new(get_turf(src))
|
||||||
|
diona.request_player(D)
|
||||||
del(src)
|
del(src)
|
||||||
|
|
||||||
// These are different to the standard diona organs as they have a purpose in other
|
// These are different to the standard diona organs as they have a purpose in other
|
||||||
// species (absorbing radiation and light respectively)
|
// species (absorbing radiation and light respectively)
|
||||||
@@ -221,6 +222,8 @@
|
|||||||
icon_state = "brain-prosthetic"
|
icon_state = "brain-prosthetic"
|
||||||
organ_tag = "stack"
|
organ_tag = "stack"
|
||||||
robotic = 2
|
robotic = 2
|
||||||
|
prosthetic_name = null
|
||||||
|
prosthetic_icon = null
|
||||||
|
|
||||||
/obj/item/organ/stack/vox
|
/obj/item/organ/stack/vox
|
||||||
name = "vox cortical stack"
|
name = "vox cortical stack"
|
||||||
@@ -662,10 +662,9 @@ Note that amputating the affected organ does in fact remove the infection from t
|
|||||||
"<span class='moderate'><b>Your [display_name] goes flying off!</b></span>",\
|
"<span class='moderate'><b>Your [display_name] goes flying off!</b></span>",\
|
||||||
"You hear a terrible sound of ripping tendons and flesh.")
|
"You hear a terrible sound of ripping tendons and flesh.")
|
||||||
|
|
||||||
if(organ)
|
//Throw organs around
|
||||||
//Throw organs around
|
if(istype(owner.loc,/turf) && organ)
|
||||||
var/lol = pick(cardinal)
|
step(organ,pick(cardinal))
|
||||||
step(organ,lol)
|
|
||||||
|
|
||||||
owner.update_body(1)
|
owner.update_body(1)
|
||||||
|
|
||||||
|
|||||||
@@ -250,6 +250,14 @@
|
|||||||
/datum/organ/internal/brain/xeno
|
/datum/organ/internal/brain/xeno
|
||||||
removed_type = /obj/item/organ/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
|
/datum/organ/internal/eyes
|
||||||
name = "eyes"
|
name = "eyes"
|
||||||
parent_organ = "head"
|
parent_organ = "head"
|
||||||
@@ -271,7 +279,13 @@
|
|||||||
|
|
||||||
if(!removed_type) return 0
|
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))
|
if(istype(removed_organ))
|
||||||
removed_organ.organ_data = src
|
removed_organ.organ_data = src
|
||||||
|
|||||||
@@ -153,10 +153,10 @@
|
|||||||
|
|
||||||
/obj/item/organ/proc/removed(var/mob/living/target,var/mob/living/user)
|
/obj/item/organ/proc/removed(var/mob/living/target,var/mob/living/user)
|
||||||
|
|
||||||
if(!target || !user)
|
if(!target)
|
||||||
return
|
return
|
||||||
|
|
||||||
if(organ_data.vital)
|
if(target && user && organ_data.vital)
|
||||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)])</font>"
|
user.attack_log += "\[[time_stamp()]\]<font color='red'> removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)])</font>"
|
||||||
target.attack_log += "\[[time_stamp()]\]<font color='orange'> had a vital organ ([src]) removed by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])</font>"
|
target.attack_log += "\[[time_stamp()]\]<font color='orange'> had a vital organ ([src]) removed by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])</font>"
|
||||||
msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||||
|
|||||||
@@ -92,7 +92,7 @@
|
|||||||
if(istype(user, /mob/living))
|
if(istype(user, /mob/living))
|
||||||
var/mob/living/M = user
|
var/mob/living/M = user
|
||||||
if (HULK in M.mutations)
|
if (HULK in M.mutations)
|
||||||
M << "\red Your fingers are much too large for the trigger guard!"
|
M << "<span class='danger'>Your fingers are much too large for the trigger guard!</span>"
|
||||||
return
|
return
|
||||||
|
|
||||||
add_fingerprint(user)
|
add_fingerprint(user)
|
||||||
|
|||||||
@@ -665,7 +665,7 @@
|
|||||||
|
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
/obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
||||||
name = "meat"
|
name = "meat"
|
||||||
desc = "A slab of meat"
|
desc = "A slab of green meat. Smells like acid."
|
||||||
icon_state = "xenomeat"
|
icon_state = "xenomeat"
|
||||||
filling_color = "#43DE18"
|
filling_color = "#43DE18"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/obj/item/weapon/reagent_containers/food/snacks/meat
|
/obj/item/weapon/reagent_containers/food/snacks/meat
|
||||||
name = "meat"
|
name = "meat"
|
||||||
desc = "A slab of meat"
|
desc = "A slab of meat."
|
||||||
icon_state = "meat"
|
icon_state = "meat"
|
||||||
health = 180
|
health = 180
|
||||||
filling_color = "#FF1C1C"
|
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)
|
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)
|
del(src)
|
||||||
else
|
else
|
||||||
..()
|
..()
|
||||||
@@ -32,4 +32,4 @@
|
|||||||
|
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||||
name = "Corgi meat"
|
name = "Corgi meat"
|
||||||
desc = "Tastes like... well you know..."
|
desc = "Tastes like... well, you know."
|
||||||
Reference in New Issue
Block a user