Merge branch 'master' into master

This commit is contained in:
Thalpy
2019-07-15 21:23:04 +01:00
committed by GitHub
130 changed files with 707 additions and 291 deletions
+1 -1
View File
@@ -422,7 +422,7 @@
H.equip_to_slot_or_del(I, SLOT_W_UNIFORM)
qdel(olduniform)
if(droptype == "Yes")
I.item_flags |= NODROP
ADD_TRAIT(I, TRAIT_NODROP, ADMIN_TRAIT)
else
to_chat(H, "You're not kawaii enough for this.")
@@ -30,9 +30,12 @@
var/combat_armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 90, "acid" = 90)
/obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop()
item_flags ^= NODROP
if(HAS_TRAIT_FROM(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT))
REMOVE_TRAIT(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT)
else
ADD_TRAIT(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT)
if(ismob(loc))
to_chat(loc, "<span class='notice'>Your vest is now [item_flags & NODROP ? "locked" : "unlocked"].</span>")
to_chat(loc, "<span class='notice'>Your vest is now [HAS_TRAIT_FROM(src, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT) ? "locked" : "unlocked"].</span>")
/obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode()
switch(mode)
@@ -17,7 +17,7 @@
var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H
if(V)
console.AddVest(V)
V.item_flags |= NODROP
ADD_TRAIT(V, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT)
var/obj/item/storage/backpack/B = locate() in H
if(B)
@@ -75,7 +75,7 @@
dat+="<br>"
dat += "<a href='?src=[REF(src)];select_disguise=1'>Select Agent Vest Disguise</a><br>"
dat += "<a href='?src=[REF(src)];toggle_vest=1'>[vest.item_flags & NODROP ? "Unlock" : "Lock"] Vest</a><br>"
dat += "<a href='?src=[REF(src)];toggle_vest=1'>[HAS_TRAIT_FROM(vest, TRAIT_NODROP, ABDUCTOR_VEST_TRAIT) ? "Unlock" : "Lock"] Vest</a><br>"
else
dat += "<span class='bad'>NO AGENT VEST DETECTED</span>"
var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500)
@@ -155,7 +155,7 @@
item_state = "arm_blade"
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL
item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL
w_class = WEIGHT_CLASS_HUGE
force = 25
throwforce = 0 //Just to be on the safe side
@@ -169,6 +169,7 @@
/obj/item/melee/arm_blade/Initialize(mapload,silent,synthetic)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
if(ismob(loc) && !silent)
loc.visible_message("<span class='warning'>A grotesque blade forms around [loc.name]\'s arm!</span>", "<span class='warning'>Our arm twists and mutates, transforming it into a deadly blade.</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
if(synthetic)
@@ -242,7 +243,7 @@
item_state = "tentacle"
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL | NOBLUDGEON
item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL | NOBLUDGEON
flags_1 = NONE
w_class = WEIGHT_CLASS_HUGE
ammo_type = /obj/item/ammo_casing/magic/tentacle
@@ -256,6 +257,7 @@
/obj/item/gun/magic/tentacle/Initialize(mapload, silent)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
if(ismob(loc))
if(!silent)
loc.visible_message("<span class='warning'>[loc.name]\'s arm starts stretching inhumanly!</span>", "<span class='warning'>Our arm twists and mutates, transforming it into a tentacle.</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
@@ -427,7 +429,7 @@
/obj/item/shield/changeling
name = "shield-like mass"
desc = "A mass of tough, boney tissue. You can still see the fingers as a twisted pattern in the shield."
item_flags = ABSTRACT | NODROP | DROPDEL
item_flags = ABSTRACT | DROPDEL
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "ling_shield"
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
@@ -438,6 +440,7 @@
/obj/item/shield/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
if(ismob(loc))
loc.visible_message("<span class='warning'>The end of [loc.name]\'s hand inflates rapidly, forming a huge shield-like mass!</span>", "<span class='warning'>We inflate our hand into a strong shield.</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
@@ -479,13 +482,14 @@
name = "flesh mass"
icon_state = "lingspacesuit"
desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel."
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
clothing_flags = STOPSPRESSUREDAMAGE //Not THICKMATERIAL because it's organic tissue, so if somebody tries to inject something into it, it still ends up in your blood. (also balance but muh fluff)
allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) //No armor at all.
/obj/item/clothing/suit/space/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
if(ismob(loc))
loc.visible_message("<span class='warning'>[loc.name]\'s flesh rapidly inflates, forming a bloated mass around [loc.p_their()] body!</span>", "<span class='warning'>We inflate our flesh, creating a spaceproof suit!</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
START_PROCESSING(SSobj, src)
@@ -499,11 +503,15 @@
name = "flesh mass"
icon_state = "lingspacehelmet"
desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front."
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
clothing_flags = STOPSPRESSUREDAMAGE
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
/obj/item/clothing/head/helmet/space/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
/***************************************\
|*****************ARMOR*****************|
\***************************************/
@@ -529,7 +537,7 @@
name = "chitinous mass"
desc = "A tough, hard covering of black chitin."
icon_state = "lingarmor"
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 90, "acid" = 90)
flags_inv = HIDEJUMPSUIT
@@ -538,6 +546,7 @@
/obj/item/clothing/suit/armor/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
if(ismob(loc))
loc.visible_message("<span class='warning'>[loc.name]\'s flesh turns black, quickly transforming into a hard, chitinous mass!</span>", "<span class='warning'>We harden our flesh, creating a suit of armor!</span>", "<span class='italics'>You hear organic matter ripping and tearing!</span>")
@@ -545,6 +554,10 @@
name = "chitinous mass"
desc = "A tough, hard covering of black chitin with transparent chitin in front."
icon_state = "lingarmorhelmet"
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 90, "acid" = 90)
flags_inv = HIDEEARS|HIDEHAIR|HIDEEYES|HIDEFACIALHAIR|HIDEFACE
/obj/item/clothing/head/helmet/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
@@ -11,7 +11,11 @@
/obj/item/clothing/glasses/changeling
name = "flesh"
item_flags = NODROP
/obj/item/clothing/glasses/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/glasses/changeling/attack_hand(mob/user)
@@ -23,7 +27,11 @@
/obj/item/clothing/under/changeling
name = "flesh"
item_flags = NODROP
/obj/item/clothing/under/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/under/changeling/attack_hand(mob/user)
@@ -35,9 +43,13 @@
/obj/item/clothing/suit/changeling
name = "flesh"
item_flags = NODROP
allowed = list(/obj/item/changeling)
/obj/item/clothing/suit/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/suit/changeling/attack_hand(mob/user)
if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling))
@@ -48,7 +60,10 @@
/obj/item/clothing/head/changeling
name = "flesh"
item_flags = NODROP
/obj/item/clothing/head/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/head/changeling/attack_hand(mob/user)
@@ -60,7 +75,11 @@
/obj/item/clothing/shoes/changeling
name = "flesh"
item_flags = NODROP
/obj/item/clothing/shoes/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/shoes/changeling/attack_hand(mob/user)
@@ -72,7 +91,11 @@
/obj/item/clothing/gloves/changeling
name = "flesh"
item_flags = NODROP
/obj/item/clothing/gloves/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/gloves/changeling/attack_hand(mob/user)
@@ -84,7 +107,11 @@
/obj/item/clothing/mask/changeling
name = "flesh"
item_flags = NODROP
/obj/item/clothing/mask/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/mask/changeling/attack_hand(mob/user)
@@ -96,10 +123,14 @@
/obj/item/changeling
name = "flesh"
item_flags = NODROP
slot_flags = ALL
allowed = list(/obj/item/changeling)
/obj/item/changeling/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/changeling/attack_hand(mob/user)
if(loc == user && user.mind && user.mind.has_antag_datum(/datum/antagonist/changeling))
+5 -3
View File
@@ -339,7 +339,7 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "disintegrate"
item_state = null
item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL
item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL
w_class = WEIGHT_CLASS_HUGE
throwforce = 0
@@ -350,11 +350,13 @@
var/health_cost = 0 //The amount of health taken from the user when invoking the spell
var/datum/action/innate/cult/blood_spell/source
/obj/item/melee/blood_magic/New(loc, spell)
/obj/item/melee/blood_magic/Initialize(mapload, spell)
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
source = spell
uses = source.charges
health_cost = source.health_cost
..()
/obj/item/melee/blood_magic/Destroy()
if(!QDELETED(source))
+21 -4
View File
@@ -64,9 +64,14 @@
/obj/item/melee/cultblade/ghost
name = "eldritch sword"
force = 19 //can't break normal airlocks
item_flags = NEEDS_PERMIT | NODROP | DROPDEL
item_flags = NEEDS_PERMIT | DROPDEL
flags_1 = NONE
/obj/item/melee/cultblade/ghost/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
/obj/item/melee/cultblade/pickup(mob/living/user)
..()
if(!iscultist(user))
@@ -298,7 +303,12 @@
item_state = "cult_hoodalt"
/obj/item/clothing/head/culthood/alt/ghost
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
/obj/item/clothing/head/culthood/alt/ghost/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
/obj/item/clothing/suit/cultrobes/alt
name = "cultist robes"
@@ -307,7 +317,11 @@
item_state = "cultrobesalt"
/obj/item/clothing/suit/cultrobes/alt/ghost
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
/obj/item/clothing/suit/cultrobes/alt/ghost/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
/obj/item/clothing/head/magus
name = "magus helm"
@@ -796,7 +810,7 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "disintegrate"
item_state = null
item_flags = ABSTRACT | NODROP | DROPDEL
item_flags = ABSTRACT | DROPDEL
w_class = WEIGHT_CLASS_HUGE
throwforce = 0
throw_range = 0
@@ -805,6 +819,9 @@
var/firing = FALSE
var/angle
/obj/item/blood_beam/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
/obj/item/blood_beam/afterattack(atom/A, mob/living/user, flag, params)
. = ..()
@@ -60,7 +60,7 @@
W.access += get_all_centcom_access()
W.assignment = "Highlander"
W.registered_name = H.real_name
W.item_flags |= NODROP
ADD_TRAIT(W, TRAIT_NODROP, HIGHLANDER)
W.update_label(H.real_name)
H.equip_to_slot_or_del(W, SLOT_WEAR_ID)
@@ -65,9 +65,13 @@
/obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative.
name = "cyborg syndicate pinpointer"
desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives."
item_flags = NODROP
flags_1 = NONE
/obj/item/pinpointer/syndicate_cyborg/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
/obj/item/pinpointer/syndicate_cyborg/scan_for_target()
target = null
var/list/possible_targets = list()
@@ -358,8 +358,14 @@
return result.Join("<br>")
/datum/antagonist/traitor/roundend_report_footer()
return "<br><b>The code phrases were:</b> <span class='codephrase'>[GLOB.syndicate_code_phrase]</span><br>\
<b>The code responses were:</b> <span class='codephrase'>[GLOB.syndicate_code_response]</span><br>"
var/phrases = jointext(GLOB.syndicate_code_phrase, ", ")
var/responses = jointext(GLOB.syndicate_code_response, ", ")
var message = "<br><b>The code phrases were:</b> <span class='bluetext'>[phrases]</span><br>\
<b>The code responses were:</b> <span class='redtext'>[responses]</span><br>"
return message
/datum/antagonist/traitor/is_gamemode_hero()
return SSticker.mode.name == "traitor"
@@ -650,7 +650,7 @@
if(0)
add_overlay(AALARM_OVERLAY_GREEN)
overlay_state = AALARM_OVERLAY_GREEN
light_color = LIGHT_COLOR_PALEBLUE
light_color = LIGHT_COLOR_GREEN
set_light(brightness_on)
if(1)
add_overlay(AALARM_OVERLAY_WARN)
@@ -497,14 +497,14 @@
W.registered_name = H.real_name
W.update_label(W.registered_name, W.assignment)
// The shielded hardsuit is already NODROP
// The shielded hardsuit is already TRAIT_NODROP
no_drops += H.get_item_by_slot(SLOT_GLOVES)
no_drops += H.get_item_by_slot(SLOT_SHOES)
no_drops += H.get_item_by_slot(SLOT_W_UNIFORM)
no_drops += H.get_item_by_slot(SLOT_EARS)
for(var/i in no_drops)
var/obj/item/I = i
I.item_flags |= NODROP
ADD_TRAIT(I, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT)
/datum/outfit/ctf/instagib
r_hand = /obj/item/gun/energy/laser/instakill
+3 -3
View File
@@ -60,7 +60,7 @@
to_chat(owner, "<span class='warning'>You shouldn't be able to toggle a camogear helmetmask if you're not wearing it</span>")
if(new_headgear)
// Force drop the item in the headslot, even though
// it's NODROP_1
// it's TRAIT_NODROP
D.dropItemToGround(target, TRUE)
qdel(old_headgear)
// where is `SLOT_HEAD` defined? WHO KNOWS
@@ -418,12 +418,12 @@
/obj/item/clothing/head/chameleon/drone
// The camohat, I mean, holographic hat projection, is part of the
// drone itself.
item_flags = NODROP
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
// which means it offers no protection, it's just air and light
/obj/item/clothing/head/chameleon/drone/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
chameleon_action.random_look()
var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src)
togglehatmask_action.UpdateButtonIcon()
@@ -472,13 +472,13 @@
/obj/item/clothing/mask/chameleon/drone
//Same as the drone chameleon hat, undroppable and no protection
item_flags = NODROP
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
// Can drones use the voice changer part? Let's not find out.
vchange = 0
/obj/item/clothing/mask/chameleon/drone/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
chameleon_action.random_look()
var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src)
togglehatmask_action.UpdateButtonIcon()
+3 -1
View File
@@ -43,6 +43,8 @@
/obj/item/clothing/Initialize()
. = ..()
if(CHECK_BITFIELD(clothing_flags, VOICEBOX_TOGGLABLE))
actions_types += /datum/action/item_action/toggle_voice_box
if(ispath(pocket_storage_component_path))
LoadComponent(pocket_storage_component_path)
@@ -135,7 +137,7 @@
update_clothes_damaged_state(TRUE)
if(ismob(loc)) //It's not important enough to warrant a message if nobody's wearing it
var/mob/M = loc
M.visible_message("<span class='warning'>[M]'s [name] starts to fall apart!", "<span class='warning'>Your [name] starts to fall apart!</span>")
to_chat(M, "<span class='warning'>Your [name] starts to fall apart!</span>")
/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE)
var/index = "[REF(initial(icon))]-[initial(icon_state)]"
+4 -1
View File
@@ -378,10 +378,13 @@
vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
darkness_view = 8
scan_reagents = TRUE
item_flags = NODROP
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
resistance_flags = LAVA_PROOF | FIRE_PROOF
/obj/item/clothing/glasses/godeye/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, EYE_OF_GOD_TRAIT)
/obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, src) && W != src && W.loc == user)
if(W.icon_state == "godeye")
+4 -1
View File
@@ -121,9 +121,12 @@
/obj/item/clothing/head/beret/highlander
desc = "That was white fabric. <i>Was.</i>"
item_flags = NODROP
dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES
/obj/item/clothing/head/beret/highlander/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER)
//Security
/obj/item/clothing/head/HoS
+4 -1
View File
@@ -221,9 +221,12 @@
icon_state = "shamebrero"
item_state = "shamebrero"
desc = "Once it's on, it never comes off."
item_flags = NODROP
dog_fashion = null
/obj/item/clothing/head/sombrero/shamebrero/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
/obj/item/clothing/head/cone
desc = "This cone is trying to warn you of something!"
name = "warning cone"
+25 -8
View File
@@ -75,7 +75,7 @@
/obj/item/clothing/mask/pig
name = "pig mask"
desc = "A rubber pig mask."
desc = "A rubber pig mask with a builtin voice modulator."
icon_state = "pig"
item_state = "pig"
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
@@ -92,7 +92,11 @@
desc = "It looks like a mask, but closer inspection reveals it's melded onto this persons face!" //It's only ever going to be attached to your face.
flags_inv = HIDEFACIALHAIR
clothing_flags = NONE
item_flags = NODROP
/obj/item/clothing/mask/pig/cursed/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
playsound(get_turf(src), 'sound/magic/pighead_curse.ogg', 50, 1)
///frog mask - reeee!!
/obj/item/clothing/mask/frog
@@ -114,16 +118,19 @@
/obj/item/clothing/mask/frog/cursed
clothing_flags = NONE
item_flags = NODROP //reee!!
/obj/item/clothing/mask/frog/cursed/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
/obj/item/clothing/mask/frog/cursed/equipped(mob/user, slot)
var/mob/living/carbon/C = user
if(C.wear_mask == src)
to_chat(user, "<span class='warning'><B>[src] was cursed! Ree!!</B></span>")
if(C.wear_mask == src && HAS_TRAIT_FROM(src, TRAIT_NODROP, CURSED_ITEM_TRAIT))
to_chat(user, "<span class='userdanger'><B>[src] was cursed! Ree!!</B></span>")
return ..()
/obj/item/clothing/mask/cowmask
name = "Cow mask"
name = "Cow mask with a builtin voice modulator."
desc = "A rubber cow mask,"
icon = 'icons/mob/mask.dmi'
icon_state = "cowmask"
@@ -137,12 +144,17 @@
if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
speech_args[SPEECH_MESSAGE] = pick("Moooooooo!","Moo!","Moooo!")
/obj/item/clothing/mask/cowmask/cursed
name = "cow face"
desc = "It looks like a cow mask, but closer inspection reveals it's melded onto this persons face!"
flags_inv = HIDEFACIALHAIR
clothing_flags = NONE
item_flags = NODROP
/obj/item/clothing/mask/cowmask/cursed/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
playsound(get_turf(src), 'sound/magic/cowhead_curse.ogg', 50, 1)
/obj/item/clothing/mask/horsehead
name = "horse head mask"
@@ -157,12 +169,17 @@
if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
speech_args[SPEECH_MESSAGE] = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
/obj/item/clothing/mask/horsehead/cursed
name = "horse face"
desc = "It initially looks like a mask, but it's melded into the poor person's face."
clothing_flags = NONE
flags_inv = HIDEFACIALHAIR
item_flags = NODROP
/obj/item/clothing/mask/horsehead/cursed/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
playsound(get_turf(src), 'sound/magic/horsehead_curse.ogg', 50, 1)
/obj/item/clothing/mask/rat
name = "rat mask"
+5 -1
View File
@@ -157,7 +157,11 @@
icon_state = "cultalt"
/obj/item/clothing/shoes/cult/alt/ghost
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
/obj/item/clothing/shoes/cult/alt/ghost/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
/obj/item/clothing/shoes/cyborg
name = "cyborg boots"
+6 -11
View File
@@ -27,7 +27,6 @@
armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 1000)
resistance_flags = FIRE_PROOF | ACID_PROOF
var/list/chronosafe_items = list(/obj/item/chrono_eraser, /obj/item/gun/energy/chrono_gun)
var/list/hands_nodrop = list()
var/obj/item/clothing/head/helmet/space/chronos/helmet = null
var/obj/effect/chronos_cam/camera = null
var/datum/action/innate/chrono_teleport/teleport_now = new
@@ -97,8 +96,7 @@
user.anchored = FALSE
teleporting = 0
for(var/obj/item/I in user.held_items)
if(I in hands_nodrop)
I.item_flags &= ~NODROP
REMOVE_TRAIT(I, TRAIT_NODROP, CHRONOSUIT_TRAIT)
if(camera)
camera.remove_target_ui()
camera.forceMove(user)
@@ -131,11 +129,8 @@
user.ExtinguishMob()
hands_nodrop = list()
for(var/obj/item/I in user.held_items)
if(!(I.item_flags & NODROP))
hands_nodrop += I
I.item_flags |= NODROP
ADD_TRAIT(I, TRAIT_NODROP, CHRONOSUIT_TRAIT)
user.animate_movement = NO_STEPS
user.changeNext_move(8 + phase_in_ds)
user.notransform = 1
@@ -194,9 +189,9 @@
if(user.head && istype(user.head, /obj/item/clothing/head/helmet/space/chronos))
to_chat(user, "\[ <span style='color: #00ff00;'>ok</span> \] Mounting /dev/helm")
helmet = user.head
helmet.item_flags |= NODROP
ADD_TRAIT(helmet, TRAIT_NODROP, CHRONOSUIT_TRAIT)
helmet.suit = src
src.item_flags |= NODROP
ADD_TRAIT(src, TRAIT_NODROP, CHRONOSUIT_TRAIT)
to_chat(user, "\[ <span style='color: #00ff00;'>ok</span> \] Starting brainwave scanner")
to_chat(user, "\[ <span style='color: #00ff00;'>ok</span> \] Starting ui display driver")
to_chat(user, "\[ <span style='color: #00ff00;'>ok</span> \] Initializing chronowalk4-view")
@@ -215,7 +210,7 @@
activating = 1
var/mob/living/carbon/human/user = src.loc
var/hard_landing = teleporting && force
item_flags &= ~NODROP
REMOVE_TRAIT(src, TRAIT_NODROP, CHRONOSUIT_TRAIT)
cooldown = world.time + cooldowntime * 1.5
activated = 0
activating = 0
@@ -236,7 +231,7 @@
to_chat(user, "\[ <span style='color: #ff5500;'>ok</span> \] Unmounting /dev/helmet")
to_chat(user, "logout")
if(helmet)
helmet.item_flags &= ~NODROP
REMOVE_TRAIT(helmet, TRAIT_NODROP, CHRONOSUIT_TRAIT)
helmet.suit = null
helmet = null
if(camera)
@@ -897,7 +897,7 @@
usermessage("You're already wearing something on your back!", "boldwarning")
return FALSE
user.equip_to_slot_if_possible(pack,SLOT_BACK,0,0,1)
pack.item_flags |= NODROP
ADD_TRAIT(pack, TRAIT_NODROP, FLIGHTSUIT_TRAIT)
resync()
user.visible_message("<span class='notice'>A [pack.name] extends from [user]'s [name] and clamps to [user.p_their()] back!</span>")
user.update_inv_wear_suit()
@@ -911,7 +911,7 @@
return FALSE
if(pack.flight && forced)
pack.disable_flight(1)
pack.item_flags &= ~NODROP
REMOVE_TRAIT_FROM(pack, TRAIT_NODROP, FLIGHTSUIT_TRAIT)
resync()
if(user)
user.transferItemToLoc(pack, src, TRUE)
@@ -935,14 +935,14 @@
usermessage("You're already wearing something on your feet!", "boldwarning")
return FALSE
user.equip_to_slot_if_possible(shoes,SLOT_SHOES,0,0,1)
shoes.item_flags |= NODROP
ADD_TRAIT(shoes, TRAIT_NODROP, FLIGHTSUIT_TRAIT)
user.visible_message("<span class='notice'>[user]'s [name] extends a pair of [shoes.name] over [user.p_their()] feet!</span>")
user.update_inv_wear_suit()
playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1)
deployedshoes = TRUE
/obj/item/clothing/suit/space/hardsuit/flightsuit/proc/retract_flightshoes(forced = FALSE)
shoes.item_flags &= ~NODROP
REMOVE_TRAIT_FROM(shoes, TRAIT_NODROP, FLIGHTSUIT_TRAIT)
playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1)
if(user)
user.transferItemToLoc(shoes, src, TRUE)
+4 -1
View File
@@ -766,12 +766,15 @@
icon_state = "ert_medical"
item_state = "ert_medical"
item_color = "ert_medical"
item_flags = NODROP //Dont want people changing into the other teams gear
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf
armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95)
slowdown = 0
max_charges = 5
/obj/item/clothing/suit/space/hardsuit/shielded/ctf/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT)
/obj/item/clothing/suit/space/hardsuit/shielded/ctf/red
name = "red shielded hardsuit"
icon_state = "ert_security"
@@ -171,10 +171,13 @@ Contains:
item_color = "ert_commander"
armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80)
strip_delay = 130
item_flags = NODROP
brightness_on = 7
resistance_flags = ACID_PROOF
/obj/item/clothing/head/helmet/space/hardsuit/ert/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT)
/obj/item/clothing/suit/space/hardsuit/ert
name = "emergency response team suit"
desc = "Standard issue command suit for the ERT."
@@ -237,8 +240,6 @@ Contains:
item_state = "hardsuit0-ert_commander-alert"
item_color = "ert_commander-alert"
armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
strip_delay = 130
item_flags = NODROP
brightness_on = 8
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -248,11 +249,8 @@ Contains:
icon_state = "ert_command-alert"
item_state = "ert_command-alert"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
strip_delay = 130
resistance_flags = FIRE_PROOF | ACID_PROOF
tauric = TRUE //Citadel Add for tauric hardsuits
//ERT Security
/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/sec
@@ -342,9 +340,13 @@ Contains:
armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75) //As whimpy as a space carp
brightness_on = 0 //luminosity when on
actions_types = list()
item_flags = NODROP
mutantrace_variation = NO_MUTANTRACE_VARIATION
/obj/item/clothing/head/helmet/space/hardsuit/carp/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, LOCKED_HELMET_TRAIT)
/obj/item/clothing/suit/space/hardsuit/carp
name = "carp space suit"
desc = "A slimming piece of dubious space carp technology, you suspect it won't stand up to hand-to-hand blows."
-1
View File
@@ -15,7 +15,6 @@
icon_state = "golhood"
desc = "A hood for a cloak."
body_parts_covered = HEAD
item_flags = NODROP
flags_inv = HIDEHAIR|HIDEEARS
/obj/item/clothing/neck/cloak/suicide_act(mob/user)
+4 -1
View File
@@ -237,7 +237,10 @@
desc = "Forced to live on your shameful acting as a fake Mexican, you and your poncho have grown inseparable. Literally."
icon_state = "ponchoshame"
item_state = "ponchoshame"
item_flags = NODROP
/obj/item/clothing/suit/poncho/ponchoshame/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
/obj/item/clothing/suit/whitedress
name = "white dress"
+5 -1
View File
@@ -22,7 +22,11 @@
resistance_flags = NONE
/obj/item/clothing/under/color/black/ghost
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
/obj/item/clothing/under/color/black/ghost/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
+4 -1
View File
@@ -388,7 +388,10 @@
/obj/item/clothing/under/kilt/highlander
desc = "You're the only one worthy of this kilt."
item_flags = NODROP
/obj/item/clothing/under/kilt/highlander/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER)
/obj/item/clothing/under/sexymime
name = "sexy mime outfit"
+50
View File
@@ -791,6 +791,56 @@
time = 40
category = CAT_MISC
/datum/crafting_recipe/bronze_driver
name = "Bronze Plated Screwdriver"
result = /obj/item/screwdriver/bronze
reqs = list(/obj/item/screwdriver = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/datum/reagent/water = 15)
time = 40
category = CAT_MISC
/datum/crafting_recipe/bronze_welder
name = "Bronze Plated Welding Tool"
result = /obj/item/weldingtool/bronze
reqs = list(/obj/item/weldingtool = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/datum/reagent/water = 15)
time = 40
category = CAT_MISC
/datum/crafting_recipe/bronze_wirecutters
name = "Bronze Plated Wirecutters"
result = /obj/item/wirecutters/bronze
reqs = list(/obj/item/wirecutters = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/datum/reagent/water = 15)
time = 40
category = CAT_MISC
/datum/crafting_recipe/bronze_crowbar
name = "Bronze Plated Crowbar"
result = /obj/item/crowbar/bronze
reqs = list(/obj/item/crowbar = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/datum/reagent/water = 15)
time = 40
category = CAT_MISC
/datum/crafting_recipe/bronze_wrench
name = "Bronze Plated Wrench"
result = /obj/item/wrench/bronze
reqs = list(/obj/item/wrench = 1,
/obj/item/stack/cable_coil = 10,
/obj/item/stack/tile/bronze = 1,
/datum/reagent/water = 15)
time = 40
category = CAT_MISC
/datum/crafting_recipe/smartdart
name = "Medical smartdart"
result = /obj/item/reagent_containers/syringe/dart
+2 -1
View File
@@ -50,7 +50,8 @@
var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list
H.dropItemToGround(H.get_item_by_slot(i), TRUE)
H.equip_to_slot_or_del(I, i)
I.item_flags |= NODROP | DROPDEL
ADD_TRAIT(I, TRAIT_NODROP, CURSED_ITEM_TRAIT)
I.item_flags |= DROPDEL
I.name = "cursed " + I.name
for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
@@ -94,7 +94,7 @@ God bless America.
else if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off" ,I)) //where's the open maint panel icon?!
return
else
if(is_type_in_typecache(I, deepfry_blacklisted_items) || (I.item_flags & (ABSTRACT | NODROP | DROPDEL)))
if(is_type_in_typecache(I, deepfry_blacklisted_items) || HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL)))
return ..()
else if(!frying && user.transferItemToLoc(I, src))
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
@@ -78,7 +78,7 @@
if(!ignore_clothing)
for(var/obj/item/I in C.held_items + C.get_equipped_items())
if(!(I.item_flags & NODROP))
if(!HAS_TRAIT(I, TRAIT_NODROP))
to_chat(user, "<span class='danger'>Subject may not have abiotic items on.</span>")
return
+1
View File
@@ -61,6 +61,7 @@ Clown
return
H.dna.add_mutation(CLOWNMUT)
H.dna.add_mutation(SMILE)
/*
Mime
@@ -65,9 +65,12 @@
/obj/item/pickaxe/drill/cyborg
name = "cyborg mining drill"
desc = "An integrated electric mining drill."
item_flags = NODROP
flags_1 = NONE
/obj/item/pickaxe/drill/cyborg/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
/obj/item/pickaxe/drill/diamonddrill
name = "diamond-tipped mining drill"
icon_state = "diamonddrill"
@@ -143,7 +143,7 @@
//Rod of Asclepius
/obj/item/rod_of_asclepius
name = "Rod of Asclepius"
name = "\improper Rod of Asclepius"
desc = "A wooden rod about the size of your forearm with a snake carved around it, winding it's way up the sides of the rod. Something about it seems to inspire in you the responsibilty and duty to help others."
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "asclepius_dormant"
@@ -189,7 +189,8 @@
activated()
/obj/item/rod_of_asclepius/proc/activated()
item_flags = NODROP | DROPDEL
item_flags = DROPDEL
ADD_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT)
desc = "A short wooden rod with a mystical snake inseparably gripping itself and the rod to your forearm. It flows with a healing energy that disperses amongst yourself and those around you. "
icon_state = "asclepius_active"
activated = TRUE
+4 -4
View File
@@ -275,7 +275,7 @@
/mob/proc/canUnEquip(obj/item/I, force)
if(!I)
return TRUE
if((I.item_flags & NODROP) && !force)
if(HAS_TRAIT(I, TRAIT_NODROP) && !force)
return FALSE
return TRUE
@@ -309,13 +309,13 @@
//DO NOT CALL THIS PROC
//use one of the above 3 helper procs
//you may override it, but do not modify the args
/mob/proc/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE) //Force overrides NODROP_1 for things like wizarditis and admin undress.
/mob/proc/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE) //Force overrides TRAIT_NODROP for things like wizarditis and admin undress.
//Use no_move if the item is just gonna be immediately moved afterward
//Invdrop is used to prevent stuff in pockets dropping. only set to false if it's going to immediately be replaced
if(!I) //If there's nothing to drop, the drop is automatically succesfull. If(unEquip) should generally be used to check for NODROP_1.
if(!I) //If there's nothing to drop, the drop is automatically succesfull. If(unEquip) should generally be used to check for TRAIT_NODROP.
return TRUE
if((I.item_flags & NODROP) && !force)
if(HAS_TRAIT(I, TRAIT_NODROP) && !force)
return FALSE
var/hand_index = get_held_index_of_item(I)
+5 -1
View File
@@ -138,7 +138,11 @@
name = "blood crawl"
desc = "You are unable to hold anything while in this form."
icon = 'icons/effects/blood.dmi'
item_flags = NODROP | ABSTRACT
item_flags = ABSTRACT
/obj/item/bloodcrawl/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
/mob/living/proc/exit_blood_effect(obj/effect/decal/cleanable/B)
playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1)
@@ -103,9 +103,13 @@
name = "\improper royal parasite"
desc = "Inject this into one of your grown children to promote her to a Praetorian!"
icon_state = "alien_medal"
item_flags = ABSTRACT | NODROP | DROPDEL
item_flags = ABSTRACT | DROPDEL
icon = 'icons/mob/alien.dmi'
/obj/item/queenpromote/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
/obj/item/queenpromote/attack(mob/living/M, mob/living/carbon/alien/humanoid/user)
if(!isalienadult(M) || isalienroyal(M))
to_chat(user, "<span class='noticealien'>You may only use this with your adult, non-royal children!</span>")
+2 -2
View File
@@ -176,7 +176,7 @@
if(start_T && end_T)
log_combat(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]")
else if(!(I.item_flags & (NODROP | ABSTRACT)))
else if(!CHECK_BITFIELD(I.item_flags, ABSTRACT) && !HAS_TRAIT(I, TRAIT_NODROP))
thrown_thing = I
dropItemToGround(I)
@@ -410,7 +410,7 @@
return initial(pixel_y)
/mob/living/carbon/proc/accident(obj/item/I)
if(!I || (I.item_flags & (NODROP | ABSTRACT)))
if(!I || (I.item_flags & ABSTRACT) || HAS_TRAIT(I, TRAIT_NODROP))
return
//dropItemToGround(I) CIT CHANGE - makes it so the item doesn't drop if the modifier rolls above 100
@@ -252,7 +252,7 @@
var/delay_denominator = 1
if(pocket_item && !(pocket_item.item_flags & ABSTRACT))
if(pocket_item.item_flags & NODROP)
if(HAS_TRAIT(pocket_item, TRAIT_NODROP))
to_chat(usr, "<span class='warning'>You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!</span>")
to_chat(usr, "<span class='notice'>You try to empty [src]'s [pocket_side] pocket.</span>")
else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.item_flags & ABSTRACT))
@@ -279,7 +279,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(mutanthands)
// Drop items in hands
// If you're lucky enough to have a NODROP_1 item, then it stays.
// If you're lucky enough to have a TRAIT_NODROP item, then it stays.
for(var/V in C.held_items)
var/obj/item/I = V
if(istype(I))
@@ -1072,7 +1072,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return FALSE
return equip_delay_self_check(I, H, bypass_equip_delay_self)
if(SLOT_L_STORE)
if(I.item_flags & NODROP) //Pockets aren't visible, so you can't move NODROP_1 items into them.
if(HAS_TRAIT(I, TRAIT_NODROP)) //Pockets aren't visible, so you can't move TRAIT_NODROP items into them.
return FALSE
if(H.l_store)
return FALSE
@@ -1088,7 +1088,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) )
return TRUE
if(SLOT_R_STORE)
if(I.item_flags & NODROP)
if(HAS_TRAIT(I, TRAIT_NODROP))
return FALSE
if(H.r_store)
return FALSE
@@ -1105,7 +1105,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return TRUE
return FALSE
if(SLOT_S_STORE)
if(I.item_flags & NODROP)
if(HAS_TRAIT(I, TRAIT_NODROP))
return FALSE
if(H.s_store)
return FALSE
@@ -171,12 +171,13 @@
armour_penetration = 35
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
item_flags = ABSTRACT | NODROP | DROPDEL
item_flags = ABSTRACT | DROPDEL
w_class = WEIGHT_CLASS_HUGE
sharpness = IS_SHARP
/obj/item/light_eater/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
AddComponent(/datum/component/butchering, 80, 70)
/obj/item/light_eater/afterattack(atom/movable/AM, mob/user, proximity)
@@ -115,7 +115,7 @@
/mob/living/carbon/monkey/proc/handle_combat()
if(pickupTarget)
if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.item_flags & NODROP))
if(restrained() || blacklistItems[pickupTarget] || HAS_TRAIT(pickupTarget, TRAIT_NODROP))
pickupTarget = null
else
pickupTimer++
+2 -7
View File
@@ -28,12 +28,7 @@
message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq)
if (src.mind.has_antag_datum(/datum/antagonist/traitor))
for (var/codeword in GLOB.syndicate_code_phrase)
var/regex/codeword_match = new("([codeword])", "ig")
message = codeword_match.Replace(message, "<span class='blue'>$1</span>")
for (var/codeword in GLOB.syndicate_code_response)
var/regex/codeword_match = new("([codeword])", "ig")
message = codeword_match.Replace(message, "<span class='red'>$1</span>")
message = GLOB.syndicate_code_phrase_regex.Replace(message, "<span class='blue'>$1</span>")
message = GLOB.syndicate_code_response_regex.Replace(message, "<span class='red'>$1</span>")
return message
+2 -2
View File
@@ -709,7 +709,7 @@
// The src mob is trying to strip an item from someone
// Override if a certain type of mob should be behave differently when stripping items (can't, for example)
/mob/living/stripPanelUnequip(obj/item/what, mob/who, where)
if(what.item_flags & NODROP)
if(HAS_TRAIT(what, TRAIT_NODROP))
to_chat(src, "<span class='warning'>You can't remove \the [what.name], it appears to be stuck!</span>")
return
who.visible_message("<span class='danger'>[src] tries to remove [who]'s [what.name].</span>", \
@@ -734,7 +734,7 @@
// Override if a certain mob should be behave differently when placing items (can't, for example)
/mob/living/stripPanelEquip(obj/item/what, mob/who, where)
what = src.get_active_held_item()
if(what && (what.item_flags & NODROP))
if(what && HAS_TRAIT(what, TRAIT_NODROP))
to_chat(src, "<span class='warning'>You can't put \the [what.name] on [who], it's stuck to your hand!</span>")
return
if(what)
@@ -119,7 +119,7 @@
if(I.loc != src)
I.forceMove(src)
modules += I
I.item_flags |= NODROP
ADD_TRAIT(I, TRAIT_NODROP, CYBORG_ITEM_TRAIT)
I.mouse_opacity = MOUSE_OPACITY_OPAQUE
if(nonstandard)
added_modules += I
@@ -93,7 +93,7 @@
var/obj/item/I = new default_hatmask(src)
equip_to_slot_or_del(I, SLOT_HEAD)
access_card.item_flags |= NODROP
ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
alert_drones(DRONE_NET_CONNECT)
+1 -1
View File
@@ -79,5 +79,5 @@
/obj/item/clothing/gloves/space_ninja/examine(mob/user)
..()
if(item_flags & NODROP)
if(HAS_TRAIT_FROM(src, TRAIT_NODROP, NINJA_SUIT_TRAIT))
to_chat(user, "The energy drain mechanism is <B>[candrain?"active":"inactive"]</B>.")
+8 -8
View File
@@ -111,15 +111,15 @@ Contents:
to_chat(H, "<span class='userdanger'>ERROR</span>: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...")
return FALSE
affecting = H
item_flags |= NODROP //colons make me go all |=
ADD_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) //colons make me go all |=
slowdown = 0
n_hood = H.head
n_hood.item_flags |= NODROP
ADD_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT)
n_shoes = H.shoes
n_shoes.item_flags |= NODROP
ADD_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT)
n_shoes.slowdown--
n_gloves = H.gloves
n_gloves.item_flags |= NODROP
ADD_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT)
return TRUE
/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H)
@@ -131,18 +131,18 @@ Contents:
//This proc allows the suit to be taken off.
/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit()
affecting = null
item_flags &= ~NODROP
REMOVE_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT)
slowdown = 1
icon_state = "s-ninja"
if(n_hood)//Should be attached, might not be attached.
n_hood.item_flags &= ~NODROP
REMOVE_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT)
if(n_shoes)
n_shoes.item_flags &= ~NODROP
REMOVE_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT)
n_shoes.slowdown++
if(n_gloves)
n_gloves.icon_state = "s-ninja"
n_gloves.item_state = "s-ninja"
n_gloves.item_flags &= ~NODROP
REMOVE_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT)
n_gloves.candrain=0
n_gloves.draining=0
+1 -1
View File
@@ -89,7 +89,7 @@
if(!cell_connectors)
to_chat(user, "<span class='warning'>This [name] can't support a power cell!</span>")
return
if(W.item_flags & NODROP)
if(HAS_TRAIT(W, TRAIT_NODROP))
to_chat(user, "<span class='warning'>[W] is stuck to your hand!</span>")
return
user.dropItemToGround(W)
+5 -1
View File
@@ -440,10 +440,14 @@
name = "turret controls"
icon_state = "offhand"
w_class = WEIGHT_CLASS_HUGE
item_flags = ABSTRACT | NODROP | NOBLUDGEON
item_flags = ABSTRACT | NOBLUDGEON
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
var/delay = 0
/obj/item/turret_control/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
/obj/item/turret_control/afterattack(atom/targeted_atom, mob/user, proxflag, clickparams)
. = ..()
var/obj/machinery/power/emitter/E = user.buckled
@@ -187,7 +187,7 @@
description = "will do toxin damage and cause targets to believe they are fully healed."
analyzerdescdamage = "Does toxin damage and injects a toxin that causes the target to believe they are fully healed."
taste_description = "heaven"
color = "#C8A5DC"
color = "#5e7842"
complementary_color = "#CD7794"
message_living = ", and you feel <i>alive</i>"
@@ -743,7 +743,7 @@
name = "Triple Citrus"
id = "triple_citrus"
description = "A solution."
color = "#C8A5DC"
color = "#fff12b"
quality = DRINK_NICE
taste_description = "extreme bitterness"
glass_icon_state = "triplecitrus" //needs own sprite mine are trash
@@ -567,14 +567,14 @@
name = "Corn Starch"
id = "corn_starch"
description = "A slippery solution."
color = "#C8A5DC"
color = "#f7f6e4"
taste_description = "slime"
/datum/reagent/consumable/corn_syrup
name = "Corn Syrup"
id = "corn_syrup"
description = "Decays into sugar."
color = "#C8A5DC"
color = "#fff882"
metabolization_rate = 3 * REAGENTS_METABOLISM
taste_description = "sweet slime"
@@ -18,8 +18,8 @@
name = "Leporazine"
id = "leporazine"
description = "Leporazine will effectively regulate a patient's body temperature, ensuring it never leaves safe levels."
color = "#C8A5DC" // rgb: 200, 165, 220
pH = 8.4
color = "#82b8aa"
/datum/reagent/medicine/leporazine/on_mob_life(mob/living/carbon/M)
if(M.bodytemperature > BODYTEMP_NORMAL)
@@ -32,7 +32,7 @@
name = "Adminordrazine"
id = "adminordrazine"
description = "It's magic. We don't have to explain it."
color = "#C8A5DC" // rgb: 200, 165, 220
color = "#ffffff"
can_synth = FALSE
taste_description = "badmins"
@@ -224,7 +224,7 @@
name = "Spaceacillin"
id = "spaceacillin"
description = "Spaceacillin will prevent a patient from conventionally spreading any diseases they are currently infected with."
color = "#C8A5DC" // rgb: 200, 165, 220
color = "#f2f2f2"
metabolization_rate = 0.1 * REAGENTS_METABOLISM
pH = 8.1
@@ -234,8 +234,8 @@
id = "silver_sulfadiazine"
description = "If used in touch-based applications, immediately restores burn wounds as well as restoring more over time. If ingested through other means, deals minor toxin damage."
reagent_state = LIQUID
color = "#C8A5DC"
pH = 7.2
color = "#ffeac9"
/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
@@ -988,7 +988,7 @@
id = "bicaridine"
description = "Restores bruising. Overdose causes it instead."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#fc2626"
overdose_threshold = 30
pH = 5
@@ -1007,7 +1007,7 @@
id = "dexalin"
description = "Restores oxygen loss. Overdose causes it instead."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#13d2f0"
overdose_threshold = 30
pH = 9.7
@@ -1026,7 +1026,7 @@
id = "kelotane"
description = "Restores fire damage. Overdose causes it instead."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#ffc400"
overdose_threshold = 30
pH = 9
@@ -1045,7 +1045,7 @@
id = "antitoxin"
description = "Heals toxin damage and removes toxins in the bloodstream. Overdose causes toxin damage."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#6aff00"
overdose_threshold = 30
taste_description = "a roll of gauze"
pH = 10
@@ -1067,8 +1067,8 @@
id = "inaprovaline"
description = "Stabilizes the breathing of patients. Good for those in critical condition."
reagent_state = LIQUID
color = "#C8A5DC"
pH = 8.5
color = "#5dc1f0"
/datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/carbon/M)
if(M.losebreath >= 5)
@@ -1080,7 +1080,7 @@
id = "tricordrazine"
description = "Has a high chance to heal all types of damage. Overdose instead causes it."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#e650c0"
overdose_threshold = 30
taste_description = "grossness"
@@ -1216,7 +1216,7 @@
name = "Lavaland Extract"
id = "lavaland_extract"
description = "An extract of lavaland atmospheric and mineral elements. Heals the user in small doses, but is extremely toxic otherwise."
color = "#C8A5DC" // rgb: 200, 165, 220
color = "#a1a1a1"
overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent
can_synth = FALSE
pH = 14
@@ -1238,7 +1238,7 @@
name = "Changeling Adrenaline"
id = "changelingadrenaline"
description = "Reduces the duration of unconciousness, knockdown and stuns. Restores stamina, but deals toxin damage when overdosed."
color = "#C8A5DC"
color = "#918e53"
overdose_threshold = 30
/datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/M as mob)
@@ -1259,7 +1259,7 @@
name = "Changeling Haste"
id = "changelinghaste"
description = "Drastically increases movement speed, but deals toxin damage."
color = "#C8A5DC"
color = "#669153"
metabolization_rate = 1
/datum/reagent/medicine/changelinghaste/on_mob_metabolize(mob/living/L)
@@ -927,7 +927,7 @@
name = "Sterilizine"
id = "sterilizine"
description = "Sterilizes wounds in preparation for surgery."
color = "#C8A5DC" // rgb: 200, 165, 220
color = "#e6f1f5" // rgb: 200, 165, 220
taste_description = "bitterness"
pH = 10.5
@@ -947,7 +947,7 @@
taste_description = "iron"
pH = 6
color = "#C8A5DC" // rgb: 200, 165, 220
color = "#c2391d"
/datum/reagent/iron/on_mob_life(mob/living/carbon/C)
if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio))
@@ -1149,7 +1149,7 @@
name = "Cryptobiolin"
id = "cryptobiolin"
description = "Cryptobiolin causes confusion and dizziness."
color = "#C8A5DC" // rgb: 200, 165, 220
color = "#7529b3" // rgb: 200, 165, 220
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "sourness"
pH = 11.9
@@ -1165,7 +1165,7 @@
name = "Impedrezene"
id = "impedrezene"
description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions."
color = "#C8A5DC" // rgb: 200, 165, 220A
color = "#587a31" // rgb: 200, 165, 220A
taste_description = "numbness"
pH = 9.1
@@ -1504,7 +1504,7 @@
id = "oil"
description = "Burns in a small smoky fire, mostly used to get Ash."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#292929"
taste_description = "oil"
/datum/reagent/stable_plasma
@@ -1512,7 +1512,7 @@
id = "stable_plasma"
description = "Non-flammable plasma locked into a liquid form that cannot ignite or become gaseous/solid."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#6b008f"
taste_description = "bitterness"
taste_mult = 1.5
pH = 1.5
@@ -1526,7 +1526,7 @@
id = "iodine"
description = "Commonly added to table salt as a nutrient. On its own it tastes far less pleasing."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#694600"
taste_description = "metal"
pH = 4.5
@@ -1535,8 +1535,8 @@
id = "carpet"
description = "For those that need a more creative way to roll out a red carpet."
reagent_state = LIQUID
color = "#C8A5DC"
taste_description = "carpet" // Your tounge feels furry. Ick
color = "#b51d05"
taste_description = "carpet" // Your tounge feels furry.
/datum/reagent/carpet/reaction_turf(turf/T, reac_volume)
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
@@ -1549,7 +1549,7 @@
id = "bromine"
description = "A brownish liquid that's highly reactive. Useful for stopping free radicals, but not intended for human consumption."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#b37740"
taste_description = "chemicals"
pH = 7.8
@@ -1558,16 +1558,16 @@
id = "phenol"
description = "An aromatic ring of carbon with a hydroxyl group. A useful precursor to some medicines, but has no healing properties on its own."
reagent_state = LIQUID
color = "#C8A5DC"
taste_description = "sweet and tarry" //Again, not a strong acid.
pH = 5.5
color = "#e6e8ff"
/datum/reagent/ash
name = "Ash"
id = "ash"
description = "Supposedly phoenixes rise from these, but you've never seen it."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#665c56"
taste_description = "ash"
pH = 6.5
@@ -1576,15 +1576,15 @@
id = "acetone"
description = "A slick, slightly carcinogenic liquid. Has a multitude of mundane uses in everyday life."
reagent_state = LIQUID
color = "#C8A5DC"
taste_description = "solvent"//It's neutral though..?
color = "#e6e6e6"
/datum/reagent/colorful_reagent
name = "Colorful Reagent"
id = "colorful_reagent"
description = "Thoroughly sample the rainbow."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#FFFF00"
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
taste_description = "rainbows"
var/no_mob_color = FALSE
@@ -1614,7 +1614,7 @@
id = "hair_dye"
description = "Has a high chance of making you look like a mad scientist."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#ff00dd"
var/list/potential_colors = list("0ad","a0f","f73","d14","d14","0b5","0ad","f73","fc2","084","05e","d22","fa0") // fucking hair code
taste_description = "sourness"
@@ -1631,7 +1631,7 @@
id = "barbers_aid"
description = "A solution to hair loss across the world."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#fac34b"
taste_description = "sourness"
/datum/reagent/barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
@@ -1649,7 +1649,7 @@
id = "concentrated_barbers_aid"
description = "A concentrated solution to hair loss across the world."
reagent_state = LIQUID
color = "#C8A5DC"
color = "#ffaf00"
taste_description = "sourness"
/datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
@@ -147,4 +147,4 @@
build_type = AUTOLATHE
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
build_path = /obj/item/geiger_counter
category = list("initial", "Tools")
category = list("initial", "Tools")
+32 -14
View File
@@ -231,23 +231,22 @@
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
/datum/techweb_node/adv_bluespace
id = "adv_bluespace"
display_name = "Advanced Bluespace Research"
description = "Deeper understanding of how the Bluespace dimension works"
prereq_ids = list("practical_bluespace", "high_efficiency")
design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "tele_station", "tele_hub", "quantumpad", "launchpad", "launchpad_console",
"teleconsole", "bluespace_crystal", "wormholeprojector")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 15000)
export_price = 5000
/datum/techweb_node/practical_bluespace
id = "practical_bluespace"
display_name = "Applied Bluespace Research"
description = "Using bluespace to make things faster and better."
prereq_ids = list("bluespace_basic", "engineering")
design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "roastingstick", "ore_silo", "bluespacesmartdart")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 5000
/datum/techweb_node/adv_bluespace
id = "adv_bluespace"
display_name = "Advanced Bluespace Research"
description = "Deeper understanding of how the Bluespace dimension works"
prereq_ids = list("practical_bluespace", "high_efficiency")
design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "bluespace_crystal")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
export_price = 5000
/datum/techweb_node/bluespace_power
@@ -259,7 +258,7 @@
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
/datum/techweb_node/bluespace_holding //Bluespace-memery
/datum/techweb_node/bluespace_holding
id = "bluespace_holding"
display_name = "Bluespace Pockets"
description = "Studies into the mysterious alternate dimension known as bluespace and how to place items in the threads of reality."
@@ -267,6 +266,25 @@
design_ids = list( "bluespacebodybag","bag_holding", "bluespace_pod", "borg_upgrade_trashofholding", "blutrash", "satchel_holding")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5500)
export_price = 5000
/datum/techweb_node/bluespace_portal
id = "bluespace_portal"
display_name = "Bluespace Portals"
description = "Allows for Bluespace Tech to be used tandem with Wormhole tech."
prereq_ids = list("adv_weaponry", "adv_bluespace")
design_ids = list("wormholeprojector")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
/datum/techweb_node/bluespace_warping
id = "bluespace_warping"
display_name = "Bluespace Teleportation tech"
description = "Traversing through space at an instant with Bluespace."
prereq_ids = list("adv_power", "adv_bluespace")
design_ids = list( "tele_station", "tele_hub", "quantumpad", "launchpad", "launchpad_console", "teleconsole", "roastingstick")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
/////////////////////////plasma tech/////////////////////////
/datum/techweb_node/basic_plasma
id = "basic_plasma"
@@ -545,7 +563,7 @@
display_name = "Advanced Mining Technology"
description = "Efficiency Level 127" //dumb mc references
prereq_ids = list("basic_mining", "adv_engi", "adv_power", "adv_plasma")
design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter_adv")
design_ids = list("drill_diamond", "jackhammer", "hypermod", "plasmacutter_adv", "ore_silo")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
export_price = 5000
@@ -7,7 +7,7 @@
item_state = "bloodgun"
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
item_flags = ABSTRACT | DROPDEL | NODROP
item_flags = ABSTRACT | DROPDEL
w_class = WEIGHT_CLASS_HUGE
force = 5
max_charges = 1 //Recharging costs blood.
@@ -15,6 +15,10 @@
ammo_type = /obj/item/ammo_casing/magic/bloodchill
fire_sound = 'sound/effects/attackblob.ogg'
/obj/item/gun/magic/bloodchill/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
/obj/item/gun/magic/bloodchill/process()
charge_tick++
if(charge_tick < recharge_rate || charges >= max_charges)
@@ -708,7 +708,7 @@
imp.implant(SM, user)
SM.access_card = new /obj/item/card/id/syndicate(SM)
SM.access_card.item_flags |= NODROP
ADD_TRAIT(SM.access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
/obj/item/slimepotion/transference
name = "consciousness transference potion"
+1 -1
View File
@@ -165,7 +165,7 @@
var/datum/job/captain/C = new /datum/job/captain
access_card.access = C.get_access()
access_card.access |= ACCESS_CENT_BAR
access_card.item_flags |= NODROP
ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
/mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy()
qdel(access_card)
+2 -6
View File
@@ -38,18 +38,14 @@
return
var/list/masks = list(/obj/item/clothing/mask/pig/cursed, /obj/item/clothing/mask/cowmask/cursed, /obj/item/clothing/mask/horsehead/cursed)
var/list/mSounds = list('sound/magic/pighead_curse.ogg', 'sound/magic/cowhead_curse.ogg', 'sound/magic/horsehead_curse.ogg')
var/randM = rand(1,3)
var/choice = masks[randM]
var/obj/item/clothing/mask/magichead = new choice
var/choice = pick(masks)
var/obj/item/clothing/mask/magichead = new choice(get_turf(target))
magichead.flags_inv = null
target.visible_message("<span class='danger'>[target]'s face bursts into flames, and a barnyard animal's head takes its place!</span>", \
"<span class='danger'>Your face burns up, and shortly after the fire you realise you have the face of a barnyard animal!</span>")
if(!target.dropItemToGround(target.wear_mask))
qdel(target.wear_mask)
target.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, 1, 1)
playsound(get_turf(target), mSounds[randM], 50, 1)
target.flash_act()
+5 -1
View File
@@ -7,7 +7,7 @@
icon = 'icons/obj/items_and_weapons.dmi'
icon_state = "syndballoon"
item_state = null
item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL
item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL
w_class = WEIGHT_CLASS_HUGE
force = 0
throwforce = 0
@@ -15,6 +15,10 @@
throw_speed = 0
var/charges = 1
/obj/item/melee/touch_attack/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
/obj/item/melee/touch_attack/attack(mob/target, mob/living/carbon/user)
if(!iscarbon(user)) //Look ma, no hands
return
+1 -1
View File
@@ -34,7 +34,7 @@
for(var/obj/item/item in hand_items)
// I ensouled the nuke disk once. But it's probably a really
// mean tactic, so probably should discourage it.
if((item.item_flags & ABSTRACT) || (item.item_flags & NODROP) || SEND_SIGNAL(item, COMSIG_ITEM_IMBUE_SOUL, user))
if((item.item_flags & ABSTRACT) || HAS_TRAIT(item, TRAIT_NODROP) || SEND_SIGNAL(item, COMSIG_ITEM_IMBUE_SOUL, user))
continue
marked_item = item
to_chat(M, "<span class='warning'>You begin to focus your very being into [item]...</span>")
@@ -25,7 +25,7 @@
for(var/obj/item/item in hand_items)
if(item.item_flags & ABSTRACT)
continue
if(item.item_flags & NODROP)
if(HAS_TRAIT(item, TRAIT_NODROP))
message += "Though it feels redundant, "
marked_item = item
message += "You mark [item] for recall.</span>"
+1 -1
View File
@@ -29,7 +29,7 @@
/datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST)
if(tool)
if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (tool.item_flags & NODROP) || istype(tool, /obj/item/organ))
if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || HAS_TRAIT(tool, TRAIT_NODROP) || istype(tool, /obj/item/organ))
to_chat(user, "<span class='warning'>You can't seem to fit [tool] in [target]'s [target_zone]!</span>")
return 0
var/obj/item/electronic_assembly/EA = tool
+1 -1
View File
@@ -89,7 +89,7 @@
holder = item
holder.item_flags |= NODROP
ADD_TRAIT(holder, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
holder.slot_flags = null
holder.materials = null
@@ -51,8 +51,7 @@
active = !active
if(active)
for(var/obj/item/I in owner.held_items)
if(!(I.item_flags & NODROP))
stored_items += I
stored_items += I
var/list/L = owner.get_empty_held_indexes()
if(LAZYLEN(L) == owner.held_items.len)
@@ -62,7 +61,7 @@
else
for(var/obj/item/I in stored_items)
to_chat(owner, "<span class='notice'>Your [owner.get_held_index_name(owner.get_held_index_of_item(I))]'s grip tightens.</span>")
I.item_flags |= NODROP
ADD_TRAIT(I, TRAIT_NODROP, ANTI_DROP_IMPLANT_TRAIT)
else
release_items()
@@ -83,10 +82,9 @@
to_chat(owner, "<span class='warning'>Your [owner.get_held_index_name(owner.get_held_index_of_item(I))] spasms and throws the [I.name]!</span>")
stored_items = list()
/obj/item/organ/cyberimp/brain/anti_drop/proc/release_items()
for(var/obj/item/I in stored_items)
I.item_flags &= ~NODROP
REMOVE_TRAIT(I, TRAIT_NODROP, ANTI_DROP_IMPLANT_TRAIT)
stored_items = list()
+9
View File
@@ -411,6 +411,15 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
surplus = 20
include_modes = list(/datum/game_mode/nuclear)
/datum/uplink_item/dangerous/rapier
name = "Rapier"
desc = "A fancy rapier with a diamond tip piercing anything that it comes into contack with. \
The rapier comes with its own shielf, this is rather noticeable as only the captain is known to carry a shielf. \
The shielf itself can be used to block melee attacks only. Its also jet black colours."
item = /obj/item/storage/belt/sabre/rapier
cost = 8
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
/datum/uplink_item/dangerous/flamethrower
name = "Flamethrower"
desc = "A flamethrower, fueled by a portion of highly flammable biotoxins stolen previously from Nanotrasen \
+4 -2
View File
@@ -4,7 +4,7 @@
humans, butchering all other living things to \
sustain the zombie, smashing open airlock doors and opening \
child-safe caps on bottles."
item_flags = NODROP | ABSTRACT | DROPDEL
item_flags = ABSTRACT | DROPDEL
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
icon = 'icons/effects/blood.dmi'
icon_state = "bloodhand_left"
@@ -14,7 +14,9 @@
force = 21 // Just enough to break airlocks with melee attacks
damtype = "brute"
var/removing_airlock = FALSE
/obj/item/zombie_hand/Initialize()
. = ..()
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
/obj/item/zombie_hand/equipped(mob/user, slot)
. = ..()