Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit45
This commit is contained in:
@@ -10,21 +10,24 @@
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if(!iscarbon(M))
|
||||
return FALSE
|
||||
var/mob/living/carbon/C = M
|
||||
C.dna?.transfer_identity(src)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.dna?.transfer_identity(src)
|
||||
|
||||
/mob/living/carbon/human/build_virtual_character(mob/M, datum/outfit/outfit)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
socks = H.socks
|
||||
undershirt = H.undershirt
|
||||
underwear = H.underwear
|
||||
give_genitals(TRUE)
|
||||
H = M
|
||||
socks = H ? H.socks : random_socks()
|
||||
socks_color = H ? H.socks_color : random_color()
|
||||
undershirt = H ? H.undershirt : random_undershirt(M.gender)
|
||||
shirt_color = H ? H.shirt_color : random_color()
|
||||
underwear = H ? H.underwear : random_underwear(M.gender)
|
||||
undie_color = H ? H.undie_color : random_color()
|
||||
give_genitals(TRUE)
|
||||
if(outfit)
|
||||
var/datum/outfit/O = new outfit()
|
||||
O.equip(src)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/F = file("[GLOB.log_directory]/[subject].html")
|
||||
WRITE_FILE(F, "<small>[TIME_STAMP("hh:mm:ss", FALSE)] [REF(src)] ([x],[y],[z])</small> || [src] [message]<br>")
|
||||
|
||||
/client/proc/investigate_show(subject in list("notes, memos, watchlist", INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION, INVESTIGATE_CIRCUIT, INVESTIGATE_NANITES) )
|
||||
/client/proc/investigate_show(subject in list("notes, memos, watchlist", INVESTIGATE_RCD, INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION, INVESTIGATE_CIRCUIT, INVESTIGATE_NANITES) )
|
||||
set name = "Investigate"
|
||||
set category = "Admin"
|
||||
if(!holder)
|
||||
|
||||
@@ -78,13 +78,13 @@ GLOBAL_LIST(round_end_notifiees)
|
||||
/datum/tgs_chat_command/notify
|
||||
name = "notify"
|
||||
help_text = "Pings the invoker when the round ends"
|
||||
admin_only = TRUE
|
||||
admin_only = FALSE
|
||||
|
||||
/datum/tgs_chat_command/notify/Run(datum/tgs_chat_user/sender, params)
|
||||
if(!SSticker.IsRoundInProgress() && SSticker.HasRoundStarted())
|
||||
return "[sender.mention], the round has already ended!"
|
||||
LAZYINITLIST(GLOB.round_end_notifiees)
|
||||
GLOB.round_end_notifiees[sender.mention] = TRUE
|
||||
GLOB.round_end_notifiees["<@[sender.mention]>"] = TRUE
|
||||
return "I will notify [sender.mention] when the round ends."
|
||||
|
||||
/datum/tgs_chat_command/sdql
|
||||
@@ -140,4 +140,4 @@ GLOBAL_LIST(round_end_notifiees)
|
||||
|
||||
log_admin("[sender.friendly_name] has added [params] to the current round's bunker bypass list.")
|
||||
message_admins("[sender.friendly_name] has added [params] to the current round's bunker bypass list.")
|
||||
return "[params] has been added to the current round's bunker bypass list."
|
||||
return "[params] has been added to the current round's bunker bypass list."
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
H.real_name = random_unique_name(H.gender)
|
||||
H.name = H.real_name
|
||||
H.underwear = random_underwear(H.gender)
|
||||
H.undie_color = random_color()
|
||||
H.undershirt = random_undershirt(H.gender)
|
||||
H.shirt_color = random_color()
|
||||
H.skin_tone = random_skin_tone()
|
||||
H.hair_style = random_hair_style(H.gender)
|
||||
H.facial_hair_style = random_facial_hair_style(H.gender)
|
||||
@@ -26,8 +29,8 @@
|
||||
// Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant.
|
||||
H.dna.features["mcolor"] = random_short_color()
|
||||
H.dna.features["tail_lizard"] = pick(GLOB.tails_list_lizard)
|
||||
H.dna.features["snout"] = pick(GLOB.snouts_list)
|
||||
H.dna.features["horns"] = pick(GLOB.horns_list)
|
||||
H.dna.features["snout"] = pick(GLOB.snouts_list)
|
||||
H.dna.features["horns"] = pick(GLOB.horns_list)
|
||||
H.dna.features["frills"] = pick(GLOB.frills_list)
|
||||
H.dna.features["spines"] = pick(GLOB.spines_list)
|
||||
H.dna.features["body_markings"] = pick(GLOB.body_markings_list)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/proc/blob_chat(msg)
|
||||
var/spanned_message = say_quote(msg, get_spans())
|
||||
var/spanned_message = say_quote(msg)
|
||||
var/rendered = "<font color=\"#EE4000\"><b>\[Blob Telepathy\] [real_name]</b> [spanned_message]</font>"
|
||||
for(var/M in GLOB.mob_list)
|
||||
if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob))
|
||||
|
||||
@@ -210,7 +210,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
|
||||
src.log_talk(message, LOG_SAY)
|
||||
|
||||
var/message_a = say_quote(message, get_spans())
|
||||
var/message_a = say_quote(message)
|
||||
var/rendered = "<span class='big'><font color=\"#EE4000\"><b>\[Blob Telepathy\] [name](<font color=\"[blob_reagent_datum.color]\">[blob_reagent_datum.name]</font>)</b> [message_a]</font></span>"
|
||||
|
||||
for(var/mob/M in GLOB.mob_list)
|
||||
|
||||
@@ -269,8 +269,11 @@
|
||||
prof.protected = protect
|
||||
|
||||
prof.underwear = H.underwear
|
||||
prof.undie_color = H.undie_color
|
||||
prof.undershirt = H.undershirt
|
||||
prof.shirt_color = H.shirt_color
|
||||
prof.socks = H.socks
|
||||
prof.socks_color = H.socks_color
|
||||
|
||||
var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
|
||||
for(var/slot in slots)
|
||||
@@ -503,8 +506,11 @@
|
||||
var/list/item_state_list = list()
|
||||
|
||||
var/underwear
|
||||
var/undie_color
|
||||
var/undershirt
|
||||
var/shirt_color
|
||||
var/socks
|
||||
var/socks_color
|
||||
|
||||
/datum/changelingprofile/Destroy()
|
||||
qdel(dna)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -21,17 +21,17 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/clockwork/ratvar_act()
|
||||
if(GLOB.ratvar_awakens)
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
armor = getArmor(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100)
|
||||
clothing_flags |= STOPSPRESSUREDAMAGE
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
|
||||
else if(GLOB.ratvar_approaches)
|
||||
armor = list("melee" = 70, "bullet" = 80, "laser" = -15, "energy" = 25, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
armor = getArmor(melee = 70, bullet = 80, laser = -15, energy = 25, bomb = 70, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
clothing_flags |= STOPSPRESSUREDAMAGE
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
|
||||
else
|
||||
armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
armor = getArmor(melee = 60, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
clothing_flags &= ~STOPSPRESSUREDAMAGE
|
||||
max_heat_protection_temperature = initial(max_heat_protection_temperature)
|
||||
min_cold_protection_temperature = initial(min_cold_protection_temperature)
|
||||
@@ -69,7 +69,7 @@
|
||||
heat_protection = CHEST|GROIN|LEGS
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel)
|
||||
allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel, /obj/item/reagent_containers/food/drinks/holyoil)
|
||||
|
||||
/obj/item/clothing/suit/armor/clockwork/Initialize()
|
||||
. = ..()
|
||||
@@ -82,17 +82,17 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/clockwork/ratvar_act()
|
||||
if(GLOB.ratvar_awakens)
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
armor = getArmor(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100)
|
||||
clothing_flags |= STOPSPRESSUREDAMAGE
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
|
||||
else if(GLOB.ratvar_approaches)
|
||||
armor = list("melee" = 70, "bullet" = 80, "laser" = -15, "energy" = 25, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
armor = getArmor(melee = 70, bullet = 80, laser = -15, energy = 25, bomb = 70, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
clothing_flags |= STOPSPRESSUREDAMAGE
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
|
||||
else
|
||||
armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
armor = getArmor(melee = 60, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
clothing_flags &= ~STOPSPRESSUREDAMAGE
|
||||
max_heat_protection_temperature = initial(max_heat_protection_temperature)
|
||||
min_cold_protection_temperature = initial(min_cold_protection_temperature)
|
||||
@@ -148,12 +148,12 @@
|
||||
|
||||
/obj/item/clothing/gloves/clockwork/ratvar_act()
|
||||
if(GLOB.ratvar_awakens)
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
armor = getArmor(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100)
|
||||
clothing_flags |= STOPSPRESSUREDAMAGE
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
|
||||
else
|
||||
armor = list("melee" = 80, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
armor = getArmor(melee = 80, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
clothing_flags &= ~STOPSPRESSUREDAMAGE
|
||||
max_heat_protection_temperature = initial(max_heat_protection_temperature)
|
||||
min_cold_protection_temperature = initial(min_cold_protection_temperature)
|
||||
|
||||
@@ -21,8 +21,9 @@
|
||||
|
||||
/obj/item/clockwork/construct_chassis/Destroy()
|
||||
GLOB.poi_list -= src
|
||||
var/list/spawners = GLOB.mob_spawners[name]
|
||||
LAZYREMOVE(spawners, src)
|
||||
LAZYREMOVE(GLOB.mob_spawners[name], src)
|
||||
if(!LAZYLEN(GLOB.mob_spawners[name]))
|
||||
GLOB.mob_spawners -= name
|
||||
. = ..()
|
||||
|
||||
/obj/item/clockwork/construct_chassis/examine(mob/user)
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
bubble_icon = "clock"
|
||||
light_color = "#E42742"
|
||||
death_sound = 'sound/magic/clockwork/anima_fragment_death.ogg'
|
||||
speech_span = SPAN_ROBOT
|
||||
var/playstyle_string = "<span class='heavy_brass'>You are a bug, yell at whoever spawned you!</span>"
|
||||
var/empower_string = "<span class='heavy_brass'>You have nothing to empower, yell at the coders!</span>" //Shown to the mob when the herald beacon activates
|
||||
|
||||
@@ -26,9 +27,6 @@
|
||||
. = ..()
|
||||
update_values()
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork/get_spans()
|
||||
return ..() | SPAN_ROBOT
|
||||
|
||||
/mob/living/simple_animal/hostile/clockwork/Login()
|
||||
..()
|
||||
add_servant_of_ratvar(src, TRUE)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
|
||||
//Harvest; activated ly clicking the target, will try to drain their essence.
|
||||
/mob/living/simple_animal/revenant/ClickOn(atom/A, params) //revenants can't interact with the world directly.
|
||||
A.examine(src)
|
||||
var/list/modifiers = params2list(params)
|
||||
if(modifiers["shift"])
|
||||
ShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["alt"])
|
||||
AltClickNoInteract(src, A)
|
||||
return
|
||||
|
||||
if(ishuman(A))
|
||||
if(A in drained_mobs)
|
||||
to_chat(src, "<span class='revenwarning'>[A]'s soul is dead and empty.</span>" )
|
||||
else if(in_range(src, A))
|
||||
Harvest(A)
|
||||
|
||||
|
||||
//Harvest; activated ly clicking the target, will try to drain their essence.
|
||||
/mob/living/simple_animal/revenant/proc/Harvest(mob/living/carbon/human/target)
|
||||
if(!castcheck(0))
|
||||
return
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
deathmessage = "explodes with a sharp pop!"
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
hud_type = /datum/hud/swarmer
|
||||
speech_span = SPAN_ROBOT
|
||||
var/resources = 0 //Resource points, generated by consuming metal/glass
|
||||
var/max_resources = 100
|
||||
|
||||
@@ -126,9 +127,6 @@
|
||||
if(statpanel("Status"))
|
||||
stat("Resources:",resources)
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/get_spans()
|
||||
return ..() | SPAN_ROBOT
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/emp_act()
|
||||
. = ..()
|
||||
if(. & EMP_PROTECT_SELF)
|
||||
@@ -666,7 +664,7 @@
|
||||
set_light(0)
|
||||
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/swarmer_chat(msg)
|
||||
var/rendered = "<B>Swarm communication - [src]</b> [say_quote(msg, get_spans())]"
|
||||
var/rendered = "<B>Swarm communication - [src]</b> [say_quote(msg)]"
|
||||
for(var/i in GLOB.mob_list)
|
||||
var/mob/M = i
|
||||
if(isswarmer(M))
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
/datum/antagonist/traitor/on_gain()
|
||||
if(owner.current && isAI(owner.current))
|
||||
traitor_kind = TRAITOR_AI
|
||||
|
||||
|
||||
SSticker.mode.traitors += owner
|
||||
owner.special_role = special_role
|
||||
if(give_objectives)
|
||||
@@ -48,7 +48,7 @@
|
||||
A.verbs -= /mob/living/silicon/ai/proc/choose_modules
|
||||
A.malf_picker.remove_malf_verbs(A)
|
||||
qdel(A.malf_picker)
|
||||
|
||||
|
||||
SSticker.mode.traitors -= owner
|
||||
if(!silent && owner.current)
|
||||
to_chat(owner.current,"<span class='userdanger'> You are no longer the [special_role]! </span>")
|
||||
@@ -244,14 +244,16 @@
|
||||
return
|
||||
var/mob/traitor_mob=owner.current
|
||||
|
||||
to_chat(traitor_mob, "<U><B>The Syndicate provided you with the following information on how to identify their agents:</B></U>")
|
||||
to_chat(traitor_mob, "<B>Code Phrase</B>: <span class='danger'>[GLOB.syndicate_code_phrase]</span>")
|
||||
to_chat(traitor_mob, "<B>Code Response</B>: <span class='danger'>[GLOB.syndicate_code_response]</span>")
|
||||
var/phrases = jointext(GLOB.syndicate_code_phrase, ", ")
|
||||
var/responses = jointext(GLOB.syndicate_code_response, ", ")
|
||||
|
||||
antag_memory += "<b>Code Phrase</b>: [GLOB.syndicate_code_phrase]<br>"
|
||||
antag_memory += "<b>Code Response</b>: [GLOB.syndicate_code_response]<br>"
|
||||
var/dat = "<U><B>The Syndicate have provided you with the following codewords to identify fellow agents:</B></U>\n"
|
||||
dat += "<B>Code Phrase</B>: <span class='blue'>[phrases]</span>\n"
|
||||
dat += "<B>Code Response</B>: <span class='red'>[responses]</span>"
|
||||
to_chat(traitor_mob, dat)
|
||||
|
||||
to_chat(traitor_mob, "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.")
|
||||
antag_memory += "<b>Code Phrase</b>: <span class='blue'>[phrases]</span><br>"
|
||||
antag_memory += "<b>Code Response</b>: <span class='red'>[responses]</span><br>"
|
||||
|
||||
/datum/antagonist/traitor/proc/add_law_zero()
|
||||
var/mob/living/silicon/ai/killer = owner.current
|
||||
@@ -356,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)
|
||||
|
||||
@@ -167,10 +167,11 @@
|
||||
on = FALSE
|
||||
update_icon()
|
||||
playsound(src, 'sound/machines/cryo_warning.ogg', volume) // Bug the doctors.
|
||||
radio.talk_into(src, "Patient fully restored", radio_channel, get_spans(), get_default_language())
|
||||
var/msg = "Patient fully restored."
|
||||
if(autoeject) // Eject if configured.
|
||||
radio.talk_into(src, "Auto ejecting patient now", radio_channel, get_spans(), get_default_language())
|
||||
msg += " Auto ejecting patient now."
|
||||
open_machine()
|
||||
radio.talk_into(src, msg, radio_channel)
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[1]
|
||||
|
||||
@@ -1,18 +1,22 @@
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine
|
||||
name = "thermomachine"
|
||||
desc = "Heats or cools gas in connected pipes."
|
||||
icon = 'icons/obj/atmospherics/components/thermomachine.dmi'
|
||||
icon_state = "freezer"
|
||||
var/icon_state_off = "freezer"
|
||||
var/icon_state_on = "freezer_1"
|
||||
var/icon_state_open = "freezer-o"
|
||||
|
||||
name = "thermomachine"
|
||||
desc = "Heats or cools gas in connected pipes."
|
||||
|
||||
density = TRUE
|
||||
max_integrity = 300
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30)
|
||||
layer = OBJ_LAYER
|
||||
circuit = /obj/item/circuitboard/machine/thermomachine
|
||||
|
||||
pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY
|
||||
|
||||
var/icon_state_off = "freezer"
|
||||
var/icon_state_on = "freezer_1"
|
||||
var/icon_state_open = "freezer-o"
|
||||
|
||||
var/min_temperature = 0
|
||||
var/max_temperature = 0
|
||||
var/target_temperature = T20C
|
||||
@@ -45,6 +49,13 @@
|
||||
if(showpipe)
|
||||
add_overlay(getpipeimage(icon, "scrub_cap", initialize_directions))
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>The thermostat is set to [target_temperature]K ([(T0C-target_temperature)*-1]C).</span>"
|
||||
if(in_range(user, src) || isobserver(user))
|
||||
. += "<span class='notice'>The status display reads: Efficiency <b>[(heat_capacity/5000)*100]%</b>.</span>"
|
||||
. += "<span class='notice'>Temperature range <b>[min_temperature]K - [max_temperature]K ([(T0C-min_temperature)*-1]C - [(T0C-max_temperature)*-1]C)</b>.</span>"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/process_atmos()
|
||||
..()
|
||||
if(!on || !nodes[1])
|
||||
@@ -155,6 +166,16 @@
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/CtrlClick(mob/living/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
on = !on
|
||||
update_icon()
|
||||
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
message_admins("[src.name] was turned [on ? "on" : "off"] [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/freezer
|
||||
name = "freezer"
|
||||
icon_state = "freezer"
|
||||
@@ -174,6 +195,13 @@
|
||||
if(target_temperature == initial(target_temperature))
|
||||
target_temperature = min_temperature
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom
|
||||
name = "cold room freezer"
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on/coldroom/Initialize()
|
||||
. = ..()
|
||||
target_temperature = T0C-80
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/RefreshParts()
|
||||
..()
|
||||
var/L
|
||||
@@ -181,6 +209,15 @@
|
||||
L += M.rating
|
||||
min_temperature = max(T0C - (initial(min_temperature) + L * 15), TCMB) //73.15K with T1 stock parts
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/freezer/AltClick(mob/living/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
target_temperature = min_temperature
|
||||
investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
message_admins("[src.name] was minimized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/heater
|
||||
name = "heater"
|
||||
icon_state = "heater"
|
||||
@@ -201,3 +238,12 @@
|
||||
for(var/obj/item/stock_parts/micro_laser/M in component_parts)
|
||||
L += M.rating
|
||||
max_temperature = T20C + (initial(max_temperature) * L) //573.15K with T1 stock parts
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/heater/AltClick(mob/living/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
target_temperature = max_temperature
|
||||
investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
message_admins("[src.name] was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -71,13 +71,14 @@
|
||||
|
||||
/obj/effect/mob_spawn/Destroy()
|
||||
GLOB.poi_list -= src
|
||||
LAZYREMOVE(GLOB.mob_spawners[job_description ? job_description : name], src)
|
||||
if(!LAZYLEN(GLOB.mob_spawners[job_description ? job_description : name]))
|
||||
GLOB.mob_spawners -= job_description ? job_description : name
|
||||
var/job_name = job_description ? job_description : name
|
||||
LAZYREMOVE(GLOB.mob_spawners[job_name], src)
|
||||
if(!LAZYLEN(GLOB.mob_spawners[job_name]))
|
||||
GLOB.mob_spawners -= job_name
|
||||
return ..()
|
||||
|
||||
/obj/effect/mob_spawn/proc/can_latejoin() //If it can be taken from the lobby.
|
||||
return TRUE
|
||||
return ghost_usable
|
||||
|
||||
/obj/effect/mob_spawn/proc/special(mob/M)
|
||||
return
|
||||
|
||||
@@ -1157,7 +1157,7 @@
|
||||
/datum/supply_pack/materials/bz
|
||||
name = "BZ Canister Crate"
|
||||
desc = "Contains a canister of BZ. Requires Toxins access to open."
|
||||
cost = 7500 // Costs 3 credits more than what you can get for selling it.
|
||||
cost = 7500 // Costs 3 credits more than what you can get for selling it.
|
||||
access = ACCESS_TOX_STORAGE
|
||||
contains = list(/obj/machinery/portable_atmospherics/canister/bz)
|
||||
crate_name = "BZ canister crate"
|
||||
@@ -2716,6 +2716,7 @@
|
||||
/obj/item/restraints/handcuffs/fake/kinky,
|
||||
/obj/item/clothing/head/kitty/genuine, // Why its illegal
|
||||
/obj/item/clothing/head/kitty/genuine,
|
||||
/obj/item/storage/pill_bottle/penis_enlargement,
|
||||
/obj/structure/reagent_dispensers/keg/aphro)
|
||||
crate_name = "lewd kit"
|
||||
crate_type = /obj/structure/closet/crate
|
||||
@@ -2750,6 +2751,19 @@
|
||||
/obj/item/pen/fountain)
|
||||
crate_name = "Paperwork"
|
||||
|
||||
/datum/supply_pack/misc/randomised/promiscuous
|
||||
name = "Promiscuous Organs"
|
||||
desc = "Do YOU want to have more genital? Well we have just the thing for you~. This crate has two autosurgeon, that will let you have a new sex, organ to impress that hot stud and or chick."
|
||||
cost = 4000 //Only get 2!
|
||||
contraband = TRUE
|
||||
var/num_contained = 2
|
||||
contains = list(/obj/item/autosurgeon/penis,
|
||||
/obj/item/autosurgeon/testicles,
|
||||
/obj/item/autosurgeon/vagina,
|
||||
/obj/item/autosurgeon/breasts,
|
||||
/obj/item/autosurgeon/womb)
|
||||
crate_name = "promiscuous organs"
|
||||
|
||||
/datum/supply_pack/misc/toner
|
||||
name = "Toner Crate"
|
||||
desc = "Spent too much ink printing butt pictures? Fret not, with these six toner refills, you'll be printing butts 'till the cows come home!'"
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
var/effectQuiet = FALSE //The female sniper. If true, the pod makes no noise (including related explosions, opening sounds, etc)
|
||||
var/effectMissile = FALSE //If true, the pod deletes the second it lands. If you give it an explosion, it will act like a missile exploding as it hits the ground
|
||||
var/effectCircle = FALSE //If true, allows the pod to come in at any angle. Bit of a weird feature but whatever its here
|
||||
var/style = STYLE_STANDARD //Style is a variable that keeps track of what the pod is supposed to look like. It acts as an index to the POD_STYLES list in cargo.dm defines to get the proper icon/name/desc for the pod.
|
||||
var/style = STYLE_STANDARD //Style is a variable that keeps track of what the pod is supposed to look like. It acts as an index to the POD_STYLES list in cargo.dm defines to get the proper icon/name/desc for the pod.
|
||||
var/reversing = FALSE //If true, the pod will not send any items. Instead, after opening, it will close again (picking up items/mobs) and fly back to centcom
|
||||
var/landingSound //Admin sound to play when the pod lands
|
||||
var/openingSound //Admin sound to play when the pod opens
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
/obj/structure/closet/supplypod/tool_interact(obj/item/W, mob/user)
|
||||
if (bluespace) //We dont want to worry about interacting with bluespace pods, as they are due to delete themselves soon anyways.
|
||||
return FALSE
|
||||
return FALSE
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -86,13 +86,15 @@
|
||||
/obj/structure/closet/supplypod/contents_explosion() //Supplypods also protect their contents from the harmful effects of fucking exploding.
|
||||
return
|
||||
|
||||
/obj/structure/closet/supplypod/prevent_content_explosion() //Useful for preventing epicenter explosions from damaging contents
|
||||
return TRUE
|
||||
|
||||
/obj/structure/closet/supplypod/toggle(mob/living/user) //Supplypods shouldn't be able to be manually opened under any circumstances, as the open() proc generates supply order datums
|
||||
return
|
||||
|
||||
/obj/structure/closet/supplypod/proc/preOpen() //Called before the open() proc. Handles anything that occurs right as the pod lands.
|
||||
var/turf/T = get_turf(src)
|
||||
var/list/B = explosionSize //Mostly because B is more readable than explosionSize :p
|
||||
var/boomTotal = 0 //A counter used to check if the explosion does nothing
|
||||
if (landingSound)
|
||||
playsound(get_turf(src), landingSound, soundVolume, 0, 0)
|
||||
for (var/mob/living/M in T)
|
||||
@@ -108,10 +110,8 @@
|
||||
M.gib() //After adjusting the fuck outta that brute loss we finish the job with some satisfying gibs
|
||||
M.adjustBruteLoss(damage)
|
||||
|
||||
for (var/i in B)
|
||||
boomTotal += i //Count up all the values of the explosion
|
||||
|
||||
if (boomTotal != 0) //If the explosion list isn't all zeroes, call an explosion
|
||||
if (B[1] || B[2] || B[3] || B[4]) //If the explosion list isn't all zeroes, call an explosion
|
||||
explosion(get_turf(src), B[1], B[2], B[3], flame_range = B[4], silent = effectQuiet, ignorecap = istype(src, /obj/structure/closet/supplypod/centcompod)) //less advanced equipment than bluespace pod, so larger explosion when landing
|
||||
else if (!effectQuiet) //If our explosion list IS all zeroes, we still make a nice explosion sound (unless the effectQuiet var is true)
|
||||
playsound(src, "explosion", landingSound ? 15 : 80, 1)
|
||||
@@ -150,10 +150,10 @@
|
||||
playsound(get_turf(holder), leavingSound, soundVolume, 0, 0)
|
||||
if (reversing) //If we're reversing, we call the close proc. This sends the pod back up to centcom
|
||||
close(holder)
|
||||
else if (bluespace) //If we're a bluespace pod, then delete ourselves (along with our holder, if a seperate holder exists)
|
||||
if (style != STYLE_INVISIBLE)
|
||||
else if (bluespace) //If we're a bluespace pod, then delete ourselves (along with our holder, if a seperate holder exists)
|
||||
if (style != STYLE_INVISIBLE)
|
||||
do_sparks(5, TRUE, holder) //Create some sparks right before closing
|
||||
qdel(src) //Delete ourselves and the holder
|
||||
qdel(src) //Delete ourselves and the holder
|
||||
if (holder != src)
|
||||
qdel(holder)
|
||||
|
||||
|
||||
@@ -470,19 +470,46 @@ GLOBAL_LIST_EMPTY(asset_datums)
|
||||
/datum/asset/spritesheet/simple/minesweeper
|
||||
name = "minesweeper"
|
||||
assets = list(
|
||||
"1" = 'icons/misc/minesweeper_tiles/one.png',
|
||||
"2" = 'icons/misc/minesweeper_tiles/two.png',
|
||||
"3" = 'icons/misc/minesweeper_tiles/three.png',
|
||||
"4" = 'icons/misc/minesweeper_tiles/four.png',
|
||||
"5" = 'icons/misc/minesweeper_tiles/five.png',
|
||||
"6" = 'icons/misc/minesweeper_tiles/six.png',
|
||||
"7" = 'icons/misc/minesweeper_tiles/seven.png',
|
||||
"8" = 'icons/misc/minesweeper_tiles/eight.png',
|
||||
"empty" = 'icons/misc/minesweeper_tiles/empty.png',
|
||||
"flag" = 'icons/misc/minesweeper_tiles/flag.png',
|
||||
"hidden" = 'icons/misc/minesweeper_tiles/hidden.png',
|
||||
"mine" = 'icons/misc/minesweeper_tiles/mine.png',
|
||||
"minehit" = 'icons/misc/minesweeper_tiles/minehit.png'
|
||||
"1" = 'icons/UI_Icons/minesweeper_tiles/one.png',
|
||||
"2" = 'icons/UI_Icons/minesweeper_tiles/two.png',
|
||||
"3" = 'icons/UI_Icons/minesweeper_tiles/three.png',
|
||||
"4" = 'icons/UI_Icons/minesweeper_tiles/four.png',
|
||||
"5" = 'icons/UI_Icons/minesweeper_tiles/five.png',
|
||||
"6" = 'icons/UI_Icons/minesweeper_tiles/six.png',
|
||||
"7" = 'icons/UI_Icons/minesweeper_tiles/seven.png',
|
||||
"8" = 'icons/UI_Icons/minesweeper_tiles/eight.png',
|
||||
"empty" = 'icons/UI_Icons/minesweeper_tiles/empty.png',
|
||||
"flag" = 'icons/UI_Icons/minesweeper_tiles/flag.png',
|
||||
"hidden" = 'icons/UI_Icons/minesweeper_tiles/hidden.png',
|
||||
"mine" = 'icons/UI_Icons/minesweeper_tiles/mine.png',
|
||||
"minehit" = 'icons/UI_Icons/minesweeper_tiles/minehit.png'
|
||||
)
|
||||
|
||||
/datum/asset/spritesheet/simple/pills
|
||||
name = "pills"
|
||||
assets = list(
|
||||
"pill1" = 'icons/UI_Icons/Pills/pill1.png',
|
||||
"pill2" = 'icons/UI_Icons/Pills/pill2.png',
|
||||
"pill3" = 'icons/UI_Icons/Pills/pill3.png',
|
||||
"pill4" = 'icons/UI_Icons/Pills/pill4.png',
|
||||
"pill5" = 'icons/UI_Icons/Pills/pill5.png',
|
||||
"pill6" = 'icons/UI_Icons/Pills/pill6.png',
|
||||
"pill7" = 'icons/UI_Icons/Pills/pill7.png',
|
||||
"pill8" = 'icons/UI_Icons/Pills/pill8.png',
|
||||
"pill9" = 'icons/UI_Icons/Pills/pill9.png',
|
||||
"pill10" = 'icons/UI_Icons/Pills/pill10.png',
|
||||
"pill11" = 'icons/UI_Icons/Pills/pill11.png',
|
||||
"pill12" = 'icons/UI_Icons/Pills/pill12.png',
|
||||
"pill13" = 'icons/UI_Icons/Pills/pill13.png',
|
||||
"pill14" = 'icons/UI_Icons/Pills/pill14.png',
|
||||
"pill15" = 'icons/UI_Icons/Pills/pill15.png',
|
||||
"pill16" = 'icons/UI_Icons/Pills/pill16.png',
|
||||
"pill17" = 'icons/UI_Icons/Pills/pill17.png',
|
||||
"pill18" = 'icons/UI_Icons/Pills/pill18.png',
|
||||
"pill19" = 'icons/UI_Icons/Pills/pill19.png',
|
||||
"pill20" = 'icons/UI_Icons/Pills/pill20.png',
|
||||
"pill21" = 'icons/UI_Icons/Pills/pill21.png',
|
||||
"pill22" = 'icons/UI_Icons/Pills/pill22.png',
|
||||
)
|
||||
|
||||
/datum/asset/simple/IRV
|
||||
|
||||
@@ -71,8 +71,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/gender = MALE //gender of character (well duh)
|
||||
var/age = 30 //age of character
|
||||
var/underwear = "Nude" //underwear type
|
||||
var/undie_color = "#FFFFFF"
|
||||
var/undershirt = "Nude" //undershirt type
|
||||
var/shirt_color = "#FFFFFF"
|
||||
var/socks = "Nude" //socks type
|
||||
var/socks_color = "#FFFFFF"
|
||||
var/backbag = DBACKPACK //backpack type
|
||||
var/hair_style = "Bald" //Hair type
|
||||
var/hair_color = "000" //Hair color
|
||||
@@ -674,8 +677,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<table><tr><td width='340px' height='300px' valign='top'>"
|
||||
dat += "<h2>Clothing & Equipment</h2>"
|
||||
dat += "<b>Underwear:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.underwear_list[underwear]))
|
||||
dat += "<b>Underwear Color:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=undie_color;task=input'>[undie_color]</a>"
|
||||
dat += "<b>Undershirt:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.undershirt_list[undershirt]))
|
||||
dat += "<b>Undershirt Color:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=shirt_color;task=input'>[shirt_color]</a>"
|
||||
dat += "<b>Socks:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=socks;task=input'>[socks]</a>"
|
||||
if(UNDIE_COLORABLE(GLOB.socks_list[socks]))
|
||||
dat += "<b>Socks Color:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=socks_color;task=input'>[socks_color]</a>"
|
||||
dat += "<b>Backpack:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a>"
|
||||
dat += "<b>Uplink Location:</b><a style='display:block;width:100px' href ='?_src_=prefs;preference=uplink_loc;task=input'>[uplink_spawn_loc]</a>"
|
||||
dat += "</td>"
|
||||
@@ -1398,10 +1407,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
facial_hair_style = random_facial_hair_style(gender)
|
||||
if("underwear")
|
||||
underwear = random_underwear(gender)
|
||||
undie_color = random_color()
|
||||
if("undershirt")
|
||||
undershirt = random_undershirt(gender)
|
||||
shirt_color = random_color()
|
||||
if("socks")
|
||||
socks = random_socks()
|
||||
socks_color = random_color()
|
||||
if(BODY_ZONE_PRECISE_EYES)
|
||||
eye_color = random_eye_color()
|
||||
if("s_tone")
|
||||
@@ -1507,29 +1519,35 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
bgstate = next_list_item(bgstate, bgstate_options)
|
||||
|
||||
if("underwear")
|
||||
var/new_underwear
|
||||
if(gender == MALE)
|
||||
new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_m
|
||||
else
|
||||
new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_f
|
||||
var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_list
|
||||
if(new_underwear)
|
||||
underwear = new_underwear
|
||||
|
||||
if("undie_color")
|
||||
var/n_undie_color = input(user, "Choose your underwear's color.", "Character Preference", undie_color) as color|null
|
||||
if(n_undie_color)
|
||||
undie_color = n_undie_color
|
||||
|
||||
if("undershirt")
|
||||
var/new_undershirt
|
||||
if(gender == MALE)
|
||||
new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_m
|
||||
else
|
||||
new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_f
|
||||
var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_list
|
||||
if(new_undershirt)
|
||||
undershirt = new_undershirt
|
||||
|
||||
if("shirt_color")
|
||||
var/n_shirt_color = input(user, "Choose your undershirt's color.", "Character Preference", shirt_color) as color|null
|
||||
if(n_shirt_color)
|
||||
shirt_color = n_shirt_color
|
||||
|
||||
if("socks")
|
||||
var/new_socks
|
||||
new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in GLOB.socks_list
|
||||
var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in GLOB.socks_list
|
||||
if(new_socks)
|
||||
socks = new_socks
|
||||
|
||||
if("socks_color")
|
||||
var/n_socks_color = input(user, "Choose your socks' color.", "Character Preference", socks_color) as color|null
|
||||
if(n_socks_color)
|
||||
socks_color = n_socks_color
|
||||
|
||||
if("eyes")
|
||||
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+eye_color) as color|null
|
||||
if(new_eyes)
|
||||
@@ -2246,11 +2264,16 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
character.hair_style = hair_style
|
||||
character.facial_hair_style = facial_hair_style
|
||||
character.underwear = underwear
|
||||
|
||||
character.saved_underwear = underwear
|
||||
character.undershirt = undershirt
|
||||
character.saved_undershirt = undershirt
|
||||
character.socks = socks
|
||||
character.saved_socks = socks
|
||||
character.undie_color = undie_color
|
||||
character.shirt_color = shirt_color
|
||||
character.socks_color = socks_color
|
||||
|
||||
|
||||
character.backbag = backbag
|
||||
|
||||
|
||||
@@ -202,6 +202,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["tip_delay"], tip_delay)
|
||||
WRITE_FILE(S["pda_style"], pda_style)
|
||||
WRITE_FILE(S["pda_color"], pda_color)
|
||||
WRITE_FILE(S["pda_skin"], pda_skin)
|
||||
|
||||
//citadel code
|
||||
WRITE_FILE(S["screenshake"], screenshake)
|
||||
@@ -265,8 +266,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["hair_style_name"] >> hair_style
|
||||
S["facial_style_name"] >> facial_hair_style
|
||||
S["underwear"] >> underwear
|
||||
S["undie_color"] >> undie_color
|
||||
S["undershirt"] >> undershirt
|
||||
S["shirt_color"] >> shirt_color
|
||||
S["socks"] >> socks
|
||||
S["socks_color"] >> socks_color
|
||||
S["backbag"] >> backbag
|
||||
S["uplink_loc"] >> uplink_spawn_loc
|
||||
S["feature_mcolor"] >> features["mcolor"]
|
||||
@@ -387,14 +391,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
if(gender == MALE)
|
||||
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list)
|
||||
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list)
|
||||
underwear = sanitize_inlist(underwear, GLOB.underwear_m)
|
||||
undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m)
|
||||
else
|
||||
hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list)
|
||||
facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list)
|
||||
underwear = sanitize_inlist(underwear, GLOB.underwear_f)
|
||||
undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f)
|
||||
underwear = sanitize_inlist(underwear, GLOB.underwear_list)
|
||||
undie_color = sanitize_hexcolor(undie_color, 6, 1, initial(undie_color))
|
||||
undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list)
|
||||
shirt_color = sanitize_hexcolor(shirt_color, 6, 1, initial(shirt_color))
|
||||
socks = sanitize_inlist(socks, GLOB.socks_list)
|
||||
socks_color = sanitize_hexcolor(socks_color, 6, 1, initial(socks_color))
|
||||
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
|
||||
hair_color = sanitize_hexcolor(hair_color, 3, 0)
|
||||
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
|
||||
@@ -464,8 +469,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["hair_style_name"] , hair_style)
|
||||
WRITE_FILE(S["facial_style_name"] , facial_hair_style)
|
||||
WRITE_FILE(S["underwear"] , underwear)
|
||||
WRITE_FILE(S["undie_color"] , undie_color)
|
||||
WRITE_FILE(S["undershirt"] , undershirt)
|
||||
WRITE_FILE(S["shirt_color"] , shirt_color)
|
||||
WRITE_FILE(S["socks"] , socks)
|
||||
WRITE_FILE(S["socks_color"] , socks_color)
|
||||
WRITE_FILE(S["backbag"] , backbag)
|
||||
WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
|
||||
WRITE_FILE(S["species"] , pref_species.id)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)]"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
. = ..()
|
||||
siemens_coefficient = pick(0,0,0,0.5,0.5,0.5,0.75)
|
||||
|
||||
/obj/item/clothing/gloves/cut
|
||||
/obj/item/clothing/gloves/cut
|
||||
desc = "These gloves would protect the wearer from electric shock.. if the fingers were covered."
|
||||
name = "fingerless insulated gloves"
|
||||
icon_state = "yellowcut"
|
||||
@@ -218,32 +218,3 @@
|
||||
|
||||
/obj/item/clothing/gloves/color/white/redcoat
|
||||
item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
|
||||
|
||||
/obj/item/clothing/gloves/color/random
|
||||
name = "random gloves"
|
||||
desc = "These gloves are supposed to be a random color..."
|
||||
icon_state = "random_gloves"
|
||||
item_state = "wgloves"
|
||||
item_color = "mime"
|
||||
|
||||
/obj/item/clothing/gloves/color/random/Initialize()
|
||||
..()
|
||||
var/list/gloves = list(
|
||||
/obj/item/clothing/gloves/color/orange = 1,
|
||||
/obj/item/clothing/gloves/color/red = 1,
|
||||
/obj/item/clothing/gloves/color/blue = 1,
|
||||
/obj/item/clothing/gloves/color/purple = 1,
|
||||
/obj/item/clothing/gloves/color/green = 1,
|
||||
/obj/item/clothing/gloves/color/grey = 1,
|
||||
/obj/item/clothing/gloves/color/light_brown = 1,
|
||||
/obj/item/clothing/gloves/color/brown = 1,
|
||||
/obj/item/clothing/gloves/color/white = 1,
|
||||
/obj/item/clothing/gloves/color/rainbow = 1)
|
||||
|
||||
var/obj/item/clothing/gloves/color/selected = pick(gloves)
|
||||
if(ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.equip_to_slot_or_del(new selected(H), SLOT_GLOVES)
|
||||
else
|
||||
new selected(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
tint = 2
|
||||
|
||||
/obj/item/clothing/head/helmet/blueshirt
|
||||
name = "blue helmet"
|
||||
desc = "A reliable, blue tinted helmet reminding you that you <i>still</i> owe that engineer a beer."
|
||||
icon_state = "blueshift"
|
||||
item_state = "blueshift"
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
name = "captain's beret"
|
||||
desc = "A beret fit for a leader."
|
||||
icon_state = "capberet"
|
||||
dynamic_hair_suffix = ""
|
||||
|
||||
dog_fashion = null
|
||||
|
||||
@@ -62,6 +63,7 @@
|
||||
name = "head of personnel's beret"
|
||||
desc = "The symbol of true bureaucratic micromanagement, although in a fancy form."
|
||||
icon_state = "hopberet"
|
||||
dynamic_hair_suffix = ""
|
||||
|
||||
dog_fashion = null
|
||||
|
||||
@@ -119,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
|
||||
@@ -184,33 +189,41 @@
|
||||
mode = DRILL_CANADIAN
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/head/warden/drill/speechModification(M)
|
||||
if(copytext(M, 1, 2) != "*")
|
||||
if(mode == DRILL_DEFAULT)
|
||||
M = " [M]"
|
||||
return trim(M)
|
||||
if(mode == DRILL_SHOUTING)
|
||||
M = " [M]!"
|
||||
return trim(M)
|
||||
if(mode == DRILL_YELLING)
|
||||
M = " [M]!!"
|
||||
return trim(M)
|
||||
if(mode == DRILL_CANADIAN)
|
||||
M = " [M]"
|
||||
var/list/canadian_words = strings("canadian_replacement.json", "canadian")
|
||||
/obj/item/clothing/head/warden/drill/equipped(mob/M, slot)
|
||||
. = ..()
|
||||
if (slot == SLOT_HEAD)
|
||||
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||
else
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
for(var/key in canadian_words)
|
||||
var/value = canadian_words[key]
|
||||
if(islist(value))
|
||||
value = pick(value)
|
||||
/obj/item/clothing/head/warden/drill/dropped(mob/M)
|
||||
. = ..()
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
M = replacetextEx(M, " [uppertext(key)]", " [uppertext(value)]")
|
||||
M = replacetextEx(M, " [capitalize(key)]", " [capitalize(value)]")
|
||||
M = replacetextEx(M, " [key]", " [value]")
|
||||
/obj/item/clothing/head/warden/drill/proc/handle_speech(datum/source, mob/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message[1] != "*")
|
||||
switch (mode)
|
||||
if(DRILL_SHOUTING)
|
||||
message += "!"
|
||||
if(DRILL_YELLING)
|
||||
message += "!!"
|
||||
if(DRILL_CANADIAN)
|
||||
message = " [message]"
|
||||
var/list/canadian_words = strings("canadian_replacement.json", "canadian")
|
||||
|
||||
if(prob(30))
|
||||
M += pick(", eh?", ", EH?")
|
||||
return trim(M)
|
||||
for(var/key in canadian_words)
|
||||
var/value = canadian_words[key]
|
||||
if(islist(value))
|
||||
value = pick(value)
|
||||
|
||||
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
|
||||
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
|
||||
message = replacetextEx(message, " [key]", " [value]")
|
||||
|
||||
if(prob(30))
|
||||
message += pick(", eh?", ", EH?")
|
||||
speech_args[SPEECH_MESSAGE] = message
|
||||
|
||||
/obj/item/clothing/head/beret/sec
|
||||
name = "security beret"
|
||||
|
||||
@@ -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"
|
||||
@@ -330,9 +333,21 @@
|
||||
icon_state = "beretblack"
|
||||
dynamic_hair_suffix = ""
|
||||
|
||||
/obj/item/clothing/head/frenchberet/speechModification(M)
|
||||
if(copytext(M, 1, 2) != "*")
|
||||
M = " [M]"
|
||||
/obj/item/clothing/head/frenchberet/equipped(mob/M, slot)
|
||||
. = ..()
|
||||
if (slot == SLOT_HEAD)
|
||||
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||
else
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
/obj/item/clothing/head/frenchberet/dropped(mob/M)
|
||||
. = ..()
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, mob/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message[1] != "*")
|
||||
message = " [message]"
|
||||
var/list/french_words = strings("french_replacement.json", "french")
|
||||
|
||||
for(var/key in french_words)
|
||||
@@ -340,10 +355,10 @@
|
||||
if(islist(value))
|
||||
value = pick(value)
|
||||
|
||||
M = replacetextEx(M, " [uppertext(key)]", " [uppertext(value)]")
|
||||
M = replacetextEx(M, " [capitalize(key)]", " [capitalize(value)]")
|
||||
M = replacetextEx(M, " [key]", " [value]")
|
||||
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
|
||||
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
|
||||
message = replacetextEx(message, " [key]", " [value]")
|
||||
|
||||
if(prob(3))
|
||||
M += pick(" Honh honh honh!"," Honh!"," Zut Alors!")
|
||||
return trim(M)
|
||||
message += pick(" Honh honh honh!"," Honh!"," Zut Alors!")
|
||||
speech_args[SPEECH_MESSAGE] = trim(message)
|
||||
|
||||
@@ -5,12 +5,54 @@
|
||||
slot_flags = ITEM_SLOT_MASK
|
||||
strip_delay = 40
|
||||
equip_delay_other = 40
|
||||
var/modifies_speech = FALSE
|
||||
var/mask_adjusted = 0
|
||||
var/adjusted_flags = null
|
||||
var/muzzle_var = NORMAL_STYLE
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION //most masks have overrides, but not all probably.
|
||||
|
||||
|
||||
/obj/item/clothing/mask/attack_self(mob/user)
|
||||
if(CHECK_BITFIELD(clothing_flags, VOICEBOX_TOGGLABLE))
|
||||
TOGGLE_BITFIELD(clothing_flags, VOICEBOX_DISABLED)
|
||||
var/status = !CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED)
|
||||
to_chat(user, "<span class='notice'>You turn the voice box in [src] [status ? "on" : "off"].</span>")
|
||||
|
||||
/obj/item/clothing/mask/equipped(mob/M, slot)
|
||||
. = ..()
|
||||
if (slot == SLOT_WEAR_MASK && modifies_speech)
|
||||
RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech)
|
||||
else
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
if(!ishuman(M))
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/species/pref_species = H.dna.species
|
||||
|
||||
if(mutantrace_variation)
|
||||
if("mam_snouts" in pref_species.default_features)
|
||||
if(H.dna.features["mam_snouts"] != "None")
|
||||
muzzle_var = ALT_STYLE
|
||||
else
|
||||
muzzle_var = NORMAL_STYLE
|
||||
|
||||
else if("snout" in pref_species.default_features)
|
||||
if(H.dna.features["snout"] != "None")
|
||||
muzzle_var = ALT_STYLE
|
||||
else
|
||||
muzzle_var = NORMAL_STYLE
|
||||
|
||||
else
|
||||
muzzle_var = NORMAL_STYLE
|
||||
|
||||
H.update_inv_wear_mask()
|
||||
|
||||
/obj/item/clothing/mask/dropped(mob/M)
|
||||
. = ..()
|
||||
UnregisterSignal(M, COMSIG_MOB_SAY)
|
||||
|
||||
/obj/item/clothing/mask/proc/handle_speech()
|
||||
|
||||
/obj/item/clothing/mask/worn_overlays(isinhands = FALSE)
|
||||
. = list()
|
||||
if(!isinhands)
|
||||
@@ -20,31 +62,6 @@
|
||||
IF_HAS_BLOOD_DNA(src)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "maskblood")
|
||||
|
||||
/obj/item/clothing/mask/equipped(mob/user, slot)
|
||||
..()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/datum/species/pref_species = H.dna.species
|
||||
|
||||
if(mutantrace_variation)
|
||||
if("mam_snouts" in pref_species.default_features)
|
||||
if(H.dna.features["mam_snouts"] != "None")
|
||||
muzzle_var = ALT_STYLE
|
||||
else
|
||||
muzzle_var = NORMAL_STYLE
|
||||
|
||||
else if("snout" in pref_species.default_features)
|
||||
if(H.dna.features["snout"] != "None")
|
||||
muzzle_var = ALT_STYLE
|
||||
else
|
||||
muzzle_var = NORMAL_STYLE
|
||||
|
||||
else
|
||||
muzzle_var = NORMAL_STYLE
|
||||
|
||||
H.update_inv_wear_mask()
|
||||
|
||||
|
||||
/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE)
|
||||
..()
|
||||
if(ismob(loc))
|
||||
|
||||
@@ -20,9 +20,11 @@
|
||||
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
modifies_speech = TRUE
|
||||
|
||||
/obj/item/clothing/mask/luchador/speechModification(message)
|
||||
if(copytext(message, 1, 2) != "*")
|
||||
/obj/item/clothing/mask/luchador/handle_speech(datum/source, list/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message[1] != "*")
|
||||
message = replacetext(message, "captain", "CAPITÁN")
|
||||
message = replacetext(message, "station", "ESTACIÓN")
|
||||
message = replacetext(message, "sir", "SEÑOR")
|
||||
@@ -42,7 +44,7 @@
|
||||
message = uppertext(message) //Things end up looking better this way (no mixed cases), and it fits the macho wrestler image.
|
||||
if(prob(25))
|
||||
message += " OLE!"
|
||||
return message
|
||||
speech_args[SPEECH_MESSAGE] = message
|
||||
|
||||
/obj/item/clothing/mask/luchador/tecnicos
|
||||
name = "Tecnicos Mask"
|
||||
|
||||
@@ -46,10 +46,12 @@
|
||||
/obj/item/clothing/mask/fakemoustache/italian
|
||||
name = "italian moustache"
|
||||
desc = "Made from authentic Italian moustache hairs. Gives the wearer an irresistable urge to gesticulate wildly."
|
||||
modifies_speech = TRUE
|
||||
|
||||
/obj/item/clothing/mask/fakemoustache/italian/speechModification(M)
|
||||
if(copytext(M, 1, 2) != "*")
|
||||
M = " [M]"
|
||||
/obj/item/clothing/mask/fakemoustache/italian/handle_speech(datum/source, list/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message[1] != "*")
|
||||
message = " [message]"
|
||||
var/list/italian_words = strings("italian_replacement.json", "italian")
|
||||
|
||||
for(var/key in italian_words)
|
||||
@@ -57,13 +59,13 @@
|
||||
if(islist(value))
|
||||
value = pick(value)
|
||||
|
||||
M = replacetextEx(M, " [uppertext(key)]", " [uppertext(value)]")
|
||||
M = replacetextEx(M, " [capitalize(key)]", " [capitalize(value)]")
|
||||
M = replacetextEx(M, " [key]", " [value]")
|
||||
message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
|
||||
message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
|
||||
message = replacetextEx(message, " [key]", " [value]")
|
||||
|
||||
if(prob(3))
|
||||
M += pick(" Ravioli, ravioli, give me the formuoli!"," Mamma-mia!"," Mamma-mia! That's a spicy meat-ball!", " La la la la la funiculi funicula!")
|
||||
return trim(M)
|
||||
message += pick(" Ravioli, ravioli, give me the formuoli!"," Mamma-mia!"," Mamma-mia! That's a spicy meat-ball!", " La la la la la funiculi funicula!")
|
||||
speech_args[SPEECH_MESSAGE] = trim(message)
|
||||
|
||||
/obj/item/clothing/mask/joy
|
||||
name = "joy mask"
|
||||
@@ -73,36 +75,28 @@
|
||||
|
||||
/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
|
||||
clothing_flags = VOICEBOX_TOGGLABLE
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
actions_types = list(/datum/action/item_action/toggle_voice_box)
|
||||
var/voicechange = 0
|
||||
modifies_speech = TRUE
|
||||
|
||||
/obj/item/clothing/mask/pig/attack_self(mob/user)
|
||||
voicechange = !voicechange
|
||||
to_chat(user, "<span class='notice'>You turn the voice box [voicechange ? "on" : "off"]!</span>")
|
||||
/obj/item/clothing/mask/pig/handle_speech(datum/source, list/speech_args)
|
||||
if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
|
||||
speech_args[SPEECH_MESSAGE] = pick("Oink!","Squeeeeeeee!","Oink Oink!")
|
||||
|
||||
/obj/item/clothing/mask/pig/speechModification(message)
|
||||
if(voicechange)
|
||||
message = pick("Oink!","Squeeeeeeee!","Oink Oink!")
|
||||
return message
|
||||
|
||||
/obj/item/clothing/mask/spig //needs to be different otherwise you could turn the speedmodification off and on
|
||||
/obj/item/clothing/mask/pig/cursed //needs to be different otherwise you could turn the speedmodification off and on
|
||||
name = "Pig face"
|
||||
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.
|
||||
icon_state = "pig"
|
||||
item_state = "pig"
|
||||
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/voicechange = 1
|
||||
flags_inv = HIDEFACIALHAIR
|
||||
clothing_flags = NONE
|
||||
|
||||
/obj/item/clothing/mask/spig/speechModification(message)
|
||||
if(voicechange)
|
||||
message = pick("Oink!","Squeeeeeeee!","Oink Oink!")
|
||||
return message
|
||||
/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
|
||||
@@ -112,47 +106,55 @@
|
||||
item_state = "frog"
|
||||
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/voicechange = TRUE
|
||||
clothing_flags = VOICEBOX_TOGGLABLE
|
||||
modifies_speech = TRUE
|
||||
|
||||
/obj/item/clothing/mask/frog/attack_self(mob/user)
|
||||
voicechange = !voicechange
|
||||
to_chat(user, "<span class='notice'>You turn the voice box [voicechange ? "on" : "off"]!</span>")
|
||||
|
||||
/obj/item/clothing/mask/frog/speechModification(message) //whenever you speak
|
||||
if(voicechange)
|
||||
/obj/item/clothing/mask/frog/handle_speech(datum/source, list/speech_args) //whenever you speak
|
||||
if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
|
||||
if(prob(5)) //sometimes, the angry spirit finds others words to speak.
|
||||
message = pick("HUUUUU!!","SMOOOOOKIN'!!","Hello my baby, hello my honey, hello my rag-time gal.", "Feels bad, man.", "GIT DIS GUY OFF ME!!" ,"SOMEBODY STOP ME!!", "NORMIES, GET OUT!!")
|
||||
speech_args[SPEECH_MESSAGE] = pick("HUUUUU!!","SMOOOOOKIN'!!","Hello my baby, hello my honey, hello my rag-time gal.", "Feels bad, man.", "GIT DIS GUY OFF ME!!" ,"SOMEBODY STOP ME!!", "NORMIES, GET OUT!!")
|
||||
else
|
||||
message = pick("Ree!!", "Reee!!","REEE!!","REEEEE!!") //but its usually just angry gibberish,
|
||||
return message
|
||||
speech_args[SPEECH_MESSAGE] = pick("Ree!!", "Reee!!","REEE!!","REEEEE!!") //but its usually just angry gibberish,
|
||||
|
||||
/obj/item/clothing/mask/frog/cursed
|
||||
item_flags = NODROP //reee!!
|
||||
clothing_flags = NONE
|
||||
|
||||
/obj/item/clothing/mask/frog/cursed/attack_self(mob/user)
|
||||
return //no voicebox to alter.
|
||||
/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 = "Cowface"
|
||||
desc = "It looks like a mask, but closer inspection reveals it's melded onto this persons face!"
|
||||
name = "Cow mask with a builtin voice modulator."
|
||||
desc = "A rubber cow mask,"
|
||||
icon = 'icons/mob/mask.dmi'
|
||||
icon_state = "cowmask"
|
||||
item_state = "cowmask"
|
||||
clothing_flags = VOICEBOX_TOGGLABLE
|
||||
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/voicechange = 1
|
||||
modifies_speech = TRUE
|
||||
|
||||
/obj/item/clothing/mask/cowmask/speechModification(message)
|
||||
if(voicechange)
|
||||
message = pick("Moooooooo!","Moo!","Moooo!")
|
||||
return message
|
||||
/obj/item/clothing/mask/cowmask/handle_speech(datum/source, list/speech_args)
|
||||
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
|
||||
|
||||
/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"
|
||||
@@ -161,12 +163,23 @@
|
||||
item_state = "horsehead"
|
||||
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEYES|HIDEEARS
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/voicechange = 1
|
||||
clothing_flags = VOICEBOX_TOGGLABLE
|
||||
|
||||
/obj/item/clothing/mask/horsehead/speechModification(message)
|
||||
if(voicechange)
|
||||
message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
|
||||
return message
|
||||
/obj/item/clothing/mask/horsehead/handle_speech(datum/source, list/speech_args)
|
||||
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
|
||||
|
||||
/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"
|
||||
@@ -285,16 +298,18 @@
|
||||
item_state = "gondola"
|
||||
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
modifies_speech = TRUE
|
||||
|
||||
/obj/item/clothing/mask/gondola/speechModification(M)
|
||||
if(copytext(M, 1, 2) != "*")
|
||||
M = " [M]"
|
||||
/obj/item/clothing/mask/gondola/handle_speech(datum/source, list/speech_args)
|
||||
var/message = speech_args[SPEECH_MESSAGE]
|
||||
if(message[1] != "*")
|
||||
message = " [message]"
|
||||
var/list/spurdo_words = strings("spurdo_replacement.json", "spurdo")
|
||||
for(var/key in spurdo_words)
|
||||
var/value = spurdo_words[key]
|
||||
if(islist(value))
|
||||
value = pick(value)
|
||||
M = replacetextEx(M,regex(uppertext(key),"g"), "[uppertext(value)]")
|
||||
M = replacetextEx(M,regex(capitalize(key),"g"), "[capitalize(value)]")
|
||||
M = replacetextEx(M,regex(key,"g"), "[value]")
|
||||
return trim(M)
|
||||
message = replacetextEx(message,regex(uppertext(key),"g"), "[uppertext(value)]")
|
||||
message = replacetextEx(message,regex(capitalize(key),"g"), "[capitalize(value)]")
|
||||
message = replacetextEx(message,regex(key,"g"), "[value]")
|
||||
speech_args[SPEECH_MESSAGE] = trim(message)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
/obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses
|
||||
name = "combat boots"
|
||||
desc = "High speed, low drag combat boots."
|
||||
icon_state = "jackboots"
|
||||
icon_state = "combat"
|
||||
item_state = "jackboots"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
slowdown = 1
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/blueshirt
|
||||
name = "large armor vest"
|
||||
desc = "A large, yet comfortable piece of armor, protecting you from some threats."
|
||||
icon_state = "blueshift"
|
||||
item_state = "blueshift"
|
||||
|
||||
@@ -59,7 +61,7 @@
|
||||
flags_inv = 0
|
||||
strip_delay = 80
|
||||
unique_reskin = list("Coat" = "hostrench", "Cloak" = "trenchcloak")
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/warden
|
||||
name = "warden's jacket"
|
||||
desc = "A navy-blue armored jacket with blue shoulder designations and '/Warden/' stitched into one of the chest pockets."
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
*/
|
||||
|
||||
/obj/item/clothing/under/rank/security/blueshirt
|
||||
name = "blue shirt and tie"
|
||||
desc = "I'm a little busy right now, Calhoun."
|
||||
icon_state = "blueshift"
|
||||
item_state = "blueshift"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -100,6 +100,9 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
/obj/effect/immovablerod/ex_act(severity, target)
|
||||
return 0
|
||||
|
||||
/obj/structure/closet/supplypod/prevent_content_explosion()
|
||||
return TRUE
|
||||
|
||||
/obj/effect/immovablerod/singularity_act()
|
||||
return
|
||||
|
||||
|
||||
@@ -32,4 +32,4 @@
|
||||
P.update_icon()
|
||||
|
||||
/datum/round_event/mice_migration/start()
|
||||
SSsqueak.trigger_migration(rand(minimum_mice, maximum_mice))
|
||||
SSminor_mapping.trigger_migration(rand(minimum_mice, maximum_mice))
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
continue
|
||||
if(!H.getorgan(/obj/item/organ/appendix)) //Don't give the disease to some who lacks it, only for it to be auto-cured
|
||||
continue
|
||||
if(!(MOB_ORGANIC in H.mob_biotypes)) //biotype sleeper bugs strike again, once again making appendicitis pick a target that can't take it
|
||||
continue
|
||||
var/foundAlready = FALSE //don't infect someone that already has appendicitis
|
||||
for(var/datum/disease/appendicitis/A in H.diseases)
|
||||
foundAlready = TRUE
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -689,7 +689,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
chosen = capitalize(pick(speak_messages))
|
||||
chosen = replacetext(chosen, "%TARGETNAME%", target_name)
|
||||
var/image/speech_overlay = image('icons/mob/talk.dmi', person, "default0", layer = ABOVE_MOB_LAYER)
|
||||
var/message = target.compose_message(person,understood_language,chosen,null,person.get_spans(),face_name = TRUE)
|
||||
var/message = target.compose_message(person,understood_language,chosen,null,list(person.speech_span),face_name = TRUE)
|
||||
feedback_details += "Type: Talk, Source: [person.real_name], Message: [message]"
|
||||
to_chat(target, message)
|
||||
if(target.client)
|
||||
@@ -705,7 +705,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
|
||||
humans += H
|
||||
person = pick(humans)
|
||||
var/message = target.compose_message(person,understood_language,chosen,"[FREQ_COMMON]",person.get_spans(),face_name = TRUE)
|
||||
var/message = target.compose_message(person,understood_language,chosen,"[FREQ_COMMON]",list(person.speech_span),face_name = TRUE)
|
||||
feedback_details += "Type: Radio, Source: [person.real_name], Message: [message]"
|
||||
to_chat(target, message)
|
||||
qdel(src)
|
||||
|
||||
@@ -515,6 +515,13 @@
|
||||
list_reagents = list("shamblers" = 30)
|
||||
foodtype = SUGAR | JUNKFOOD
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/grey_bull
|
||||
name = "Grey Bull"
|
||||
desc = "Grey Bull, it gives you gloves!"
|
||||
icon_state = "energy_drink"
|
||||
list_reagents = list("grey_bull" = 20)
|
||||
foodtype = SUGAR | JUNKFOOD
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/air
|
||||
name = "canned air"
|
||||
desc = "There is no air shortage. Do not drink."
|
||||
|
||||
@@ -202,6 +202,19 @@
|
||||
desc = "A flask of holy water...it's been sitting in the Necropolis a while though."
|
||||
list_reagents = list("hell_water" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/holyoil
|
||||
name = "flask of zelus oil"
|
||||
desc = "A brass flask of Zelus oil, a viscous fluid with a scenting of brass - this flask may be sipped or thrown."
|
||||
icon_state = "zelusflask"
|
||||
list_reagents = list("holyoil" = 30) //Powerfull
|
||||
volume = 30
|
||||
foodtype = NONE
|
||||
force = 12 //Same as a toolbox
|
||||
throwforce = 18
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/holyoil/null
|
||||
list_reagents = list("holyoil" = 0)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/vermouth
|
||||
name = "Goldeneye vermouth"
|
||||
desc = "Sweet, sweet dryness~"
|
||||
@@ -330,6 +343,33 @@
|
||||
icon_state = "fernetbottle"
|
||||
list_reagents = list("fernet" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/applejack
|
||||
name = "Buckin' Bronco's Applejack"
|
||||
desc = "Kicks like a horse, tastes like an apple!"
|
||||
icon_state = "applejack_bottle"
|
||||
list_reagents = list("applejack" = 100)
|
||||
foodtype = FRUIT
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/champagne
|
||||
name = "Eau d' Dandy Brut Champagne"
|
||||
desc = "Finely sourced from only the most pretentious French vineyards."
|
||||
icon_state = "champagne_bottle"
|
||||
list_reagents = list("champagne" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/blazaam
|
||||
name = "Ginbad's Blazaam"
|
||||
desc = "You feel like you should give the bottle a good rub before opening."
|
||||
icon_state = "blazaambottle"
|
||||
list_reagents = list("blazaam" = 100)
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/trappist
|
||||
name = "Mont de Requin Trappistes Bleu"
|
||||
desc = "Brewed in space-Belgium. Fancy!"
|
||||
icon_state = "trappistbottle"
|
||||
volume = 50
|
||||
list_reagents = list("trappist" = 50)
|
||||
|
||||
|
||||
//////////////////////////JUICES AND STUFF ///////////////////////
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/orangejuice
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
icon_state = R.glass_icon_state
|
||||
else
|
||||
var/mutable_appearance/reagent_overlay = mutable_appearance(icon, "glassoverlay")
|
||||
icon_state = "glass_empty"
|
||||
reagent_overlay.color = mix_color_from_reagents(reagents.reagent_list)
|
||||
add_overlay(reagent_overlay)
|
||||
else
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Food.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Note: When adding food items with dummy parents, make sure to add
|
||||
/// the parent to the exclusion list in code/__HELPERS/unsorted.dm's
|
||||
/// get_random_food proc.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/reagent_containers/food
|
||||
possible_transfer_amounts = list()
|
||||
volume = 50 //Sets the default container amount for all food items.
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
"blackpepper" = list("peppermillsmall", "pepper mill", "Often used to flavor food or make people sneeze"),
|
||||
"cornoil" = list("oliveoil", "corn oil bottle", "A delicious oil used in cooking. Made from corn"),
|
||||
"sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!"),
|
||||
"mayonnaise" = list("mayonnaise", "mayonnaise jar", "An oily condiment made from egg yolks."))
|
||||
"mayonnaise" = list("mayonnaise", "mayonnaise jar", "An oily condiment made from egg yolks."),
|
||||
"peanut_butter" = list("peanutbutter", "peanut butter jar", "A deliciously and sticky spread made from peanuts."))
|
||||
var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters.
|
||||
|
||||
/obj/item/reagent_containers/food/condiment/suicide_act(mob/living/carbon/user)
|
||||
@@ -236,7 +237,7 @@
|
||||
volume = 10
|
||||
amount_per_transfer_from_this = 10
|
||||
possible_transfer_amounts = list()
|
||||
possible_states = list("ketchup" = list("condi_ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("condi_hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "soysauce" = list("condi_soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("condi_frostoil", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("condi_salt", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("condi_pepper", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("condi_cornoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("condi_sugar", "Sugar", "Tasty spacey sugar!"))
|
||||
possible_states = list("ketchup" = list("condi_ketchup", "Ketchup", "You feel more American already."), "capsaicin" = list("condi_hotsauce", "Hotsauce", "You can almost TASTE the stomach ulcers now!"), "soysauce" = list("condi_soysauce", "Soy Sauce", "A salty soy-based flavoring"), "frostoil" = list("condi_frostoil", "Coldsauce", "Leaves the tongue numb in it's passage"), "sodiumchloride" = list("condi_salt", "Salt Shaker", "Salt. From space oceans, presumably"), "blackpepper" = list("condi_pepper", "Pepper Mill", "Often used to flavor food or make people sneeze"), "cornoil" = list("condi_cornoil", "Corn Oil", "A delicious oil used in cooking. Made from corn"), "sugar" = list("condi_sugar", "Sugar", "Tasty spacey sugar!"), "astrotame" = list("condi_astrotame", "Astrotame", "The sweetness of a thousand sugars but none of the calories."))
|
||||
|
||||
/obj/item/reagent_containers/food/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly.
|
||||
return
|
||||
@@ -286,3 +287,8 @@
|
||||
name = "hotsauce pack"
|
||||
originalname = "hotsauce"
|
||||
list_reagents = list("capsaicin" = 10)
|
||||
|
||||
/obj/item/reagent_containers/food/condiment/pack/astrotame
|
||||
name = "astrotame pack"
|
||||
originalname = "astrotame"
|
||||
list_reagents = list("astrotame" = 5)
|
||||
|
||||
@@ -558,3 +558,19 @@
|
||||
list_reagents = list("nutriment" = 6, "sodiumchloride" = 2)
|
||||
tastes = list("rice" = 3, "salt" = 1)
|
||||
foodtype = GRAIN
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cannedpeaches
|
||||
name = "Canned Peaches"
|
||||
desc = "Just a nice can of ripe peaches swimming in their own juices."
|
||||
icon_state = "peachcan"
|
||||
list_reagents = list("peachjuice" = 20, "sugar" = 8, "nutriment" = 2)
|
||||
filling_color = "#ffdf26"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
tastes = list("peaches" = 7, "tin" = 1)
|
||||
foodtype = FRUIT | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/cannedpeaches/maint
|
||||
name = "Maintenance Peaches"
|
||||
desc = "I have a mouth and I must eat."
|
||||
icon_state = "peachcanmaint"
|
||||
tastes = list("peaches" = 1, "tin" = 7)
|
||||
@@ -8,27 +8,34 @@
|
||||
icon_state = "donut1"
|
||||
bitesize = 5
|
||||
bonus_reagents = list("sugar" = 1)
|
||||
list_reagents = list("nutriment" = 3, "sugar" = 2)
|
||||
var/extra_reagent = null
|
||||
list_reagents = list("nutriment" = 3, "sprinkles" = 1, "sugar" = 2)
|
||||
filling_color = "#D2691E"
|
||||
tastes = list("donut" = 1)
|
||||
foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR
|
||||
var/frosted_icon = "donut2"
|
||||
var/is_frosted = FALSE
|
||||
var/extra_reagent = null
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donut/Initialize()
|
||||
. = ..()
|
||||
if(prob(30))
|
||||
icon_state = "donut2"
|
||||
name = "frosted donut"
|
||||
reagents.add_reagent("sprinkles", 2)
|
||||
bonus_reagents = list("sprinkles" = 2, "sugar" = 1)
|
||||
filling_color = "#FF69B4"
|
||||
frost_donut()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donut/proc/frost_donut()
|
||||
if(is_frosted || !frosted_icon)
|
||||
return
|
||||
is_frosted = TRUE
|
||||
name = "frosted [name]"
|
||||
icon_state = frosted_icon //delish~!
|
||||
reagents.add_reagent("sprinkles", 1)
|
||||
filling_color = "#FF69B4"
|
||||
return TRUE
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donut/checkLiked(fraction, mob/M) //Sec officers always love donuts
|
||||
if(last_check_time + 50 < world.time)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.mind && H.mind.assigned_role == "Security Officer" || H.mind.assigned_role == "Detective" || H.mind.assigned_role == "Warden" || H.mind.assigned_role == "Head of Security" && !HAS_TRAIT(H, TRAIT_AGEUSIA))
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM) && !HAS_TRAIT(H, TRAIT_AGEUSIA))
|
||||
to_chat(H,"<span class='notice'>I love this taste!</span>")
|
||||
H.adjust_disgust(-5 + -2.5 * fraction)
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
|
||||
@@ -48,18 +55,12 @@
|
||||
. = ..()
|
||||
extra_reagent = pick("nutriment", "capsaicin", "frostoil", "krokodil", "plasma", "cocoa", "slimejelly", "banana", "berryjuice", "omnizine")
|
||||
reagents.add_reagent("[extra_reagent]", 3)
|
||||
bonus_reagents = list("[extra_reagent]" = 3, "sugar" = 1)
|
||||
if(prob(30))
|
||||
icon_state = "donut2"
|
||||
name = "frosted chaos donut"
|
||||
reagents.add_reagent("sprinkles", 2)
|
||||
bonus_reagents = list("sprinkles" = 2, "[extra_reagent]" = 3, "sugar" = 1)
|
||||
filling_color = "#FF69B4"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly
|
||||
name = "jelly donut"
|
||||
desc = "You jelly?"
|
||||
icon_state = "jdonut1"
|
||||
frosted_icon = "jdonut2"
|
||||
bonus_reagents = list("sugar" = 1, "vitamin" = 1)
|
||||
extra_reagent = "berryjuice"
|
||||
tastes = list("jelly" = 1, "donut" = 3)
|
||||
@@ -69,12 +70,6 @@
|
||||
. = ..()
|
||||
if(extra_reagent)
|
||||
reagents.add_reagent("[extra_reagent]", 3)
|
||||
if(prob(30))
|
||||
icon_state = "jdonut2"
|
||||
name = "frosted jelly Donut"
|
||||
reagents.add_reagent("sprinkles", 2)
|
||||
bonus_reagents = list("sprinkles" = 2, "sugar" = 1)
|
||||
filling_color = "#FF69B4"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly
|
||||
name = "jelly donut"
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
H.adjust_blurriness(1)
|
||||
H.visible_message("<span class='warning'>[H] is creamed by [src]!</span>", "<span class='userdanger'>You've been creamed by [src]!</span>")
|
||||
playsound(H, "desceration", 50, TRUE)
|
||||
reagents.trans_to(H,15) //Transfers the cream pies total volume of reagents to target on it
|
||||
reagents.trans_to(H,15) //Cream pie combat
|
||||
if(!H.creamed) // one layer at a time
|
||||
H.add_overlay(creamoverlay)
|
||||
H.creamed = TRUE
|
||||
@@ -61,6 +61,7 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pie/cream/nostun
|
||||
list_reagents = list("laughter" = 15)
|
||||
stunning = FALSE
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pie/cream/body
|
||||
|
||||
@@ -52,6 +52,33 @@
|
||||
list_reagents = list("nutriment" = 2, "cherryjelly" = 5, "vitamin" = 2)
|
||||
foodtype = GRAIN | FRUIT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/jellysandwich/pbj
|
||||
name = "\improper PB & J sandwich"
|
||||
desc = "A grand creation of peanut butter, jelly and bread! An all-american classic."
|
||||
icon_state = "pbjsandwich"
|
||||
tastes = list("bread" = 1, "jelly" = 1, "peanuts" = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/jellysandwich/pbj/cherry
|
||||
bonus_reagents = list("cherryjelly" = 5, "peanut_butter" = 5, "vitamin" = 2)
|
||||
list_reagents = list("nutriment" = 2, "cherryjelly" = 5, "peanut_butter" = 5, "vitamin" = 2)
|
||||
foodtype = GRAIN | FRUIT
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/jellysandwich/pbj/slime
|
||||
bonus_reagents = list("slimejelly" = 5, "peanut_butter" = 5, "vitamin" = 2)
|
||||
list_reagents = list("nutriment" = 2, "slimejelly" = 5, "peanut_butter" = 5, "vitamin" = 2)
|
||||
foodtype = GRAIN | TOXIC
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/peanutbutter_sandwich
|
||||
name = "peanut butter sandwich"
|
||||
desc = "You wish you had some jelly to go with this..."
|
||||
icon = 'icons/obj/food/burgerbread.dmi'
|
||||
icon_state = "peanutbuttersandwich"
|
||||
trash = /obj/item/trash/plate
|
||||
bitesize = 3
|
||||
bonus_reagents = list("peanut_butter" = 5, "vitamin" = 2)
|
||||
list_reagents = list("nutriment" = 2, "peanut_butter" = 5, "vitamin" = 2)
|
||||
foodtype = GRAIN
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/notasandwich
|
||||
name = "not-a-sandwich"
|
||||
desc = "Something seems to be wrong with this, you can't quite figure what. Maybe it's his moustache."
|
||||
@@ -83,6 +110,19 @@
|
||||
list_reagents = list("nutriment" = 1, "slimejelly" = 5, "vitamin" = 2)
|
||||
foodtype = GRAIN | TOXIC | SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/peanut_buttertoast
|
||||
name = "peanut butter toast"
|
||||
desc = "A slice of toast covered with delicious peanut butter."
|
||||
icon = 'icons/obj/food/burgerbread.dmi'
|
||||
icon_state = "peanutbuttertoast"
|
||||
trash = /obj/item/trash/plate
|
||||
bitesize = 3
|
||||
bonus_reagents = list("peanut_butter" = 5, "vitamin" = 2)
|
||||
list_reagents = list("nutriment" = 1, "peanut_butter" = 5, "vitamin" = 2)
|
||||
tastes = list("toast" = 1, "peanuts" = 1)
|
||||
foodtype = GRAIN
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/twobread
|
||||
name = "two bread"
|
||||
desc = "This seems awfully bitter."
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -138,6 +138,10 @@
|
||||
for (var/mob/M in src)
|
||||
M.forceMove(drop_location())
|
||||
|
||||
/obj/machinery/processor/container_resist(mob/living/user)
|
||||
user.forceMove(drop_location())
|
||||
user.visible_message("<span class='notice'>[user] crawls free of the processor!</span>")
|
||||
|
||||
/obj/machinery/processor/slime
|
||||
name = "slime processor"
|
||||
desc = "An industrial grinder with a sticker saying appropriated for science department. Keep hands clear of intake area while operating."
|
||||
|
||||
@@ -152,8 +152,8 @@
|
||||
/datum/chemical_reaction/beepsky_smash
|
||||
name = "Beepksy Smash"
|
||||
id = "beepksysmash"
|
||||
results = list("beepskysmash" = 4)
|
||||
required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1)
|
||||
results = list("beepskysmash" = 5)
|
||||
required_reagents = list("limejuice" = 2, "quadruple_sec" = 2, "iron" = 1)
|
||||
|
||||
/datum/chemical_reaction/doctor_delight
|
||||
name = "The Doctor's Delight"
|
||||
@@ -532,11 +532,18 @@
|
||||
required_reagents = list("hooch" = 1, "absinthe" = 1, "manlydorf" = 1, "syndicatebomb" = 1)
|
||||
mix_message = "<span class='warning'>The mixture turns to a sickening froth.</span>"
|
||||
|
||||
/datum/chemical_reaction/lemonade
|
||||
name = "Lemonade"
|
||||
id = "lemonade"
|
||||
results = list("lemonade" = 5)
|
||||
required_reagents = list("lemonjuice" = 2, "water" = 2, "sugar" = 1, "ice" = 1)
|
||||
mix_message = "You're suddenly reminded of home."
|
||||
|
||||
/datum/chemical_reaction/arnold_palmer
|
||||
name = "Arnold Palmer"
|
||||
id = "arnold_palmer"
|
||||
results = list("arnold_palmer" = 2)
|
||||
required_reagents = list("tea" = 1, "lemonjuice" = 1)
|
||||
required_reagents = list("tea" = 1, "lemonade" = 1)
|
||||
mix_message = "The smells of fresh green grass and sand traps waft through the air as the mixture turns a friendly yellow-orange."
|
||||
|
||||
/datum/chemical_reaction/chocolate_milk
|
||||
@@ -704,3 +711,87 @@
|
||||
id = "pinktea"
|
||||
results = list("pinktea" = 5)
|
||||
required_reagents = list("aphro" = 1, "arnold_palmer" = 1, "sugar" = 1)
|
||||
|
||||
/datum/chemical_reaction/blank_paper
|
||||
name = "Blank Paper"
|
||||
id = "blank_paper"
|
||||
results = list("blank_paper" = 3)
|
||||
required_reagents = list("silencer" = 1, "nothing" = 1, "nuka_cola" = 1)
|
||||
|
||||
/datum/chemical_reaction/wizz_fizz
|
||||
name = "Wizz Fizz"
|
||||
id = "wizz_fizz"
|
||||
results = list("wizz_fizz" = 3)
|
||||
required_reagents = list("triple_sec" = 1, "sodawater" = 1, "champagne" = 1)
|
||||
mix_message = "The beverage starts to froth with an almost mystical zeal!"
|
||||
mix_sound = 'sound/effects/bubbles2.ogg'
|
||||
|
||||
/datum/chemical_reaction/bug_spray
|
||||
name = "Bug Spray"
|
||||
id = "bug_spray"
|
||||
results = list("bug_spray" = 5)
|
||||
required_reagents = list("triple_sec" = 2, "lemon_lime" = 1, "rum" = 2, "vodka" = 1)
|
||||
mix_message = "The faint aroma of summer camping trips wafts through the air; but what's that buzzing noise?"
|
||||
mix_sound = 'sound/creatures/bee.ogg'
|
||||
|
||||
/datum/chemical_reaction/jack_rose
|
||||
name = "Jack Rose"
|
||||
id = "jack_rose"
|
||||
results = list("jack_rose" = 4)
|
||||
required_reagents = list("grenadine" = 1, "applejack" = 2, "limejuice" = 1)
|
||||
mix_message = "As the grenadine incorporates, the beverage takes on a mellow, red-orange glow."
|
||||
|
||||
/datum/chemical_reaction/turbo
|
||||
name = "Turbo"
|
||||
id = "turbo"
|
||||
results = list("turbo" = 5)
|
||||
required_reagents = list("moonshine" = 2, "nitrous_oxide" = 1, "sugar_rush" = 1, "pwr_game" = 1)
|
||||
|
||||
/datum/chemical_reaction/old_timer
|
||||
name = "Old Timer"
|
||||
id = "old_timer"
|
||||
results = list("old_timer" = 6)
|
||||
required_reagents = list("whiskeysoda" = 3, "parsnipjuice" = 2, "alexander" = 1)
|
||||
|
||||
/datum/chemical_reaction/rubberneck
|
||||
name = "Rubberneck"
|
||||
id = "rubberneck"
|
||||
results = list("rubberneck" = 10)
|
||||
required_reagents = list("ethanol" = 4, "grey_bull" = 5, "astrotame" = 1)
|
||||
|
||||
/datum/chemical_reaction/duplex
|
||||
name = "Duplex"
|
||||
id = "duplex"
|
||||
results = list("duplex" = 4)
|
||||
required_reagents = list("hcider" = 2, "applejuice" = 1, "berryjuice" = 1)
|
||||
|
||||
/datum/chemical_reaction/trappist
|
||||
name = "Trappist"
|
||||
id = "trappist"
|
||||
results = list("trappist" = 5)
|
||||
required_reagents = list("ale" = 2, "holywater" = 2, "sugar" = 1)
|
||||
|
||||
/datum/chemical_reaction/cream_soda
|
||||
name = "Cream Soda"
|
||||
id = "cream_soda"
|
||||
results = list("cream_soda" = 4)
|
||||
required_reagents = list("sugar" = 2, "sodawater" = 2, "vanilla" = 1)
|
||||
|
||||
/datum/chemical_reaction/blazaam
|
||||
name = "Blazaam"
|
||||
id = "blazaam"
|
||||
results = list("blazaam" = 3)
|
||||
required_reagents = list("gin" = 2, "peachjuice" = 1, "bluespace" = 1)
|
||||
|
||||
/datum/chemical_reaction/planet_cracker
|
||||
name = "Planet Cracker"
|
||||
id = "planet_cracker"
|
||||
results = list("planet_cracker" = 4)
|
||||
required_reagents = list("champagne" = 2, "lizardwine" = 2, "eggyolk" = 1, "gold" = 1)
|
||||
mix_message = "The liquid's color starts shifting as the nanogold is alternately corroded and redeposited."
|
||||
|
||||
/datum/chemical_reaction/red_queen
|
||||
name = "Red Queen"
|
||||
id = "red_queen"
|
||||
results = list("red_queen" = 10)
|
||||
required_reagents = list("tea" = 6, "mercury" = 2, "blackpepper" = 1, "growthserum" = 1)
|
||||
@@ -116,7 +116,7 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/jelliedtoast/slime
|
||||
subcategory = CAT_MISCFOOD
|
||||
|
||||
/datum/crafting_recipe/food/jelliedyoast
|
||||
/datum/crafting_recipe/food/jelliedtoast
|
||||
name = "Jellied toast"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/cherryjelly = 5,
|
||||
@@ -125,6 +125,15 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry
|
||||
subcategory = CAT_MISCFOOD
|
||||
|
||||
/datum/crafting_recipe/food/peanutbuttertoast
|
||||
name = "Peanut butter toast"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/peanut_butter = 5,
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/plain = 1
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/peanut_buttertoast
|
||||
subcategory = CAT_MISCFOOD
|
||||
|
||||
/datum/crafting_recipe/food/twobread
|
||||
name = "Two bread"
|
||||
reqs = list(
|
||||
|
||||
@@ -43,6 +43,48 @@
|
||||
result = /obj/item/reagent_containers/food/snacks/jellysandwich/cherry
|
||||
subcategory = CAT_SANDWICH
|
||||
|
||||
/datum/crafting_recipe/food/pbj_slimesandwich
|
||||
name = "PB&J sandwich"
|
||||
reqs = list(
|
||||
/datum/reagent/toxin/slimejelly = 5,
|
||||
/datum/reagent/consumable/peanut_butter = 5,
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/jellysandwich/pbj/slime
|
||||
subcategory = CAT_SANDWICH
|
||||
|
||||
/datum/crafting_recipe/food/pbj_slimesandwich/alt
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/jelliedtoast/slime = 1,
|
||||
/obj/item/reagent_containers/food/snacks/peanut_buttertoast = 1,
|
||||
)
|
||||
|
||||
/datum/crafting_recipe/food/pbj_sandwich
|
||||
name = "PB&J sandwich"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/cherryjelly = 5,
|
||||
/datum/reagent/consumable/peanut_butter = 5,
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/jellysandwich/pbj/cherry
|
||||
subcategory = CAT_SANDWICH
|
||||
|
||||
/datum/crafting_recipe/food/pbj_sandwich/alt
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/food/snacks/jelliedtoast/cherry = 1,
|
||||
/obj/item/reagent_containers/food/snacks/peanut_buttertoast = 1,
|
||||
)
|
||||
|
||||
/datum/crafting_recipe/peanutbutter_sandwich
|
||||
name = "Peanut butter sandwich"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/peanut_butter = 5,
|
||||
/obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/peanutbutter_sandwich
|
||||
subcategory = CAT_SANDWICH
|
||||
|
||||
|
||||
/datum/crafting_recipe/food/notasandwich
|
||||
name = "Not a sandwich"
|
||||
reqs = list(
|
||||
|
||||
@@ -303,6 +303,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 24px;}
|
||||
.danger {color: #ff0000;}
|
||||
.warning {color: #ff0000; font-style: italic;}
|
||||
.alertwarning {color: #FF0000; font-weight: bold}
|
||||
.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
|
||||
.announce {color: #228b22; font-weight: bold;}
|
||||
.boldannounce {color: #ff0000; font-weight: bold;}
|
||||
@@ -316,6 +317,8 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.unconscious {color: #0000ff; font-weight: bold;}
|
||||
.suicide {color: #ff5050; font-style: italic;}
|
||||
.green {color: #03ff39;}
|
||||
.red {color: #FF0000}
|
||||
.blue {color: #215cff}
|
||||
.nicegreen {color: #14a833;}
|
||||
.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;}
|
||||
.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
/obj/item/seeds/peanutseed
|
||||
name = "pack of peanut seeds"
|
||||
desc = "These seeds grow to produce fruits botanically classified as legumes, but mundanely referred as nuts."
|
||||
icon_state = "seed-peanut"
|
||||
species = "peanut"
|
||||
plantname = "Peanut Vines"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/peanut
|
||||
yield = 6
|
||||
growthstages = 4
|
||||
growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi'
|
||||
reagents_add = list("vitamin" = 0.02, "nutriment" = 0.15, "cooking_oil" = 0.03)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/peanut
|
||||
seed = /obj/item/seeds/peanutseed
|
||||
name = "peanut"
|
||||
desc = "Peanuts for the peanut gallery!" //get me a better description, boys.
|
||||
icon_state = "peanut"
|
||||
filling_color = "#C4AE7A"
|
||||
bitesize = 100
|
||||
foodtype = VEGETABLES
|
||||
dried_type = /obj/item/reagent_containers/food/snacks/roasted_peanuts
|
||||
cooked_type = /obj/item/reagent_containers/food/snacks/roasted_peanuts
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/roasted_peanuts
|
||||
name = "roasted peanuts"
|
||||
desc = "A handful of roasted peanuts, with or without salt."
|
||||
icon_state = "roasted_peanuts"
|
||||
foodtype = VEGETABLES
|
||||
list_reagents = list("nutriment" = 6, "vitamin" = 1)
|
||||
juice_results = list("peanut_butter" = 3)
|
||||
@@ -54,6 +54,7 @@
|
||||
icon_state = "parsnip"
|
||||
bitesize_mod = 2
|
||||
foodtype = VEGETABLES
|
||||
juice_results = list("parsnipjuice" = 0)
|
||||
wine_power = 35
|
||||
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
var/brightness = get_pin_data(IC_INPUT, 2)
|
||||
|
||||
if(new_color && isnum(brightness))
|
||||
brightness = CLAMP(brightness, 0, 4)
|
||||
brightness = CLAMP(brightness, 0, 10)
|
||||
light_rgb = new_color
|
||||
light_brightness = brightness
|
||||
|
||||
@@ -411,4 +411,4 @@
|
||||
if(assembly)
|
||||
assembly.investigate_log("displayed \"[html_encode(stuff_to_display)]\" with [type].", INVESTIGATE_CIRCUIT)
|
||||
else
|
||||
investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT)
|
||||
investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT)
|
||||
|
||||
@@ -18,6 +18,7 @@ Clown
|
||||
minimal_access = list(ACCESS_THEATRE)
|
||||
|
||||
/datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M)
|
||||
. = ..()
|
||||
H.apply_pref_name("clown", M.client)
|
||||
|
||||
/datum/outfit/job/clown
|
||||
@@ -60,6 +61,7 @@ Clown
|
||||
return
|
||||
|
||||
H.dna.add_mutation(CLOWNMUT)
|
||||
H.dna.add_mutation(SMILE)
|
||||
|
||||
/*
|
||||
Mime
|
||||
@@ -174,6 +176,8 @@ Lawyer
|
||||
access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
|
||||
minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS)
|
||||
|
||||
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
|
||||
|
||||
/datum/outfit/job/lawyer
|
||||
name = "Lawyer"
|
||||
jobtype = /datum/job/lawyer
|
||||
|
||||
@@ -19,6 +19,7 @@ Chaplain
|
||||
minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_THEATRE)
|
||||
|
||||
/datum/job/chaplain/after_spawn(mob/living/H, mob/M)
|
||||
. = ..()
|
||||
if(H.mind)
|
||||
H.mind.isholy = TRUE
|
||||
|
||||
|
||||
@@ -54,10 +54,15 @@
|
||||
//can be overridden by antag_rep.txt config
|
||||
var/antag_rep = 10
|
||||
|
||||
var/list/mind_traits // Traits added to the mind of the mob assigned this job
|
||||
|
||||
//Only override this proc
|
||||
//H is usually a human unless an /equip override transformed it
|
||||
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
|
||||
//do actions on H but send messages to M as the key may not have been transferred_yet
|
||||
if(mind_traits)
|
||||
for(var/t in mind_traits)
|
||||
ADD_TRAIT(H.mind, t, JOB_TRAIT)
|
||||
|
||||
/datum/job/proc/announce(mob/living/carbon/human/H)
|
||||
if(head_announce)
|
||||
|
||||
@@ -35,6 +35,8 @@ Head of Security
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
|
||||
|
||||
/datum/outfit/job/hos
|
||||
name = "Head of Security"
|
||||
jobtype = /datum/job/hos
|
||||
@@ -92,6 +94,8 @@ Warden
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //SEE /DATUM/JOB/WARDEN/GET_ACCESS()
|
||||
|
||||
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
|
||||
|
||||
/datum/job/warden/get_access()
|
||||
var/list/L = list()
|
||||
L = ..() | check_config_for_sec_maint()
|
||||
@@ -145,6 +149,8 @@ Detective
|
||||
access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
|
||||
|
||||
/datum/outfit/job/detective
|
||||
name = "Detective"
|
||||
jobtype = /datum/job/detective
|
||||
@@ -198,6 +204,7 @@ Security Officer
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) //BUT SEE /DATUM/JOB/WARDEN/GET_ACCESS()
|
||||
|
||||
mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM)
|
||||
|
||||
/datum/job/officer/get_access()
|
||||
var/list/L = list()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -112,7 +112,7 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
else
|
||||
if(!(obj_flags & EMAGGED))
|
||||
Radio.set_frequency(FREQ_SECURITY)
|
||||
Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY, get_spans(), get_default_language())
|
||||
Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY)
|
||||
to_chat(usr, "<span class='notice'>Shuttle received message and will be sent shortly.</span>")
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/proc/check_auth()
|
||||
@@ -149,7 +149,7 @@ GLOBAL_LIST(labor_sheet_values)
|
||||
var/obj/item/stack/sheet/inp = I
|
||||
points += inp.point_value * inp.amount
|
||||
return ..()
|
||||
|
||||
|
||||
/**********************Point Lookup Console**************************/
|
||||
/obj/machinery/mineral/labor_points_checker
|
||||
name = "points checking console"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
return
|
||||
|
||||
var/obj/effect/mob_spawn/MS = pick(GLOB.mob_spawners[href_list["JoinAsGhostRole"]])
|
||||
if(MS?.attack_ghost(src, latejoinercalling = TRUE))
|
||||
if(MS.attack_ghost(src, latejoinercalling = TRUE))
|
||||
SSticker.queued_players -= src
|
||||
SSticker.queue_delay = 4
|
||||
qdel(src)
|
||||
@@ -443,10 +443,14 @@
|
||||
for(var/datum/job/job in SSjob.occupations)
|
||||
if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
|
||||
available_job_count++
|
||||
for(var/obj/effect/mob_spawn/spawner in GLOB.mob_spawners)
|
||||
if(spawner.can_latejoin())
|
||||
available_job_count++
|
||||
break
|
||||
for(var/spawner in GLOB.mob_spawners)
|
||||
if(!LAZYLEN(spawner))
|
||||
continue
|
||||
var/obj/effect/mob_spawn/S = pick(GLOB.mob_spawners[spawner])
|
||||
if(!istype(S) || !S.can_latejoin())
|
||||
continue
|
||||
available_job_count++
|
||||
break
|
||||
|
||||
if(!available_job_count)
|
||||
dat += "<div class='notice red'>There are currently no open positions!</div>"
|
||||
@@ -465,9 +469,13 @@
|
||||
"Science" = list(jobs = list(), titles = GLOB.science_positions, color = "#e6b3e6"),
|
||||
"Security" = list(jobs = list(), titles = GLOB.security_positions, color = "#ff9999"),
|
||||
)
|
||||
for(var/obj/effect/mob_spawn/spawner in GLOB.mob_spawners)
|
||||
if(spawner.can_latejoin())
|
||||
categorizedJobs["Ghost Role"]["jobs"] += spawner
|
||||
for(var/spawner in GLOB.mob_spawners)
|
||||
if(!LAZYLEN(spawner))
|
||||
continue
|
||||
var/obj/effect/mob_spawn/S = pick(GLOB.mob_spawners[spawner])
|
||||
if(!istype(S) || !S.can_latejoin())
|
||||
continue
|
||||
categorizedJobs["Ghost Role"]["jobs"] += spawner
|
||||
|
||||
for(var/datum/job/job in SSjob.occupations)
|
||||
if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
|
||||
|
||||
@@ -6,8 +6,11 @@
|
||||
else
|
||||
gender = pick(MALE,FEMALE)
|
||||
underwear = random_underwear(gender)
|
||||
undie_color = random_color()
|
||||
undershirt = random_undershirt(gender)
|
||||
shirt_color = random_color()
|
||||
socks = random_socks()
|
||||
socks_color = random_color()
|
||||
skin_tone = random_skin_tone()
|
||||
hair_style = random_hair_style(gender)
|
||||
facial_hair_style = random_facial_hair_style(gender)
|
||||
|
||||
@@ -59,4 +59,8 @@
|
||||
var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects
|
||||
var/dimension_x = 32
|
||||
var/dimension_y = 32
|
||||
var/center = FALSE //Should we center the sprite?
|
||||
var/center = FALSE //Should we center the sprite?
|
||||
|
||||
/datum/sprite_accessory/underwear
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
var/has_color = FALSE
|
||||
@@ -2,135 +2,132 @@
|
||||
// Socks Definitions //
|
||||
///////////////////////
|
||||
|
||||
/datum/sprite_accessory/socks
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
|
||||
/datum/sprite_accessory/socks/nude
|
||||
/datum/sprite_accessory/underwear/socks/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
|
||||
// please make sure they're sorted alphabetically and categorized
|
||||
|
||||
/datum/sprite_accessory/socks/bee_knee
|
||||
name = "Knee-high (Bee)"
|
||||
/datum/sprite_accessory/underwear/socks/socks_knee
|
||||
name = "Knee-high"
|
||||
icon_state = "socks_knee"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/bee_knee
|
||||
name = "Knee-high - Bee"
|
||||
icon_state = "bee_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/black_knee
|
||||
name = "Knee-high (Black)"
|
||||
icon_state = "black_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/commie_knee
|
||||
name = "Knee-High (Commie)"
|
||||
/datum/sprite_accessory/underwear/socks/commie_knee
|
||||
name = "Knee-High - Commie"
|
||||
icon_state = "commie_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/usa_knee
|
||||
name = "Knee-High (Freedom)"
|
||||
/datum/sprite_accessory/underwear/socks/usa_knee
|
||||
name = "Knee-High - Freedom"
|
||||
icon_state = "assblastusa_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/rainbow_knee
|
||||
name = "Knee-high (Rainbow)"
|
||||
/datum/sprite_accessory/underwear/socks/rainbow_knee
|
||||
name = "Knee-high - Rainbow"
|
||||
icon_state = "rainbow_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/striped_knee
|
||||
name = "Knee-high (Striped)"
|
||||
/datum/sprite_accessory/underwear/socks/striped_knee
|
||||
name = "Knee-high - Striped"
|
||||
icon_state = "striped_knee"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/socks/thin_knee
|
||||
name = "Knee-high (Thin)"
|
||||
/datum/sprite_accessory/underwear/socks/thin_knee
|
||||
name = "Knee-high - Thin"
|
||||
icon_state = "thin_knee"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/socks/uk_knee
|
||||
name = "Knee-High (UK)"
|
||||
/datum/sprite_accessory/underwear/socks/uk_knee
|
||||
name = "Knee-High - UK"
|
||||
icon_state = "uk_knee"
|
||||
|
||||
/datum/sprite_accessory/socks/white_knee
|
||||
name = "Knee-high (White)"
|
||||
icon_state = "white_knee"
|
||||
/datum/sprite_accessory/underwear/socks/socks_norm
|
||||
name = "Normal"
|
||||
icon_state = "socks_norm"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/socks/black_norm
|
||||
name = "Normal (Black)"
|
||||
icon_state = "black_norm"
|
||||
/datum/sprite_accessory/underwear/socks/bee_norm
|
||||
name = "Normal - Bee"
|
||||
icon_state = "bee_norm"
|
||||
|
||||
/datum/sprite_accessory/socks/white_norm
|
||||
name = "Normal (White)"
|
||||
icon_state = "white_norm"
|
||||
|
||||
/datum/sprite_accessory/socks/pantyhose
|
||||
/datum/sprite_accessory/underwear/socks/pantyhose
|
||||
name = "Pantyhose"
|
||||
icon_state = "pantyhose"
|
||||
|
||||
/datum/sprite_accessory/socks/black_short
|
||||
name = "Short (Black)"
|
||||
icon_state = "black_short"
|
||||
/datum/sprite_accessory/underwear/socks/socks_short
|
||||
name = "Short"
|
||||
icon_state = "socks_short"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/socks/white_short
|
||||
name = "Short (White)"
|
||||
icon_state = "white_short"
|
||||
|
||||
/datum/sprite_accessory/socks/stockings_blue
|
||||
name = "Stockings (Blue)"
|
||||
/datum/sprite_accessory/underwear/socks/stockings_blue
|
||||
name = "Stockings - Blue"
|
||||
icon_state = "stockings_blue"
|
||||
|
||||
/datum/sprite_accessory/socks/stockings_cyan
|
||||
name = "Stockings (Cyan)"
|
||||
/datum/sprite_accessory/underwear/socks/stockings_cyan
|
||||
name = "Stockings - Cyan"
|
||||
icon_state = "stockings_cyan"
|
||||
|
||||
/datum/sprite_accessory/socks/stockings_dpink
|
||||
name = "Stockings (Dark Pink)"
|
||||
/datum/sprite_accessory/underwear/socks/stockings_dpink
|
||||
name = "Stockings - Dark Pink"
|
||||
icon_state = "stockings_dpink"
|
||||
|
||||
/datum/sprite_accessory/socks/stockings_green
|
||||
name = "Stockings (Green)"
|
||||
/datum/sprite_accessory/underwear/socks/stockings_green
|
||||
name = "Stockings - Green"
|
||||
icon_state = "stockings_black"
|
||||
|
||||
/datum/sprite_accessory/socks/stockings_orange
|
||||
name = "Stockings (Orange)"
|
||||
/datum/sprite_accessory/underwear/socks/stockings_orange
|
||||
name = "Stockings - Orange"
|
||||
icon_state = "stockings_orange"
|
||||
|
||||
/datum/sprite_accessory/socks/stockings_programmer
|
||||
name = "Stockings (Programmer)"
|
||||
/datum/sprite_accessory/underwear/socks/stockings_programmer
|
||||
name = "Stockings - Programmer"
|
||||
icon_state = "stockings_lpink"
|
||||
|
||||
/datum/sprite_accessory/socks/stockings_purple
|
||||
name = "Stockings (Purple)"
|
||||
/datum/sprite_accessory/underwear/socks/stockings_purple
|
||||
name = "Stockings - Purple"
|
||||
icon_state = "stockings_purple"
|
||||
|
||||
/datum/sprite_accessory/socks/stockings_yellow
|
||||
name = "Stockings (Yellow)"
|
||||
/datum/sprite_accessory/underwear/socks/stockings_yellow
|
||||
name = "Stockings - Yellow"
|
||||
icon_state = "stockings_yellow"
|
||||
|
||||
/datum/sprite_accessory/socks/bee_thigh
|
||||
name = "Thigh-high (Bee)"
|
||||
/datum/sprite_accessory/underwear/socks/socks_thigh
|
||||
name = "Thigh-high"
|
||||
icon_state = "socks_thigh"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/bee_thigh
|
||||
name = "Thigh-high - Bee"
|
||||
icon_state = "bee_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/black_thigh
|
||||
name = "Thigh-high (Black)"
|
||||
icon_state = "black_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/commie_thigh
|
||||
name = "Thigh-high (Commie)"
|
||||
/datum/sprite_accessory/underwear/socks/commie_thigh
|
||||
name = "Thigh-high - Commie"
|
||||
icon_state = "commie_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/usa_thigh
|
||||
name = "Thigh-high (Freedom)"
|
||||
/datum/sprite_accessory/underwear/socks/usa_thigh
|
||||
name = "Thigh-high - Freedom"
|
||||
icon_state = "assblastusa_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/rainbow_thigh
|
||||
name = "Thigh-high (Rainbow)"
|
||||
/datum/sprite_accessory/underwear/socks/fishnet
|
||||
name = "Thigh-high - Fishnet"
|
||||
icon_state = "fishnet"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/rainbow_thigh
|
||||
name = "Thigh-high - Rainbow"
|
||||
icon_state = "rainbow_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/striped_thigh
|
||||
name = "Thigh-high (Striped)"
|
||||
/datum/sprite_accessory/underwear/socks/striped_thigh
|
||||
name = "Thigh-high - Striped"
|
||||
icon_state = "striped_thigh"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/socks/thin_thigh
|
||||
name = "Thigh-high (Thin)"
|
||||
/datum/sprite_accessory/underwear/socks/thin_thigh
|
||||
name = "Thigh-high - Thin"
|
||||
icon_state = "thin_thigh"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/socks/uk_thigh
|
||||
name = "Thigh-high (UK)"
|
||||
/datum/sprite_accessory/underwear/socks/uk_thigh
|
||||
name = "Thigh-high - UK"
|
||||
icon_state = "uk_thigh"
|
||||
|
||||
/datum/sprite_accessory/socks/white_thigh
|
||||
name = "Thigh-high (White)"
|
||||
icon_state = "white_thigh"
|
||||
|
||||
@@ -2,311 +2,288 @@
|
||||
// Undershirt Definitions //
|
||||
////////////////////////////
|
||||
|
||||
/datum/sprite_accessory/undershirt
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/nude
|
||||
/datum/sprite_accessory/underwear/top/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
|
||||
// please make sure they're sorted alphabetically and categorized
|
||||
|
||||
/datum/sprite_accessory/undershirt/bluejersey
|
||||
/datum/sprite_accessory/underwear/top/longjon
|
||||
name = "Long John Shirt"
|
||||
icon_state = "ljont"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/longstripe_black
|
||||
name = "Longsleeve Striped Shirt - Black"
|
||||
icon_state = "longstripe"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/longstripe_blue
|
||||
name = "Longsleeve Striped Shirt - Blue"
|
||||
icon_state = "longstripe_blue"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/shirt
|
||||
name = "Shirt"
|
||||
icon_state = "undershirt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlingw
|
||||
name = "Shirt - Bowling"
|
||||
icon_state = "bowlingw"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowling
|
||||
name = "Shirt, Bowling - Red"
|
||||
icon_state = "bowling"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlingp
|
||||
name = "Shirt, Bowling - Pink"
|
||||
icon_state = "bowlingp"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlinga
|
||||
name = "Shirt, Bowling - Aqua"
|
||||
icon_state = "bowlinga"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bluejersey
|
||||
name = "Shirt, Jersey - Blue"
|
||||
icon_state = "shirt_bluejersey"
|
||||
|
||||
/datum/sprite_accessory/undershirt/redjersey
|
||||
/datum/sprite_accessory/underwear/top/redjersey
|
||||
name = "Shirt, Jersey - Red"
|
||||
icon_state = "shirt_redjersey"
|
||||
|
||||
/datum/sprite_accessory/undershirt/bluepolo
|
||||
name = "Shirt, Polo - Blue"
|
||||
icon_state = "bluepolo"
|
||||
/datum/sprite_accessory/underwear/top/polo
|
||||
name = "Shirt - Polo"
|
||||
icon_state = "polo"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/grayyellowpolo
|
||||
name = "Shirt, Polo - Gray, Yellow"
|
||||
icon_state = "grayyellowpolo"
|
||||
|
||||
/datum/sprite_accessory/undershirt/redpolo
|
||||
name = "Shirt, Polo - Red"
|
||||
icon_state = "redpolo"
|
||||
|
||||
/datum/sprite_accessory/undershirt/whitepolo
|
||||
name = "Shirt, Polo - White"
|
||||
icon_state = "whitepolo"
|
||||
|
||||
/datum/sprite_accessory/undershirt/alienshirt
|
||||
/datum/sprite_accessory/underwear/top/alienshirt
|
||||
name = "Shirt - Alien"
|
||||
icon_state = "shirt_alien"
|
||||
|
||||
/datum/sprite_accessory/undershirt/mondmondjaja
|
||||
/datum/sprite_accessory/underwear/top/mondmondjaja
|
||||
name = "Shirt - Band"
|
||||
icon_state = "band"
|
||||
|
||||
/datum/sprite_accessory/undershirt/shirt_black
|
||||
name = "Shirt - Black"
|
||||
icon_state = "shirt_black"
|
||||
/datum/sprite_accessory/underwear/top/shirt_bee
|
||||
name = "Shirt - Bee"
|
||||
icon_state = "bee_shirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/blueshirt
|
||||
name = "Shirt - Blue"
|
||||
icon_state = "shirt_blue"
|
||||
|
||||
/datum/sprite_accessory/undershirt/clownshirt
|
||||
/datum/sprite_accessory/underwear/top/clownshirt
|
||||
name = "Shirt - Clown"
|
||||
icon_state = "shirt_clown"
|
||||
|
||||
/datum/sprite_accessory/undershirt/commie
|
||||
/datum/sprite_accessory/underwear/top/commie
|
||||
name = "Shirt - Commie"
|
||||
icon_state = "shirt_commie"
|
||||
|
||||
/datum/sprite_accessory/undershirt/greenshirt
|
||||
name = "Shirt - Green"
|
||||
icon_state = "shirt_green"
|
||||
|
||||
/datum/sprite_accessory/undershirt/shirt_grey
|
||||
name = "Shirt - Grey"
|
||||
icon_state = "shirt_grey"
|
||||
|
||||
/datum/sprite_accessory/undershirt/ian
|
||||
/datum/sprite_accessory/underwear/top/ian
|
||||
name = "Shirt - Ian"
|
||||
icon_state = "ian"
|
||||
|
||||
/datum/sprite_accessory/undershirt/ilovent
|
||||
/datum/sprite_accessory/underwear/top/ilovent
|
||||
name = "Shirt - I Love NT"
|
||||
icon_state = "ilovent"
|
||||
|
||||
/datum/sprite_accessory/undershirt/lover
|
||||
/datum/sprite_accessory/underwear/top/lover
|
||||
name = "Shirt - Lover"
|
||||
icon_state = "lover"
|
||||
|
||||
/datum/sprite_accessory/undershirt/matroska
|
||||
/datum/sprite_accessory/underwear/top/matroska
|
||||
name = "Shirt - Matroska"
|
||||
icon_state = "matroska"
|
||||
|
||||
/datum/sprite_accessory/undershirt/meat
|
||||
/datum/sprite_accessory/underwear/top/meat
|
||||
name = "Shirt - Meat"
|
||||
icon_state = "shirt_meat"
|
||||
|
||||
/datum/sprite_accessory/undershirt/nano
|
||||
/datum/sprite_accessory/underwear/top/nano
|
||||
name = "Shirt - Nanotrasen"
|
||||
icon_state = "shirt_nano"
|
||||
|
||||
/datum/sprite_accessory/undershirt/peace
|
||||
/datum/sprite_accessory/underwear/top/peace
|
||||
name = "Shirt - Peace"
|
||||
icon_state = "peace"
|
||||
|
||||
/datum/sprite_accessory/undershirt/pacman
|
||||
/datum/sprite_accessory/underwear/top/pacman
|
||||
name = "Shirt - Pogoman"
|
||||
icon_state = "pogoman"
|
||||
|
||||
/datum/sprite_accessory/undershirt/question
|
||||
/datum/sprite_accessory/underwear/top/question
|
||||
name = "Shirt - Question"
|
||||
icon_state = "shirt_question"
|
||||
|
||||
/datum/sprite_accessory/undershirt/redshirt
|
||||
name = "Shirt - Red"
|
||||
icon_state = "shirt_red"
|
||||
|
||||
/datum/sprite_accessory/undershirt/skull
|
||||
/datum/sprite_accessory/underwear/top/skull
|
||||
name = "Shirt - Skull"
|
||||
icon_state = "shirt_skull"
|
||||
|
||||
/datum/sprite_accessory/undershirt/ss13
|
||||
/datum/sprite_accessory/underwear/top/ss13
|
||||
name = "Shirt - SS13"
|
||||
icon_state = "shirt_ss13"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/stripe
|
||||
/datum/sprite_accessory/underwear/top/stripe
|
||||
name = "Shirt - Striped"
|
||||
icon_state = "shirt_stripes"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tiedye
|
||||
/datum/sprite_accessory/underwear/top/tiedye
|
||||
name = "Shirt - Tie-dye"
|
||||
icon_state = "shirt_tiedye"
|
||||
|
||||
/datum/sprite_accessory/undershirt/uk
|
||||
/datum/sprite_accessory/underwear/top/uk
|
||||
name = "Shirt - UK"
|
||||
icon_state = "uk"
|
||||
|
||||
/datum/sprite_accessory/undershirt/usa
|
||||
/datum/sprite_accessory/underwear/top/usa
|
||||
name = "Shirt - USA"
|
||||
icon_state = "shirt_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/undershirt/shirt_white
|
||||
name = "Shirt - White"
|
||||
icon_state = "shirt_white"
|
||||
/datum/sprite_accessory/underwear/top/shortsleeve
|
||||
name = "Shirt - Short Sleeved"
|
||||
icon_state = "shortsleeve"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/blackshortsleeve
|
||||
name = "Shirt, Short Sleeved - Black"
|
||||
icon_state = "blackshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/blueshortsleeve
|
||||
name = "Shirt, Short Sleeved - Blue"
|
||||
icon_state = "blueshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/greenshortsleeve
|
||||
name = "Shirt, Short Sleeved - Green"
|
||||
icon_state = "greenshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/purpleshortsleeve
|
||||
name = "Shirt, Short Sleeved - Purple"
|
||||
icon_state = "purpleshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/whiteshortsleeve
|
||||
name = "Shirt, Short Sleeved - White"
|
||||
icon_state = "whiteshortsleeve"
|
||||
|
||||
/datum/sprite_accessory/undershirt/blueshirtsport
|
||||
/datum/sprite_accessory/underwear/top/blueshirtsport
|
||||
name = "Shirt, Sports - Blue"
|
||||
icon_state = "blueshirtsport"
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/greenshirtsport
|
||||
/datum/sprite_accessory/underwear/top/greenshirtsport
|
||||
name = "Shirt, Sports - Green"
|
||||
icon_state = "greenshirtsport"
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/redshirtsport
|
||||
/datum/sprite_accessory/underwear/top/redshirtsport
|
||||
name = "Shirt, Sports - Red"
|
||||
icon_state = "redshirtsport"
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/undershirt/redtop
|
||||
name = "Shirt, Short - Red"
|
||||
icon_state = "redtop"
|
||||
|
||||
/datum/sprite_accessory/undershirt/whitetop
|
||||
name = "Shirt, Short - White"
|
||||
icon_state = "whitetop"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tshirt_blue
|
||||
name = "T-Shirt - Blue"
|
||||
icon_state = "blueshirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tshirt_green
|
||||
name = "T-Shirt - Green"
|
||||
icon_state = "greenshirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tshirt_red
|
||||
name = "T-Shirt - Red"
|
||||
icon_state = "redshirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/yellowshirt
|
||||
name = "T-Shirt - Yellow"
|
||||
icon_state = "yellowshirt"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tank_black
|
||||
name = "Tank Top - Black"
|
||||
icon_state = "tank_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tankfire
|
||||
/datum/sprite_accessory/underwear/top/tankfire
|
||||
name = "Tank Top - Fire"
|
||||
icon_state = "tank_fire"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tank_grey
|
||||
name = "Tank Top - Grey"
|
||||
icon_state = "tank_grey"
|
||||
/datum/sprite_accessory/underwear/top/tanktop
|
||||
name = "Tank Top"
|
||||
icon_state = "tanktop"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_midriff
|
||||
/datum/sprite_accessory/underwear/top/tanktop_alt
|
||||
name = "Tank Top - Alt"
|
||||
icon_state = "tanktop_alt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/tanktop_midriff
|
||||
name = "Tank Top - Midriff"
|
||||
icon_state = "tank_midriff"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/tank_red
|
||||
name = "Tank Top - Red"
|
||||
icon_state = "tank_red"
|
||||
/datum/sprite_accessory/underwear/top/tanktop_midriff_alt
|
||||
name = "Tank Top - Midriff Halterneck"
|
||||
icon_state = "tank_midriff_alt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/tankstripe
|
||||
/datum/sprite_accessory/underwear/top/tankstripe
|
||||
name = "Tank Top - Striped"
|
||||
icon_state = "tank_stripes"
|
||||
|
||||
/datum/sprite_accessory/undershirt/tank_white
|
||||
name = "Tank Top - White"
|
||||
icon_state = "tank_white"
|
||||
/datum/sprite_accessory/underwear/top/tank_top_sun
|
||||
name = "Tank top - Sun"
|
||||
icon_state = "tank_sun"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_red
|
||||
name = "Bra - Red"
|
||||
icon_state = "bra_red"
|
||||
/datum/sprite_accessory/underwear/top/babydoll
|
||||
name = "Baby-Doll"
|
||||
icon_state = "babydoll"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_pink
|
||||
name = "Bra - Pink"
|
||||
icon_state = "bra_pink"
|
||||
/datum/sprite_accessory/underwear/top/bra
|
||||
name = "Bra"
|
||||
icon_state = "bra"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_kinky
|
||||
/datum/sprite_accessory/underwear/top/bra_alt
|
||||
name = "Bra - Alt"
|
||||
icon_state = "bra_alt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_thin
|
||||
name = "Bra - Thin"
|
||||
icon_state = "bra_thin"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_kinky
|
||||
name = "Bra - Kinky Black"
|
||||
icon_state = "bra_kinky"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_green
|
||||
name = "Bra - Green"
|
||||
icon_state = "bra_green"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_commie
|
||||
/datum/sprite_accessory/underwear/top/bra_freedom
|
||||
name = "Bra - Freedom"
|
||||
icon_state = "bra_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_commie
|
||||
/datum/sprite_accessory/underwear/top/bra_commie
|
||||
name = "Bra - Commie"
|
||||
icon_state = "bra_commie"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_babyblue
|
||||
name = "Bra - Baby Blue"
|
||||
icon_state = "bra_babyblue"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_beekini
|
||||
/datum/sprite_accessory/underwear/top/bra_beekini
|
||||
name = "Bra - Bee-kini"
|
||||
icon_state = "bra_bee-kini"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_black
|
||||
name = "Bra - Black"
|
||||
icon_state = "bra_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_uk
|
||||
/datum/sprite_accessory/underwear/top/bra_uk
|
||||
name = "Bra - UK"
|
||||
icon_state = "bra_uk"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_white
|
||||
name = "Bra - White"
|
||||
icon_state = "bra_white"
|
||||
/datum/sprite_accessory/underwear/top/bra_neko
|
||||
name = "Bra - Neko"
|
||||
icon_state = "bra_neko"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_white_neko
|
||||
name = "Bra, Neko - white"
|
||||
icon_state = "bra_neko_white"
|
||||
/datum/sprite_accessory/underwear/top/halterneck_bra
|
||||
name = "Bra - Halterneck"
|
||||
icon_state = "halterneck_bra"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_black_neko
|
||||
name = "Bra, Neko - Black"
|
||||
icon_state = "bra_neko_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_blackalt
|
||||
name = "Bra, Sports - Black"
|
||||
icon_state = "bra_sports_black"
|
||||
|
||||
/datum/sprite_accessory/undershirt/sports_bra
|
||||
name = "Bra, Sports 1 - White"
|
||||
/datum/sprite_accessory/underwear/top/sports_bra
|
||||
name = "Bra, Sports"
|
||||
icon_state = "sports_bra"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_whitealt
|
||||
name = "Bra, Sports 2 - White"
|
||||
icon_state = "bra_sports_white"
|
||||
|
||||
/datum/sprite_accessory/undershirt/sports_bra2
|
||||
name = "Bra, Sports 3 - White"
|
||||
/datum/sprite_accessory/underwear/top/sports_bra_alt
|
||||
name = "Bra, Sports - Alt"
|
||||
icon_state = "sports_bra_alt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_yellow
|
||||
name = "Bra - Yellow"
|
||||
icon_state = "bra_yellow"
|
||||
/datum/sprite_accessory/underwear/top/bra_strapless
|
||||
name = "Bra, Strapless"
|
||||
icon_state = "bra_strapless"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_thong
|
||||
name = "Bra, Strapless - Pink"
|
||||
icon_state = "bra_strapless_pink"
|
||||
|
||||
/datum/sprite_accessory/undershirt/female_blue
|
||||
name = "Bra, Strapless - Blue"
|
||||
/datum/sprite_accessory/underwear/top/bra_strapless_alt
|
||||
name = "Bra, Strapless - Alt"
|
||||
icon_state = "bra_blue"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/swimsuit_green
|
||||
name = "Swimsuit, Top - Green"
|
||||
icon_state = "bra_swimming_green"
|
||||
/datum/sprite_accessory/underwear/top/striped_bra
|
||||
name = "Bra - Striped"
|
||||
icon_state = "striped_bra"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/undershirt/swimsuit_purple
|
||||
name = "Swimsuit, Top - Purple"
|
||||
icon_state = "bra_swimming_purple"
|
||||
/datum/sprite_accessory/underwear/top/fishnet_sleeves
|
||||
name = "Fishnet - sleeves"
|
||||
icon_state = "fishnet_sleeves"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/fishnet_gloves
|
||||
name = "Fishnet - gloves"
|
||||
icon_state = "fishnet_gloves"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/fishnet_base
|
||||
name = "Fishnet - top"
|
||||
icon_state = "fishnet_body"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/swimsuit
|
||||
name = "Swimsuit Top"
|
||||
icon_state = "bra_swimming"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/swimsuit_alt
|
||||
name = "Swimsuit Top - Strapless"
|
||||
icon_state = "bra_swimming_alt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/tubetop
|
||||
name = "Tube Top"
|
||||
icon_state = "tubetop"
|
||||
has_color = TRUE
|
||||
@@ -1,174 +1,144 @@
|
||||
///////////////////////////
|
||||
// Underwear Definitions //
|
||||
///////////////////////////
|
||||
/datum/sprite_accessory/underwear
|
||||
icon = 'icons/mob/underwear.dmi'
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/underwear/nude
|
||||
/datum/sprite_accessory/underwear/bottom/nude
|
||||
name = "Nude"
|
||||
icon_state = null
|
||||
|
||||
/datum/sprite_accessory/underwear/mankini
|
||||
name = "Mankini - Green"
|
||||
icon_state = "mankini_green"
|
||||
/datum/sprite_accessory/underwear/bottom/mankini
|
||||
name = "Mankini"
|
||||
icon_state = "mankini"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/male_kinky
|
||||
name = "Jockstrap - White"
|
||||
icon_state = "jockstrap_white"
|
||||
/datum/sprite_accessory/underwear/bottom/male_kinky
|
||||
name = "Jockstrap"
|
||||
icon_state = "jockstrap"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/male_white
|
||||
name = "Briefs - White"
|
||||
icon_state = "briefs_white"
|
||||
/datum/sprite_accessory/underwear/bottom/briefs
|
||||
name = "Briefs"
|
||||
icon_state = "briefs"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/male_black
|
||||
name = "Briefs - Black"
|
||||
icon_state = "briefs_black"
|
||||
/datum/sprite_accessory/underwear/bottom/boxers
|
||||
name = "Boxers"
|
||||
icon_state = "boxers"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/male_grey
|
||||
name = "Briefs - Grey"
|
||||
icon_state = "briefs_grey"
|
||||
/datum/sprite_accessory/underwear/bottom/male_bee
|
||||
name = "Boxers - Bee"
|
||||
icon_state = "bee_shorts"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_red
|
||||
name = "Briefs - Red"
|
||||
icon_state = "briefs_red"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_green
|
||||
name = "Briefs - Green"
|
||||
icon_state = "briefs_green"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_blue
|
||||
name = "Briefs - Blue"
|
||||
icon_state = "briefs_blue"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_blackalt
|
||||
name = "Boxers - Black"
|
||||
icon_state = "boxers_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_greyalt
|
||||
name = "Boxers - Grey"
|
||||
icon_state = "boxers_grey"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_hearts
|
||||
/datum/sprite_accessory/underwear/bottom/male_hearts
|
||||
name = "Boxers - Heart"
|
||||
icon_state = "boxers_heart"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_stripe
|
||||
/datum/sprite_accessory/underwear/bottom/male_stripe
|
||||
name = "Boxers - Striped"
|
||||
icon_state = "boxers_striped"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_commie
|
||||
/datum/sprite_accessory/underwear/bottom/male_commie
|
||||
name = "Boxers - Striped Communist"
|
||||
icon_state = "boxers_commie"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_usastripe
|
||||
/datum/sprite_accessory/underwear/bottom/male_usastripe
|
||||
name = "Boxers - Striped Freedom"
|
||||
icon_state = "boxers_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/underwear/male_uk
|
||||
/datum/sprite_accessory/underwear/bottom/male_uk
|
||||
name = "Boxers - Striped UK"
|
||||
icon_state = "boxers_uk"
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/boxer_briefs
|
||||
name = "Boxer Briefs"
|
||||
icon_state = "boxer_briefs"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/female_whitealt
|
||||
name = "Boxer Briefs - White"
|
||||
icon_state = "boxer_briefs_white"
|
||||
/datum/sprite_accessory/underwear/bottom/panties
|
||||
name = "Panties"
|
||||
icon_state = "panties"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/female_blackalt
|
||||
name = "Boxer Briefs - Black"
|
||||
icon_state = "boxer_briefs_black"
|
||||
/datum/sprite_accessory/underwear/bottom/panties_alt
|
||||
name = "Panties - Alt"
|
||||
icon_state = "panties_alt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/female_pink
|
||||
name = "Boxer Briefs - Pink"
|
||||
icon_state = "boxer_briefs_pink"
|
||||
/datum/sprite_accessory/underwear/bottom/fishnet_lower
|
||||
name = "Panties - Fishnet"
|
||||
icon_state = "fishnet_lower"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_babyblue
|
||||
name = "Boxer Briefs - Baby Blue"
|
||||
icon_state = "boxer_briefs_babyblue"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_yellow
|
||||
name = "Boxer Briefs - Yellow"
|
||||
icon_state = "boxer_briefs_yellow"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_beekini
|
||||
/datum/sprite_accessory/underwear/bottom/female_beekini
|
||||
name = "Panties - Bee-kini"
|
||||
icon_state = "panties_bee-kini"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_black
|
||||
name = "Panties - Black"
|
||||
icon_state = "panties_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_blue
|
||||
name = "Panties - Blue"
|
||||
icon_state = "panties_blue"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_commie
|
||||
/datum/sprite_accessory/underwear/bottom/female_commie
|
||||
name = "Panties - Commie"
|
||||
icon_state = "panties_commie"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_usastripe
|
||||
/datum/sprite_accessory/underwear/bottom/female_usastripe
|
||||
name = "Panties - Freedom"
|
||||
icon_state = "panties_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_green
|
||||
name = "Panties - Green"
|
||||
icon_state = "panties_green"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_kinky
|
||||
/datum/sprite_accessory/underwear/bottom/female_kinky
|
||||
name = "Panties - Kinky Black"
|
||||
icon_state = "panties_kinky"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_red
|
||||
name = "Panties - Red"
|
||||
icon_state = "panties_red"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_uk
|
||||
/datum/sprite_accessory/underwear/bottom/panties_uk
|
||||
name = "Panties - UK"
|
||||
icon_state = "panties_uk"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_white
|
||||
name = "Panties - White"
|
||||
icon_state = "panties_white"
|
||||
/datum/sprite_accessory/underwear/bottom/panties_neko
|
||||
name = "Panties - Neko"
|
||||
icon_state = "panties_neko"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/female_white_neko
|
||||
name = "Panties, Neko - White"
|
||||
icon_state = "panties_neko_white"
|
||||
/datum/sprite_accessory/underwear/bottom/panties_slim
|
||||
name = "Panties - Slim"
|
||||
icon_state = "panties_slim"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/female_black_neko
|
||||
name = "Panties, Neko - Black"
|
||||
icon_state = "panties_neko_black"
|
||||
/datum/sprite_accessory/underwear/bottom/striped_panties
|
||||
name = "Panties - Striped"
|
||||
icon_state = "striped_panties"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/panties_swimsuit
|
||||
name = "Panties - Swimsuit"
|
||||
icon_state = "panties_swimming"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_red
|
||||
/datum/sprite_accessory/underwear/bottom/panties_thin
|
||||
name = "Panties - Thin"
|
||||
icon_state = "panties_thin"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/longjon
|
||||
name = "Long John Bottoms"
|
||||
icon_state = "ljonb"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/swimsuit_red
|
||||
name = "Swimsuit, One Piece - Red"
|
||||
icon_state = "swimming_red"
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit
|
||||
/datum/sprite_accessory/underwear/bottom/swimsuit
|
||||
name = "Swimsuit, One Piece - Black"
|
||||
icon_state = "swimming_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_blue
|
||||
/datum/sprite_accessory/underwear/bottom/swimsuit_blue
|
||||
name = "Swimsuit, One Piece - Striped Blue"
|
||||
icon_state = "swimming_blue"
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_green
|
||||
name = "Swimsuit, Bottom - Green"
|
||||
icon_state = "panties_swimming_green"
|
||||
/datum/sprite_accessory/underwear/bottom/thong
|
||||
name = "Thong"
|
||||
icon_state = "thong"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/swimsuit_purple
|
||||
name = "Swimsuit, Bottom - Purple"
|
||||
icon_state = "panties_swimming_purple"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_thong_black
|
||||
name = "Thong - Black"
|
||||
icon_state = "thong_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_thong
|
||||
name = "Thong - Pink"
|
||||
icon_state = "thong_pink"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_babydoll
|
||||
name = "Babydoll - Black"
|
||||
icon_state = "babydoll"
|
||||
/datum/sprite_accessory/underwear/bottom/thong_babydoll
|
||||
name = "Thong - Alt"
|
||||
icon_state = "thong_babydoll"
|
||||
has_color = TRUE
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
var/datum/dna/stored/stored_dna // dna var for brain. Used to store dna, brain dna is not considered like actual dna, brain.has_dna() returns FALSE.
|
||||
stat = DEAD //we start dead by default
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
speech_span = SPAN_ROBOT
|
||||
|
||||
/mob/living/brain/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -265,7 +265,7 @@
|
||||
var/list/datum/brain_trauma/possible_traumas = list()
|
||||
for(var/T in subtypesof(brain_trauma_type))
|
||||
var/datum/brain_trauma/BT = T
|
||||
if(can_gain_trauma(BT, resilience))
|
||||
if(can_gain_trauma(BT, resilience) && initial(BT.random_gain))
|
||||
possible_traumas += BT
|
||||
|
||||
if(!LAZYLEN(possible_traumas))
|
||||
|
||||
@@ -10,14 +10,11 @@
|
||||
|
||||
..()
|
||||
|
||||
/mob/living/brain/get_spans()
|
||||
return ..() | SPAN_ROBOT
|
||||
|
||||
/mob/living/brain/radio(message, message_mode, list/spans, language)
|
||||
if(message_mode == MODE_HEADSET && istype(container, /obj/item/mmi))
|
||||
var/obj/item/mmi/R = container
|
||||
if(R.radio)
|
||||
R.radio.talk_into(src, message, , get_spans(), language)
|
||||
R.radio.talk_into(src, message, language = language)
|
||||
return ITALICS | REDUCE_RANGE
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
if(!message)
|
||||
return
|
||||
|
||||
var/message_a = say_quote(message, get_spans())
|
||||
var/message_a = say_quote(message)
|
||||
var/rendered = "<i><span class='alien'>Hivemind, <span class='name'>[shown_name]</span> <span class='message'>[message_a]</span></span></i>"
|
||||
for(var/mob/S in GLOB.player_list)
|
||||
if(!S.stat && S.hivecheck())
|
||||
|
||||
@@ -175,7 +175,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)
|
||||
|
||||
@@ -409,7 +409,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
|
||||
@@ -496,9 +496,12 @@
|
||||
add_splatter_floor(T)
|
||||
if(stun)
|
||||
adjustBruteLoss(3)
|
||||
else if(src.reagents.has_reagent("blazaam"))
|
||||
if(T)
|
||||
T.add_vomit_floor(src, VOMIT_PURPLE)
|
||||
else
|
||||
if(T)
|
||||
T.add_vomit_floor(src, toxic)//toxic barf looks different
|
||||
T.add_vomit_floor(src, VOMIT_TOXIC)//toxic barf looks different
|
||||
T = get_step(T, dir)
|
||||
if (is_blocked_turf(T))
|
||||
break
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user