mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 13:37:58 +01:00
Rebalances Golems, Refactors Species Based Equipping (#12358)
This commit is contained in:
committed by
variableundefined
parent
4fabdfb78e
commit
d5759a0db5
@@ -37,12 +37,18 @@
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
|
||||
/obj/item/assembly/mousetrap/proc/triggered(mob/target, var/type = "feet")
|
||||
/obj/item/assembly/mousetrap/proc/triggered(mob/target, type = "feet")
|
||||
if(!armed)
|
||||
return
|
||||
var/obj/item/organ/external/affecting = null
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(PIERCEIMMUNE in H.dna.species.species_traits)
|
||||
playsound(src, 'sound/effects/snap.ogg', 50, TRUE)
|
||||
armed = FALSE
|
||||
update_icon()
|
||||
pulse(FALSE)
|
||||
return FALSE
|
||||
switch(type)
|
||||
if("feet")
|
||||
if(!H.shoes)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
icon_state = "boxing"
|
||||
item_state = "boxing"
|
||||
put_on_delay = 60
|
||||
species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion
|
||||
|
||||
/obj/item/clothing/gloves/boxing/green
|
||||
icon_state = "boxinggreen"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
allowed = list(/obj/item/analyzer,/obj/item/stack/medical,/obj/item/dnainjector,/obj/item/reagent_containers/dropper,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/hypospray,/obj/item/healthanalyzer,/obj/item/flashlight/pen,/obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/glass/beaker,/obj/item/reagent_containers/food/pill,/obj/item/storage/pill_bottle,/obj/item/paper,/obj/item/rad_laser)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 50, rad = 0)
|
||||
|
||||
species_exception = list(/datum/species/golem)
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/suit.dmi'
|
||||
|
||||
@@ -266,6 +266,10 @@
|
||||
ui = new(user, src, ui_key, "personal_crafting.tmpl", "Crafting Menu", 700, 800, state = state)
|
||||
ui.open()
|
||||
|
||||
/datum/personal_crafting/proc/close(mob/user)
|
||||
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
|
||||
ui.close()
|
||||
|
||||
/datum/personal_crafting/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
var/list/subs = list()
|
||||
|
||||
@@ -50,10 +50,12 @@
|
||||
/obj/item/grown/nettle/pickup(mob/living/user)
|
||||
..()
|
||||
if(!ishuman(user))
|
||||
return TRUE
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.gloves)
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(PIERCEIMMUNE in H.dna.species.species_traits)
|
||||
return FALSE
|
||||
var/organ = ((H.hand ? "l_":"r_") + "arm")
|
||||
var/obj/item/organ/external/affecting = H.get_organ(organ)
|
||||
if(affecting)
|
||||
|
||||
@@ -149,18 +149,10 @@
|
||||
regrowth_time_low = 4800
|
||||
regrowth_time_high = 7200
|
||||
|
||||
/obj/structure/flora/ash/cacti/Crossed(mob/AM, oldloc)
|
||||
if(ishuman(AM) && has_gravity(loc) && prob(70))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(!H.shoes && !H.lying) //ouch, my feet.
|
||||
var/picked_def_zone = pick("l_leg", "r_leg")
|
||||
var/obj/item/organ/external/affected = H.get_organ(picked_def_zone)
|
||||
if(!istype(affected))
|
||||
return
|
||||
H.apply_damage(rand(3, 6), BRUTE, picked_def_zone)
|
||||
H.Weaken(2)
|
||||
H.visible_message("<span class='danger'>[H] steps on a cactus!</span>", \
|
||||
"<span class='userdanger'>You step on a cactus!</span>")
|
||||
/obj/structure/flora/ash/cacti/Initialize(mapload)
|
||||
. = ..()
|
||||
// min dmg 3, max dmg 6, prob(70)
|
||||
AddComponent(/datum/component/caltrop, 3, 6, 70)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/ash_flora
|
||||
name = "mushroom shavings"
|
||||
|
||||
@@ -406,7 +406,7 @@
|
||||
else
|
||||
dat += "<tr><td><B>Uniform:</B></td><td><A href='?src=[UID()];item=[slot_w_uniform]'>[(w_uniform && !(w_uniform.flags&ABSTRACT)) ? w_uniform : "<font color=grey>Empty</font>"]</A></td></tr>"
|
||||
|
||||
if(w_uniform == null || (slot_w_uniform in obscured))
|
||||
if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (slot_w_uniform in obscured))
|
||||
dat += "<tr><td><font color=grey> ↳<B>Pockets:</B></font></td></tr>"
|
||||
dat += "<tr><td><font color=grey> ↳<B>ID:</B></font></td></tr>"
|
||||
dat += "<tr><td><font color=grey> ↳<B>Belt:</B></font></td></tr>"
|
||||
@@ -1015,6 +1015,10 @@
|
||||
else
|
||||
target_zone = user.zone_sel.selecting
|
||||
|
||||
|
||||
if(PIERCEIMMUNE in dna.species.species_traits)
|
||||
. = 0
|
||||
|
||||
var/obj/item/organ/external/affecting = get_organ(target_zone)
|
||||
var/fail_msg
|
||||
if(!affecting)
|
||||
|
||||
@@ -318,7 +318,7 @@ emp_act
|
||||
else if(I)
|
||||
if(I.throw_speed >= EMBED_THROWSPEED_THRESHOLD)
|
||||
if(can_embed(I))
|
||||
if(prob(I.embed_chance))
|
||||
if(prob(I.embed_chance) && !(PIERCEIMMUNE in dna.species.species_traits))
|
||||
throw_alert("embeddedobject", /obj/screen/alert/embeddedobject)
|
||||
var/obj/item/organ/external/L = pick(bodyparts)
|
||||
L.embedded_objects |= I
|
||||
|
||||
@@ -411,148 +411,8 @@
|
||||
|
||||
..(what, who, where, silent = is_silent)
|
||||
|
||||
/mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = 0)
|
||||
switch(dna.species.handle_can_equip(I, slot, disable_warning, src))
|
||||
if(1) return TRUE
|
||||
if(2) return FALSE //if it returns 2, it wants no normal handling
|
||||
if(!has_organ_for_slot(slot))
|
||||
return FALSE
|
||||
|
||||
if(istype(I, /obj/item/clothing/under) || istype(I, /obj/item/clothing/suit))
|
||||
if(FAT in mutations)
|
||||
//testing("[M] TOO FAT TO WEAR [src]!")
|
||||
if(!(I.flags_size & ONESIZEFITSALL))
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='alert'>You're too fat to wear the [I].</span>")
|
||||
return FALSE
|
||||
|
||||
switch(slot)
|
||||
if(slot_l_hand)
|
||||
return !l_hand && !incapacitated()
|
||||
if(slot_r_hand)
|
||||
return !r_hand && !incapacitated()
|
||||
if(slot_wear_mask)
|
||||
return !wear_mask && (I.slot_flags & SLOT_MASK)
|
||||
if(slot_back)
|
||||
return !back && (I.slot_flags & SLOT_BACK)
|
||||
if(slot_wear_suit)
|
||||
return !wear_suit && (I.slot_flags & SLOT_OCLOTHING)
|
||||
if(slot_gloves)
|
||||
return !gloves && (I.slot_flags & SLOT_GLOVES)
|
||||
if(slot_shoes)
|
||||
return !shoes && (I.slot_flags & SLOT_FEET)
|
||||
if(slot_belt)
|
||||
if(belt)
|
||||
return 0
|
||||
if(!w_uniform)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return 0
|
||||
if(!(I.slot_flags & SLOT_BELT))
|
||||
return
|
||||
return 1
|
||||
if(slot_glasses)
|
||||
return !glasses && (I.slot_flags & SLOT_EYES)
|
||||
if(slot_head)
|
||||
return !head && (I.slot_flags & SLOT_HEAD)
|
||||
if(slot_l_ear)
|
||||
return !l_ear && (I.slot_flags & SLOT_EARS) && !((I.slot_flags & SLOT_TWOEARS) && r_ear)
|
||||
if(slot_r_ear)
|
||||
return !r_ear && (I.slot_flags & SLOT_EARS) && !((I.slot_flags & SLOT_TWOEARS) && l_ear)
|
||||
if(slot_w_uniform)
|
||||
return !w_uniform && (I.slot_flags & SLOT_ICLOTHING)
|
||||
if(slot_wear_id)
|
||||
if(wear_id)
|
||||
return 0
|
||||
if(!w_uniform)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return 0
|
||||
if(!(I.slot_flags & SLOT_ID))
|
||||
return 0
|
||||
return 1
|
||||
if(slot_wear_pda)
|
||||
if(wear_pda)
|
||||
return 0
|
||||
if(!w_uniform)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return 0
|
||||
if(!(I.slot_flags & SLOT_PDA))
|
||||
return 0
|
||||
return 1
|
||||
if(slot_l_store)
|
||||
if(I.flags & NODROP) //Pockets aren't visible, so you can't move NODROP items into them.
|
||||
return 0
|
||||
if(l_store)
|
||||
return 0
|
||||
if(!w_uniform)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return 0
|
||||
if(I.slot_flags & SLOT_DENYPOCKET)
|
||||
return
|
||||
if(I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & SLOT_POCKET))
|
||||
return 1
|
||||
if(slot_r_store)
|
||||
if(I.flags & NODROP)
|
||||
return 0
|
||||
if(r_store)
|
||||
return 0
|
||||
if(!w_uniform)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return 0
|
||||
if(I.slot_flags & SLOT_DENYPOCKET)
|
||||
return 0
|
||||
if(I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & SLOT_POCKET))
|
||||
return 1
|
||||
return 0
|
||||
if(slot_s_store)
|
||||
if(I.flags & NODROP) //Suit storage NODROP items drop if you take a suit off, this is to prevent people exploiting this.
|
||||
return 0
|
||||
if(s_store)
|
||||
return 0
|
||||
if(!wear_suit)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='alert'>You need a suit before you can attach this [name].</span>")
|
||||
return 0
|
||||
if(!wear_suit.allowed)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "You somehow have a suit with no defined allowed items for suit storage, stop that.")
|
||||
return 0
|
||||
if(I.w_class > WEIGHT_CLASS_BULKY)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "The [name] is too big to attach.")
|
||||
return 0
|
||||
if(istype(I, /obj/item/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, wear_suit.allowed))
|
||||
return 1
|
||||
return 0
|
||||
if(slot_handcuffed)
|
||||
return !handcuffed && istype(I, /obj/item/restraints/handcuffs)
|
||||
if(slot_legcuffed)
|
||||
return !legcuffed && istype(I, /obj/item/restraints/legcuffs)
|
||||
if(slot_in_backpack)
|
||||
if(back && istype(back, /obj/item/storage/backpack))
|
||||
var/obj/item/storage/backpack/B = back
|
||||
if(B.contents.len < B.storage_slots && I.w_class <= B.max_w_class)
|
||||
return 1
|
||||
return 0
|
||||
if(slot_tie)
|
||||
if(!w_uniform)
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='warning'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return 0
|
||||
var/obj/item/clothing/under/uniform = w_uniform
|
||||
if(uniform.accessories.len && !uniform.can_attach_accessory(src))
|
||||
if(!disable_warning)
|
||||
to_chat(src, "<span class='warning'>You already have an accessory of this type attached to your [uniform].</span>")
|
||||
return 0
|
||||
if(!(I.slot_flags & SLOT_TIE))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
return 0 //Unsupported slot
|
||||
/mob/living/carbon/human/can_equip(obj/item/I, slot, disable_warning = FALSE)
|
||||
return dna.species.can_equip(I, slot, disable_warning, src)
|
||||
|
||||
/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE)
|
||||
var/datum/outfit/O = null
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
icon_state = "punpun"
|
||||
item_color = "punpun"
|
||||
species_restricted = list("Monkey")
|
||||
species_exception = list(/datum/species/monkey)
|
||||
|
||||
/mob/living/carbon/human/monkey/punpun/Initialize(mapload)
|
||||
..()
|
||||
|
||||
@@ -53,7 +53,6 @@
|
||||
var/stamina_mod = 1
|
||||
var/stun_mod = 1 // If a species is more/less impacated by stuns/weakens/paralysis
|
||||
var/speedmod = 0 // this affects the race's speed. positive numbers make it move slower, negative numbers make it move faster
|
||||
var/armor = 0 // overall defense for the race... or less defense, if it's negative.
|
||||
var/blood_damage_type = OXY //What type of damage does this species take if it's low on blood?
|
||||
var/obj/item/mutanthands
|
||||
var/total_health = 100
|
||||
@@ -74,6 +73,10 @@
|
||||
var/clothing_flags = 0 // Underwear and socks.
|
||||
var/exotic_blood
|
||||
var/skinned_type
|
||||
var/list/no_equip = list() // slots the race can't equip stuff to
|
||||
var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
|
||||
var/can_craft = TRUE // Can this mob using crafting or not?
|
||||
|
||||
var/bodyflags = 0
|
||||
var/dietflags = 0 // Make sure you set this, otherwise it won't be able to digest a lot of foods
|
||||
|
||||
@@ -271,7 +274,12 @@
|
||||
return .
|
||||
|
||||
/datum/species/proc/on_species_gain(mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
|
||||
return
|
||||
for(var/slot_id in no_equip)
|
||||
var/obj/item/thing = H.get_item_by_slot(slot_id)
|
||||
if(thing && (!thing.species_exception || !is_type_in_list(src, thing.species_exception)))
|
||||
H.unEquip(thing)
|
||||
if(H.hud_used)
|
||||
H.hud_used.update_locked_slots()
|
||||
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/human/H)
|
||||
if(H.butcher_results) //clear it out so we don't butcher a actual human.
|
||||
@@ -585,8 +593,158 @@
|
||||
attack_verb = list("slash", "claw")
|
||||
damage = 6
|
||||
|
||||
/datum/species/proc/handle_can_equip(obj/item/I, slot, disable_warning = 0, mob/living/carbon/human/user)
|
||||
return FALSE
|
||||
/datum/species/proc/can_equip(obj/item/I, slot, disable_warning = FALSE, mob/living/carbon/human/H)
|
||||
if(slot in no_equip)
|
||||
if(!I.species_exception || !is_type_in_list(src, I.species_exception))
|
||||
return FALSE
|
||||
|
||||
if(!H.has_organ_for_slot(slot))
|
||||
return FALSE
|
||||
|
||||
if(istype(I, /obj/item/clothing/under) || istype(I, /obj/item/clothing/suit))
|
||||
if(FAT in H.mutations)
|
||||
if(!(I.flags_size & ONESIZEFITSALL))
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='alert'>You're too fat to wear the [I].</span>")
|
||||
return FALSE
|
||||
|
||||
switch(slot)
|
||||
if(slot_l_hand)
|
||||
return !H.l_hand && !H.incapacitated()
|
||||
if(slot_r_hand)
|
||||
return !H.r_hand && !H.incapacitated()
|
||||
if(slot_wear_mask)
|
||||
return !H.wear_mask && (I.slot_flags & SLOT_MASK)
|
||||
if(slot_back)
|
||||
return !H.back && (I.slot_flags & SLOT_BACK)
|
||||
if(slot_wear_suit)
|
||||
return !H.wear_suit && (I.slot_flags & SLOT_OCLOTHING)
|
||||
if(slot_gloves)
|
||||
return !H.gloves && (I.slot_flags & SLOT_GLOVES)
|
||||
if(slot_shoes)
|
||||
return !H.shoes && (I.slot_flags & SLOT_FEET)
|
||||
if(slot_belt)
|
||||
if(H.belt)
|
||||
return FALSE
|
||||
var/obj/item/organ/external/O = H.get_organ(BODY_ZONE_CHEST)
|
||||
|
||||
if(!H.w_uniform && !nojumpsuit && (!O || !(O.status & ORGAN_ROBOT)))
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_BELT))
|
||||
return
|
||||
return TRUE
|
||||
if(slot_glasses)
|
||||
return !H.glasses && (I.slot_flags & SLOT_EYES)
|
||||
if(slot_head)
|
||||
return !H.head && (I.slot_flags & SLOT_HEAD)
|
||||
if(slot_l_ear)
|
||||
return !H.l_ear && (I.slot_flags & SLOT_EARS) && !((I.slot_flags & SLOT_TWOEARS) && H.r_ear)
|
||||
if(slot_r_ear)
|
||||
return !H.r_ear && (I.slot_flags & SLOT_EARS) && !((I.slot_flags & SLOT_TWOEARS) && H.l_ear)
|
||||
if(slot_w_uniform)
|
||||
return !H.w_uniform && (I.slot_flags & SLOT_ICLOTHING)
|
||||
if(slot_wear_id)
|
||||
if(H.wear_id)
|
||||
return FALSE
|
||||
var/obj/item/organ/external/O = H.get_organ(BODY_ZONE_CHEST)
|
||||
|
||||
if(!H.w_uniform && !nojumpsuit && (!O || !(O.status & ORGAN_ROBOT)))
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_ID))
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(slot_wear_pda)
|
||||
if(H.wear_pda)
|
||||
return FALSE
|
||||
var/obj/item/organ/external/O = H.get_organ(BODY_ZONE_CHEST)
|
||||
|
||||
if(!H.w_uniform && !nojumpsuit && (!O || !(O.status & ORGAN_ROBOT)))
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_PDA))
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(slot_l_store)
|
||||
if(I.flags & NODROP) //Pockets aren't visible, so you can't move NODROP items into them.
|
||||
return FALSE
|
||||
if(H.l_store)
|
||||
return FALSE
|
||||
var/obj/item/organ/external/O = H.get_organ(BODY_ZONE_L_LEG)
|
||||
|
||||
if(!H.w_uniform && !nojumpsuit && (!O || !(O.status & ORGAN_ROBOT)))
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return FALSE
|
||||
if(I.slot_flags & SLOT_DENYPOCKET)
|
||||
return
|
||||
if(I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & SLOT_POCKET))
|
||||
return TRUE
|
||||
if(slot_r_store)
|
||||
if(I.flags & NODROP)
|
||||
return FALSE
|
||||
if(H.r_store)
|
||||
return FALSE
|
||||
var/obj/item/organ/external/O = H.get_organ(BODY_ZONE_R_LEG)
|
||||
|
||||
if(!H.w_uniform && !nojumpsuit && (!O || !(O.status & ORGAN_ROBOT)))
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='alert'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return FALSE
|
||||
if(I.slot_flags & SLOT_DENYPOCKET)
|
||||
return FALSE
|
||||
if(I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & SLOT_POCKET))
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(slot_s_store)
|
||||
if(I.flags & NODROP) //Suit storage NODROP items drop if you take a suit off, this is to prevent people exploiting this.
|
||||
return FALSE
|
||||
if(H.s_store)
|
||||
return FALSE
|
||||
if(!H.wear_suit)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='alert'>You need a suit before you can attach this [name].</span>")
|
||||
return FALSE
|
||||
if(!H.wear_suit.allowed)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "You somehow have a suit with no defined allowed items for suit storage, stop that.")
|
||||
return FALSE
|
||||
if(I.w_class > WEIGHT_CLASS_BULKY)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "The [name] is too big to attach.")
|
||||
return FALSE
|
||||
if(istype(I, /obj/item/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed))
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(slot_handcuffed)
|
||||
return !H.handcuffed && istype(I, /obj/item/restraints/handcuffs)
|
||||
if(slot_legcuffed)
|
||||
return !H.legcuffed && istype(I, /obj/item/restraints/legcuffs)
|
||||
if(slot_in_backpack)
|
||||
if(H.back && istype(H.back, /obj/item/storage/backpack))
|
||||
var/obj/item/storage/backpack/B = H.back
|
||||
if(B.contents.len < B.storage_slots && I.w_class <= B.max_w_class)
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(slot_tie)
|
||||
if(!H.w_uniform)
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='warning'>You need a jumpsuit before you can attach this [name].</span>")
|
||||
return FALSE
|
||||
var/obj/item/clothing/under/uniform = H.w_uniform
|
||||
if(uniform.accessories.len && !uniform.can_attach_accessory(H))
|
||||
if(!disable_warning)
|
||||
to_chat(H, "<span class='warning'>You already have an accessory of this type attached to your [uniform].</span>")
|
||||
return FALSE
|
||||
if(!(I.slot_flags & SLOT_TIE))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
return FALSE //Unsupported slot
|
||||
|
||||
/datum/species/proc/get_perceived_trauma(mob/living/carbon/human/H)
|
||||
return H.health - H.getStaminaLoss()
|
||||
|
||||
@@ -5,37 +5,41 @@
|
||||
icobase = 'icons/mob/human_races/r_golem.dmi'
|
||||
deform = 'icons/mob/human_races/r_golem.dmi'
|
||||
|
||||
species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, VIRUSIMMUNE, NOGUNS)
|
||||
species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, NOGUNS, PIERCEIMMUNE)
|
||||
dies_at_threshold = TRUE
|
||||
slowdown = 2
|
||||
brute_mod = 0.45 //55% damage reduction
|
||||
burn_mod = 0.45
|
||||
tox_mod = 0.45
|
||||
clone_mod = 0.45
|
||||
brain_mod = 0.45
|
||||
stamina_mod = 0.45
|
||||
siemens_coeff = 0
|
||||
punchdamagelow = 5
|
||||
punchdamagehigh = 14
|
||||
punchstunthreshold = 11 //about 40% chance to stun
|
||||
no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform, slot_s_store)
|
||||
nojumpsuit = TRUE
|
||||
|
||||
dietflags = DIET_OMNI //golems can eat anything because they are magic or something
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
punchdamagelow = 5
|
||||
punchdamagehigh = 14
|
||||
punchstunthreshold = 11 //about 40% chance to stun
|
||||
warning_low_pressure = -INFINITY
|
||||
hazard_low_pressure = -INFINITY
|
||||
hazard_high_pressure = INFINITY
|
||||
warning_high_pressure = INFINITY
|
||||
|
||||
warning_low_pressure = -1
|
||||
hazard_low_pressure = -1
|
||||
hazard_high_pressure = 999999999
|
||||
warning_high_pressure = 999999999
|
||||
cold_level_1 = -INFINITY
|
||||
cold_level_2 = -INFINITY
|
||||
cold_level_3 = -INFINITY
|
||||
|
||||
cold_level_1 = -1
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
heat_level_1 = 999999999
|
||||
heat_level_2 = 999999999
|
||||
heat_level_3 = 999999999
|
||||
heat_level_1 = INFINITY
|
||||
heat_level_2 = INFINITY
|
||||
heat_level_3 = INFINITY
|
||||
|
||||
blood_color = "#515573"
|
||||
flesh_color = "#137E8F"
|
||||
skinned_type = /obj/item/stack/sheet/metal
|
||||
slowdown = 3
|
||||
siemens_coeff = 0
|
||||
|
||||
blacklisted = TRUE // To prevent golem subtypes from overwhelming the odds when random species changes, only the Random Golem type can be chosen
|
||||
dangerous_existence = TRUE
|
||||
@@ -45,6 +49,19 @@
|
||||
"adamantine_resonator" = /obj/item/organ/internal/adamantine_resonator
|
||||
) //Has standard darksight of 2.
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/unbreakable/sturdy),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/unbreakable/sturdy),
|
||||
"head" = list("path" = /obj/item/organ/external/head/unbreakable/sturdy),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm/unbreakable/sturdy),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right/unbreakable/sturdy),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg/unbreakable/sturdy),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right/unbreakable/sturdy),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand/unbreakable/sturdy),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/unbreakable/sturdy),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/unbreakable/sturdy),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/unbreakable/sturdy))
|
||||
|
||||
suicide_messages = list(
|
||||
"is crumbling into dust!",
|
||||
"is smashing their body apart!")
|
||||
@@ -79,27 +96,8 @@
|
||||
H.mind.special_role = SPECIAL_ROLE_FREE_GOLEM
|
||||
H.real_name = get_random_name()
|
||||
H.name = H.real_name
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/golem(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/golem(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/golem(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/golem(H), slot_wear_mask)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(H), slot_gloves)
|
||||
H.regenerate_icons()
|
||||
to_chat(H, info_text)
|
||||
|
||||
/datum/species/golem/on_species_loss(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(istype(H.w_uniform, /obj/item/clothing/under/golem)) // Doing these if checks here just in case the golem is somehow wearing something other than their golem shell, which should be impossible but you never know.
|
||||
qdel(H.w_uniform)
|
||||
if(istype(H.wear_suit, /obj/item/clothing/suit/golem))
|
||||
qdel(H.wear_suit)
|
||||
if(istype(H.shoes, /obj/item/clothing/shoes/golem))
|
||||
qdel(H.shoes)
|
||||
if(istype(H.wear_mask, /obj/item/clothing/mask/gas/golem))
|
||||
qdel(H.wear_mask)
|
||||
if(istype(H.gloves, /obj/item/clothing/gloves/golem))
|
||||
qdel(H.gloves)
|
||||
|
||||
//Random Golem
|
||||
|
||||
/datum/species/golem/random
|
||||
@@ -204,6 +202,9 @@
|
||||
brute_mod = 0.3 //70% damage reduction up from 55%
|
||||
burn_mod = 0.3
|
||||
tox_mod = 0.3
|
||||
clone_mod = 0.3
|
||||
brain_mod = 0.3
|
||||
stamina_mod = 0.3
|
||||
skinned_type = /obj/item/stack/ore/diamond
|
||||
info_text = "As a <span class='danger'>Diamond Golem</span>, you are more resistant than the average golem."
|
||||
prefix = "Diamond"
|
||||
@@ -213,10 +214,13 @@
|
||||
/datum/species/golem/gold
|
||||
name = "Gold Golem"
|
||||
golem_colour = rgb(204, 204, 0)
|
||||
slowdown = 2
|
||||
slowdown = 1
|
||||
brute_mod = 0.75 //25% damage reduction down from 55%
|
||||
burn_mod = 0.75
|
||||
tox_mod = 0.75
|
||||
clone_mod = 0.75
|
||||
brain_mod = 0.75
|
||||
stamina_mod = 0.75
|
||||
skinned_type = /obj/item/stack/ore/gold
|
||||
info_text = "As a <span class='danger'>Gold Golem</span>, you are faster but less resistant than the average golem."
|
||||
prefix = "Golden"
|
||||
@@ -240,7 +244,7 @@
|
||||
punchdamagelow = 12
|
||||
punchdamagehigh = 21
|
||||
punchstunthreshold = 18 //still 40% stun chance
|
||||
slowdown = 5 //diona speed
|
||||
slowdown = 4 //pretty fucking slow
|
||||
skinned_type = /obj/item/stack/ore/iron
|
||||
info_text = "As a <span class='danger'>Plasteel Golem</span>, you are slower, but harder to stun, and hit very hard when punching."
|
||||
prefix = "Plasteel"
|
||||
@@ -257,7 +261,7 @@
|
||||
golem_colour = rgb(255, 255, 255)
|
||||
skinned_type = /obj/item/stack/ore/titanium
|
||||
info_text = "As a <span class='danger'>Titanium Golem</span>, you are resistant to burn damage and immune to ash storms."
|
||||
burn_mod = 0.3
|
||||
burn_mod = 0.405
|
||||
prefix = "Titanium"
|
||||
special_names = list("Dioxide")
|
||||
|
||||
@@ -275,7 +279,7 @@
|
||||
golem_colour = rgb(136, 136, 136)
|
||||
skinned_type = /obj/item/stack/ore/titanium
|
||||
info_text = "As a <span class='danger'>Plastitanium Golem</span>, you are very resistant to burn damage and immune to both ash storms and lava."
|
||||
burn_mod = 0.15
|
||||
burn_mod = 0.36
|
||||
prefix = "Plastitanium"
|
||||
special_names = null
|
||||
|
||||
@@ -296,7 +300,7 @@
|
||||
skinned_type = /obj/item/stack/sheet/mineral/abductor
|
||||
language = "Golem Mindlink"
|
||||
default_language = "Golem Mindlink"
|
||||
slowdown = 2 //faster
|
||||
slowdown = 1 //faster
|
||||
info_text = "As an <span class='danger'>Alloy Golem</span>, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to speak telepathically to other alloy golems."
|
||||
prefix = "Alien"
|
||||
special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown
|
||||
@@ -323,10 +327,14 @@
|
||||
name = "Wood Golem"
|
||||
golem_colour = rgb(158, 112, 75)
|
||||
skinned_type = /obj/item/stack/sheet/wood
|
||||
species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, VIRUSIMMUNE, NOGUNS, IS_PLANT)
|
||||
species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, NOGUNS, PIERCEIMMUNE, IS_PLANT)
|
||||
//Can burn and take damage from heat
|
||||
brute_mod = 0.7 //30% damage reduction down from 55%
|
||||
burn_mod = 1
|
||||
burn_mod = 0.875
|
||||
tox_mod = 0.7
|
||||
clone_mod = 0.7
|
||||
brain_mod = 0.7
|
||||
stamina_mod = 0.7
|
||||
heatmod = 1.5
|
||||
|
||||
heat_level_1 = 300
|
||||
@@ -343,25 +351,35 @@
|
||||
special_name_chance = 100
|
||||
|
||||
/datum/species/golem/wood/handle_life(mob/living/carbon/human/H)
|
||||
if(H.stat == DEAD)
|
||||
return
|
||||
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
|
||||
if(isturf(H.loc)) //else, there's considered to be no light
|
||||
var/turf/T = H.loc
|
||||
light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights
|
||||
H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10)
|
||||
light_amount = min(1, T.get_lumcount()) - 0.5
|
||||
if(light_amount > 0)
|
||||
H.clear_alert("nolight")
|
||||
else
|
||||
H.throw_alert("nolight", /obj/screen/alert/nolight)
|
||||
H.nutrition += light_amount * 10
|
||||
if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL)
|
||||
H.nutrition = NUTRITION_LEVEL_ALMOST_FULL
|
||||
if(light_amount > 0.2 && !H.suiciding) //if there's enough light, heal
|
||||
H.adjustBruteLoss(-1)
|
||||
H.adjustFireLoss(-1)
|
||||
H.adjustToxLoss(-1)
|
||||
H.adjustOxyLoss(-1)
|
||||
|
||||
if(light_amount > 0)
|
||||
H.clear_alert("nolight")
|
||||
else
|
||||
H.throw_alert("nolight", /obj/screen/alert/nolight)
|
||||
|
||||
if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal
|
||||
|
||||
H.adjustBruteLoss(-(light_amount/2))
|
||||
H.adjustFireLoss(-(light_amount/4))
|
||||
if(H.nutrition < NUTRITION_LEVEL_STARVING+50)
|
||||
H.take_overall_damage(10,0)
|
||||
if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
|
||||
H.adjustBruteLoss(2)
|
||||
..()
|
||||
|
||||
/datum/species/golem/wood/handle_reagents(mob/living/carbon/human/H, datum/reagent/R)
|
||||
if(R.id == "glyphosate" || R.id == "atrazine")
|
||||
H.adjustToxLoss(3) //Deal aditional damage
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
//Radioactive
|
||||
/datum/species/golem/uranium
|
||||
name = "Uranium Golem"
|
||||
@@ -392,7 +410,7 @@
|
||||
|
||||
/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
C.ventcrawler = 1
|
||||
C.ventcrawler = VENTCRAWLER_NUDE
|
||||
|
||||
/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C)
|
||||
. = ..()
|
||||
@@ -404,7 +422,11 @@
|
||||
golem_colour = rgb(255, 220, 143)
|
||||
skinned_type = /obj/item/stack/ore/glass //this is sand
|
||||
brute_mod = 0.25
|
||||
burn_mod = 3
|
||||
burn_mod = 3 //melts easily
|
||||
tox_mod = 1
|
||||
clone_mod = 1
|
||||
brain_mod = 1
|
||||
stamina_mod = 1
|
||||
info_text = "As a <span class='danger'>Sand Golem</span>, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery."
|
||||
unarmed_type = /datum/unarmed_attack/golem/sand
|
||||
prefix = "Sand"
|
||||
@@ -437,6 +459,10 @@
|
||||
skinned_type = /obj/item/shard
|
||||
brute_mod = 3 //very fragile
|
||||
burn_mod = 0.25
|
||||
tox_mod = 1
|
||||
clone_mod = 1
|
||||
brain_mod = 1
|
||||
stamina_mod = 1
|
||||
info_text = "As a <span class='danger'>Glass Golem</span>, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery."
|
||||
unarmed_type = /datum/unarmed_attack/golem/glass
|
||||
prefix = "Glass"
|
||||
@@ -607,8 +633,8 @@
|
||||
name = "Bananium Golem"
|
||||
golem_colour = rgb(255, 255, 0)
|
||||
punchdamagelow = 0
|
||||
punchdamagehigh = 0
|
||||
punchstunthreshold = 1 //Harmless and can't stun
|
||||
punchdamagehigh = 1
|
||||
punchstunthreshold = 2 //Harmless and can't stun
|
||||
skinned_type = /obj/item/stack/ore/bananium
|
||||
info_text = "As a <span class='danger'>Bananium Golem</span>, you are made for pranking. Your body emits natural honks, and punching people will just harmlessly honk them. Your skin also bleeds banana peels when damaged."
|
||||
prefix = "Bananium"
|
||||
@@ -715,54 +741,4 @@
|
||||
|
||||
/datum/unarmed_attack/golem/tranquillite
|
||||
attack_sound = null
|
||||
miss_sound = null
|
||||
|
||||
//Golem abstract items
|
||||
|
||||
/obj/item/clothing/under/golem
|
||||
name = "golem skin"
|
||||
desc = "a golem's skin"
|
||||
icon_state = "golem"
|
||||
item_state = "golem"
|
||||
item_color = "golem"
|
||||
has_sensor = 0
|
||||
flags = ABSTRACT | NODROP
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/golem
|
||||
name = "golem shell"
|
||||
desc = "a golem's thick outter shell"
|
||||
icon_state = "golem"
|
||||
item_state = "golem"
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
body_parts_covered = HEAD | UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
flags_inv = HIDEGLOVES | HIDESHOES
|
||||
flags = STOPSPRESSUREDMAGE | ABSTRACT | NODROP | THICKMATERIAL
|
||||
flags_size = ONESIZEFITSALL
|
||||
cold_protection = HEAD | UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0)
|
||||
|
||||
/obj/item/clothing/shoes/golem
|
||||
name = "golem's feet"
|
||||
desc = "sturdy golem feet"
|
||||
icon_state = "golem"
|
||||
item_state = "golem"
|
||||
flags = ABSTRACT | NODROP
|
||||
|
||||
/obj/item/clothing/mask/gas/golem
|
||||
name = "golem's face"
|
||||
desc = "the imposing face of a golem"
|
||||
icon_state = "golem"
|
||||
item_state = "golem"
|
||||
unacidable = 1
|
||||
flags = ABSTRACT | NODROP
|
||||
flags_inv = HIDEEARS | HIDEEYES
|
||||
|
||||
/obj/item/clothing/gloves/golem
|
||||
name = "golem's hands"
|
||||
desc = "strong golem hands"
|
||||
icon_state = "golem"
|
||||
item_state = null
|
||||
flags = ABSTRACT | NODROP
|
||||
miss_sound = null
|
||||
@@ -13,6 +13,8 @@
|
||||
species_traits = list(NO_EXAMINE)
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/monkey
|
||||
greater_form = /datum/species/human
|
||||
no_equip = list(slot_belt, slot_wear_id, slot_l_ear, slot_r_ear, slot_glasses, slot_gloves, slot_shoes, slot_wear_suit, slot_w_uniform, slot_l_store, slot_r_store, slot_s_store, slot_wear_pda)
|
||||
can_craft = FALSE
|
||||
is_small = 1
|
||||
has_fine_manipulation = 0
|
||||
ventcrawler = 1
|
||||
@@ -58,44 +60,6 @@
|
||||
H.dna.SetSEState(MONKEYBLOCK, TRUE)
|
||||
genemutcheck(H, MONKEYBLOCK, null, MUTCHK_FORCED)
|
||||
|
||||
/datum/species/monkey/handle_can_equip(obj/item/I, slot, disable_warning = 0, mob/living/carbon/human/user)
|
||||
if(!user.has_organ_for_slot(slot))
|
||||
return 2
|
||||
switch(slot)
|
||||
if(slot_l_hand)
|
||||
if(user.l_hand)
|
||||
return 2
|
||||
return 1
|
||||
if(slot_r_hand)
|
||||
if(user.r_hand)
|
||||
return 2
|
||||
return 1
|
||||
if(slot_wear_mask)
|
||||
if(user.wear_mask)
|
||||
return 2
|
||||
if(!(I.slot_flags & SLOT_MASK))
|
||||
return 2
|
||||
return 1
|
||||
if(slot_back)
|
||||
if(user.back)
|
||||
return 2
|
||||
if(!(I.slot_flags & SLOT_BACK))
|
||||
return 2
|
||||
return 1
|
||||
if(slot_handcuffed)
|
||||
if(user.handcuffed)
|
||||
return 2
|
||||
if(!istype(I, /obj/item/restraints/handcuffs))
|
||||
return 2
|
||||
return 1
|
||||
if(slot_in_backpack)
|
||||
if(user.back && istype(user.back, /obj/item/storage/backpack))
|
||||
var/obj/item/storage/backpack/B = user.back
|
||||
if(B.contents.len < B.storage_slots && I.w_class <= B.max_w_class)
|
||||
return 1
|
||||
return 2
|
||||
return 2
|
||||
|
||||
/datum/species/monkey/tajaran
|
||||
name = "Farwa"
|
||||
name_plural = "Farwa"
|
||||
|
||||
@@ -10,25 +10,25 @@
|
||||
blood_color = "#FFFFFF"
|
||||
flesh_color = "#E6E6C6"
|
||||
|
||||
species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE)
|
||||
species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE, PIERCEIMMUNE)
|
||||
dies_at_threshold = TRUE
|
||||
skinned_type = /obj/item/stack/sheet/bone
|
||||
|
||||
dietflags = DIET_OMNI
|
||||
reagent_tag = PROCESS_ORG
|
||||
|
||||
warning_low_pressure = -1
|
||||
hazard_low_pressure = -1
|
||||
hazard_high_pressure = 999999999
|
||||
warning_high_pressure = 999999999
|
||||
warning_low_pressure = -INFINITY
|
||||
hazard_low_pressure = -INFINITY
|
||||
hazard_high_pressure = INFINITY
|
||||
warning_high_pressure = INFINITY
|
||||
|
||||
cold_level_1 = -1
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
cold_level_1 = -INFINITY
|
||||
cold_level_2 = -INFINITY
|
||||
cold_level_3 = -INFINITY
|
||||
|
||||
heat_level_1 = 999999999
|
||||
heat_level_2 = 999999999
|
||||
heat_level_3 = 999999999
|
||||
heat_level_1 = INFINITY
|
||||
heat_level_2 = INFINITY
|
||||
heat_level_3 = INFINITY
|
||||
|
||||
suicide_messages = list(
|
||||
"is snapping their own bones!",
|
||||
|
||||
@@ -37,7 +37,11 @@
|
||||
mutanthands = /obj/item/zombie_hand
|
||||
icobase = 'icons/mob/human_races/r_zombie.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_zombie.dmi'
|
||||
armor = 20 // 120 damage to KO a zombie, which kills it
|
||||
brute_mod = 0.8 // 120 damage to KO a zombie, which kills it
|
||||
burn_mod = 0.8
|
||||
clone_mod = 0.8
|
||||
brain_mod = 0.8
|
||||
stamina_mod = 0.8
|
||||
speedmod = 1.6
|
||||
default_language = "Zombie"
|
||||
var/heal_rate = 1
|
||||
|
||||
@@ -621,6 +621,19 @@
|
||||
var/brightness_power = 1
|
||||
var/brightness_color = null
|
||||
|
||||
/obj/item/light/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/caltrop, force)
|
||||
|
||||
/obj/item/light/Crossed(mob/living/L)
|
||||
if(istype(L) && has_gravity(loc))
|
||||
if(L.incorporeal_move || L.flying)
|
||||
return
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 50, TRUE)
|
||||
if(status == LIGHT_BURNED || status == LIGHT_OK)
|
||||
shatter()
|
||||
return ..()
|
||||
|
||||
/obj/item/light/tube
|
||||
name = "light tube"
|
||||
desc = "A replacement light tube."
|
||||
|
||||
@@ -1,34 +1,66 @@
|
||||
// Slime limbs.
|
||||
/obj/item/organ/external/chest/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/groin/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/arm/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/arm/right/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/leg/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/leg/right/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/foot/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/foot/right/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/hand/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/hand/right/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
/obj/item/organ/external/head/unbreakable
|
||||
cannot_break = 1
|
||||
cannot_break = TRUE
|
||||
|
||||
// Cannot dismember or break
|
||||
/obj/item/organ/external/chest/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/groin/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/arm/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/arm/right/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/leg/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/leg/right/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/foot/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/foot/right/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/hand/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/hand/right/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
|
||||
/obj/item/organ/external/head/unbreakable/sturdy
|
||||
cannot_amputate = TRUE
|
||||
Reference in New Issue
Block a user