mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-26 01:04:36 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-02-23
# Conflicts: # code/game/jobs/job_controller.dm # code/game/machinery/oxygen_pump.dm # code/game/objects/items/weapons/storage/firstaid.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/modules/mob/new_player/new_player.dm # code/modules/organs/internal/eyes.dm # html/changelogs/.all_changelog.yml # maps/southern_cross/southern_cross-1.dmm # vorestation.dme
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
var/haste // If set to 1, the mob will be 'hasted', which makes it ignore slowdown and go really fast.
|
||||
var/evasion // Positive numbers reduce the odds of being hit. Negative numbers increase the odds.
|
||||
var/bleeding_rate_percent // Adjusts amount of blood lost when bleeding.
|
||||
var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder. Every 15% is equal to one tile easier or harder, just like evasion.
|
||||
var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder.
|
||||
var/accuracy_dispersion // Positive numbers make gun firing cover a wider tile range, and therefore more inaccurate. Negatives help negate dispersion penalties.
|
||||
var/metabolism_percent // Adjusts the mob's metabolic rate, which affects reagent processing. Won't affect mobs without reagent processing.
|
||||
var/icon_scale_percent // Makes the holder's icon get scaled up or down.
|
||||
@@ -208,13 +208,13 @@
|
||||
effects += "You move at maximum speed, and cannot be slowed by any means."
|
||||
|
||||
if(!isnull(evasion))
|
||||
effects += "You are [abs(evasion * 15)]% [evasion > 0 ? "harder" : "easier"] to hit with weapons."
|
||||
effects += "You are [abs(evasion)]% [evasion > 0 ? "harder" : "easier"] to hit with weapons."
|
||||
|
||||
if(!isnull(bleeding_rate_percent))
|
||||
effects += "You bleed [multipler_to_percentage(bleeding_rate_percent, TRUE)] [bleeding_rate_percent > 1.0 ? "faster" : "slower"]."
|
||||
|
||||
if(!isnull(accuracy))
|
||||
effects += "It is [abs(accuracy * 15)]% [accuracy > 0 ? "easier" : "harder"] for you to hit someone with a ranged weapon."
|
||||
effects += "It is [abs(accuracy)]% [accuracy > 0 ? "easier" : "harder"] for you to hit someone with a ranged weapon."
|
||||
|
||||
if(!isnull(accuracy_dispersion))
|
||||
effects += "Projectiles you fire are [accuracy_dispersion > 0 ? "more" : "less"] likely to stray from your intended target."
|
||||
|
||||
@@ -60,9 +60,9 @@ the artifact triggers the rage.
|
||||
pain_immunity = TRUE // Avoid falling over from shock (at least until it expires).
|
||||
|
||||
// The less good stuff.
|
||||
accuracy = -5 // Aiming requires focus.
|
||||
accuracy = -75 // Aiming requires focus.
|
||||
accuracy_dispersion = 3 // Ditto.
|
||||
evasion = -3 // Too angry to dodge.
|
||||
evasion = -45 // Too angry to dodge.
|
||||
|
||||
var/nutrition_cost = 150
|
||||
var/exhaustion_duration = 2 MINUTES // How long the exhaustion modifier lasts after it expires. Set to 0 to not apply one.
|
||||
@@ -157,7 +157,7 @@ the artifact triggers the rage.
|
||||
attack_speed_percent = 1.5
|
||||
outgoing_melee_damage_percent = 0.6
|
||||
disable_duration_percent = 1.5
|
||||
evasion = -2
|
||||
evasion = -30
|
||||
|
||||
/datum/modifier/berserk_exhaustion/on_applied()
|
||||
holder.visible_message("<span class='warning'>\The [holder] looks exhausted.</span>")
|
||||
@@ -177,6 +177,6 @@ the artifact triggers the rage.
|
||||
stacks = MODIFIER_STACK_EXTEND
|
||||
|
||||
// Just being mad isn't gonna overclock your body when you're a beepboop.
|
||||
accuracy = -5 // Aiming requires focus.
|
||||
accuracy = -75 // Aiming requires focus.
|
||||
accuracy_dispersion = 3 // Ditto.
|
||||
evasion = -3 // Too angry to dodge.
|
||||
evasion = -45 // Too angry to dodge.
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
msg += "<br>"
|
||||
|
||||
//uniform
|
||||
if(w_uniform && !skipjumpsuit)
|
||||
if(w_uniform && !skipjumpsuit && w_uniform.show_examine)
|
||||
//Ties
|
||||
var/tie_msg
|
||||
if(istype(w_uniform,/obj/item/clothing/under) && !skiptie)
|
||||
@@ -144,7 +144,7 @@
|
||||
if(skipholster)
|
||||
var/list/accessories_visible = new/list() //please let this fix the stupid fucking runtimes
|
||||
for(var/obj/item/clothing/accessory/A in U.accessories)
|
||||
if(A.concealed_holster == 0)
|
||||
if(A.concealed_holster == 0 && A.show_examine)
|
||||
accessories_visible.Add(A)
|
||||
if(accessories_visible.len)
|
||||
tie_msg += ". Attached to it is [lowertext(english_list(accessories_visible))]"
|
||||
@@ -156,7 +156,7 @@
|
||||
msg += "[T.He] [T.is] wearing \icon[w_uniform] \a [w_uniform][tie_msg].\n"
|
||||
|
||||
//head
|
||||
if(head)
|
||||
if(head && head.show_examine)
|
||||
if(head.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[head] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!</span>\n"
|
||||
else
|
||||
@@ -176,35 +176,35 @@
|
||||
msg += "[T.He] [T.is] wearing \icon[wear_suit] \a [wear_suit][tie_msg].\n"
|
||||
|
||||
//suit/armour storage
|
||||
if(s_store && !skipsuitstorage)
|
||||
if(s_store && !skipsuitstorage && s_store.show_examine)
|
||||
if(s_store.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] carrying \icon[s_store] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] carrying \icon[s_store] \a [s_store] on [T.his] [wear_suit.name].\n"
|
||||
|
||||
//back
|
||||
if(back)
|
||||
if(back && back.show_examine)
|
||||
if(back.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[back] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back.</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[back] \a [back] on [T.his] back.\n"
|
||||
|
||||
//left hand
|
||||
if(l_hand)
|
||||
if(l_hand && l_hand.show_examine)
|
||||
if(l_hand.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] holding \icon[l_hand] \a [l_hand] in [T.his] left hand.\n"
|
||||
|
||||
//right hand
|
||||
if(r_hand)
|
||||
if(r_hand && r_hand.show_examine)
|
||||
if(r_hand.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.is] holding \icon[r_hand] \a [r_hand] in [T.his] right hand.\n"
|
||||
|
||||
//gloves
|
||||
if(gloves && !skipgloves)
|
||||
if(gloves && !skipgloves && gloves.show_examine)
|
||||
if(gloves.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[gloves] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!</span>\n"
|
||||
else
|
||||
@@ -213,7 +213,7 @@
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!</span>\n"
|
||||
|
||||
//handcuffed?
|
||||
if(handcuffed)
|
||||
if(handcuffed && handcuffed.show_examine)
|
||||
if(istype(handcuffed, /obj/item/weapon/handcuffs/cable))
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[handcuffed] restrained with cable!</span>\n"
|
||||
else
|
||||
@@ -224,14 +224,14 @@
|
||||
msg += "<span class='warning'>[T.He] [T.is] \icon[buckled] buckled to [buckled]!</span>\n"
|
||||
|
||||
//belt
|
||||
if(belt)
|
||||
if(belt && belt.show_examine)
|
||||
if(belt.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[belt] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[belt] \a [belt] about [T.his] waist.\n"
|
||||
|
||||
//shoes
|
||||
if(shoes && !skipshoes)
|
||||
if(shoes && !skipshoes && shoes.show_examine)
|
||||
if(shoes.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[shoes] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!</span>\n"
|
||||
else
|
||||
@@ -240,7 +240,7 @@
|
||||
msg += "<span class='warning'>[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!</span>\n"
|
||||
|
||||
//mask
|
||||
if(wear_mask && !skipmask)
|
||||
if(wear_mask && !skipmask && wear_mask.show_examine)
|
||||
var/descriptor = "on [T.his] face"
|
||||
if(istype(wear_mask, /obj/item/weapon/grenade) && check_has_mouth())
|
||||
descriptor = "in [T.his] mouth"
|
||||
@@ -251,22 +251,22 @@
|
||||
msg += "[T.He] [T.has] \icon[wear_mask] \a [wear_mask] [descriptor].\n"
|
||||
|
||||
//eyes
|
||||
if(glasses && !skipeyes)
|
||||
if(glasses && !skipeyes && glasses.show_examine)
|
||||
if(glasses.blood_DNA)
|
||||
msg += "<span class='warning'>[T.He] [T.has] \icon[glasses] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!</span>\n"
|
||||
else
|
||||
msg += "[T.He] [T.has] \icon[glasses] \a [glasses] covering [T.his] eyes.\n"
|
||||
|
||||
//left ear
|
||||
if(l_ear && !skipears)
|
||||
if(l_ear && !skipears && l_ear.show_examine)
|
||||
msg += "[T.He] [T.has] \icon[l_ear] \a [l_ear] on [T.his] left ear.\n"
|
||||
|
||||
//right ear
|
||||
if(r_ear && !skipears)
|
||||
if(r_ear && !skipears && r_ear.show_examine)
|
||||
msg += "[T.He] [T.has] \icon[r_ear] \a [r_ear] on [T.his] right ear.\n"
|
||||
|
||||
//ID
|
||||
if(wear_id)
|
||||
if(wear_id && wear_id.show_examine)
|
||||
/*var/id
|
||||
if(istype(wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
|
||||
@@ -1042,10 +1042,10 @@
|
||||
return
|
||||
return md5(dna.uni_identity)
|
||||
|
||||
/mob/living/carbon/human/clean_blood(var/clean_feet)
|
||||
/mob/living/carbon/human/clean_blood(var/washshoes)
|
||||
.=..()
|
||||
gunshot_residue = null
|
||||
if(clean_feet && !shoes && istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
|
||||
if(washshoes && !shoes && istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
|
||||
feet_blood_color = null
|
||||
feet_blood_DNA.Cut()
|
||||
feet_blood_DNA = null
|
||||
|
||||
@@ -261,12 +261,13 @@
|
||||
var/real_damage = rand_damage
|
||||
var/hit_dam_type = attack.damage_type
|
||||
real_damage += attack.get_unarmed_damage(H)
|
||||
if(H.gloves && istype(H.gloves, /obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
real_damage += G.punch_force
|
||||
hit_dam_type = G.punch_damtype
|
||||
if(H.pulling_punches) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN
|
||||
hit_dam_type = AGONY
|
||||
if(H.gloves)
|
||||
if(istype(H.gloves, /obj/item/clothing/gloves))
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
real_damage += G.punch_force
|
||||
hit_dam_type = G.punch_damtype
|
||||
if(H.pulling_punches) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN
|
||||
hit_dam_type = AGONY
|
||||
real_damage *= damage_multiplier
|
||||
rand_damage *= damage_multiplier
|
||||
if(HULK in H.mutations)
|
||||
@@ -343,7 +344,7 @@
|
||||
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/attack_generic(var/mob/user, var/damage, var/attack_message)
|
||||
/mob/living/carbon/human/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_type = "melee", var/armor_pen = 0, var/a_sharp = 0, var/a_edge = 0)
|
||||
|
||||
if(!damage)
|
||||
return
|
||||
@@ -355,9 +356,9 @@
|
||||
|
||||
var/dam_zone = pick(organs_by_name)
|
||||
var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
|
||||
var/armor_block = run_armor_check(affecting, "melee")
|
||||
var/armor_soak = get_armor_soak(affecting, "melee")
|
||||
apply_damage(damage, BRUTE, affecting, armor_block, armor_soak)
|
||||
var/armor_block = run_armor_check(affecting, armor_type, armor_pen)
|
||||
var/armor_soak = get_armor_soak(affecting, armor_type, armor_pen)
|
||||
apply_damage(damage, BRUTE, affecting, armor_block, armor_soak, sharp = a_sharp, edge = a_edge)
|
||||
updatehealth()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@ Add fingerprints to items when we put them in our hands.
|
||||
This saves us from having to call add_fingerprint() any time something is put in a human's hands programmatically.
|
||||
*/
|
||||
|
||||
/mob/living/carbon/human
|
||||
var/list/worn_clothing = list() //Contains all CLOTHING items worn
|
||||
|
||||
/mob/living/carbon/human/verb/quick_equip()
|
||||
set name = "quick-equip"
|
||||
set hidden = 1
|
||||
@@ -86,6 +89,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
if (W == wear_suit)
|
||||
if(s_store)
|
||||
drop_from_inventory(s_store)
|
||||
worn_clothing -= wear_suit
|
||||
wear_suit = null
|
||||
update_inv_wear_suit()
|
||||
else if (W == w_uniform)
|
||||
@@ -96,16 +100,21 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
if (wear_id)
|
||||
drop_from_inventory(wear_id)
|
||||
if (belt)
|
||||
worn_clothing -= belt
|
||||
drop_from_inventory(belt)
|
||||
worn_clothing -= w_uniform
|
||||
w_uniform = null
|
||||
update_inv_w_uniform()
|
||||
else if (W == gloves)
|
||||
worn_clothing -= gloves
|
||||
gloves = null
|
||||
update_inv_gloves()
|
||||
else if (W == glasses)
|
||||
worn_clothing -= glasses
|
||||
glasses = null
|
||||
update_inv_glasses()
|
||||
else if (W == head)
|
||||
worn_clothing -= head
|
||||
head = null
|
||||
if(istype(W, /obj/item))
|
||||
var/obj/item/I = W
|
||||
@@ -121,12 +130,15 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
r_ear = null
|
||||
update_inv_ears()
|
||||
else if (W == shoes)
|
||||
worn_clothing -= shoes
|
||||
shoes = null
|
||||
update_inv_shoes()
|
||||
else if (W == belt)
|
||||
worn_clothing -= belt
|
||||
belt = null
|
||||
update_inv_belt()
|
||||
else if (W == wear_mask)
|
||||
worn_clothing -= wear_mask
|
||||
wear_mask = null
|
||||
if(istype(W, /obj/item))
|
||||
var/obj/item/I = W
|
||||
@@ -187,15 +199,21 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
//set redraw_mob to 0 if you don't wish the hud to be updated - if you're doing it manually in your own proc.
|
||||
/mob/living/carbon/human/equip_to_slot(obj/item/W as obj, slot, redraw_mob = 1)
|
||||
|
||||
if(!slot) return
|
||||
if(!istype(W)) return
|
||||
if(!has_organ_for_slot(slot)) return
|
||||
if(!species || !species.hud || !(slot in species.hud.equip_slots)) return
|
||||
if(!slot)
|
||||
return
|
||||
if(!istype(W))
|
||||
return
|
||||
if(!has_organ_for_slot(slot))
|
||||
return
|
||||
if(!species || !species.hud || !(slot in species.hud.equip_slots))
|
||||
return
|
||||
|
||||
W.loc = src
|
||||
switch(slot)
|
||||
if(slot_back)
|
||||
src.back = W
|
||||
W.equipped(src, slot)
|
||||
worn_clothing += back
|
||||
update_inv_back(redraw_mob)
|
||||
if(slot_wear_mask)
|
||||
src.wear_mask = W
|
||||
@@ -203,6 +221,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
update_hair(redraw_mob) //rebuild hair
|
||||
update_inv_ears(0)
|
||||
W.equipped(src, slot)
|
||||
worn_clothing += wear_mask
|
||||
update_inv_wear_mask(redraw_mob)
|
||||
if(slot_handcuffed)
|
||||
src.handcuffed = W
|
||||
@@ -222,6 +241,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
if(slot_belt)
|
||||
src.belt = W
|
||||
W.equipped(src, slot)
|
||||
worn_clothing += belt
|
||||
update_inv_belt(redraw_mob)
|
||||
if(slot_wear_id)
|
||||
src.wear_id = W
|
||||
@@ -252,6 +272,7 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
if(slot_gloves)
|
||||
src.gloves = W
|
||||
W.equipped(src, slot)
|
||||
worn_clothing += glasses
|
||||
update_inv_gloves(redraw_mob)
|
||||
if(slot_head)
|
||||
src.head = W
|
||||
@@ -262,18 +283,22 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
if(istype(W,/obj/item/clothing/head/kitty))
|
||||
W.update_icon(src)
|
||||
W.equipped(src, slot)
|
||||
worn_clothing += head
|
||||
update_inv_head(redraw_mob)
|
||||
if(slot_shoes)
|
||||
src.shoes = W
|
||||
W.equipped(src, slot)
|
||||
worn_clothing += shoes
|
||||
update_inv_shoes(redraw_mob)
|
||||
if(slot_wear_suit)
|
||||
src.wear_suit = W
|
||||
W.equipped(src, slot)
|
||||
worn_clothing += wear_suit
|
||||
update_inv_wear_suit(redraw_mob)
|
||||
if(slot_w_uniform)
|
||||
src.w_uniform = W
|
||||
W.equipped(src, slot)
|
||||
worn_clothing += w_uniform
|
||||
update_inv_w_uniform(redraw_mob)
|
||||
if(slot_l_store)
|
||||
src.l_store = W
|
||||
@@ -292,8 +317,8 @@ This saves us from having to call add_fingerprint() any time something is put in
|
||||
src.remove_from_mob(W)
|
||||
W.loc = src.back
|
||||
if(slot_tie)
|
||||
var/obj/item/clothing/under/uniform = src.w_uniform
|
||||
uniform.attackby(W,src)
|
||||
for(var/obj/item/clothing/C in worn_clothing)
|
||||
C.attackby(W, usr)
|
||||
else
|
||||
src << "<font color='red'>You are trying to eqip this item to an unsupported inventory slot. How the heck did you manage that? Stop it...</font>"
|
||||
return
|
||||
|
||||
@@ -150,11 +150,14 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
H.nutrition += rand(15, 45)
|
||||
VOREStation Removal End */
|
||||
// Heal remaining damage.
|
||||
if(H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss())
|
||||
H.adjustBruteLoss(-heal_rate)
|
||||
H.adjustFireLoss(-heal_rate)
|
||||
H.adjustOxyLoss(-heal_rate)
|
||||
H.adjustToxLoss(-heal_rate)
|
||||
if(H.fire_stacks >= 0)
|
||||
if(H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss())
|
||||
H.adjustBruteLoss(-heal_rate)
|
||||
H.adjustFireLoss(-heal_rate)
|
||||
H.adjustOxyLoss(-heal_rate)
|
||||
H.adjustToxLoss(-heal_rate)
|
||||
else
|
||||
H.adjustToxLoss(2*heal_rate) // Doubled because 0.5 is miniscule, and fire_stacks are capped in both directions
|
||||
|
||||
/datum/species/shapeshifter/promethean/get_blood_colour(var/mob/living/carbon/human/H)
|
||||
return (H ? rgb(H.r_skin, H.g_skin, H.b_skin) : ..())
|
||||
|
||||
@@ -427,20 +427,24 @@ var/global/list/damage_icon_parts = list()
|
||||
var/icon/temp = part.get_icon(skeleton)
|
||||
//That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST
|
||||
//And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part)
|
||||
if(part.icon_position & (LEFT | RIGHT))
|
||||
if(part.icon_position == RIGHT)
|
||||
var/icon/temp2 = new('icons/mob/human.dmi',"blank")
|
||||
var/icon/temp3 = new('icons/mob/human.dmi',"blank")
|
||||
temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH)
|
||||
temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH)
|
||||
if(!(part.icon_position & LEFT))
|
||||
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
if(!(part.icon_position & RIGHT))
|
||||
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
base_icon.Blend(temp2, ICON_OVERLAY)
|
||||
if(part.icon_position & LEFT)
|
||||
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
if(part.icon_position & RIGHT)
|
||||
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
base_icon.Blend(temp2, ICON_UNDERLAY)
|
||||
temp3.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
base_icon.Blend(temp3, ICON_UNDERLAY)
|
||||
else if(part.icon_position == LEFT)
|
||||
var/icon/temp2 = new('icons/mob/human.dmi',"blank")
|
||||
var/icon/temp3 = new('icons/mob/human.dmi',"blank")
|
||||
temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH)
|
||||
temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH)
|
||||
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
base_icon.Blend(temp2, ICON_OVERLAY)
|
||||
temp3.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
base_icon.Blend(temp3, ICON_UNDERLAY)
|
||||
else if(part.icon_position & UNDER)
|
||||
base_icon.Blend(temp, ICON_UNDERLAY)
|
||||
else
|
||||
@@ -671,7 +675,7 @@ var/global/list/damage_icon_parts = list()
|
||||
update_fire(0)
|
||||
update_water(0)
|
||||
update_surgery(0)
|
||||
UpdateDamageIcon()
|
||||
UpdateDamageIcon(0)
|
||||
update_icons_layers(0)
|
||||
update_icons_huds(0)
|
||||
update_icons()
|
||||
@@ -1019,6 +1023,13 @@ var/global/list/damage_icon_parts = list()
|
||||
standing = image(base)
|
||||
else
|
||||
standing.color = head.color
|
||||
|
||||
// Accessories - copied from uniform, BOILERPLATE because fuck this system.
|
||||
var/obj/item/clothing/head/hat = head
|
||||
if(istype(hat) && hat.accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in hat.accessories)
|
||||
standing.overlays |= A.get_mob_overlay()
|
||||
|
||||
overlays_standing[HEAD_LAYER] = standing
|
||||
|
||||
else
|
||||
|
||||
@@ -892,6 +892,18 @@
|
||||
cleaned_human.update_inv_shoes(0)
|
||||
cleaned_human.clean_blood(1)
|
||||
cleaned_human << "<font color='red'>[src] cleans your face!</font>"
|
||||
|
||||
if((module_state_1 && istype(module_state_1, /obj/item/weapon/storage/bag/ore)) || (module_state_2 && istype(module_state_2, /obj/item/weapon/storage/bag/ore)) || (module_state_3 && istype(module_state_3, /obj/item/weapon/storage/bag/ore))) //Borgs and drones can use their mining bags ~automagically~ if they're deployed in a slot. Only mining bags, as they're optimized for mass use.
|
||||
var/obj/item/weapon/storage/bag/ore/B = null
|
||||
if(istype(module_state_1, /obj/item/weapon/storage/bag/ore)) //First orebag has priority, if they for some reason have multiple.
|
||||
B = module_state_1
|
||||
else if(istype(module_state_2, /obj/item/weapon/storage/bag/ore))
|
||||
B = module_state_2
|
||||
else if(istype(module_state_3, /obj/item/weapon/storage/bag/ore))
|
||||
B = module_state_3
|
||||
var/turf/tile = loc
|
||||
if(isturf(tile))
|
||||
B.gather_all(tile, src, 1) //Shhh, unless the bag fills, don't spam the borg's chat with stuff that's going on every time they move!
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/proc/self_destruct()
|
||||
|
||||
@@ -78,6 +78,18 @@ Nurse Family
|
||||
var/atom/cocoon_target
|
||||
var/egg_inject_chance = 5
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/medical
|
||||
desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes and a tiny nurse hat."
|
||||
icon_state = "nursemed"
|
||||
icon_living = "nursemed"
|
||||
icon_dead = "nursemed_dead"
|
||||
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 16
|
||||
poison_type = "tramadol"
|
||||
poison_chance = 15
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/queen
|
||||
desc = "Absolutely gigantic, this creature is horror itself."
|
||||
icon = 'icons/mob/64x64.dmi'
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
melee_damage_lower = 1
|
||||
melee_damage_upper = 8
|
||||
|
||||
attacktext = "gouged"
|
||||
attacktext = list("gouged")
|
||||
cold_damage_per_tick = 0
|
||||
|
||||
speak_chance = 5
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 25
|
||||
|
||||
attacktext = "mauled"
|
||||
attacktext = list("mauled")
|
||||
cold_damage_per_tick = 0
|
||||
|
||||
speak_chance = 5
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
melee_damage_lower = 3
|
||||
melee_damage_upper = 12
|
||||
|
||||
attacktext = "gouged"
|
||||
attacktext = list("gouged")
|
||||
cold_damage_per_tick = 0
|
||||
|
||||
speak_chance = 5
|
||||
|
||||
@@ -119,6 +119,10 @@
|
||||
var/melee_miss_chance = 15 // percent chance to miss a melee attack.
|
||||
var/melee_attack_minDelay = 5 // How long between attacks at least
|
||||
var/melee_attack_maxDelay = 10 // How long between attacks at most
|
||||
var/attack_armor_type = "melee" // What armor does this check?
|
||||
var/attack_armor_pen = 0 // How much armor pen this attack has.
|
||||
var/attack_sharp = 0 // Is the attack sharp?
|
||||
var/attack_edge = 0 // Does the attack have an edge?
|
||||
|
||||
//Special attacks
|
||||
var/spattack_prob = 0 // Chance of the mob doing a special attack (0 for never)
|
||||
@@ -663,7 +667,6 @@
|
||||
if(istype(O, /obj/item/weapon/material/knife) || istype(O, /obj/item/weapon/material/knife/butch))
|
||||
harvest(user)
|
||||
else
|
||||
O.attack(src, user, user.zone_sel.selecting)
|
||||
ai_log("attackby() I was weapon'd by: [user]",2)
|
||||
if(O.force)
|
||||
react_to_attack(user)
|
||||
@@ -1296,7 +1299,7 @@
|
||||
if(H.check_shields(damage = damage_to_do, damage_source = src, attacker = src, def_zone = null, attack_text = "the attack"))
|
||||
return FALSE
|
||||
|
||||
if(A.attack_generic(src, damage_to_do, pick(attacktext)) && attack_sound)
|
||||
if(A.attack_generic(src, damage_to_do, pick(attacktext), attack_armor_type, attack_armor_pen, attack_sharp, attack_edge) && attack_sound)
|
||||
playsound(src, attack_sound, 75, 1)
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
ico = new(ui_style, "black")
|
||||
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
|
||||
ico.DrawBox(rgb(255,255,255,1),1,ico.Height()/2,ico.Width()/2,ico.Height())
|
||||
using = new /obj/screen( src )
|
||||
using = new /obj/screen()
|
||||
using.name = I_HELP
|
||||
using.icon = ico
|
||||
using.screen_loc = ui_acti
|
||||
@@ -86,7 +86,7 @@
|
||||
ico = new(ui_style, "black")
|
||||
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
|
||||
ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,ico.Height()/2,ico.Width(),ico.Height())
|
||||
using = new /obj/screen( src )
|
||||
using = new /obj/screen()
|
||||
using.name = I_DISARM
|
||||
using.icon = ico
|
||||
using.screen_loc = ui_acti
|
||||
@@ -98,7 +98,7 @@
|
||||
ico = new(ui_style, "black")
|
||||
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
|
||||
ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,1,ico.Width(),ico.Height()/2)
|
||||
using = new /obj/screen( src )
|
||||
using = new /obj/screen()
|
||||
using.name = I_GRAB
|
||||
using.icon = ico
|
||||
using.screen_loc = ui_acti
|
||||
@@ -110,7 +110,7 @@
|
||||
ico = new(ui_style, "black")
|
||||
ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
|
||||
ico.DrawBox(rgb(255,255,255,1),1,1,ico.Width()/2,ico.Height()/2)
|
||||
using = new /obj/screen( src )
|
||||
using = new /obj/screen()
|
||||
using.name = I_HURT
|
||||
using.icon = ico
|
||||
using.screen_loc = ui_acti
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
var/damage_to_do = rand(melee_damage_lower, melee_damage_upper)
|
||||
var/armor_modifier = abs((L.getarmor(null, "bio") / 100) - 1)
|
||||
|
||||
L.attack_generic(src, damage_to_do, attacktext)
|
||||
L.attack_generic(src, damage_to_do, pick(attacktext))
|
||||
playsound(src, 'sound/weapons/bite.ogg', 75, 1)
|
||||
|
||||
// Give the slime some nutrition, if applicable.
|
||||
@@ -199,7 +199,7 @@
|
||||
|
||||
if(istype(L,/obj/mecha))
|
||||
var/obj/mecha/M = L
|
||||
M.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext)
|
||||
M.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), pick(attacktext))
|
||||
|
||||
/mob/living/simple_animal/slime/proc/post_attack(var/mob/living/L, var/intent = I_HURT)
|
||||
if(intent != I_HELP)
|
||||
|
||||
@@ -334,14 +334,24 @@
|
||||
if(!IsJobAvailable(rank))
|
||||
src << alert("[rank] is not available. Please try another.")
|
||||
return 0
|
||||
if (!attempt_vr(src,"spawn_checks_vr",list())) return 0 // VOREStation Insert
|
||||
if(!attempt_vr(src,"spawn_checks_vr",list())) return 0 // VOREStation Insert
|
||||
if(!client)
|
||||
return 0
|
||||
|
||||
//Find our spawning point.
|
||||
var/list/join_props = job_master.LateSpawn(client, rank)
|
||||
var/turf/T = join_props["turf"]
|
||||
var/join_message = join_props["msg"]
|
||||
|
||||
if(!T || !join_message)
|
||||
return 0
|
||||
|
||||
spawning = 1
|
||||
close_spawn_windows()
|
||||
|
||||
job_master.AssignRole(src, rank, 1)
|
||||
|
||||
var/mob/living/character = create_character() //creates the human and transfers vars and mind
|
||||
var/mob/living/character = create_character(T) //creates the human and transfers vars and mind
|
||||
character = job_master.EquipRank(character, rank, 1) //equips the human
|
||||
UpdateFactionList(character)
|
||||
|
||||
@@ -363,14 +373,11 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
//Find our spawning point.
|
||||
var/join_message = job_master.LateSpawn(character, rank)
|
||||
// Equip our custom items only AFTER deploying to spawn points eh?
|
||||
equip_custom_items(character)
|
||||
|
||||
//character.apply_traits() //VOREStation Removal
|
||||
|
||||
// character.lastarea = get_area(loc) //create_character() does this
|
||||
// Moving wheelchair if they have one
|
||||
if(character.buckled && istype(character.buckled, /obj/structure/bed/chair/wheelchair))
|
||||
character.buckled.loc = character.loc
|
||||
@@ -428,7 +435,7 @@
|
||||
src << browse(dat, "window=latechoices;size=300x640;can_close=1")
|
||||
|
||||
|
||||
/mob/new_player/proc/create_character()
|
||||
/mob/new_player/proc/create_character(var/turf/T)
|
||||
if (!attempt_vr(src,"spawn_checks_vr",list())) return 0 // VOREStation Insert
|
||||
spawning = 1
|
||||
close_spawn_windows()
|
||||
@@ -444,12 +451,12 @@
|
||||
if(chosen_species && use_species_name)
|
||||
// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
|
||||
if(is_alien_whitelisted(chosen_species))
|
||||
new_character = new(loc, use_species_name)
|
||||
new_character = new(T, use_species_name)
|
||||
|
||||
if(!new_character)
|
||||
new_character = new(loc)
|
||||
new_character = new(T)
|
||||
|
||||
new_character.lastarea = get_area(loc)
|
||||
new_character.lastarea = get_area(T)
|
||||
|
||||
if(ticker.random_players)
|
||||
new_character.gender = pick(MALE, FEMALE)
|
||||
|
||||
Reference in New Issue
Block a user