mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 13:37:58 +01:00
Merge remote-tracking branch 'upstream/master' into universal-damage
# Conflicts: # code/modules/clothing/suits/labcoat.dm # code/modules/clothing/under/miscellaneous.dm # code/modules/mob/living/carbon/human/species/golem.dm # code/modules/mob/living/simple_animal/bot/ed209bot.dm
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
//can't unequip since it can't equip anything
|
||||
/mob/living/carbon/alien/larva/unEquip(obj/item/W as obj)
|
||||
/mob/living/carbon/alien/larva/unEquip(obj/item/W as obj, force)
|
||||
return
|
||||
@@ -610,7 +610,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/unEquip(obj/item/I) //THIS PROC DID NOT CALL ..()
|
||||
/mob/living/carbon/unEquip(obj/item/I, force) //THIS PROC DID NOT CALL ..()
|
||||
. = ..() //Sets the default return value to what the parent returns.
|
||||
if(!. || !I) //We don't want to set anything to null if the parent returned 0.
|
||||
return
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -464,7 +464,7 @@ emp_act
|
||||
else if(I)
|
||||
if(((throwingdatum ? throwingdatum.speed : I.throw_speed) >= EMBED_THROWSPEED_THRESHOLD) || I.embedded_ignore_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
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
if(istype(O) && O.owner == src)
|
||||
. = 0 // keep a good grip on your heart
|
||||
|
||||
/mob/living/carbon/human/unEquip(obj/item/I)
|
||||
/mob/living/carbon/human/unEquip(obj/item/I, force)
|
||||
. = ..() //See mob.dm for an explanation on this and some rage about people copypasting instead of calling ..() like they should.
|
||||
if(!. || !I)
|
||||
return
|
||||
@@ -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
|
||||
@@ -572,5 +432,3 @@
|
||||
/mob/living/carbon/human/proc/delete_equipment()
|
||||
for(var/slot in get_all_slots())//order matters, dependant slots go first
|
||||
qdel(slot)
|
||||
for(var/obj/item/I in l_hand, r_hand)
|
||||
qdel(I)
|
||||
|
||||
@@ -991,7 +991,7 @@
|
||||
/mob/living/carbon/human/proc/handle_decay()
|
||||
var/decaytime = world.time - timeofdeath
|
||||
|
||||
if(isSynthetic())
|
||||
if(NO_DECAY in dna.species.species_traits)
|
||||
return
|
||||
|
||||
if(reagents.has_reagent("formaldehyde")) //embalming fluid stops decay
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \
|
||||
water and other radiation."
|
||||
|
||||
species_traits = list(IS_PLANT)
|
||||
species_traits = list(IS_PLANT, NO_GERMS, NO_DECAY)
|
||||
clothing_flags = HAS_SOCKS
|
||||
default_hair_colour = "#000000"
|
||||
has_gender = FALSE
|
||||
|
||||
@@ -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"
|
||||
@@ -714,59 +740,4 @@
|
||||
H.mind.miming = TRUE
|
||||
|
||||
/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, fire = 100, acid = 100)
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/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, fire = 100, acid = 100)
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/clothing/shoes/golem
|
||||
name = "golem's feet"
|
||||
desc = "sturdy golem feet"
|
||||
icon_state = "golem"
|
||||
item_state = "golem"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
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"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
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
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
flags = ABSTRACT | NODROP
|
||||
attack_sound = null
|
||||
@@ -21,7 +21,7 @@
|
||||
clone_mod = 0
|
||||
death_message = "gives one shrill beep before falling limp, their monitor flashing blue before completely shutting off..."
|
||||
|
||||
species_traits = list(IS_WHITELISTED, NO_BREATHE, NO_SCAN, NO_INTORGANS, NO_PAIN, NO_DNA, RADIMMUNE, VIRUSIMMUNE, NOTRANSSTING)
|
||||
species_traits = list(IS_WHITELISTED, NO_BREATHE, NO_SCAN, NO_INTORGANS, NO_PAIN, NO_DNA, RADIMMUNE, VIRUSIMMUNE, NO_GERMS, NO_DECAY, NOTRANSSTING) //Computers that don't decay? What a lie!
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
|
||||
bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY | ALL_RPARTS
|
||||
dietflags = 0 //IPCs can't eat, so no diet
|
||||
|
||||
@@ -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!",
|
||||
|
||||
@@ -19,22 +19,17 @@
|
||||
|
||||
brute_mod = 1.2 //20% more brute damage. Fragile bird bones.
|
||||
|
||||
warning_low_pressure = 50
|
||||
hazard_low_pressure = 0
|
||||
|
||||
cold_level_1 = 80
|
||||
cold_level_2 = 50
|
||||
cold_level_3 = 0
|
||||
|
||||
breathid = "n2"
|
||||
|
||||
eyes = "vox_eyes_s"
|
||||
|
||||
species_traits = list(NO_SCAN, IS_WHITELISTED, NOTRANSSTING)
|
||||
species_traits = list(NO_SCAN, NO_GERMS, NO_DECAY, IS_WHITELISTED, NOTRANSSTING)
|
||||
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS //Species-fitted 'em all.
|
||||
dietflags = DIET_OMNI
|
||||
bodyflags = HAS_ICON_SKIN_TONE | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_BODY_MARKINGS | HAS_TAIL_MARKINGS
|
||||
|
||||
silent_steps = TRUE
|
||||
|
||||
blood_color = "#2299FC"
|
||||
flesh_color = "#808D11"
|
||||
//Default styles for created mobs.
|
||||
@@ -43,7 +38,7 @@
|
||||
default_hair_colour = "#614f19" //R: 97, G: 79, B: 25
|
||||
butt_sprite = "vox"
|
||||
|
||||
reagent_tag = PROCESS_ORG
|
||||
reagent_tag = PROCESS_ORG | PROCESS_SYN
|
||||
scream_verb = "shrieks"
|
||||
male_scream_sound = 'sound/voice/shriek1.ogg'
|
||||
female_scream_sound = 'sound/voice/shriek1.ogg'
|
||||
@@ -66,10 +61,9 @@
|
||||
"lungs" = /obj/item/organ/internal/lungs/vox,
|
||||
"liver" = /obj/item/organ/internal/liver/vox,
|
||||
"kidneys" = /obj/item/organ/internal/kidneys/vox,
|
||||
"brain" = /obj/item/organ/internal/brain/vox,
|
||||
"cortical stack" = /obj/item/organ/internal/brain/vox,
|
||||
"appendix" = /obj/item/organ/internal/appendix,
|
||||
"eyes" = /obj/item/organ/internal/eyes/vox, //Default darksight of 2.
|
||||
"stack" = /obj/item/organ/internal/stack //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used
|
||||
) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ.
|
||||
|
||||
suicide_messages = list(
|
||||
@@ -172,7 +166,7 @@
|
||||
|
||||
eyes = "blank_eyes"
|
||||
|
||||
species_traits = list(NO_SCAN, NO_BLOOD, NO_PAIN, IS_WHITELISTED)
|
||||
species_traits = list(NO_SCAN, NO_GERMS, NO_DECAY, NO_BLOOD, NO_PAIN, IS_WHITELISTED)
|
||||
clothing_flags = 0 //IDK if you've ever seen underwear on an Armalis, but it ain't pretty.
|
||||
bodyflags = HAS_TAIL
|
||||
dies_at_threshold = TRUE
|
||||
@@ -190,9 +184,8 @@
|
||||
"lungs" = /obj/item/organ/internal/lungs/vox,
|
||||
"liver" = /obj/item/organ/internal/liver,
|
||||
"kidneys" = /obj/item/organ/internal/kidneys,
|
||||
"brain" = /obj/item/organ/internal/brain,
|
||||
"cortical stack" = /obj/item/organ/internal/brain/vox,
|
||||
"eyes" = /obj/item/organ/internal/eyes, //Default darksight of 2.
|
||||
"stack" = /obj/item/organ/internal/stack //Not the same as the cortical stack implant Vox Raiders spawn with. The cortical stack implant is used
|
||||
) //for determining the success of the heist game-mode's 'leave nobody behind' objective, while this is just an organ.
|
||||
|
||||
suicide_messages = list(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
Feedon(Food)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/slime/unEquip(obj/item/W as obj)
|
||||
/mob/living/carbon/slime/unEquip(obj/item/W as obj, force)
|
||||
return
|
||||
|
||||
/mob/living/carbon/slime/attack_ui(slot)
|
||||
|
||||
@@ -348,6 +348,6 @@
|
||||
return
|
||||
density = 0 //this is reset every canmove update otherwise
|
||||
|
||||
/mob/living/simple_animal/drone/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0)
|
||||
/mob/living/simple_animal/drone/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0)
|
||||
if(affect_silicon)
|
||||
return ..()
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/unEquip(obj/item/I)
|
||||
/mob/living/silicon/robot/unEquip(obj/item/I, force)
|
||||
if(I == module_active)
|
||||
uneq_active(I)
|
||||
return ..()
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
return 2
|
||||
|
||||
/mob/living/silicon/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
|
||||
/mob/living/silicon/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0, var/negate_armor = 0)
|
||||
return 0//The only effect that can hit them atm is flashes and they still directly edit so this works for now
|
||||
/*
|
||||
if(!effect || (blocked >= 2)) return 0
|
||||
|
||||
@@ -551,7 +551,7 @@
|
||||
retaliate(H)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/RangedAttack(atom/A)
|
||||
/mob/living/simple_animal/bot/ed209/RangedAttack(atom/A, params)
|
||||
if(!on)
|
||||
return
|
||||
shootAt(A)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
ventcrawler = 2
|
||||
mob_size = MOB_SIZE_TINY
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 0)
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/butterfly/New()
|
||||
..()
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
collar_type = "cat"
|
||||
var/turns_since_scan = 0
|
||||
var/mob/living/simple_animal/mouse/movement_target
|
||||
@@ -37,7 +37,7 @@
|
||||
icon_dead = "cat_dead"
|
||||
icon_resting = "cat_rest"
|
||||
gender = FEMALE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
unique_pet = TRUE
|
||||
var/list/family = list()
|
||||
var/memory_saved = 0
|
||||
@@ -190,6 +190,8 @@
|
||||
|
||||
/mob/living/simple_animal/pet/cat/Proc
|
||||
name = "Proc"
|
||||
gender = MALE
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
unique_pet = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/cat/kitten
|
||||
@@ -215,7 +217,7 @@
|
||||
gender = FEMALE
|
||||
mutations = list(BREATHLESS)
|
||||
faction = list("syndicate")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
eats_mice = 0
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoos"
|
||||
response_harm = "splats"
|
||||
density = 0
|
||||
ventcrawler = 2
|
||||
gold_core_spawnable = 2
|
||||
density = FALSE
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
var/squish_chance = 50
|
||||
loot = list(/obj/effect/decal/cleanable/insectguts)
|
||||
del_on_death = 1
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
ventcrawler = 2
|
||||
can_hide = 1
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/crab/handle_automated_movement()
|
||||
//CRAB movement
|
||||
@@ -39,239 +39,17 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stomps"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
unique_pet = TRUE
|
||||
|
||||
//LOOK AT THIS - ..()??
|
||||
/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
|
||||
if(istype(O, /obj/item/wirecutters))
|
||||
if(prob(50))
|
||||
to_chat(user, "<span class='boldwarning'>This kills the crab.</span>")
|
||||
health -= 20
|
||||
death()
|
||||
else
|
||||
GetMad()
|
||||
get
|
||||
if(istype(O, /obj/item/stack/medical))
|
||||
if(stat != DEAD)
|
||||
var/obj/item/stack/medical/MED = O
|
||||
if(health < maxHealth)
|
||||
if(MED.amount >= 1)
|
||||
health = min(maxHealth, health + MED.heal_brute)
|
||||
MED.amount -= 1
|
||||
if(MED.amount <= 0)
|
||||
qdel(MED)
|
||||
user.visible_message("<span class='notice'>[user] applies the [MED] on [src]</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>this [src] is dead, medical items won't bring it back to life.</span>")
|
||||
else
|
||||
if(O.force)
|
||||
health -= O.force
|
||||
visible_message("<span class='boldwarning'>[src] has been attacked with the [O] by [user]. </span>")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] gently taps [src] with the [O]. </span>","<span class='warning'>This weapon is ineffective, it does no damage.</span>")
|
||||
|
||||
/mob/living/simple_animal/crab/Topic(href, href_list)
|
||||
if(usr.stat) return
|
||||
|
||||
//Removing from inventory
|
||||
if(href_list["remove_inv"])
|
||||
if(get_dist(src,usr) > 1 || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
|
||||
return
|
||||
var/remove_from = href_list["remove_inv"]
|
||||
switch(remove_from)
|
||||
if("head")
|
||||
if(inventory_head)
|
||||
name = real_name
|
||||
desc = initial(desc)
|
||||
speak_emote = list("clicks")
|
||||
emote_hear = list("clicks")
|
||||
emote_see = list("clacks")
|
||||
desc = "Free crabs!"
|
||||
src.sd_set_light(0)
|
||||
inventory_head.loc = src.loc
|
||||
inventory_head = null
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>There is nothing to remove from its [remove_from].</span>")
|
||||
return
|
||||
if("mask")
|
||||
if(inventory_mask)
|
||||
inventory_mask.loc = src.loc
|
||||
inventory_mask = null
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>There is nothing to remove from its [remove_from].</span>")
|
||||
return
|
||||
|
||||
//show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
|
||||
|
||||
//Adding things to inventory
|
||||
else if(href_list["add_inv"])
|
||||
if(get_dist(src,usr) > 1 || !(ishuman(usr) || isrobot(usr) || isalienadult(usr)))
|
||||
return
|
||||
var/add_to = href_list["add_inv"]
|
||||
if(!usr.get_active_hand())
|
||||
to_chat(usr, "<span class='warning'>You have nothing in your hand to put on its [add_to].</span>")
|
||||
return
|
||||
switch(add_to)
|
||||
if("head")
|
||||
if(inventory_head)
|
||||
to_chat(usr, "<span class='warning'>It's is already wearing something.</span>")
|
||||
return
|
||||
else
|
||||
var/obj/item/item_to_add = usr.get_active_hand()
|
||||
if(!item_to_add)
|
||||
return
|
||||
|
||||
//Corgis are supposed to be simpler, so only a select few objects can actually be put
|
||||
//to be compatible with them. The objects are below.
|
||||
//Many hats added, Some will probably be removed, just want to see which ones are popular.
|
||||
|
||||
var/list/allowed_types = list(
|
||||
/obj/item/clothing/head/helmet,
|
||||
/obj/item/clothing/glasses/sunglasses,
|
||||
/obj/item/clothing/head/caphat,
|
||||
/obj/item/clothing/head/collectable/captain,
|
||||
/obj/item/clothing/head/that,
|
||||
/obj/item/clothing/head/that,
|
||||
/obj/item/clothing/head/kitty,
|
||||
/obj/item/clothing/head/collectable/kitty,
|
||||
/obj/item/clothing/head/rabbitears,
|
||||
/obj/item/clothing/head/collectable/rabbitears,
|
||||
/obj/item/clothing/head/beret,
|
||||
/obj/item/clothing/head/collectable/beret,
|
||||
/obj/item/clothing/head/det_hat,
|
||||
/obj/item/clothing/head/nursehat,
|
||||
/obj/item/clothing/head/pirate,
|
||||
/obj/item/clothing/head/collectable/pirate,
|
||||
/obj/item/clothing/head/chefhat,
|
||||
/obj/item/clothing/head/collectable/chef,
|
||||
/obj/item/clothing/head/collectable/police,
|
||||
/obj/item/clothing/head/wizard/fake,
|
||||
/obj/item/clothing/head/wizard,
|
||||
/obj/item/clothing/head/collectable/wizard,
|
||||
/obj/item/clothing/head/hardhat,
|
||||
/obj/item/clothing/head/collectable/hardhat,
|
||||
/obj/item/clothing/head/hardhat/white,
|
||||
/obj/item/bedsheet,
|
||||
/obj/item/clothing/head/soft
|
||||
)
|
||||
|
||||
if( ! ( item_to_add.type in allowed_types ) )
|
||||
to_chat(usr, "<span class='warning'>It doesn't seem too keen on wearing that item.</span>")
|
||||
return
|
||||
|
||||
usr.drop_item()
|
||||
item_to_add.loc = src
|
||||
src.inventory_head = item_to_add
|
||||
regenerate_icons()
|
||||
|
||||
//Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed.
|
||||
|
||||
|
||||
switch(inventory_head && inventory_head.type)
|
||||
if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
|
||||
name = "Captain [real_name]"
|
||||
desc = "Probably better than the last captain."
|
||||
if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
|
||||
name = "Runtime"
|
||||
emote_see = list("coughs up a furball", "stretches")
|
||||
emote_hear = list("purrs")
|
||||
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
|
||||
desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
|
||||
if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
|
||||
name = "Hoppy"
|
||||
emote_see = list("twitches its nose", "hops around a bit")
|
||||
desc = "This is hoppy. It's a corgi-...urmm... bunny rabbit"
|
||||
if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
|
||||
name = "Yann"
|
||||
desc = "Mon dieu! C'est un chien!"
|
||||
speak = list("le woof!", "le bark!", "JAPPE!!")
|
||||
emote_see = list("cowers in fear", "surrenders", "plays dead","looks as though there is a wall in front of /him")
|
||||
if(/obj/item/clothing/head/det_hat)
|
||||
name = "Detective [real_name]"
|
||||
desc = "[name] sees through your lies..."
|
||||
emote_see = list("investigates the area","sniffs around for clues","searches for scooby snacks")
|
||||
if(/obj/item/clothing/head/nursehat)
|
||||
name = "Nurse [real_name]"
|
||||
desc = "[name] needs 100cc of beef jerky...STAT!"
|
||||
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
|
||||
name = "'[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]'"
|
||||
desc = "Yaarghh!! Thar' be a scurvy dog!"
|
||||
emote_see = list("hunts for treasure","stares coldly...","gnashes his tiny corgi teeth")
|
||||
emote_hear = list("growls ferociously", "snarls")
|
||||
speak = list("Arrrrgh!!","Grrrrrr!")
|
||||
if(/obj/item/clothing/head/collectable/police)
|
||||
name = "Officer [real_name]"
|
||||
emote_see = list("drools","looks for donuts")
|
||||
desc = "Stop right there criminal scum!"
|
||||
if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
|
||||
name = "Grandwizard [real_name]"
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
|
||||
if(/obj/item/bedsheet)
|
||||
name = "\improper Ghost"
|
||||
speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
|
||||
emote_see = list("stumbles around", "shivers")
|
||||
emote_hear = list("howls","groans")
|
||||
desc = "Spooky!"
|
||||
if(/obj/item/clothing/head/soft)
|
||||
name = "Corgi Tech [real_name]"
|
||||
speak = list("Needs a stamp!", "Request DENIED!", "Fill these out in triplicate!")
|
||||
desc = "The reason your yellow gloves have chew-marks."
|
||||
|
||||
if("mask")
|
||||
if(inventory_mask)
|
||||
to_chat(usr, "<span class='warning'>It's already wearing something.</span>")
|
||||
return
|
||||
else
|
||||
var/obj/item/item_to_add = usr.get_active_hand()
|
||||
if(!item_to_add)
|
||||
return
|
||||
|
||||
//Corgis are supposed to be simpler, so only a select few objects can actually be put
|
||||
//to be compatible with them. The objects are below.
|
||||
|
||||
var/list/allowed_types = list(
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
/obj/item/radio
|
||||
)
|
||||
|
||||
if( ! ( item_to_add.type in allowed_types ) )
|
||||
to_chat(usr, "<span class='warning'>This object won't fit.</span>")
|
||||
return
|
||||
|
||||
usr.drop_item()
|
||||
item_to_add.loc = src
|
||||
src.inventory_mask = item_to_add
|
||||
regenerate_icons()
|
||||
|
||||
//show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
|
||||
else
|
||||
..()
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/crab/proc/GetMad()
|
||||
name = "MEGAMADCRAB"
|
||||
real_name = "MEGAMADCRAB"
|
||||
desc = "OH NO YOU DUN IT NOW."
|
||||
icon = 'icons/mob/animal.dmi'
|
||||
/mob/living/simple_animal/crab/evil
|
||||
name = "Evil Crab"
|
||||
real_name = "Evil Crab"
|
||||
desc = "Unnerving, isn't it? It has to be planning something nefarious..."
|
||||
icon_state = "evilcrab"
|
||||
icon_living = "evilcrab"
|
||||
icon_dead = "evilcrab_dead"
|
||||
speak_emote = list("clicks")
|
||||
emote_hear = list("clicks with fury", "clicks angrily")
|
||||
emote_see = list("clacks")
|
||||
speak_chance = 1
|
||||
universal_speak = 1 //So that the entire station may know its fury.
|
||||
turns_per_move = 15//Gotta go fast
|
||||
speed = -1//Gotta go fast when controlled by a player.
|
||||
maxHealth = 100//So they don't die as quickly
|
||||
health = 100
|
||||
melee_damage_lower = 3
|
||||
melee_damage_upper = 10//Kill them. Kill them all
|
||||
|
||||
/*if(inventory_head)//Drops inventory so it doesn't have to be dealt with
|
||||
inventory_head.loc = src.loc
|
||||
inventory_head = null
|
||||
if(inventory_mask)
|
||||
inventory_mask.loc = src.loc
|
||||
inventory_mask = null*/ //Currently does not have the ability to equip anything.
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "stomps"
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
@@ -15,4 +15,4 @@
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
@@ -16,7 +16,7 @@
|
||||
see_in_dark = 5
|
||||
speak_chance = 1
|
||||
turns_per_move = 10
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
var/bark_sound = list('sound/creatures/dog_bark1.ogg','sound/creatures/dog_bark2.ogg') //Used in emote.
|
||||
var/yelp_sound = 'sound/creatures/dog_yelp.ogg' //Used on death.
|
||||
var/last_eaten = 0
|
||||
@@ -100,7 +100,6 @@
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1)
|
||||
childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5)
|
||||
animal_species = /mob/living/simple_animal/pet/dog
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
collar_type = "corgi"
|
||||
var/obj/item/inventory_head
|
||||
var/obj/item/inventory_back
|
||||
@@ -417,7 +416,7 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "bops"
|
||||
response_harm = "kicks"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
unique_pet = TRUE
|
||||
var/age = 0
|
||||
var/record_age = 1
|
||||
@@ -568,7 +567,7 @@
|
||||
icon_living = "narsian"
|
||||
icon_dead = "narsian_dead"
|
||||
faction = list("neutral", "cult")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
nofur = TRUE
|
||||
unique_pet = TRUE
|
||||
|
||||
@@ -637,7 +636,7 @@
|
||||
real_name = "Lisa"
|
||||
gender = FEMALE
|
||||
desc = "It's a corgi with a cute pink bow."
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
unique_pet = TRUE
|
||||
icon_state = "lisa"
|
||||
icon_living = "lisa"
|
||||
@@ -753,7 +752,6 @@
|
||||
icon_living = "pug"
|
||||
icon_dead = "pug_dead"
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/pug = 3)
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
collar_type = "pug"
|
||||
|
||||
/mob/living/simple_animal/pet/dog/pug/handle_automated_movement()
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
var/obj/item/udder/udder = null
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
mob_size = MOB_SIZE_TINY
|
||||
can_hide = 1
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/chick/New()
|
||||
..()
|
||||
@@ -247,7 +247,7 @@ var/global/chicken_count = 0
|
||||
var/list/feedMessages = list("It clucks happily.","It clucks happily.")
|
||||
var/list/layMessage = EGG_LAYING_MESSAGES
|
||||
var/list/validColors = list("brown","black","white")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/chicken/New()
|
||||
..()
|
||||
@@ -327,7 +327,7 @@ var/global/chicken_count = 0
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
|
||||
/mob/living/simple_animal/turkey
|
||||
@@ -351,7 +351,7 @@ var/global/chicken_count = 0
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/goose
|
||||
name = "goose"
|
||||
@@ -374,7 +374,7 @@ var/global/chicken_count = 0
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/seal
|
||||
name = "seal"
|
||||
@@ -397,7 +397,7 @@ var/global/chicken_count = 0
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
|
||||
/mob/living/simple_animal/walrus
|
||||
@@ -421,7 +421,7 @@ var/global/chicken_count = 0
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
blood_volume = BLOOD_VOLUME_NORMAL
|
||||
|
||||
/obj/item/udder
|
||||
|
||||
@@ -17,14 +17,13 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
|
||||
//Captain fox
|
||||
/mob/living/simple_animal/pet/dog/fox/Renault
|
||||
name = "Renault"
|
||||
desc = "Renault, the Captain's trustworthy fox. I wonder what it says?"
|
||||
unique_pet = TRUE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
//Syndi fox
|
||||
/mob/living/simple_animal/pet/dog/fox/Syndifox
|
||||
@@ -37,7 +36,7 @@
|
||||
mutations = list(BREATHLESS)
|
||||
faction = list("syndicate")
|
||||
unique_pet = TRUE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
melee_damage_lower = 10
|
||||
|
||||
@@ -22,4 +22,4 @@
|
||||
can_hide = 1
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 1)
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
can_hide = 1
|
||||
holder_type = /obj/item/holder/mouse
|
||||
can_collar = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
var/chew_probability = 1
|
||||
|
||||
/mob/living/simple_animal/mouse/Initialize(mapload)
|
||||
@@ -169,7 +169,7 @@
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "splats"
|
||||
unique_pet = TRUE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
|
||||
/mob/living/simple_animal/mouse/blobinfected
|
||||
@@ -177,7 +177,7 @@
|
||||
health = 100
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
var/cycles_alive = 0
|
||||
var/cycles_limit = 30
|
||||
var/has_burst = FALSE
|
||||
@@ -231,6 +231,6 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "stamps on"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
can_collar = 0
|
||||
butcher_results = list(/obj/item/stack/sheet/metal = 1)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
icon_living = "penguin"
|
||||
icon_dead = "penguin_dead"
|
||||
butcher_results = list()
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
/mob/living/simple_animal/pet/penguin/eldrich
|
||||
name = "Albino penguin"
|
||||
@@ -51,6 +51,8 @@
|
||||
desc = "Shameful of all he surveys."
|
||||
icon_state = "penguin_shamebrero"
|
||||
icon_living = "penguin_shamebrero"
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
unique_pet = TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/penguin/baby
|
||||
speak = list("gah", "noot noot", "noot!", "noot", "squeee!", "noo!")
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "kicks"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
health = 50
|
||||
@@ -29,4 +29,4 @@
|
||||
name = "Paperwork"
|
||||
desc = "Cargo's pet sloth. About as useful as the rest of the techs."
|
||||
unique_pet = TRUE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
@@ -6,13 +6,14 @@
|
||||
icon_living = "alienh_running"
|
||||
icon_dead = "alienh_dead"
|
||||
icon_gib = "syndicate_gib"
|
||||
response_help = "pokes the"
|
||||
response_disarm = "shoves the"
|
||||
response_harm = "hits the"
|
||||
gender = FEMALE
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
speed = 0
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/xenomeat = 3)
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/xenomeat = 3, /obj/item/stack/sheet/animalhide/xeno = 1)
|
||||
maxHealth = 125
|
||||
health = 125
|
||||
harm_intent_damage = 5
|
||||
obj_damage = 60
|
||||
melee_damage_lower = 25
|
||||
@@ -29,7 +30,7 @@
|
||||
minbodytemp = 0
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
death_sound = 'sound/voice/hiss6.ogg'
|
||||
deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..."
|
||||
|
||||
@@ -39,8 +40,6 @@
|
||||
icon_state = "aliend_running"
|
||||
icon_living = "aliend_running"
|
||||
icon_dead = "aliend_dead"
|
||||
health = 60
|
||||
maxHealth = 60
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
var/plant_cooldown = 30
|
||||
@@ -60,8 +59,8 @@
|
||||
icon_state = "aliens_running"
|
||||
icon_living = "aliens_running"
|
||||
icon_dead = "aliens_dead"
|
||||
health = 120
|
||||
maxHealth = 120
|
||||
health = 150
|
||||
maxHealth = 150
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
ranged = 1
|
||||
@@ -84,6 +83,7 @@
|
||||
retreat_distance = 5
|
||||
minimum_distance = 5
|
||||
move_to_delay = 4
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/xenomeat = 4, /obj/item/stack/sheet/animalhide/xeno = 1)
|
||||
projectiletype = /obj/item/projectile/neurotox
|
||||
projectilesound = 'sound/weapons/pierce.ogg'
|
||||
status_flags = 0
|
||||
@@ -106,7 +106,7 @@
|
||||
LayEggs()
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/proc/SpreadPlants()
|
||||
if(!isturf(loc) || istype(loc, /turf/space))
|
||||
if(!isturf(loc) || isspaceturf(loc))
|
||||
return
|
||||
if(locate(/obj/structure/alien/weeds/node) in get_turf(src))
|
||||
return
|
||||
@@ -114,7 +114,7 @@
|
||||
new /obj/structure/alien/weeds/node(loc)
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/proc/LayEggs()
|
||||
if(!isturf(loc) || istype(loc, /turf/space))
|
||||
if(!isturf(loc) || isspaceturf(loc))
|
||||
return
|
||||
if(locate(/obj/structure/alien/egg) in get_turf(src))
|
||||
return
|
||||
@@ -130,8 +130,9 @@
|
||||
move_to_delay = 4
|
||||
maxHealth = 400
|
||||
health = 400
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/xenomeat = 10, /obj/item/stack/sheet/animalhide/xeno = 2)
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
/obj/item/projectile/neurotox
|
||||
name = "neurotoxin"
|
||||
@@ -145,14 +146,14 @@
|
||||
a_intent = INTENT_HELP
|
||||
friendly = "caresses"
|
||||
obj_damage = 0
|
||||
environment_smash = 0
|
||||
environment_smash = ENVIRONMENT_SMASH_NONE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
icon_state = "maid"
|
||||
icon_living = "maid"
|
||||
icon_dead = "maid_dead"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //no fun allowed
|
||||
|
||||
/mob/living/simple_animal/hostile/alien/maid/AttackingTarget()
|
||||
if(istype(target, /atom/movable))
|
||||
if(ismovableatom(target))
|
||||
if(istype(target, /obj/effect/decal/cleanable))
|
||||
visible_message("<span class='notice'>\The [src] cleans up \the [target].</span>")
|
||||
qdel(target)
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
faction = list("scarybat")
|
||||
var/mob/living/owner
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
/mob/living/simple_animal/hostile/scarybat/New(loc, mob/living/L as mob)
|
||||
..()
|
||||
@@ -73,4 +73,4 @@
|
||||
pass_flags = PASSTABLE
|
||||
universal_speak = 1
|
||||
universal_understand = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //badmin only
|
||||
gold_core_spawnable = NO_SPAWN //badmin only
|
||||
@@ -32,7 +32,7 @@
|
||||
minbodytemp = 0
|
||||
|
||||
faction = list("russian")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
//SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!!
|
||||
/mob/living/simple_animal/hostile/bear/Hudson
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
density = FALSE
|
||||
mob_size = MOB_SIZE_TINY
|
||||
flying = TRUE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
search_objects = TRUE //have to find those plant trays!
|
||||
|
||||
//Spaceborn beings don't get hurt by space
|
||||
|
||||
@@ -1,20 +1,25 @@
|
||||
#define REGENERATION_DELAY 60 // After taking damage, how long it takes for automatic regeneration to begin for megacarps (ty robustin!)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp
|
||||
name = "space carp"
|
||||
desc = "A ferocious, fang-bearing creature that resembles a fish."
|
||||
icon = 'icons/mob/carp.dmi'
|
||||
icon_state = "carp"
|
||||
icon_state = "base"
|
||||
icon_living = "base"
|
||||
icon_dead = "base_dead"
|
||||
icon_gib = "carp_gib"
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2)
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "hits"
|
||||
emote_taunt = list("gnashes")
|
||||
taunt_chance = 30
|
||||
speed = 0
|
||||
maxHealth = 25
|
||||
health = 25
|
||||
|
||||
harm_intent_damage = 8
|
||||
obj_damage = 50
|
||||
melee_damage_lower = 15
|
||||
@@ -27,31 +32,68 @@
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
|
||||
faction = list("carp")
|
||||
flying = 1
|
||||
flying = TRUE
|
||||
pressure_resistance = 200
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
var/carp_color = "carp" //holder for icon set
|
||||
var/list/icon_sets = list("carp", "blue", "yellow", "grape", "rust", "teal", "purple")
|
||||
var/random_color = TRUE //if the carp uses random coloring
|
||||
var/rarechance = 1 //chance for rare color variant
|
||||
|
||||
var/static/list/carp_colors = list(\
|
||||
"lightpurple" = "#c3b9f1", \
|
||||
"lightpink" = "#da77a8", \
|
||||
"green" = "#70ff25", \
|
||||
"grape" = "#df0afb", \
|
||||
"swamp" = "#e5e75a", \
|
||||
"turquoise" = "#04e1ed", \
|
||||
"brown" = "#ca805a", \
|
||||
"teal" = "#20e28e", \
|
||||
"lightblue" = "#4d88cc", \
|
||||
"rusty" = "#dd5f34", \
|
||||
"beige" = "#bbaeaf", \
|
||||
"yellow" = "#f3ca4a", \
|
||||
"blue" = "#09bae1", \
|
||||
"palegreen" = "#7ef099", \
|
||||
)
|
||||
var/static/list/carp_colors_rare = list(\
|
||||
"silver" = "#fdfbf3", \
|
||||
)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/Initialize(mapload)
|
||||
. = ..()
|
||||
carp_randomify()
|
||||
carp_randomify(rarechance)
|
||||
update_icons()
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/proc/carp_randomify()
|
||||
if(prob(1))
|
||||
carp_color = pick("white", "black")
|
||||
else
|
||||
carp_color = pick(icon_sets)
|
||||
icon_state = "[carp_color]"
|
||||
icon_living = "[carp_color]"
|
||||
icon_dead = "[carp_color]_dead"
|
||||
/mob/living/simple_animal/hostile/carp/proc/carp_randomify(rarechance)
|
||||
if(random_color)
|
||||
var/our_color
|
||||
if(prob(rarechance))
|
||||
our_color = pick(carp_colors_rare)
|
||||
add_atom_colour(carp_colors_rare[our_color], FIXED_COLOUR_PRIORITY)
|
||||
else
|
||||
our_color = pick(carp_colors)
|
||||
add_atom_colour(carp_colors[our_color], FIXED_COLOUR_PRIORITY)
|
||||
add_carp_overlay()
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1 //No drifting in space for space carp! //original comments do not steal
|
||||
/mob/living/simple_animal/hostile/carp/proc/add_carp_overlay()
|
||||
if(!random_color)
|
||||
return
|
||||
cut_overlays()
|
||||
var/mutable_appearance/base_overlay = mutable_appearance(icon, "base_mouth")
|
||||
base_overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(base_overlay)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/proc/add_dead_carp_overlay()
|
||||
if(!random_color)
|
||||
return
|
||||
cut_overlays()
|
||||
var/mutable_appearance/base_dead_overlay = mutable_appearance(icon, "base_dead_mouth")
|
||||
base_dead_overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(base_dead_overlay)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/Process_Spacemove(movement_dir = 0)
|
||||
return TRUE //No drifting in space for space carp! //original comments do not steal
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/AttackingTarget()
|
||||
. = ..()
|
||||
@@ -59,15 +101,34 @@
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.adjustStaminaLoss(8)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/death(gibbed)
|
||||
. = ..()
|
||||
cut_overlays()
|
||||
if(!random_color || gibbed)
|
||||
return
|
||||
add_dead_carp_overlay()
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/revive()
|
||||
..()
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/regenerate_icons()
|
||||
cut_overlays()
|
||||
if(!random_color)
|
||||
return
|
||||
if(stat != DEAD)
|
||||
add_carp_overlay()
|
||||
else
|
||||
add_dead_carp_overlay()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/holocarp
|
||||
icon_state = "holocarp"
|
||||
icon_living = "holocarp"
|
||||
maxbodytemp = INFINITY
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
del_on_death = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/holocarp/carp_randomify()
|
||||
return
|
||||
random_color = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/megacarp
|
||||
icon = 'icons/mob/alienqueen.dmi'
|
||||
@@ -77,13 +138,34 @@
|
||||
icon_living = "megacarp"
|
||||
icon_dead = "megacarp_dead"
|
||||
icon_gib = "megacarp_gib"
|
||||
maxHealth = 65
|
||||
health = 65
|
||||
maxHealth = 20
|
||||
health = 20
|
||||
pixel_x = -16
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
random_color = FALSE
|
||||
|
||||
obj_damage = 80
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/megacarp/carp_randomify()
|
||||
return
|
||||
var/regen_cooldown = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/megacarp/Initialize()
|
||||
. = ..()
|
||||
name = "[pick(GLOB.megacarp_first_names)] [pick(GLOB.megacarp_last_names)]"
|
||||
melee_damage_lower += rand(2, 10)
|
||||
melee_damage_upper += rand(10, 20)
|
||||
maxHealth += rand(30, 60)
|
||||
move_to_delay = rand(3, 7)
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/megacarp/adjustHealth(amount, updating_health = TRUE)
|
||||
. = ..()
|
||||
if(.)
|
||||
regen_cooldown = world.time + REGENERATION_DELAY
|
||||
|
||||
/mob/living/simple_animal/hostile/carp/megacarp/Life()
|
||||
..()
|
||||
if(regen_cooldown < world.time)
|
||||
heal_overall_damage(4)
|
||||
|
||||
#undef REGENERATION_DELAY
|
||||
@@ -13,5 +13,5 @@
|
||||
attacktext = "chomps"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
faction = list("creature")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
see_in_dark = 8
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
ventcrawler = 0
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
minbodytemp = 0
|
||||
|
||||
faction = list("faithless")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
/mob/living/simple_animal/hostile/faithless/Process_Spacemove(var/movement_dir = 0)
|
||||
return 1
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
move_to_delay = 6
|
||||
attacktext = "bites"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
var/venom_per_bite = 0 // While the /poison/ type path remains as-is for consistency reasons, we're really talking about venom, not poison.
|
||||
var/busy = 0
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
attack_sound = 'sound/creatures/headcrab_attack.ogg'
|
||||
speak_emote = list("hisses")
|
||||
var/is_zombie = 0
|
||||
stat_attack = DEAD //so they continue to attack when they are on the ground.
|
||||
stat_attack = DEAD //so they continue to attack when they are on the ground.
|
||||
var/host_species = ""
|
||||
var/list/human_overlays = list()
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/update_icons()
|
||||
..()
|
||||
. = ..()
|
||||
if(is_zombie)
|
||||
overlays.Cut()
|
||||
overlays = human_overlays
|
||||
@@ -104,3 +104,69 @@
|
||||
else if(host_species == "Gray")
|
||||
I = image('icons/mob/headcrab.dmi', icon_state = "headcrabpod_gray")
|
||||
overlays += I
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/fast
|
||||
name = "fast headcrab"
|
||||
desc = "A fast parasitic creature that would like to connect with your brain stem."
|
||||
icon = 'icons/mob/headcrab.dmi'
|
||||
icon_state = "fast_headcrab"
|
||||
icon_living = "fast_headcrab"
|
||||
icon_dead = "fast_headcrab_dead"
|
||||
health = 30
|
||||
maxHealth = 30
|
||||
ranged_cooldown_time = 30
|
||||
jumpdistance = 8
|
||||
jumpspeed = 2
|
||||
speak_emote = list("screech")
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/fast/update_icons()
|
||||
. = ..()
|
||||
if(is_zombie)
|
||||
overlays.Cut()
|
||||
overlays = human_overlays
|
||||
var/image/I = image('icons/mob/headcrab.dmi', icon_state = "fast_headcrabpod")
|
||||
if(host_species == "Vox")
|
||||
I = image('icons/mob/headcrab.dmi', icon_state = "fast_headcrabpod_vox")
|
||||
else if(host_species == "Gray")
|
||||
I = image('icons/mob/headcrab.dmi', icon_state = "fast_headcrabpod_gray")
|
||||
overlays += I
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/fast/Zombify(mob/living/carbon/human/H)
|
||||
. = ..()
|
||||
speak = list('sound/creatures/fast_zombie_idle1.ogg','sound/creatures/fast_zombie_idle2.ogg','sound/creatures/fast_zombie_idle3.ogg')
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/poison
|
||||
name = "poison headcrab"
|
||||
desc = "A poison parasitic creature that would like to connect with your brain stem."
|
||||
icon = 'icons/mob/headcrab.dmi'
|
||||
icon_state = "poison_headcrab"
|
||||
icon_living = "poison_headcrab"
|
||||
icon_dead = "poison_headcrab_dead"
|
||||
health = 60
|
||||
maxHealth = 60
|
||||
ranged_cooldown_time = 50
|
||||
jumpdistance = 3
|
||||
jumpspeed = 1
|
||||
attack_sound = 'sound/creatures/ph_scream1.ogg'
|
||||
speak_emote = list("screech")
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/poison/update_icons()
|
||||
. = ..()
|
||||
if(is_zombie)
|
||||
overlays.Cut()
|
||||
overlays = human_overlays
|
||||
var/image/I = image('icons/mob/headcrab.dmi', icon_state = "poison_headcrabpod")
|
||||
if(host_species == "Vox")
|
||||
I = image('icons/mob/headcrab.dmi', icon_state = "poison_headcrabpod_vox")
|
||||
else if(host_species == "Gray")
|
||||
I = image('icons/mob/headcrab.dmi', icon_state = "poison_headcrabpod_gray")
|
||||
overlays += I
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/poison/AttackingTarget()
|
||||
. = ..()
|
||||
var/mob/living/carbon/C = target
|
||||
if(C.can_inject(null, 0, "head", 0))
|
||||
C.reagents.add_reagent("lsd", 5)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
icon_dead = "hellhound_dead"
|
||||
icon_resting = "hellhound_rest"
|
||||
mutations = list(BREATHLESS)
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
@@ -126,4 +126,4 @@
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 30
|
||||
environment_smash = 2
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
speak_emote = list("states")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
loot = list(/obj/effect/decal/cleanable/blood/gibs/robot)
|
||||
deathmessage = "blows apart!"
|
||||
del_on_death = 1
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
layer = 3.1 //so they can stay hidde under the /obj/structure/bush
|
||||
var/stalk_tick_delay = 3
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
/mob/living/simple_animal/hostile/panther/AttackingTarget()
|
||||
. = ..()
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
layer = 3.1 //so they can stay hidde under the /obj/structure/bush
|
||||
var/stalk_tick_delay = 3
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
/mob/living/simple_animal/hostile/snake/AttackingTarget()
|
||||
. =..()
|
||||
|
||||
@@ -23,4 +23,4 @@
|
||||
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 150
|
||||
maxbodytemp = 500
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
@@ -29,6 +29,7 @@ Difficulty: Medium
|
||||
icon_living = "miner"
|
||||
icon = 'icons/mob/alienqueen.dmi'
|
||||
light_color = "#E4C7C5"
|
||||
flying = FALSE
|
||||
speak_emote = list("roars")
|
||||
speed = 3
|
||||
move_to_delay = 3
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
move_to_delay = 9
|
||||
|
||||
var/is_electronic = 0
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
del_on_death = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/emp_act(severity)
|
||||
@@ -110,7 +110,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
|
||||
var/destroy_objects = 0
|
||||
var/knockdown_people = 0
|
||||
var/image/googly_eyes = null
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/copy/New(loc, obj/copy, mob/living/creator, destroy_original = 0)
|
||||
..(loc)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
vision_range = 2
|
||||
aggro_vision_range = 9
|
||||
turns_per_move = 5
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
loot = list(/obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER},
|
||||
/obj/item/stack/ore/diamond{layer = ABOVE_MOB_LAYER})
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
friendly = "pinches"
|
||||
a_intent = INTENT_HELP
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
stat_attack = UNCONSCIOUS
|
||||
gender = NEUTER
|
||||
stop_automated_movement = FALSE
|
||||
@@ -137,7 +137,7 @@
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch
|
||||
name = "grublunch"
|
||||
wanted_objects = list() //They don't eat.
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
var/growth = 0
|
||||
|
||||
//Baby gutlunch
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
/mob/living/simple_animal/hostile/asteroid
|
||||
vision_range = 2
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
heat_damage_per_tick = 20
|
||||
faction = list("mining")
|
||||
weather_immunities = list("lava","ash")
|
||||
obj_damage = 30
|
||||
@@ -62,10 +63,4 @@
|
||||
..(gibbed)
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/proc/spawn_crusher_loot()
|
||||
butcher_results[crusher_loot] = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/handle_temperature_damage()
|
||||
if(bodytemperature < minbodytemp)
|
||||
adjustBruteLoss(2)
|
||||
else if(bodytemperature > maxbodytemp)
|
||||
adjustBruteLoss(20)
|
||||
butcher_results[crusher_loot] = 1
|
||||
@@ -13,7 +13,7 @@
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
faction = list("creature")
|
||||
speak_emote = list("screams")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
faction = list("nether")
|
||||
@@ -56,7 +56,7 @@
|
||||
icon_state = "blank-body"
|
||||
icon_living = "blank-body"
|
||||
icon_dead = "blank-dead"
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
health = 100
|
||||
maxHealth = 100
|
||||
melee_damage_lower = 5
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 1500
|
||||
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/carp/koi/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
pressure_resistance = 300
|
||||
gold_core_spawnable = NO_SPAWN //too spooky for science
|
||||
faction = list("undead") // did I mention ghost
|
||||
loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm)
|
||||
del_on_death = 1
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
unsuitable_atmos_damage = 10
|
||||
robust_searching = 1
|
||||
stat_attack = UNCONSCIOUS
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
faction = list("skeleton")
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
@@ -39,7 +39,7 @@
|
||||
maxHealth = 55
|
||||
health = 55
|
||||
weather_immunities = list("snow")
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
melee_damage_lower = 17
|
||||
melee_damage_upper = 20
|
||||
deathmessage = "collapses into a pile of bones, its gear falling to the floor!"
|
||||
|
||||
@@ -350,6 +350,6 @@
|
||||
minbodytemp = 0
|
||||
mob_size = MOB_SIZE_TINY
|
||||
flying = 1
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
del_on_death = 1
|
||||
deathmessage = "is smashed into pieces!"
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
faction = list("hostile", "winter")
|
||||
loot = list(/obj/item/stack/sheet/wood)
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
deathmessage = "is hacked into pieces!"
|
||||
del_on_death = 1
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
bodytemperature = 73.0 //it's made of snow and hatred, so it's pretty cold.
|
||||
maxbodytemp = 280.15 //at roughly 7 C, these will start melting (dying) from the warmth. Mind over matter or something.
|
||||
heat_damage_per_tick = 10 //Now With Rapid Thawing Action!
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/winter/snowman/death(gibbed)
|
||||
@@ -64,7 +64,7 @@
|
||||
health = 80
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 10
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE
|
||||
gold_core_spawnable = HOSTILE_SPAWN
|
||||
|
||||
/mob/living/simple_animal/hostile/winter/santa
|
||||
maxHealth = 150 //if this seems low for a "boss", it's because you have to fight him multiple times, with him fully healing between stages
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
|
||||
//Parrots are kleptomaniacs. This variable ... stores the item a parrot is holding.
|
||||
var/obj/item/held_item = null
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
|
||||
|
||||
/mob/living/simple_animal/parrot/New()
|
||||
@@ -698,7 +698,7 @@
|
||||
"Goddam emaggers!"
|
||||
)
|
||||
unique_pet = TRUE
|
||||
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
|
||||
gold_core_spawnable = NO_SPAWN
|
||||
|
||||
/mob/living/simple_animal/parrot/Poly/New()
|
||||
ears = new /obj/item/radio/headset/headset_eng(src)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
//Temperature effect
|
||||
var/minbodytemp = 250
|
||||
var/maxbodytemp = 350
|
||||
var/heat_damage_per_tick = 3 //amount of damage applied if animal's body temperature is higher than maxbodytemp
|
||||
var/heat_damage_per_tick = 2 //amount of damage applied if animal's body temperature is higher than maxbodytemp
|
||||
var/cold_damage_per_tick = 2 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
|
||||
|
||||
//Healable by medical stacks? Defaults to yes.
|
||||
@@ -72,7 +72,7 @@
|
||||
var/animal_species //Sorry, no spider+corgi buttbabies.
|
||||
|
||||
var/buffed = 0 //In the event that you want to have a buffing effect on the mob, but don't want it to stack with other effects, any outside force that applies a buff to a simple mob should at least set this to 1, so we have something to check against
|
||||
var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood
|
||||
var/gold_core_spawnable = NO_SPAWN //If the mob can be spawned with a gold slime core. HOSTILE_SPAWN are spawned with plasma, FRIENDLY_SPAWN are spawned with blood
|
||||
|
||||
var/mob/living/carbon/human/master_commander = null //holding var for determining who own/controls a sentient simple animal (for sentience potions).
|
||||
|
||||
@@ -277,8 +277,10 @@
|
||||
handle_temperature_damage()
|
||||
|
||||
/mob/living/simple_animal/proc/handle_temperature_damage()
|
||||
if((bodytemperature < minbodytemp) || (bodytemperature > maxbodytemp))
|
||||
adjustHealth(unsuitable_atmos_damage)
|
||||
if(bodytemperature < minbodytemp)
|
||||
adjustHealth(cold_damage_per_tick)
|
||||
else if(bodytemperature > maxbodytemp)
|
||||
adjustHealth(heat_damage_per_tick)
|
||||
|
||||
/mob/living/simple_animal/gib()
|
||||
if(icon_gib)
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
/mob/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(height==0)
|
||||
return 1
|
||||
if(istype(mover, /obj/item/projectile) || mover.throwing)
|
||||
if(istype(mover, /obj/item/projectile))
|
||||
return (!density || lying)
|
||||
if(mover.throwing)
|
||||
return (!density || lying || (mover.throwing.thrower == src))
|
||||
if(mover.checkpass(PASSMOB))
|
||||
return 1
|
||||
if(buckled == mover)
|
||||
@@ -431,10 +433,10 @@
|
||||
/client/verb/body_l_arm()
|
||||
set name = "body-l-arm"
|
||||
set hidden = 1
|
||||
|
||||
|
||||
if(!check_has_body_select())
|
||||
return
|
||||
|
||||
|
||||
var/next_in_line
|
||||
if(mob.zone_sel.selecting == BODY_ZONE_L_ARM)
|
||||
next_in_line = BODY_ZONE_PRECISE_L_HAND
|
||||
@@ -450,7 +452,7 @@
|
||||
|
||||
if(!check_has_body_select())
|
||||
return
|
||||
|
||||
|
||||
var/next_in_line
|
||||
if(mob.zone_sel.selecting == BODY_ZONE_R_LEG)
|
||||
next_in_line = BODY_ZONE_PRECISE_R_FOOT
|
||||
@@ -476,7 +478,7 @@
|
||||
|
||||
if(!check_has_body_select())
|
||||
return
|
||||
|
||||
|
||||
var/next_in_line
|
||||
if(mob.zone_sel.selecting == BODY_ZONE_L_LEG)
|
||||
next_in_line = BODY_ZONE_PRECISE_L_FOOT
|
||||
|
||||
Reference in New Issue
Block a user