Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master' into logic

This commit is contained in:
FalseIncarnate
2016-04-05 19:15:11 -04:00
434 changed files with 16507 additions and 12215 deletions
+1 -1
View File
@@ -179,7 +179,7 @@
A.name = str
usr << "<span class='notice'>You rename the '[prevname]' to '[str]'.</span>"
interact()
return
return 1
/obj/item/areaeditor/proc/set_area_machinery_title(var/area/A,var/title,var/oldtitle)
+3 -9
View File
@@ -187,19 +187,13 @@ REAGENT SCANNER
if (istype(M, /mob/living/carbon))
if(upgraded)
chemscan(user, M)
if(M:virus2.len) // WHAT IS TYPECASTING
var/mob/living/carbon/C = M
for (var/ID in C.virus2)
if (ID in virusDB)
var/datum/data/record/V = virusDB[ID]
user.show_message(text("\red Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]"))
// user.show_message(text("\red Warning: Unknown pathogen detected in subject's blood."))
for(var/datum/disease/D in M.viruses)
if(!(D.visibility_flags & HIDDEN_SCANNER))
user << "<span class='alert'><b>Warning: [D.form] detected</b>\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]</span>"
if(M.getStaminaLoss())
user.show_message("<span class='info'>Subject appears to be suffering from fatigue.</span>")
if (M.getCloneLoss())
user.show_message("<span class='warning'>Subject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.</span>")
// if (M.reagents && M.reagents.get_reagent_amount("epinephrine"))
// user.show_message("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("epinephrine")] units of rejuvenation chemicals.")
if (M.has_brain_worms())
user.show_message("\red Subject suffering from aberrant brain activity. Recommend further scanning.")
else if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && !M.get_int_organ(/obj/item/organ/internal/brain))
@@ -5,6 +5,22 @@
icon_state = "sheet-hide"
origin_tech = ""
var/global/list/datum/stack_recipe/human_recipes = list( \
new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/bloated_human, 5, on_floor = 1), \
new/datum/stack_recipe("bloated human costume head", /obj/item/clothing/head/human_head, 5, on_floor = 1), \
)
/obj/item/stack/sheet/animalhide/human/New(var/loc, var/amount=null)
recipes = human_recipes
return ..()
/obj/item/stack/sheet/animalhide/generic
name = "generic skin"
desc = "A piece of generic skin."
singular_name = "generic skin piece"
icon_state = "sheet-hide"
origin_tech = null
/obj/item/stack/sheet/animalhide/corgi
name = "corgi hide"
desc = "The by-product of corgi farming."
@@ -5,6 +5,7 @@ Mineral Sheets
- Diamond
- Uranium
- Plasma
- Plastic
- Gold
- Silver
- Bananium
@@ -191,4 +192,4 @@ var/global/list/datum/stack_recipe/mime_recipes = list ( \
name = "enriched uranium"
icon_state = "sheet-enruranium"
origin_tech = "materials=6"
materials = list(MAT_URANIUM=3000)
materials = list(MAT_URANIUM=3000)
@@ -51,6 +51,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \
null, \
new/datum/stack_recipe_list("airlock assemblies", list( \
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
@@ -87,7 +88,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
/obj/item/stack/sheet/metal
name = "metal"
desc = "Sheets made out off metal. It has been dubbed Metal Sheets."
desc = "Sheets made out of metal."
singular_name = "metal sheet"
icon_state = "sheet-metal"
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT)
@@ -97,7 +98,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
/obj/item/stack/sheet/metal/cyborg
name = "metal"
desc = "Sheets made out off metal. It has been dubbed Metal Sheets."
desc = "Sheets made out of metal."
singular_name = "metal sheet"
icon_state = "sheet-metal"
materials = list()
@@ -108,7 +109,6 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
recipes = metal_recipes
return ..()
/*
* Plasteel
*/
@@ -117,8 +117,6 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
new/datum/stack_recipe("Surgery Table", /obj/machinery/optable, 5, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1), \
new/datum/stack_recipe("Mass Driver frame", /obj/machinery/mass_driver_frame, 3, time = 50, one_per_turf = 1), \
// new/datum/stack_recipe("RUST fuel assembly port frame", /obj/item/rust_fuel_assembly_port_frame, 12, time = 50, one_per_turf = 1), \
// new/datum/stack_recipe("RUST fuel compressor frame", /obj/item/rust_fuel_compressor_frame, 12, time = 50, one_per_turf = 1), \
)
+1 -1
View File
@@ -272,4 +272,4 @@
New(title, recipes, req_amount = 1)
src.title = title
src.recipes = recipes
src.req_amount = req_amount
src.req_amount = req_amount
@@ -95,6 +95,10 @@
if(!get_location_accessible(H, "mouth"))
user << "<span class='warning'>The mask is in the way.</span>"
return
if(H.species && H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, but doesn't have one...
if(!H.client.prefs.rlimb_data["head"])
user << "<span class='warning'>You find yourself disappointed at the appalling lack of facial hair.</span>"
return
if(H.f_style == "Shaved")
user << "<span class='notice'>Already clean-shaven.</span>"
return
@@ -123,6 +127,10 @@
if(!get_location_accessible(H, "head"))
user << "<span class='warning'>The headgear is in the way.</span>"
return
if(H.species && H.species.flags & ALL_RPARTS) //If the target is of a species that can have prosthetic heads, but doesn't have one...
if(!H.client.prefs.rlimb_data["head"])
user << "<span class='warning'>You find yourself disappointed at the appalling lack of hair.</span>"
return
if(H.h_style == "Bald" || H.h_style == "Balding Hair" || H.h_style == "Skinhead")
user << "<span class='notice'>There is not enough hair left to shave...</span>"
return
+162
View File
@@ -0,0 +1,162 @@
/*
* Contains:
* Traitor fiber wire
* Improvised garrotes
*/
/obj/item/weapon/twohanded/garrote // 12TC traitor item
name = "fiber wire"
desc = "A length of razor-thin wire with an elegant wooden handle on either end.<br>You suspect you'd have to be behind the target to use this weapon effectively."
icon_state = "garrot_wrap"
w_class = 1
var/mob/living/carbon/human/strangling
var/improvised = 0
var/garrote_time
/obj/item/weapon/twohanded/garrote/update_icon()
if(strangling) // If we're strangling someone we want our icon to stay wielded
icon_state = "garrot_unwrap"
return
icon_state = "garrot_[wielded ? "un" : ""]wrap"
/obj/item/weapon/twohanded/garrote/improvised // Made via tablecrafting
name = "garrote"
desc = "A length of cable with a shoddily-carved wooden handle tied to either end.<br>You suspect you'd have to be behind the target to use this weapon effectively."
icon_state = "garrot_I_wrap"
improvised = 1
/obj/item/weapon/twohanded/garrote/improvised/update_icon()
if(strangling)
icon_state = "garrot_I_unwrap"
return
icon_state = "garrot_I_[wielded ? "un" : ""]wrap"
/obj/item/weapon/twohanded/garrote/wield(mob/living/carbon/user)
if(strangling)
user.visible_message("<span class='info'>[user] removes the [src] from [strangling]'s neck.</span>", \
"<span class='warning'>You remove the [src] from [strangling]'s neck.</span>")
strangling = null
update_icon()
processing_objects.Remove(src)
else
..()
/obj/item/weapon/twohanded/garrote/attack(mob/living/carbon/M as mob, mob/user as mob)
if(garrote_time > world.time) // Cooldown
return
if(!istype(user, /mob/living/carbon/human)) // spap_hand is a proc of /mob/living, user is simply /mob
return
var/mob/living/carbon/human/U = user
if(!wielded)
user << "<span class = 'warning'>You must use both hands to garrote [M]!</span>"
return
if(!istype(M, /mob/living/carbon/human))
user << "<span class = 'warning'>You don't think that garroting [M] would be very effective...</span>"
return
if(M == U)
U.suicide() // This will display a prompt for confirmation first.
return
if(M.dir != U.dir)
user << "<span class='warning'>You cannot use [src] on [M] from that angle!</span>"
return
if(improvised && ((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH)))) // Improvised garrotes are blocked by mouth-covering items.
user << "<span class = 'warning'>[M]'s neck is blocked by something they're wearing!</span>"
if(strangling)
user << "<span class = 'warning'>You cannot use [src] on two people at once!</span>"
return
unwield(U)
U.swap_hand() // For whatever reason the grab will not properly work if we don't have the free hand active.
M.grabbedby(U, 1)
var/obj/item/weapon/grab/G = U.get_active_hand()
U.swap_hand()
if(G && istype(G))
if(improvised) // Improvised garrotes start you off with a passive grab, but keep you stunned like an agressive grab.
M.Stun(1)
else
G.state = GRAB_NECK
G.hud.icon_state = "kill"
G.hud.name = "kill"
M.silent += 1
garrote_time = world.time + 10
processing_objects.Add(src)
strangling = M
update_icon()
playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1)
M.visible_message("<span class='danger'>[U] comes from behind and begins garroting [M] with the [src]!</span>", \
"<span class='userdanger'>[U]\ begins garroting you with the [src]![improvised ? "" : " You are unable to speak!"]</span>", \
"You hear struggling and wire strain against flesh!")
return
/obj/item/weapon/twohanded/garrote/process()
if(!istype(loc, /mob/living/carbon/human))
strangling = null
update_icon()
processing_objects.Remove(src)
return
var/mob/living/carbon/human/user = loc
var/obj/item/weapon/grab/G
if(src == user.r_hand && istype(user.l_hand, /obj/item/weapon/grab))
G = user.l_hand
else if(src == user.l_hand && istype(user.r_hand, /obj/item/weapon/grab))
G = user.r_hand
else
user.visible_message("<span class='warning'>[user] loses his grip on [strangling]'s neck.</span>", \
"<span class='warning'>You lose your grip on [strangling]'s neck.</span>")
strangling = null
update_icon()
processing_objects.Remove(src)
return
if(!G.affecting)
user.visible_message("<span class='warning'>[user] loses his grip on [strangling]'s neck.</span>", \
"<span class='warning'>You lose your grip on [strangling]'s neck.</span>")
strangling = null
update_icon()
processing_objects.Remove(src)
return
if(G.state < GRAB_NECK) // Only possible with improvised garrotes, essentially this will stun people as if they were aggressively grabbed. Allows for resisting out if you're quick, but not running away.
strangling.Stun(3)
if(improvised)
strangling.stuttering = max(strangling.stuttering, 3)
strangling.apply_damage(2, OXY, "head")
return
strangling.silent = max(strangling.silent, 3) // Non-improvised effects
strangling.apply_damage(4, OXY, "head")
/obj/item/weapon/twohanded/garrote/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is wrapping the [src] around \his neck and pulling the handles! It looks like \he's trying to commit suicide.</span>")
playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1)
return (OXYLOSS)
@@ -0,0 +1,16 @@
/obj/item/weapon/grenade/confetti
name = "party grenade"
desc = "Party time!"
icon_state = "confetti"
var/spawner_type = /obj/effect/decal/cleanable/confetti
/obj/item/weapon/grenade/confetti/prime()
var/turf/T = get_turf(src)
playsound(T, 'sound/effects/confetti_partywhistle.ogg', 100, 1)
for(var/i in 1 to 20) //20 confettis. Yes.
var/atom/movable/x = new spawner_type
x.loc = T
for(var/j in 1 to rand(1, 4))
step(x, pick(NORTH,SOUTH,EAST,WEST))
qdel(src)
+16 -2
View File
@@ -34,8 +34,14 @@
if(H.species)
for(var/i in facial_hair_styles_list)
var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i]
if(H.species.name in tmp_facial.species_allowed)
if(H.species.name in tmp_facial.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human hair styles.
species_facial_hair += i
else
if(H.species.flags & ALL_RPARTS)
if(("head" in H.client.prefs.rlimb_data) && ("Human" in tmp_facial.species_allowed))
species_facial_hair += i
else
return
else
species_facial_hair = facial_hair_styles_list
var/f_new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair
@@ -44,8 +50,16 @@
if(H.species)
for(var/i in hair_styles_list)
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i]
if(H.species.name in tmp_hair.species_allowed)
if(H.species.name in tmp_hair.species_allowed) //If the species is allowed to have the style, add the style to the list. Or, if the character has a prosthetic head, give them the human facial hair styles.
if((H.species.flags & ALL_RPARTS) && !("head" in H.client.prefs.rlimb_data))
return
species_hair += i
else
if(H.species.flags & ALL_RPARTS)
if(("head" in H.client.prefs.rlimb_data) && ("Human" in tmp_hair.species_allowed))
species_facial_hair += i
else
return
else
species_hair = hair_styles_list
var/h_new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair
@@ -69,6 +69,10 @@
origin_tech = null //wipe out any origin tech if it's unlocked in any way so you can't double-dip tech levels at R&D.
return
/obj/item/weapon/storage/lockbox/hear_talk(mob/living/M as mob, msg)
/obj/item/weapon/storage/lockbox/hear_message(mob/living/M as mob, msg)
/obj/item/weapon/storage/lockbox/large
name = "Large lockbox"
desc = "A large lockbox"
@@ -147,6 +147,9 @@
usr << "<span class='notice'>[src] is locked!</span>"
return 0
/obj/item/weapon/storage/secure/hear_talk(mob/living/M as mob, msg)
/obj/item/weapon/storage/secure/hear_message(mob/living/M as mob, msg)
// -----------------------------
// Secure Briefcase
@@ -462,6 +462,16 @@
O.emp_act(severity)
..()
/obj/item/weapon/storage/hear_talk(mob/living/M as mob, msg)
..()
for(var/obj/O in contents)
O.hear_talk(M, msg)
/obj/item/weapon/storage/hear_message(mob/living/M as mob, msg)
..()
for(var/obj/O in contents)
O.hear_message(M, msg)
// BubbleWrap - A box can be folded up to make card
/obj/item/weapon/storage/attack_self(mob/user as mob)