Merge branch 'master' into placeholder
@@ -0,0 +1,7 @@
|
||||
--
|
||||
-- Adds a deleted_by and deleted reason to ss13_characters in preparation for player-permitted un-delete
|
||||
--
|
||||
|
||||
ALTER TABLE `ss13_characters`
|
||||
ADD COLUMN `deleted_by` ENUM('player','staff') NULL DEFAULT NULL AFTER `gear_slot`,
|
||||
ADD COLUMN `deleted_reason` TEXT NULL AFTER `deleted_by`;
|
||||
@@ -164,4 +164,10 @@
|
||||
// Returns 1 if N is inbetween Min and Max
|
||||
/proc/n_inrange(var/num, var/min=-1, var/max=1)
|
||||
if(isnum(num)&&isnum(min)&&isnum(max))
|
||||
return ((min <= num) && (num <= max))
|
||||
return ((min <= num) && (num <= max))
|
||||
|
||||
#define MODULUS_FLOAT(X, Y) ( (X) - (Y) * round((X) / (Y)) )
|
||||
|
||||
// Will filter out extra rotations and negative rotations
|
||||
// E.g: 540 becomes 180. -180 becomes 180.
|
||||
#define SIMPLIFY_DEGREES(degrees) (MODULUS_FLOAT((degrees), 360))
|
||||
@@ -55,6 +55,22 @@
|
||||
else if(dx<0)
|
||||
.+=360
|
||||
|
||||
/proc/get_projectile_angle(atom/source, atom/target)
|
||||
var/sx = source.x * world.icon_size
|
||||
var/sy = source.y * world.icon_size
|
||||
var/tx = target.x * world.icon_size
|
||||
var/ty = target.y * world.icon_size
|
||||
var/atom/movable/AM
|
||||
if(ismovable(source))
|
||||
AM = source
|
||||
sx += AM.step_x
|
||||
sy += AM.step_y
|
||||
if(ismovable(target))
|
||||
AM = target
|
||||
tx += AM.step_x
|
||||
ty += AM.step_y
|
||||
return SIMPLIFY_DEGREES(arctan(ty - sy, tx - sx))
|
||||
|
||||
//Returns location. Returns null if no location was found.
|
||||
/proc/get_teleport_loc(turf/location,mob/target,distance = 1, density = 0, errorx = 0, errory = 0, eoffsetx = 0, eoffsety = 0)
|
||||
/*
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/cmo
|
||||
suit_store = /obj/item/device/flashlight/pen
|
||||
shoes = /obj/item/clothing/shoes/brown
|
||||
bowman = /obj/item/device/radio/headset/heads/cmo
|
||||
headset = /obj/item/device/radio/headset/heads/cmo/alt
|
||||
headset = /obj/item/device/radio/headset/heads/cmo
|
||||
bowman = /obj/item/device/radio/headset/heads/cmo/alt
|
||||
tab_pda = /obj/item/modular_computer/handheld/pda/medical/cmo
|
||||
wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical/cmo
|
||||
tablet = /obj/item/modular_computer/handheld/preset/medical/cmo
|
||||
|
||||
@@ -41,11 +41,11 @@
|
||||
M.facing_dir = null
|
||||
M.update_canmove()
|
||||
else
|
||||
MA.anchored = TRUE
|
||||
MA.anchored = TRUE
|
||||
else
|
||||
return 0
|
||||
post_buckle(MA)
|
||||
MA.layer = src.layer + 1
|
||||
MA.layer = src.layer + 0.1
|
||||
return 1
|
||||
|
||||
/obj/proc/unbuckle()
|
||||
@@ -91,8 +91,8 @@
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
else
|
||||
MA.visible_message(\
|
||||
"<span class='danger'>[MA.name] is buckled_to to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled_to to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>[MA.name] is buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
|
||||
/obj/proc/user_unbuckle(mob/user)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//generic procs copied from obj/effect/alien
|
||||
/obj/effect/spider
|
||||
name = "web"
|
||||
desc = "It's stringy and sticky, eugh. Probably came from one of those giant spiders..."
|
||||
desc = "It's stringy and sticky, eugh. Probably came from one of those greimorians..."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
@@ -321,14 +321,14 @@
|
||||
qdel(O)
|
||||
|
||||
/obj/effect/decal/cleanable/spiderling_remains
|
||||
name = "spiderling remains"
|
||||
name = "greimorian larva remains"
|
||||
desc = "Green squishy mess."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "greenshatter"
|
||||
|
||||
/obj/effect/spider/cocoon
|
||||
name = "cocoon"
|
||||
desc = "Something wrapped in silky spider web"
|
||||
desc = "Something wrapped in silky greimorian web"
|
||||
icon_state = "cocoon1"
|
||||
health = 60
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
return prob(60)
|
||||
|
||||
var/obj/structure/bed/B = A
|
||||
if (istype(A, /obj/structure/bed) && B.buckled)//if it's a bed/chair and someone is buckled_to, it will not pass
|
||||
if (istype(A, /obj/structure/bed) && B.buckled)//if it's a bed/chair and someone is buckled, it will not pass
|
||||
return 0
|
||||
|
||||
if(istype(A, /obj/vehicle)) //no vehicles
|
||||
|
||||
@@ -157,8 +157,8 @@
|
||||
spawn(0)
|
||||
if(buckle(affecting))
|
||||
affecting.visible_message(\
|
||||
"<span class='danger'>[affecting.name] is buckled_to to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled_to to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>[affecting.name] is buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
qdel(W)
|
||||
|
||||
|
||||
@@ -415,7 +415,6 @@
|
||||
/obj/item/clothing/glasses/sunglasses/bst
|
||||
name = "bluespace technician's glasses"
|
||||
desc = "A pair of modified sunglasses. The word 'BST' is stamped on the side."
|
||||
// var/list/obj/item/clothing/glasses/hud/health/hud = null
|
||||
vision_flags = (SEE_TURFS|SEE_OBJS|SEE_MOBS)
|
||||
see_invisible = SEE_INVISIBLE_NOLIGHTING
|
||||
canremove = 0
|
||||
@@ -443,12 +442,6 @@
|
||||
|
||||
to_chat(usr, "<span class='notice'>\The [src]'s vision mode is now <b>[mode]</b>.</span>")
|
||||
|
||||
/* New()
|
||||
..()
|
||||
src.hud += new/obj/item/clothing/glasses/hud/security(src)
|
||||
src.hud += new/obj/item/clothing/glasses/hud/health(src)
|
||||
return
|
||||
*/
|
||||
/obj/item/clothing/glasses/sunglasses/bst/attack_hand()
|
||||
if(!usr)
|
||||
return
|
||||
|
||||
@@ -109,6 +109,13 @@
|
||||
allowed_roles = list("Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern")
|
||||
flags = GEAR_HAS_DESC_SELECTION
|
||||
|
||||
/datum/gear/suit/iaclabcoat
|
||||
display_name = "IAC labcoat"
|
||||
description = "It's a standard medical labcoat designed to be worn by the Interstellar Aid Corps."
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/iac
|
||||
allowed_roles = list("Chief Medical Officer", "Physician", "Surgeon", "Pharmacist", "First Responder", "Medical Intern")
|
||||
flags = GEAR_HAS_DESC_SELECTION
|
||||
|
||||
/datum/gear/suit/poncho
|
||||
display_name = "poncho selection"
|
||||
path = /obj/item/clothing/accessory/poncho
|
||||
|
||||
@@ -378,7 +378,7 @@ datum/preferences
|
||||
else if(href_list["delete"])
|
||||
if (!config.sql_saves)
|
||||
return 0
|
||||
if (alert(usr, "This will permanently delete the character you have loaded. Are you sure?", "Delete Character", "No", "Yes") == "Yes")
|
||||
if (alert(usr, "You will be unable to re-create a character with the same name! Are you sure you want to delete the loaded character?", "Delete Character", "No", "Yes") == "Yes")
|
||||
delete_character_sql(usr.client)
|
||||
else
|
||||
return 0
|
||||
@@ -671,7 +671,7 @@ datum/preferences
|
||||
to_chat(C, "<span class='notice'>Unable to establish database connection.</span>")
|
||||
return
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("UPDATE ss13_characters SET deleted_at = NOW() WHERE id = :char_id:")
|
||||
var/DBQuery/query = dbcon.NewQuery("UPDATE ss13_characters SET deleted_at = NOW(), deleted_by = \"player\" WHERE id = :char_id:")
|
||||
query.Execute(list("char_id" = current_character))
|
||||
|
||||
// Create a new character.
|
||||
|
||||
@@ -100,3 +100,15 @@
|
||||
name = "hephaestus labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Comes in Hephaestus colours."
|
||||
icon_state = "labcoat_heph"
|
||||
armor = list(
|
||||
bio = ARMOR_BIO_RESISTANT
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/iac
|
||||
name = "iac labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Comes in IAC colors."
|
||||
icon_state = "labcoat_iac"
|
||||
item_state = "labcoat_iac"
|
||||
armor = list(
|
||||
bio = ARMOR_BIO_RESISTANT
|
||||
)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
parent_organ = BP_HEAD
|
||||
icon = 'icons/mob/npc/alien.dmi'
|
||||
icon_state = "chitin"
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
|
||||
/obj/item/organ/internal/brain/xeno
|
||||
name = "thinkpan"
|
||||
|
||||
@@ -1414,6 +1414,7 @@
|
||||
species.handle_post_spawn(src,kpg) // should be zero by default
|
||||
|
||||
maxHealth = species.total_health
|
||||
health = maxHealth
|
||||
|
||||
spawn(0)
|
||||
regenerate_icons()
|
||||
|
||||
@@ -378,7 +378,8 @@ This function restores all organs.
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_organ(var/zone)
|
||||
if(!zone) zone = BP_CHEST
|
||||
if(!zone)
|
||||
zone = BP_CHEST
|
||||
if (zone in list(BP_EYES, BP_MOUTH))
|
||||
zone = BP_HEAD
|
||||
return organs_by_name[zone]
|
||||
|
||||
@@ -83,10 +83,21 @@
|
||||
if (istype(buckled_to, /obj/structure/bed))
|
||||
return
|
||||
|
||||
for(var/limb_tag in list(BP_L_LEG,BP_R_LEG,BP_L_FOOT,BP_R_FOOT))
|
||||
var/static/support_limbs = list(
|
||||
BP_L_LEG = BP_R_LEG,
|
||||
BP_L_FOOT = BP_R_FOOT
|
||||
)
|
||||
var/has_opposite_limb = FALSE
|
||||
|
||||
for(var/limb_tag in list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT))
|
||||
var/obj/item/organ/external/E = organs_by_name[limb_tag]
|
||||
if(!E || (E.status & (ORGAN_MUTATED|ORGAN_DEAD)) || E.is_stump()) //should just be !E.is_usable() here but dislocation screws that up.
|
||||
stance_damage += 2 // let it fail even if just foot&leg
|
||||
has_opposite_limb = get_organ(support_limbs[limb_tag])
|
||||
if(!has_opposite_limb)
|
||||
stance_damage += 10 //No walking for you with no supporting limb, buddy.
|
||||
break
|
||||
else
|
||||
stance_damage += 2
|
||||
else if (E.is_malfunctioning())
|
||||
//malfunctioning only happens intermittently so treat it as a missing limb when it procs
|
||||
stance_damage += 2
|
||||
@@ -100,20 +111,25 @@
|
||||
|
||||
// Canes and crutches help you stand (if the latter is ever added)
|
||||
// One cane mitigates a broken leg+foot, or a missing foot.
|
||||
// Two canes are needed for a lost leg. If you are missing both legs, canes aren't gonna help you.
|
||||
if (l_hand && istype(l_hand, /obj/item/cane))
|
||||
stance_damage -= 2
|
||||
if (r_hand && istype(r_hand, /obj/item/cane))
|
||||
stance_damage -= 2
|
||||
// No double caning allowed, sorry. Canes also don't work if you're missing a functioning pair of feet or legs.
|
||||
if(has_opposite_limb)
|
||||
if(l_hand && istype(l_hand, /obj/item/cane))
|
||||
stance_damage -= 2
|
||||
else if(r_hand && istype(r_hand, /obj/item/cane))
|
||||
stance_damage -= 2
|
||||
|
||||
// standing is poor
|
||||
//Standing is poor.
|
||||
if(stance_damage >= 4 || (stance_damage >= 2 && prob(5)))
|
||||
if(!(lying || resting))
|
||||
emote("scream")
|
||||
if(!weakened)
|
||||
custom_emote(VISIBLE_MESSAGE, "collapses!")
|
||||
Weaken(3)
|
||||
next_stance_collapse = world.time + (rand(8, 16) SECONDS)
|
||||
|
||||
if(stance_damage <= 5)
|
||||
Weaken(3)
|
||||
next_stance_collapse = world.time + (rand(8, 16) SECONDS)
|
||||
else
|
||||
Weaken(6) //No legs or feet means you should be really fucked.
|
||||
|
||||
/mob/living/carbon/human/proc/handle_grasp()
|
||||
if(!l_hand && !r_hand)
|
||||
|
||||
@@ -83,20 +83,21 @@
|
||||
zombie_type = SPECIES_ZOMBIE_SKRELL
|
||||
|
||||
/datum/species/skrell/handle_post_spawn(mob/living/carbon/human/H)
|
||||
..()
|
||||
H.set_psi_rank(PSI_COERCION, PSI_RANK_OPERANT)
|
||||
|
||||
/datum/species/skrell/handle_strip(var/mob/user, var/mob/living/carbon/human/H, var/action)
|
||||
switch(action)
|
||||
if("headtail")
|
||||
if(!H.head)
|
||||
if(!H.organs_by_name[BP_HEAD] || istype(H.organs_by_name[BP_HEAD], /obj/item/organ/external/stump))
|
||||
to_chat(user, SPAN_WARNING("\The [H] doesn't have a head!"))
|
||||
return
|
||||
user.visible_message(SPAN_WARNING("\The [user] is trying to remove something from \the [H]'s headtails!"))
|
||||
if(do_after(usr, HUMAN_STRIP_DELAY, act_target = H))
|
||||
var/obj/item/storage/internal/skrell/S = locate() in H.head
|
||||
if(do_after(user, HUMAN_STRIP_DELAY, act_target = H))
|
||||
var/obj/item/storage/internal/skrell/S = locate() in H.organs_by_name[BP_HEAD]
|
||||
var/obj/item/I = locate() in S
|
||||
if(!I)
|
||||
to_chat(usr, SPAN_WARNING("\The [H] had nothing in their headtail storage."))
|
||||
to_chat(user, SPAN_WARNING("\The [H] had nothing in their headtail storage."))
|
||||
return
|
||||
S.remove_from_storage(I, get_turf(H))
|
||||
return
|
||||
|
||||
@@ -865,10 +865,13 @@ There are several things that need to be remembered:
|
||||
overlays_raw[shoe_layer] = ovr || result_layer
|
||||
else
|
||||
if(footprint_color) // Handles bloody feet.
|
||||
var/image/bloodsies = image(species.blood_mask, "shoeblood")
|
||||
bloodsies.color = footprint_color
|
||||
bloodsies.appearance_flags = RESET_ALPHA
|
||||
overlays_raw[SHOES_LAYER] = bloodsies
|
||||
for(var/limb_tag in list(BP_L_FOOT, BP_R_FOOT))
|
||||
var/obj/item/organ/external/E = get_organ(limb_tag)
|
||||
if(E && !E.is_stump())
|
||||
var/image/bloodsies = image(species.blood_mask, "shoeblood_[E.limb_name]")
|
||||
bloodsies.color = footprint_color
|
||||
bloodsies.appearance_flags = RESET_ALPHA
|
||||
overlays_raw[SHOES_LAYER] = bloodsies
|
||||
else
|
||||
overlays_raw[SHOES_LAYER] = null
|
||||
overlays_raw[SHOES_LAYER_ALT] = null
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
|
||||
var/buckle_message_user = ""
|
||||
var/buckle_message_other = ""
|
||||
if(buckled_to) //If the person is buckled_to, also unbuckle the person
|
||||
if(buckled_to) //If the person is buckled, also unbuckle the person
|
||||
buckle_message_user = " and unbuckle yourself"
|
||||
buckle_message_other = " and to unbuckle themself"
|
||||
buckled_to.user_unbuckle(src)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "A piece of juicy meat found in a person's head."
|
||||
organ_tag = BP_BRAIN
|
||||
parent_organ = BP_HEAD
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
icon_state = "brain"
|
||||
force = 1.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
animate(pain, alpha = target, time = 15, easing = ELASTIC_EASING)
|
||||
animate(pain, alpha = 0, time = 20)
|
||||
|
||||
mob/var/list/pain_stored = list()
|
||||
mob/var/last_pain_message = ""
|
||||
mob/var/next_pain_time = 0
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
min_broken_damage = 50
|
||||
w_class = ITEMSIZE_HUGE
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
parent_organ = null
|
||||
limb_flags = 0
|
||||
dislocated = -1
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
icon_state = "surge_ipc"
|
||||
organ_tag = "surge"
|
||||
parent_organ = BP_CHEST
|
||||
vital = 0
|
||||
vital = FALSE
|
||||
var/surge_left = 0
|
||||
var/broken = 0
|
||||
|
||||
@@ -342,7 +342,7 @@
|
||||
name = BP_BRAIN
|
||||
organ_tag = BP_BRAIN
|
||||
parent_organ = BP_CHEST
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
emp_coeff = 0.1
|
||||
|
||||
/obj/item/organ/internal/data
|
||||
@@ -351,7 +351,7 @@
|
||||
parent_organ = BP_GROIN
|
||||
icon = 'icons/obj/cloning.dmi'
|
||||
icon_state = "harddisk"
|
||||
vital = 0
|
||||
vital = FALSE
|
||||
emp_coeff = 0.1
|
||||
|
||||
/obj/item/organ/internal/data/Initialize()
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
|
||||
/obj/item/organ/external/chest
|
||||
name = "upper body"
|
||||
limb_name = "chest"
|
||||
limb_name = BP_CHEST
|
||||
icon_name = "torso"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
w_class = ITEMSIZE_HUGE
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
amputation_point = "spine"
|
||||
joint = "neck"
|
||||
artery_name = "internal thoracic artery"
|
||||
@@ -29,13 +29,12 @@
|
||||
|
||||
/obj/item/organ/external/groin
|
||||
name = "lower body"
|
||||
limb_name = "groin"
|
||||
limb_name = BP_GROIN
|
||||
icon_name = "groin"
|
||||
max_damage = 100
|
||||
min_broken_damage = 35
|
||||
w_class = ITEMSIZE_LARGE
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
parent_organ = BP_CHEST
|
||||
amputation_point = "lumbar"
|
||||
joint = "hip"
|
||||
@@ -51,7 +50,7 @@
|
||||
return "[owner.get_pronoun("has")] [blood_type] running down their thighs!"
|
||||
|
||||
/obj/item/organ/external/arm
|
||||
limb_name = "l_arm"
|
||||
limb_name = BP_L_ARM
|
||||
name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 50
|
||||
@@ -73,7 +72,7 @@
|
||||
return "[owner.get_pronoun("has")] [blood_type] running down their sleeves!"
|
||||
|
||||
/obj/item/organ/external/arm/right
|
||||
limb_name = "r_arm"
|
||||
limb_name = BP_R_ARM
|
||||
name = "right arm"
|
||||
icon_name = "r_arm"
|
||||
body_part = ARM_RIGHT
|
||||
@@ -83,7 +82,7 @@
|
||||
amputation_point = "right shoulder"
|
||||
|
||||
/obj/item/organ/external/leg
|
||||
limb_name = "l_leg"
|
||||
limb_name = BP_L_LEG
|
||||
name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 50
|
||||
@@ -106,7 +105,7 @@
|
||||
return "[owner.get_pronoun("has")] [blood_type] pooling at their feet!"
|
||||
|
||||
/obj/item/organ/external/leg/right
|
||||
limb_name = "r_leg"
|
||||
limb_name = BP_R_LEG
|
||||
name = "right leg"
|
||||
icon_name = "r_leg"
|
||||
body_part = LEG_RIGHT
|
||||
@@ -115,7 +114,7 @@
|
||||
amputation_point = "right hip"
|
||||
|
||||
/obj/item/organ/external/foot
|
||||
limb_name = "l_foot"
|
||||
limb_name = BP_L_FOOT
|
||||
name = "left foot"
|
||||
icon_name = "l_foot"
|
||||
max_damage = 35
|
||||
@@ -142,7 +141,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
limb_name = "r_foot"
|
||||
limb_name = BP_R_FOOT
|
||||
name = "right foot"
|
||||
icon_name = "r_foot"
|
||||
body_part = FOOT_RIGHT
|
||||
@@ -152,7 +151,7 @@
|
||||
amputation_point = "right ankle"
|
||||
|
||||
/obj/item/organ/external/hand
|
||||
limb_name = "l_hand"
|
||||
limb_name = BP_L_HAND
|
||||
name = "left hand"
|
||||
icon_name = "l_hand"
|
||||
max_damage = 35
|
||||
@@ -191,7 +190,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
limb_name = "r_hand"
|
||||
limb_name = BP_R_HAND
|
||||
name = "right hand"
|
||||
icon_name = "r_hand"
|
||||
body_part = HAND_RIGHT
|
||||
@@ -200,14 +199,14 @@
|
||||
amputation_point = "right wrist"
|
||||
|
||||
/obj/item/organ/external/head
|
||||
limb_name = "head"
|
||||
limb_name = BP_HEAD
|
||||
icon_name = "head"
|
||||
name = BP_HEAD
|
||||
max_damage = 75
|
||||
min_broken_damage = 35
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
body_part = HEAD | FACE
|
||||
vital = 1
|
||||
vital = TRUE
|
||||
parent_organ = BP_CHEST
|
||||
joint = "jaw"
|
||||
artery_name = "cartoid artery"
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
|
||||
/obj/item/organ/external/groin/skeleton
|
||||
name = "pelvis"
|
||||
vital = 0
|
||||
|
||||
/obj/item/organ/external/arm/skeleton
|
||||
dislocated = -1
|
||||
@@ -33,5 +32,5 @@
|
||||
/obj/item/organ/external/head/skeleton
|
||||
name = "skull"
|
||||
dislocated = -1
|
||||
vital = 0
|
||||
vital = FALSE
|
||||
|
||||
|
||||
@@ -389,6 +389,8 @@
|
||||
else
|
||||
user.visible_message(SPAN_WARNING("\The [user] hits \the [src], but it doesn't break."), SPAN_WARNING("You hit \the [src], but it doesn't break."), SPAN_WARNING("You hear something hitting against glass."))
|
||||
|
||||
/obj/machinery/light/bullet_act(obj/item/projectile/P, def_zone)
|
||||
shatter()
|
||||
|
||||
// returns whether this light has power
|
||||
// true if area has power
|
||||
|
||||
@@ -311,7 +311,7 @@
|
||||
/obj/item/projectile/proc/old_style_target(atom/target, atom/source)
|
||||
if(!source)
|
||||
source = get_turf(src)
|
||||
setAngle(Get_Angle(source, target))
|
||||
setAngle(get_projectile_angle(source, target))
|
||||
|
||||
/obj/item/projectile/proc/fire(angle, atom/direct_target)
|
||||
//If no angle needs to resolve it from xo/yo!
|
||||
@@ -332,7 +332,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
var/turf/target = locate(Clamp(starting + xo, 1, world.maxx), Clamp(starting + yo, 1, world.maxy), starting.z)
|
||||
setAngle(Get_Angle(src, target))
|
||||
setAngle(get_projectile_angle(src, target))
|
||||
if(dispersion)
|
||||
setAngle(Angle + rand(-dispersion, dispersion))
|
||||
original_angle = Angle
|
||||
@@ -368,7 +368,7 @@
|
||||
else if(targloc && curloc)
|
||||
yo = targloc.y - curloc.y
|
||||
xo = targloc.x - curloc.x
|
||||
setAngle(Get_Angle(src, targloc))
|
||||
setAngle(get_projectile_angle(src, targloc))
|
||||
else
|
||||
crash_with("WARNING: Projectile [type] fired without either mouse parameters, or a target atom to aim at!")
|
||||
qdel(src)
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
animate_movement=1
|
||||
light_range = 3
|
||||
|
||||
can_buckle = 1
|
||||
buckle_movable = 1
|
||||
buckle_lying = 0
|
||||
|
||||
@@ -47,6 +46,10 @@
|
||||
..()
|
||||
//spawn the cell you want in each vehicle
|
||||
|
||||
/obj/vehicle/Initialize()
|
||||
. = ..()
|
||||
LAZYADD(can_buckle, /mob/living)
|
||||
|
||||
/obj/vehicle/Move()
|
||||
if(world.time > l_move_time + move_delay)
|
||||
var/old_loc = get_turf(src)
|
||||
@@ -75,6 +78,9 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/vehicle/proc/create_vehicle_overlay()
|
||||
return
|
||||
|
||||
/obj/vehicle/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/device/hand_labeler))
|
||||
return
|
||||
@@ -296,7 +302,6 @@
|
||||
C.pixel_y += mob_offset_y
|
||||
else
|
||||
C.pixel_y += load_offset_y
|
||||
C.layer = layer + 0.1 //so it sits above the vehicle
|
||||
|
||||
if(ismob(C))
|
||||
buckle(C)
|
||||
|
||||
@@ -35,6 +35,50 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">19 February 2021</h2>
|
||||
<h3 class="author">Arrow768 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Updates the character deletion warning to reflect that it is not possible to create another character with the same name.</li>
|
||||
</ul>
|
||||
<h3 class="author">Geeves updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Three Towns Cider cans now have a crushed icon state.</li>
|
||||
<li class="bugfix">Removing items from skrell headtail pocket storage now works properly. It used to check if they had a hat, not a head.</li>
|
||||
</ul>
|
||||
<h3 class="author">William Murdoch updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added a new labcoat in IAC colors to the loadout.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">18 February 2021</h2>
|
||||
<h3 class="author">Alberyk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed vehicles not working properly.</li>
|
||||
</ul>
|
||||
<h3 class="author">Geeves updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixes CMO headset selection being flipped.</li>
|
||||
<li class="bugfix">Fixes how projectile angles are calculated, this should fix emitter shots going diagonally.</li>
|
||||
<li class="rscadd">Shooting light fixtures will now cause them to break.</li>
|
||||
</ul>
|
||||
<h3 class="author">MattAtlas updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">The groin is no longer vital.</li>
|
||||
<li class="tweak">Reworks how stance damage works slightly. Having no feet or no legs means you can no longer walk at all. Behaviour with only one foot unchanged.</li>
|
||||
<li class="tweak">Canes no longer help you when you have no legs or feet.</li>
|
||||
<li class="bugfix">Non-existant feet are no longer bloody.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">17 February 2021</h2>
|
||||
<h3 class="author">Sparky_hotdog updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">Fixed a few grammar issues when buckling people to things.</li>
|
||||
</ul>
|
||||
<h3 class="author">WickedCybs updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">References to spiderlings and spiders should now reference greimorians. Overt references like 'spiderling remains' are now 'greimorian larva remains' too.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">16 February 2021</h2>
|
||||
<h3 class="author">Geeves updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -18348,3 +18348,34 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
the lighting control program, and via individual APCs.
|
||||
Yonnimer:
|
||||
- rscadd: Makes dionae naturally insulated against being shocked
|
||||
2021-02-17:
|
||||
Sparky_hotdog:
|
||||
- spellcheck: Fixed a few grammar issues when buckling people to things.
|
||||
WickedCybs:
|
||||
- bugfix: References to spiderlings and spiders should now reference greimorians.
|
||||
Overt references like 'spiderling remains' are now 'greimorian
|
||||
larva remains' too.
|
||||
2021-02-18:
|
||||
Alberyk:
|
||||
- bugfix: Fixed vehicles not working properly.
|
||||
Geeves:
|
||||
- bugfix: Fixes CMO headset selection being flipped.
|
||||
- bugfix: Fixes how projectile angles are calculated, this should fix emitter shots
|
||||
going diagonally.
|
||||
- rscadd: Shooting light fixtures will now cause them to break.
|
||||
MattAtlas:
|
||||
- tweak: The groin is no longer vital.
|
||||
- tweak: Reworks how stance damage works slightly. Having no feet or no legs means
|
||||
you can no longer walk at all. Behaviour with only one foot unchanged.
|
||||
- tweak: Canes no longer help you when you have no legs or feet.
|
||||
- bugfix: Non-existant feet are no longer bloody.
|
||||
2021-02-19:
|
||||
Arrow768:
|
||||
- tweak: Updates the character deletion warning to reflect that it is not possible
|
||||
to create another character with the same name.
|
||||
Geeves:
|
||||
- bugfix: Three Towns Cider cans now have a crushed icon state.
|
||||
- bugfix: Removing items from skrell headtail pocket storage now works properly.
|
||||
It used to check if they had a hat, not a head.
|
||||
William Murdoch:
|
||||
- rscadd: Added a new labcoat in IAC colors to the loadout.
|
||||
|
||||
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 362 KiB After Width: | Height: | Size: 360 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
@@ -29564,7 +29564,7 @@
|
||||
/obj/structure/extinguisher_cabinet{
|
||||
pixel_x = -24
|
||||
},
|
||||
/obj/item/weldpack{
|
||||
/obj/item/reagent_containers/weldpack{
|
||||
pixel_y = -10
|
||||
},
|
||||
/turf/simulated/floor/tiled/dark,
|
||||
|
||||
@@ -7289,7 +7289,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/obj/machinery/status_display{
|
||||
layer = 4;
|
||||
@@ -8259,7 +8259,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
@@ -12046,7 +12046,7 @@
|
||||
"avD" = (
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/bridge/aibunker)
|
||||
|
||||
@@ -600,7 +600,7 @@
|
||||
"abq" = (
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/turf/simulated/floor/airless,
|
||||
/area/mine/unexplored)
|
||||
|
||||
@@ -4161,7 +4161,7 @@
|
||||
/obj/effect/decal/cleanable/cobweb2,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/on{
|
||||
dir = 8
|
||||
@@ -7945,7 +7945,7 @@
|
||||
},
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/turf/simulated/floor/tiled/white,
|
||||
/area/maintenance/medbay_virology)
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/store)
|
||||
@@ -387,7 +387,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/turf/simulated/floor/lino/grey,
|
||||
/area/store)
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/dungeon/sol_outpost)
|
||||
@@ -115,7 +115,7 @@
|
||||
/obj/structure/toilet,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/simulated/floor/tiled/white,
|
||||
@@ -638,7 +638,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/turf/simulated/floor/wood,
|
||||
/area/dungeon/sol_outpost)
|
||||
@@ -960,7 +960,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/cobweb2{
|
||||
icon_state = "spiderling";
|
||||
name = "dead spider"
|
||||
name = "dead greimorian"
|
||||
},
|
||||
/obj/machinery/light{
|
||||
brightness_color = "#FA8282"
|
||||
|
||||