Merge remote-tracking branch 'refs/remotes/Citadel-Station-13/master' into syntheticbloods

This commit is contained in:
Poojawa
2019-05-06 02:53:42 -05:00
124 changed files with 3858 additions and 2579 deletions
File diff suppressed because it is too large Load Diff
+1
View File
@@ -121,3 +121,4 @@
#define ORGAN_SLOT_BRAIN_ANTIDROP "brain_antidrop"
#define ORGAN_SLOT_BRAIN_ANTISTUN "brain_antistun"
#define ORGAN_SLOT_TAIL "tail"
#define ORGAN_SLOT_PENIS "penis"
+1
View File
@@ -102,6 +102,7 @@
#define CAT_SANDWICH "Sandwiches"
#define CAT_SOUP "Soups"
#define CAT_SPAGHETTI "Spaghettis"
#define CAT_SUSHI "Fish"
#define RCD_FLOORWALL 1
#define RCD_AIRLOCK 2
+1
View File
@@ -69,6 +69,7 @@
#define TRAIT_TAGGER "tagger"
#define TRAIT_PHOTOGRAPHER "photographer"
#define TRAIT_MUSICIAN "musician"
#define TRAIT_CROCRIN_IMMUNE "crocin_immune"
// common trait sources
#define TRAIT_GENERIC "generic"
+3 -2
View File
@@ -221,9 +221,10 @@
else // A variation of get_hear inlined here to take advantage of the compiler's fastpath for obj/mob in view
var/lum = T.luminosity
T.luminosity = 6 // This is the maximum luminosity
for(var/mob/M in view(R, T))
var/list/cachedview = view(R, T)
for(var/mob/M in cachedview)
processing_list += M
for(var/obj/O in view(R, T))
for(var/obj/O in cachedview)
processing_list += O
T.luminosity = lum
@@ -108,5 +108,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
/obj/item/toy/eightball = 1,
/obj/item/reagent_containers/pill/floorpill = 1,
/obj/item/storage/daki = 3, //VERY IMPORTANT CIT CHANGE - adds bodypillows to maint
/obj/item/storage/pill_bottle/penis_enlargement = 2,
"" = 3
))
@@ -19,6 +19,22 @@
max_items = 1
attack_hand_interact = FALSE
/datum/component/storage/concrete/pockets/small/collar
max_items = 1
/datum/component/storage/concrete/pockets/small/collar/Initialize()
. = ..()
can_hold = typecacheof(list(
/obj/item/reagent_containers/food/snacks/cookie,
/obj/item/reagent_containers/food/snacks/sugarcookie))
/datum/component/storage/concrete/pockets/small/collar/locked/Initialize()
. = ..()
can_hold = typecacheof(list(
/obj/item/reagent_containers/food/snacks/cookie,
/obj/item/reagent_containers/food/snacks/sugarcookie,
/obj/item/key/collar))
/datum/component/storage/concrete/pockets/tiny
max_items = 1
max_w_class = WEIGHT_CLASS_TINY
+1 -1
View File
@@ -32,7 +32,7 @@
if(!IsAvailable())
return
var/turf/T = get_turf(target)
if(target in view(user.client.view, get_turf(user)))
if(target in view(user.client.view, user))
var/obj/spot1 = new phaseout(get_turf(user), user.dir)
user.forceMove(T)
playsound(T, dash_sound, 25, 1)
+4 -1
View File
@@ -9,6 +9,7 @@
var/list/features = list("FFF") //first value is mutant color
var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings,
var/nameless = FALSE
var/custom_species //siiiiigh I guess this is important
var/list/mutations = list() //All mutations are from now on here
var/list/temporary_mutations = list() //Timers for temporary mutations
var/list/previous = list() //For temporary name/ui/ue/blood_type modifications
@@ -45,6 +46,7 @@
destination.dna.features = features.Copy()
destination.dna.real_name = real_name
destination.dna.nameless = nameless
destination.dna.custom_species = custom_species
destination.dna.temporary_mutations = temporary_mutations.Copy()
if(ishuman(destination))
var/mob/living/carbon/human/H = destination
@@ -62,6 +64,7 @@
new_dna.species = new species.type
new_dna.real_name = real_name
new_dna.nameless = nameless
new_dna.custom_species = custom_species
new_dna.mutations = mutations.Copy()
/datum/dna/proc/add_mutation(mutation_name)
@@ -202,7 +205,7 @@
/datum/dna/proc/is_same_as(datum/dna/D)
if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name && nameless == D.nameless)
if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name && nameless == D.nameless && custom_species == D.custom_species)
if(species.type == D.species.type && features == D.features && blood_type == D.blood_type)
return 1
return 0
+9
View File
@@ -84,3 +84,12 @@
/datum/quirk/monochromatic/remove()
if(quirk_holder)
quirk_holder.remove_client_colour(/datum/client_colour/monochrome)
/datum/quirk/crocrin_immunity
name = "Crocin Immunity"
desc = "You're one of the few people in the galaxy who are genetically immune to Crocin and Hexacrocin products and their addictive properties! However, you can still get brain damage from Hexacrocin addiction."
mob_trait = TRAIT_CROCRIN_IMMUNE
value = 0
gain_text = "<span class='notice'>You feel more prudish.</span>"
lose_text = "<span class='notice'>You don't feel as prudish as before.</span>"
medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin."
+6
View File
@@ -81,6 +81,12 @@
to_chat(usr, "<span class='danger'>The drip beeps: Warning, incompatible creature!</span>")
return
var/mob/living/L
if(isliving(target))
L = target
if(!L.can_inject(usr, 1))
return
if(Adjacent(target) && usr.Adjacent(target))
if(beaker)
usr.visible_message("<span class='warning'>[usr] attaches [src] to [target].</span>", "<span class='notice'>You attach [src] to [target].</span>")
+3 -1
View File
@@ -15,7 +15,9 @@
/obj/item/gun/energy,
/obj/item/melee/baton,
/obj/item/ammo_box/magazine/recharge,
/obj/item/modular_computer))
/obj/item/modular_computer,
/obj/item/gun/ballistic/automatic/magrifle_e,
/obj/item/gun/ballistic/automatic/pistol/mag_e))
/obj/machinery/recharger/RefreshParts()
for(var/obj/item/stock_parts/capacitor/C in component_parts)
+2 -1
View File
@@ -80,6 +80,7 @@
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
name = "\improper DEATH-RIPLEY"
icon_state = "deathripley"
armor = list("melee" = 40, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
slow_pressure_step_in = 3
opacity=0
lights_power = 7
@@ -194,4 +195,4 @@
cargo -= O
else
if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded.
to_chat(user, "<span class='warning'>You fail to push [O] out of [src]!</span>")
to_chat(user, "<span class='warning'>You fail to push [O] out of [src]!</span>")
+48 -24
View File
@@ -391,7 +391,8 @@ GLOBAL_LIST_EMPTY(PDAs)
//BASIC FUNCTIONS===================================
if("Refresh")//Refresh, goes to the end of the proc.
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if ("Toggle_Font")
//CODE REVISION 2
@@ -406,16 +407,19 @@ GLOBAL_LIST_EMPTY(PDAs)
font_mode = FONT_ORBITRON
if (MODE_VT)
font_mode = FONT_VT
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if ("Change_Color")
var/new_color = input("Please enter a color name or hex value (Default is \'#808000\').",background_color)as color
background_color = new_color
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if ("Toggle_Underline")
underline_flag = !underline_flag
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("Return")//Return
if(mode<=9)
@@ -424,7 +428,8 @@ GLOBAL_LIST_EMPTY(PDAs)
mode = round(mode/10)
if(mode==4 || mode == 5)//Fix for cartridges. Redirects to hub.
mode = 0
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if ("Authenticate")//Checks for ID
id_check(U)
@@ -434,8 +439,9 @@ GLOBAL_LIST_EMPTY(PDAs)
if(istype(id, /obj/item/card/id/syndicate))
owner = id.registered_name
update_label()
playsound(src, 'sound/machines/terminal_processing.ogg', 50, 1)
addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/machines/terminal_success.ogg', 50, 1), 13)
if (!silent)
playsound(src, 'sound/machines/terminal_processing.ogg', 15, 1)
addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/machines/terminal_success.ogg', 15, 1), 13)
if("Eject")//Ejects the cart, only done from hub.
if (!isnull(cartridge))
@@ -445,56 +451,67 @@ GLOBAL_LIST_EMPTY(PDAs)
cartridge.host_pda = null
cartridge = null
update_icon()
playsound(src, 'sound/machines/terminal_eject_disc.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_eject_disc.ogg', 50, 1)
//MENU FUNCTIONS===================================
if("0")//Hub
mode = 0
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("1")//Notes
mode = 1
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("2")//Messenger
mode = 2
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("21")//Read messeges
mode = 21
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("3")//Atmos scan
mode = 3
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("4")//Redirects to hub
mode = 0
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
//MAIN FUNCTIONS===================================
if("Light")
toggle_light()
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("Medical Scan")
if(scanmode == PDA_SCANNER_MEDICAL)
scanmode = PDA_SCANNER_NONE
else if((!isnull(cartridge)) && (cartridge.access & CART_MEDICAL))
scanmode = PDA_SCANNER_MEDICAL
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("Reagent Scan")
if(scanmode == PDA_SCANNER_REAGENT)
scanmode = PDA_SCANNER_NONE
else if((!isnull(cartridge)) && (cartridge.access & CART_REAGENT_SCANNER))
scanmode = PDA_SCANNER_REAGENT
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("Halogen Counter")
if(scanmode == PDA_SCANNER_HALOGEN)
scanmode = PDA_SCANNER_NONE
else if((!isnull(cartridge)) && (cartridge.access & CART_ENGINE))
scanmode = PDA_SCANNER_HALOGEN
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("Honk")
if ( !(last_noise && world.time < last_noise + 20) )
@@ -511,7 +528,8 @@ GLOBAL_LIST_EMPTY(PDAs)
scanmode = PDA_SCANNER_NONE
else if((!isnull(cartridge)) && (cartridge.access & CART_ATMOS))
scanmode = PDA_SCANNER_GAS
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_select.ogg', 15, 1)
if("Drone Phone")
var/alert_s = input(U,"Alert severity level","Ping Drones",null) as null|anything in list("Low","Medium","High","Critical")
@@ -520,7 +538,8 @@ GLOBAL_LIST_EMPTY(PDAs)
var/msg = "<span class='boldnotice'>NON-DRONE PING: [U.name]: [alert_s] priority alert in [A.name]!</span>"
_alert_drones(msg, TRUE, U)
to_chat(U, msg)
playsound(src, 'sound/machines/terminal_success.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
//NOTEKEEPER FUNCTIONS===================================
@@ -672,7 +691,8 @@ GLOBAL_LIST_EMPTY(PDAs)
if (!signal.data["done"])
to_chat(user, "<span class='notice'>ERROR: Server isn't responding.</span>")
return
playsound(src, 'sound/machines/terminal_error.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_error.ogg', 15, 1)
var/target_text = signal.format_target()
// Log it in our logs
@@ -685,7 +705,8 @@ GLOBAL_LIST_EMPTY(PDAs)
// Log in the talk log
user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]")
to_chat(user, "<span class='info'>Message sent to [target_text]: \"[message]\"</span>")
playsound(src, 'sound/machines/terminal_success.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
// Reset the photo
picture = null
last_text = world.time
@@ -830,14 +851,16 @@ GLOBAL_LIST_EMPTY(PDAs)
if(!idcard.registered_name)
to_chat(user, "<span class='warning'>\The [src] rejects the ID!</span>")
return
playsound(src, 'sound/machines/terminal_error.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_error.ogg', 15, 1)
if(!owner)
owner = idcard.registered_name
ownjob = idcard.assignment
update_label()
to_chat(user, "<span class='notice'>Card scanned.</span>")
playsound(src, 'sound/machines/terminal_success.ogg', 50, 1)
if (!silent)
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
else
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
if(((src in user.contents) || (isturf(loc) && in_range(src, user))) && (C in user.contents))
@@ -1053,3 +1076,4 @@ GLOBAL_LIST_EMPTY(PDAs)
#undef PDA_SCANNER_HALOGEN
#undef PDA_SCANNER_GAS
#undef PDA_SPAM_DELAY
+66 -57
View File
@@ -98,10 +98,12 @@ SLIME SCANNER
if ((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50))
to_chat(user, "<span class='notice'>You stupidly try to analyze the floor's vitals!</span>")
user.visible_message("<span class='warning'>[user] has analyzed the floor's vitals!</span>")
to_chat(user, "<span class='info'>Analyzing results for The floor:\n\tOverall status: <b>Healthy</b>")
to_chat(user, "<span class='info'>Key: <font color='blue'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FF8000'>Burn</font>/<font color='red'>Brute</font></span>")
to_chat(user, "<span class='info'>\tDamage specifics: <font color='blue'>0</font>-<font color='green'>0</font>-<font color='#FF8000'>0</font>-<font color='red'>0</font></span>")
to_chat(user, "<span class='info'>Body temperature: ???</span>")
var/msg = "<span class='info'>*---------*\nAnalyzing results for The floor:\n\tOverall status: <b>Healthy</b>\n"
msg += "Key: <font color='blue'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FF8000'>Burn</font>/<font color='red'>Brute</font>\n"
msg += "\tDamage specifics: <font color='blue'>0</font>-<font color='green'>0</font>-<font color='#FF8000'>0</font>-<font color='red'>0</font>\n"
msg += "Body temperature: ???\n"
msg += "*---------*</span>"
to_chat(user, msg)
return
user.visible_message("<span class='notice'>[user] has analyzed [M]'s vitals.</span>")
@@ -136,31 +138,31 @@ SLIME SCANNER
if(H.undergoing_liver_failure() && H.stat != DEAD)
to_chat(user, "<span class='danger'>Subject is suffering from liver failure: Apply Corazone and begin a liver transplant immediately!</span>")
to_chat(user, "<span class='info'>Analyzing results for [M]:\n\tOverall status: [mob_status]</span>")
var/msg = "<span class='info'>*---------*\nAnalyzing results for [M]:\n\tOverall status: [mob_status]\n"
// Damage descriptions
if(brute_loss > 10)
to_chat(user, "\t<span class='alert'>[brute_loss > 50 ? "Severe" : "Minor"] tissue damage detected.</span>")
msg += "\t<span class='alert'>[brute_loss > 50 ? "Severe" : "Minor"] tissue damage detected.</span>\n"
if(fire_loss > 10)
to_chat(user, "\t<span class='alert'>[fire_loss > 50 ? "Severe" : "Minor"] burn damage detected.</span>")
msg += "\t<span class='alert'>[fire_loss > 50 ? "Severe" : "Minor"] burn damage detected.</span>\n"
if(oxy_loss > 10)
to_chat(user, "\t<span class='info'><span class='alert'>[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.</span>")
msg += "\t<span class='info'><span class='alert'>[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.</span>\n"
if(tox_loss > 10)
to_chat(user, "\t<span class='alert'>[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.</span>")
msg += "\t<span class='alert'>[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.</span>\n"
if(M.getStaminaLoss())
to_chat(user, "\t<span class='alert'>Subject appears to be suffering from fatigue.</span>")
msg += "\t<span class='alert'>Subject appears to be suffering from fatigue.</span>\n"
if(advanced)
to_chat(user, "\t<span class='info'>Fatigue Level: [M.getStaminaLoss()]%.</span>")
msg += "\t<span class='info'>Fatigue Level: [M.getStaminaLoss()]%.</span>\n"
if (M.getCloneLoss())
to_chat(user, "\t<span class='alert'>Subject appears to have [M.getCloneLoss() > 30 ? "Severe" : "Minor"] cellular damage.</span>")
msg += "\t<span class='alert'>Subject appears to have [M.getCloneLoss() > 30 ? "Severe" : "Minor"] cellular damage.</span>\n"
if(advanced)
to_chat(user, "\t<span class='info'>Cellular Damage Level: [M.getCloneLoss()].</span>")
msg += "\t<span class='info'>Cellular Damage Level: [M.getCloneLoss()].</span>\n"
if (M.getBrainLoss() >= 200 || !M.getorgan(/obj/item/organ/brain))
to_chat(user, "\t<span class='alert'>Subject's brain function is non-existent.</span>")
msg += "\t<span class='alert'>Subject's brain function is non-existent.</span>\n"
else if (M.getBrainLoss() >= 120)
to_chat(user, "\t<span class='alert'>Severe brain damage detected. Subject likely to have mental traumas.</span>")
msg += "\t<span class='alert'>Severe brain damage detected. Subject likely to have mental traumas.</span>\n"
else if (M.getBrainLoss() >= 45)
to_chat(user, "\t<span class='alert'>Brain damage detected.</span>")
msg += "\t<span class='alert'>Brain damage detected.</span>\n"
if(iscarbon(M))
var/mob/living/carbon/C = M
if(LAZYLEN(C.get_traumas()))
@@ -176,83 +178,83 @@ SLIME SCANNER
trauma_desc += "permanent "
trauma_desc += B.scan_desc
trauma_text += trauma_desc
to_chat(user, "\t<span class='alert'>Cerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].</span>")
msg += "\t<span class='alert'>Cerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].</span>\n"
if(C.roundstart_quirks.len)
to_chat(user, "\t<span class='info'>Subject has the following physiological traits: [C.get_trait_string()].</span>")
msg += "\t<span class='info'>Subject has the following physiological traits: [C.get_trait_string()].</span>\n"
if(advanced)
to_chat(user, "\t<span class='info'>Brain Activity Level: [(200 - M.getBrainLoss())/2]%.</span>")
msg += "\t<span class='info'>Brain Activity Level: [(200 - M.getBrainLoss())/2]%.</span>\n"
if (M.radiation)
to_chat(user, "\t<span class='alert'>Subject is irradiated.</span>")
msg += "\t<span class='alert'>Subject is irradiated.</span>\n"
if(advanced)
to_chat(user, "\t<span class='info'>Radiation Level: [M.radiation]%.</span>")
msg += "\t<span class='info'>Radiation Level: [M.radiation]%.</span>\n"
if(advanced && M.hallucinating())
to_chat(user, "\t<span class='info'>Subject is hallucinating.</span>")
msg += "\t<span class='info'>Subject is hallucinating.</span>\n"
//Eyes and ears
if(advanced)
if(iscarbon(M))
var/mob/living/carbon/C = M
var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS)
to_chat(user, "\t<span class='info'><b>==EAR STATUS==</b></span>")
msg += "\t<span class='info'><b>==EAR STATUS==</b></span>\n"
if(istype(ears))
var/healthy = TRUE
if(C.has_trait(TRAIT_DEAF, GENETIC_MUTATION))
healthy = FALSE
to_chat(user, "\t<span class='alert'>Subject is genetically deaf.</span>")
msg += "\t<span class='alert'>Subject is genetically deaf.</span>\n"
else if(C.has_trait(TRAIT_DEAF))
healthy = FALSE
to_chat(user, "\t<span class='alert'>Subject is deaf.</span>")
msg += "\t<span class='alert'>Subject is deaf.</span>\n"
else
if(ears.ear_damage)
to_chat(user, "\t<span class='alert'>Subject has [ears.ear_damage > UNHEALING_EAR_DAMAGE? "permanent ": "temporary "]hearing damage.</span>")
msg += "\t<span class='alert'>Subject has [ears.ear_damage > UNHEALING_EAR_DAMAGE? "permanent ": "temporary "]hearing damage.</span>\n"
healthy = FALSE
if(ears.deaf)
to_chat(user, "\t<span class='alert'>Subject is [ears.ear_damage > UNHEALING_EAR_DAMAGE ? "permanently ": "temporarily "] deaf.</span>")
msg += "\t<span class='alert'>Subject is [ears.ear_damage > UNHEALING_EAR_DAMAGE ? "permanently ": "temporarily "] deaf.</span>\n"
healthy = FALSE
if(healthy)
to_chat(user, "\t<span class='info'>Healthy.</span>")
msg += "\t<span class='info'>Healthy.</span>\n"
else
to_chat(user, "\t<span class='alert'>Subject does not have ears.</span>")
msg += "\t<span class='alert'>Subject does not have ears.</span>\n"
var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES)
to_chat(user, "\t<span class='info'><b>==EYE STATUS==</b></span>")
msg += "\t<span class='info'><b>==EYE STATUS==</b></span>\n"
if(istype(eyes))
var/healthy = TRUE
if(C.has_trait(TRAIT_BLIND))
to_chat(user, "\t<span class='alert'>Subject is blind.</span>")
msg += "\t<span class='alert'>Subject is blind.</span>\n"
healthy = FALSE
if(C.has_trait(TRAIT_NEARSIGHT))
to_chat(user, "\t<span class='alert'>Subject is nearsighted.</span>")
msg += "\t<span class='alert'>Subject is nearsighted.</span>\n"
healthy = FALSE
if(eyes.eye_damage > 30)
to_chat(user, "\t<span class='alert'>Subject has severe eye damage.</span>")
msg += "\t<span class='alert'>Subject has severe eye damage.</span>\n"
healthy = FALSE
else if(eyes.eye_damage > 20)
to_chat(user, "\t<span class='alert'>Subject has significant eye damage.</span>")
msg += "\t<span class='alert'>Subject has significant eye damage.</span>\n"
healthy = FALSE
else if(eyes.eye_damage)
to_chat(user, "\t<span class='alert'>Subject has minor eye damage.</span>")
msg += "\t<span class='alert'>Subject has minor eye damage.</span>\n"
healthy = FALSE
if(healthy)
to_chat(user, "\t<span class='info'>Healthy.</span>")
msg += "\t<span class='info'>Healthy.</span>\n"
else
to_chat(user, "\t<span class='alert'>Subject does not have eyes.</span>")
msg += "\t<span class='alert'>Subject does not have eyes.</span>\n"
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/ldamage = H.return_liver_damage()
if(ldamage > 10)
to_chat(user, "\t<span class='alert'>[ldamage > 45 ? "Severe" : "Minor"] liver damage detected.</span>")
msg += "\t<span class='alert'>[ldamage > 45 ? "Severe" : "Minor"] liver damage detected.</span>\n"
// Body part damage report
if(iscarbon(M) && mode == 1)
var/mob/living/carbon/C = M
var/list/damaged = C.get_damaged_bodyparts(1,1)
if(length(damaged)>0 || oxy_loss>0 || tox_loss>0 || fire_loss>0)
to_chat(user, "<span class='info'>\tDamage: <span class='info'><font color='red'>Brute</font></span>-<font color='#FF8000'>Burn</font>-<font color='green'>Toxin</font>-<font color='blue'>Suffocation</font>\n\t\tSpecifics: <font color='red'>[brute_loss]</font>-<font color='#FF8000'>[fire_loss]</font>-<font color='green'>[tox_loss]</font>-<font color='blue'>[oxy_loss]</font></span>")
msg += "<span class='info'>\tDamage: <span class='info'><font color='red'>Brute</font></span>-<font color='#FF8000'>Burn</font>-<font color='green'>Toxin</font>-<font color='blue'>Suffocation</font>\n\t\tSpecifics: <font color='red'>[brute_loss]</font>-<font color='#FF8000'>[fire_loss]</font>-<font color='green'>[tox_loss]</font>-<font color='blue'>[oxy_loss]</font></span>\n"
for(var/obj/item/bodypart/org in damaged)
to_chat(user, "\t\t<span class='info'>[capitalize(org.name)]: [(org.brute_dam > 0) ? "<font color='red'>[org.brute_dam]</font></span>" : "<font color='red'>0</font>"]-[(org.burn_dam > 0) ? "<font color='#FF8000'>[org.burn_dam]</font>" : "<font color='#FF8000'>0</font>"]")
msg += "\t\t<span class='info'>[capitalize(org.name)]: [(org.brute_dam > 0) ? "<font color='red'>[org.brute_dam]</font></span>" : "<font color='red'>0</font>"]-[(org.burn_dam > 0) ? "<font color='#FF8000'>[org.burn_dam]</font>" : "<font color='#FF8000'>0</font>"]\n"
// Species and body temperature
if(ishuman(M))
@@ -282,20 +284,22 @@ SLIME SCANNER
else if (S.mutantstomach != initial(S.mutantstomach))
mutant = TRUE
to_chat(user, "<span class='info'>Species: [S.name][mutant ? "-derived mutant" : ""]</span>")
to_chat(user, "<span class='info'>Body temperature: [round(M.bodytemperature-T0C,0.1)] &deg;C ([round(M.bodytemperature*1.8-459.67,0.1)] &deg;F)</span>")
msg += "<span class='info'>Species: [H.dna.custom_species ? H.dna.custom_species : S.name] Base: [S.name]</span>\n"
if(mutant)
msg += "<span class='info'>Subject has mutations present.</span>"
msg += "<span class='info'>Body temperature: [round(M.bodytemperature-T0C,0.1)] &deg;C ([round(M.bodytemperature*1.8-459.67,0.1)] &deg;F)</span>\n"
// Time of death
if(M.tod && (M.stat == DEAD || ((M.has_trait(TRAIT_FAKEDEATH)) && !advanced)))
to_chat(user, "<span class='info'>Time of Death:</span> [M.tod]")
msg += "<span class='info'>Time of Death:</span> [M.tod]\n"
var/tdelta = round(world.time - M.timeofdeath)
if(tdelta < (DEFIB_TIME_LIMIT * 10))
to_chat(user, "<span class='danger'>Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!</span>")
msg += "<span class='danger'>Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!</span>\n"
for(var/thing in M.diseases)
var/datum/disease/D = thing
if(!(D.visibility_flags & HIDDEN_SCANNER))
to_chat(user, "<span class='alert'><b>Warning: [D.form] detected</b>\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]</span>")
msg += "<span class='alert'><b>Warning: [D.form] detected</b>\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]</span>\n"
// Blood Level
if(M.has_dna())
@@ -305,7 +309,7 @@ SLIME SCANNER
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(H.bleed_rate)
to_chat(user, "<span class='danger'>Subject is bleeding!</span>")
msg += "<span class='danger'>Subject is bleeding!</span>\n"
var/blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100)
var/blood_type = C.dna.blood_type
if(blood_id != "blood")//special blood substance
@@ -315,36 +319,41 @@ SLIME SCANNER
else
blood_type = blood_id
if(C.blood_volume <= BLOOD_VOLUME_SAFE && C.blood_volume > BLOOD_VOLUME_OKAY)
to_chat(user, "<span class='danger'>LOW blood level [blood_percent] %, [C.blood_volume] cl,</span> <span class='info'>type: [blood_type]</span>")
msg += "<span class='danger'>LOW blood level [blood_percent] %, [C.blood_volume] cl,</span> <span class='info'>type: [blood_type]</span>\n"
else if(C.blood_volume <= BLOOD_VOLUME_OKAY)
to_chat(user, "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.blood_volume] cl,</span> <span class='info'>type: [blood_type]</span>")
msg += "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.blood_volume] cl,</span> <span class='info'>type: [blood_type]</span>\n"
else
to_chat(user, "<span class='info'>Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]</span>")
msg += "<span class='info'>Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]</span>\n"
var/cyberimp_detect
for(var/obj/item/organ/cyberimp/CI in C.internal_organs)
if(CI.status == ORGAN_ROBOTIC && !CI.syndicate_implant)
cyberimp_detect += "[C.name] is modified with a [CI.name].<br>"
if(cyberimp_detect)
to_chat(user, "<span class='notice'>Detected cybernetic modifications:</span>")
to_chat(user, "<span class='notice'>[cyberimp_detect]</span>")
msg += "<span class='notice'>Detected cybernetic modifications:</span>\n"
msg += "<span class='notice'>[cyberimp_detect]</span>\n"
msg += "*---------*</span>"
to_chat(user, msg)
SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, FALSE)
/proc/chemscan(mob/living/user, mob/living/M)
if(istype(M))
if(M.reagents)
var/msg = "<span class='info'>*---------*\n"
if(M.reagents.reagent_list.len)
to_chat(user, "<span class='notice'>Subject contains the following reagents:</span>")
msg += "<span class='notice'>Subject contains the following reagents:</span>\n"
for(var/datum/reagent/R in M.reagents.reagent_list)
to_chat(user, "<span class='notice'>[R.volume] units of [R.name][R.overdosed == 1 ? "</span> - <span class='boldannounce'>OVERDOSING</span>" : ".</span>"]")
msg += "<span class='notice'>[R.volume] units of [R.name][R.overdosed == 1 ? "</span> - <span class='boldannounce'>OVERDOSING</span>" : ".</span>"]\n"
else
to_chat(user, "<span class='notice'>Subject contains no reagents.</span>")
msg += "<span class='notice'>Subject contains no reagents.</span>\n"
if(M.reagents.addiction_list.len)
to_chat(user, "<span class='boldannounce'>Subject is addicted to the following reagents:</span>")
msg += "<span class='boldannounce'>Subject is addicted to the following reagents:</span>\n"
for(var/datum/reagent/R in M.reagents.addiction_list)
to_chat(user, "<span class='danger'>[R.name]</span>")
msg += "<span class='danger'>[R.name]</span>\n"
else
to_chat(user, "<span class='notice'>Subject is not addicted to any reagents.</span>")
msg += "<span class='notice'>Subject is not addicted to any reagents.</span>\n"
msg += "*---------*</span>"
to_chat(user, msg)
/obj/item/healthanalyzer/verb/toggle_mode()
set name = "Switch Verbosity"
+9 -1
View File
@@ -122,7 +122,7 @@
new /obj/item/reagent_containers/pill/antirad(src)
new /obj/item/reagent_containers/food/drinks/bottle/vodka(src)
new /obj/item/healthanalyzer(src)
/obj/item/storage/firstaid/o2
name = "oxygen deprivation treatment kit"
@@ -312,3 +312,11 @@
/obj/item/storage/pill_bottle/mutarad/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/pill/mutarad(src)
/obj/item/storage/pill_bottle/penis_enlargement
name = "penis enlargement pills"
desc = "You want penis enlargement pills?"
/obj/item/storage/pill_bottle/penis_enlargement/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/reagent_containers/pill/penis_enlargement(src)
@@ -4,7 +4,7 @@
icon_state = "blank_blob"
desc = "A huge, pulsating yellow mass."
max_integrity = 400
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90)
armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 5, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90) // Last stand
explosion_block = 6
point_return = -1
health_regen = 0 //we regen in Life() instead of when pulsed
@@ -6,6 +6,7 @@
max_integrity = 200
health_regen = 1
point_return = 25
armor = list("melee" = 10, "bullet" = 20, "laser" = 15, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
var/list/spores = list()
var/mob/living/simple_animal/hostile/blob/blobbernaut/naut = null
var/max_spores = 3
@@ -5,6 +5,7 @@
desc = "A thin spire of slightly swaying tendrils."
max_integrity = 60
point_return = 15
armor = list("melee" = 10, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
var/resource_delay = 0
/obj/structure/blob/resource/scannerreport()
@@ -64,11 +64,11 @@
/obj/effect/proc_holder/changeling/sting/transformation
name = "Transformation Sting"
desc = "We silently sting a human, injecting a retrovirus that forces them to transform."
helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human. This ability is loud, and might cause our blood to react violently to heat."
sting_icon = "sting_transform"
chemical_cost = 50
dna_cost = 3
loudness = 1
loudness = 2
var/datum/changelingprofile/selected_dna = null
action_icon = 'icons/mob/actions/actions_changeling.dmi'
action_icon_state = "ling_sting_transform"
+83 -2
View File
@@ -55,7 +55,6 @@
contents_cost = 700
export_types = list(/obj/structure/reagent_dispensers/beerkeg)
/datum/export/large/pipedispenser
cost = 500
unit_name = "pipe dispenser"
@@ -122,7 +121,6 @@
unit_name = "packaged antimatter reactor section"
export_types = list(/obj/item/am_shielding_container)
/datum/export/large/iv
cost = 50
unit_name = "iv drip"
@@ -133,3 +131,86 @@
unit_name = "security barrier"
export_types = list(/obj/item/grenade/barrier, /obj/structure/barricade/security)
/datum/export/large/odysseus
cost = 5500
unit_name = "working odysseus"
export_types = list(/obj/mecha/medical/odysseus)
include_subtypes = FALSE
/datum/export/large/ripley
cost = 6500
unit_name = "working ripley"
export_types = list(/obj/mecha/working/ripley)
include_subtypes = FALSE
/datum/export/large/firefighter
cost = 9000
unit_name = "working firefighter"
export_types = list(/obj/mecha/working/ripley/firefighter)
include_subtypes = FALSE
/datum/export/large/gygax
cost = 19000
unit_name = "working gygax"
export_types = list(/obj/mecha/combat/gygax)
include_subtypes = FALSE
/datum/export/large/durand
cost = 10000
unit_name = "working durand"
export_types = list(/obj/mecha/combat/durand)
include_subtypes = FALSE
/datum/export/large/phazon
cost = 25000 //Little over half do to needing a core
unit_name = "working phazon"
export_types = list(/obj/mecha/combat/phazon)
include_subtypes = FALSE
/datum/export/large/marauder
cost = 15000 //Still a Combat class mech - CC tech as well! 150% "normal" boundy price.
unit_name = "working marauder"
export_types = list(/obj/mecha/combat/marauder)
include_subtypes = FALSE
/datum/export/large/deathripley
cost = 8500 //Still a "Combat class" mech - Illegal tech as well! 165% "normal" boundy price.
unit_name = "working illegally modified"
export_types = list(/obj/mecha/working/ripley/deathripley)
include_subtypes = FALSE
/datum/export/large/gygaxdark
cost = 28500 //Still a Combat class mech - Illegal tech as well! 150% "normal" boundy price.
unit_name = "working illegally modified gygax"
export_types = list(/obj/mecha/combat/gygax/dark)
include_subtypes = FALSE
/datum/export/large/oldripley
cost = 6250 //old mech - Scrap metal ! 50% "normal" boundy price.
unit_name = "working miner ripley"
export_types = list(/obj/mecha/working/ripley/mining)
include_subtypes = FALSE
/datum/export/large/honk
cost = 12000 //Still a "Combat class" mech - Comats bordem honk!
unit_name = "working honker"
export_types = list(/obj/mecha/combat/honker)
include_subtypes = FALSE
/datum/export/large/reticence
cost = 12000 //Still a "Combat class" mech - Has cloking and lethal weaponds.
unit_name = "working reticence"
export_types = list(/obj/mecha/combat/reticence)
include_subtypes = FALSE
/datum/export/large/seraph
cost = 25500 //Still a Combat class mech - CC tech as well! 150% "normal" boundy price.
unit_name = "working seraph"
export_types = list(/obj/mecha/combat/marauder/seraph)
include_subtypes = FALSE
/datum/export/large/mauler
cost = 12000 //Still a Combat class mech - CC lethal weaponds.
unit_name = "working legally modified marauder"
export_types = list(/obj/mecha/combat/marauder/mauler)
include_subtypes = FALSE
+16 -4
View File
@@ -82,6 +82,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/list/custom_names = list()
var/prefered_security_department = SEC_DEPT_RANDOM
var/custom_species = null
//Quirk list
var/list/positive_quirks = list()
@@ -269,6 +270,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<h2>Body</h2>"
dat += "<b>Gender:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=gender'>[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]</a><BR>"
dat += "<b>Species:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=species;task=input'>[pref_species.id]</a><BR>"
dat += "<b>Custom Species Name:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=custom_species;task=input'>[custom_species ? custom_species : "None"]</a><BR>"
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=all;task=random'>Random Body</A><BR>"
dat += "<b>Always Random Body:</b><a href='?_src_=prefs;preference=all'>[be_random_body ? "Yes" : "No"]</A><BR>"
dat += "<br><b>Cycle background:</b><a style='display:block;width:100px' href='?_src_=prefs;preference=cycle_bg;task=input'>[bgstate]</a><BR>"
@@ -816,10 +818,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "<tr><td colspan=4><hr></td></tr>"
dat += "<tr><td colspan=4><b><center>[gear_tab]</center></b></td></tr>"
dat += "<tr><td colspan=4><hr></td></tr>"
dat += "<tr style='vertical-align:top;'><td width=15%><b>Name</b></td>"
dat += "<td width=5% style='vertical-align:top'><b>Cost</b></td>"
dat += "<td><font size=2><b>Restrictions</b></font></td>"
dat += "<td><font size=2><b>Description</b></font></td></tr>"
dat += "<tr width=10% style='vertical-align:top;'><td width=15%><b>Name</b></td>"
dat += "<td style='vertical-align:top'><b>Cost</b></td>"
dat += "<td width=10%><font size=2><b>Restrictions</b></font></td>"
dat += "<td width=80%><font size=2><b>Description</b></font></td></tr>"
for(var/j in GLOB.loadout_items[gear_tab])
var/datum/gear/gear = GLOB.loadout_items[gear_tab][j]
var/donoritem
@@ -1456,6 +1458,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/newtype = GLOB.species_list[result]
pref_species = new newtype()
//let's ensure that no weird shit happens on species swapping.
custom_species = null
if(!("body_markings" in pref_species.default_features))
features["body_markings"] = "None"
if(!("mam_body_markings" in pref_species.default_features))
@@ -1477,6 +1480,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(features["mcolor3"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3]))
features["mcolor3"] = pref_species.default_color
if("custom_species")
var/new_species = reject_bad_name(input(user, "Choose your species subtype, if unique. This will show up on examinations and health scans. Do not abuse this:", "Character Preference", custom_species) as null|text)
if(new_species)
custom_species = new_species
else
custom_species = null
if("mutant_color")
var/new_mutantcolor = input(user, "Choose your character's alien/mutant color:", "Character Preference","#"+features["mcolor"]) as color|null
if(new_mutantcolor)
@@ -2115,6 +2125,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.real_name = nameless ? "[real_name] #[rand(10000, 99999)]" : real_name
character.name = character.real_name
character.nameless = nameless
character.custom_species = custom_species
character.gender = gender
character.age = age
@@ -2149,6 +2160,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
character.dna.features = features.Copy()
character.dna.real_name = character.real_name
character.dna.nameless = character.nameless
character.dna.custom_species = character.custom_species
if("tail_lizard" in pref_species.default_features)
character.dna.species.mutant_bodyparts |= "tail_lizard"
+3 -1
View File
@@ -236,6 +236,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Character
S["real_name"] >> real_name
S["nameless"] >> nameless
S["custom_species"] >> custom_species
S["name_is_always_random"] >> be_random_name
S["body_is_always_random"] >> be_random_body
S["gender"] >> gender
@@ -350,7 +351,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
gender = sanitize_gender(gender, TRUE, TRUE)
if(!real_name)
real_name = random_unique_name(gender)
custom_species = reject_bad_name(custom_species)
for(var/custom_name_id in GLOB.preferences_custom_names)
var/namedata = GLOB.preferences_custom_names[custom_name_id]
custom_names[custom_name_id] = reject_bad_name(custom_names[custom_name_id],namedata["allow_numbers"])
@@ -427,6 +428,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Character
WRITE_FILE(S["real_name"] , real_name)
WRITE_FILE(S["nameless"] , nameless)
WRITE_FILE(S["custom_species"] , custom_species)
WRITE_FILE(S["name_is_always_random"] , be_random_name)
WRITE_FILE(S["body_is_always_random"] , be_random_body)
WRITE_FILE(S["gender"] , gender)
+6 -1
View File
@@ -27,14 +27,19 @@
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_head()
H.update_inv_head()
/obj/item/clothing/head/worn_overlays(isinhands = FALSE)
. = list()
+3 -3
View File
@@ -26,7 +26,7 @@
icon_state = "captain"
item_state = "that"
flags_inv = 0
armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
strip_delay = 60
dog_fashion = /datum/dog_fashion/head/captain
@@ -50,7 +50,7 @@
name = "head of personnel's cap"
icon_state = "hopcap"
desc = "The symbol of true bureaucratic micromanagement."
armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
dog_fashion = /datum/dog_fashion/head/hop
/obj/item/clothing/head/hopcap/beret
@@ -200,4 +200,4 @@
/obj/item/clothing/head/beret/qm
name = "quartermaster's beret"
desc = "This headwear shows off your Cargonian leadership"
icon_state = "qmberet"
icon_state = "qmberet"
+5
View File
@@ -30,10 +30,15 @@
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
+42 -2
View File
@@ -171,17 +171,57 @@
icon_state = "stripedbluescarf"
item_color = "stripedbluescarf"
/obj/item/clothing/neck/petcollar //don't really wear this though please c'mon seriously guys
///////////
//COLLARS//
///////////
/obj/item/clothing/neck/petcollar
name = "pet collar"
desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule."
icon_state = "petcollar"
item_color = "petcollar"
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar
var/tagname = null
/obj/item/clothing/neck/petcollar/attack_self(mob/user)
tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN)
name = "[initial(name)] - [tagname]"
/obj/item/clothing/neck/petcollar/locked
name = "locked collar"
desc = "A collar that has a small lock on it to keep it from being removed."
pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked
var/lock = FALSE
/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/key/collar, mob/user, params)
if(lock != FALSE)
to_chat(user, "<span class='warning'>With a click the collar unlocks!</span>")
lock = FALSE
item_flags = NONE
else
to_chat(user, "<span class='warning'>With a click the collar locks!</span>")
lock = TRUE
item_flags = NODROP
return
/obj/item/clothing/neck/petcollar/locked/attack_hand(mob/user)
if(loc == user && user.get_item_by_slot(SLOT_NECK) && lock != FALSE)
to_chat(user, "<span class='warning'>The collar is locked! You'll need unlock the collar before you can take it off!</span>")
return
..()
/obj/item/key/collar
name = "Collar Key"
desc = "A key for a tiny lock on a collar or bag."
/obj/item/clothing/neck/petcollar/Initialize()
. = ..()
new /obj/item/reagent_containers/food/snacks/cookie(src)
/obj/item/clothing/neck/petcollar/locked/Initialize()
. = ..()
new /obj/item/key/collar(src)
//////////////
//DOPE BLING//
//////////////
@@ -191,4 +231,4 @@
desc = "Damn, it feels good to be a gangster."
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "bling"
item_color = "bling"
item_color = "bling"
+63 -21
View File
@@ -13,16 +13,49 @@
var/list/vents = list()
var/randomProbability = 1
var/reagentsAmount = 100
var/list/saferChems = list("water","carbon","flour","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube","pink_glitter","cryptobiolin",
"plantbgone","blood","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid","mindbreaker","rotatium","bluespace",
"pax","laughter","concentrated_barbers_aid","colorful_reagent","dizzysolution","tiresolution","sodiumchloride","beer","hair_dye","sugar","white_glitter","growthserum")
var/list/saferChems = list(
"water",
"carbon",
"flour",
"cleaner",
"nutriment",
"condensedcapsaicin",
"mushroomhallucinogen",
"lube",
"pink_glitter",
"cryptobiolin",
"plantbgone",
"blood",
"charcoal",
"space_drugs",
"morphine",
"holywater",
"ethanol",
"hot_coco",
"sacid",
"mindbreaker",
"rotatium",
"bluespace",
"pax",
"laughter",
"concentrated_barbers_aid",
"colorful_reagent",
"dizzysolution",
"tiresolution",
"sodiumchloride",
"beer",
"hair_dye",
"sugar",
"white_glitter",
"growthserum"
)
//needs to be chemid unit checked at some point
/datum/round_event/vent_clog/announce()
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
/datum/round_event/vent_clog/setup()
endWhen = rand(25, 100)
endWhen = rand(120, 180)
for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines)
var/turf/T = get_turf(temp_vent)
if(T && is_station_level(T.z) && !temp_vent.welded)
@@ -30,25 +63,34 @@
if(!vents.len)
return kill()
/datum/round_event/vent_clog/start()
for(var/obj/machinery/atmospherics/components/unary/vent in vents)
if(vent && vent.loc)
var/datum/reagents/R = new/datum/reagents(1000)
R.my_atom = vent
if (prob(randomProbability))
R.add_reagent(get_random_reagent_id(), reagentsAmount)
else
R.add_reagent(pick(saferChems), reagentsAmount)
/datum/round_event/vent_clog/tick()
var/datum/effect_system/foam_spread/foam = new
foam.set_up(200, get_turf(vent), R)
foam.start()
if(!vents.len)
return kill()
var/cockroaches = prob(33) ? 3 : 0
while(cockroaches)
new /mob/living/simple_animal/cockroach(get_turf(vent))
cockroaches--
CHECK_TICK
CHECK_TICK
var/obj/machinery/atmospherics/components/unary/vent = pick(vents)
vents -= vent
if(!vent)
return
var/turf/T = get_turf(vent)
if(!T)
return
var/datum/reagents/R = new/datum/reagents(1000)
R.my_atom = vent
if (prob(randomProbability))
R.add_reagent(get_random_reagent_id(), reagentsAmount)
else
R.add_reagent(pick(saferChems), reagentsAmount)
var/datum/effect_system/smoke_spread/chem/C = new
C.set_up(R,16,T,TRUE)
C.start()
playsound(T, 'sound/effects/smoke.ogg', 50, 1, -3)
/datum/round_event_control/vent_clog/threatening
name = "Clogged Vents: Threatening"
+32 -3
View File
@@ -5,6 +5,18 @@
max_occurrences = 5
earliest_start = 0 MINUTES
/datum/round_event/wizard/race
var/list/stored_name
var/list/stored_species
var/list/stored_dna
/datum/round_event/wizard/race/setup()
stored_name = list()
stored_species = list()
stored_dna = list()
endWhen = rand(600,1200) //10 to 20 minutes
..()
/datum/round_event/wizard/race/start()
var/all_the_same = 0
@@ -12,18 +24,35 @@
for(var/speciestype in subtypesof(/datum/species))
var/datum/species/S = new speciestype()
if(!S.dangerous_existence && !S.blacklisted)
if(!S.dangerous_existence && !S.blacklisted && !S.nojumpsuit) //Dangerous Species, Blacklisted Species, and Species who can't wear jumpsuits are blacklisted.
all_species += speciestype
var/datum/species/new_species = pick(all_species)
if(prob(50))
if(prob(75))
all_the_same = 1
for(var/mob/living/carbon/human/H in GLOB.carbon_list) //yes, even the dead
for(var/mob/living/carbon/human/H in GLOB.carbon_list)
var/turf/T = get_turf(H)
if(!T)
continue
if(!is_station_level(T.z))
continue
stored_name[H] = H.real_name
stored_species[H] = H.dna.species
stored_dna[H] = H.dna.unique_enzymes
H.set_species(new_species)
H.real_name = H.dna.species.random_name(H.gender,1)
H.dna.unique_enzymes = H.dna.generate_unique_enzymes()
to_chat(H, "<span class='notice'>You feel somehow... different?</span>")
if(!all_the_same)
new_species = pick(all_species)
/datum/round_event/wizard/race/end()
for(var/mob/living/carbon/human/H in GLOB.carbon_list)
if(!(stored_name[H] && stored_species[H] && stored_dna[H]))
continue
H.set_species(stored_species[H])
H.real_name = stored_name[H]
H.dna.unique_enzymes = stored_dna[H]
to_chat(H, "<span class='notice'>You feel back to your normal self again.</span>")
@@ -54,7 +54,6 @@
tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1)
foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR
/obj/item/reagent_containers/food/snacks/store/cake/brain
name = "brain cake"
desc = "A squishy cake-thing."
@@ -86,7 +85,6 @@
tastes = list("cake" = 4, "cream cheese" = 3)
foodtype = GRAIN | DAIRY
/obj/item/reagent_containers/food/snacks/cakeslice/cheese
name = "cheese cake slice"
desc = "Slice of pure cheestisfaction."
@@ -95,7 +93,6 @@
tastes = list("cake" = 4, "cream cheese" = 3)
foodtype = GRAIN | DAIRY
/obj/item/reagent_containers/food/snacks/store/cake/orange
name = "orange cake"
desc = "A cake with added orange."
@@ -132,7 +129,6 @@
tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
/obj/item/reagent_containers/food/snacks/store/cake/lemon
name = "lemon cake"
desc = "A cake with added lemon."
@@ -143,7 +139,6 @@
tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
/obj/item/reagent_containers/food/snacks/cakeslice/lemon
name = "lemon cake slice"
desc = "Just a slice of cake, it is enough for everyone."
@@ -163,7 +158,6 @@
tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4)
foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR
/obj/item/reagent_containers/food/snacks/cakeslice/chocolate
name = "chocolate cake slice"
desc = "Just a slice of cake, it is enough for everyone."
@@ -172,7 +166,6 @@
tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4)
foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR
/obj/item/reagent_containers/food/snacks/store/cake/birthday
name = "birthday cake"
desc = "Happy Birthday little clown..."
@@ -250,5 +243,100 @@
icon_state = "pumpkinspicecakeslice"
filling_color = "#FFD700"
tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1)
foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR
/obj/item/reagent_containers/food/snacks/store/cake/bsvc // blackberry strawberries vanilla cake
name = "blackberry and strawberry vanilla cake"
desc = "A plain cake, filled with assortment of blackberries and strawberries!"
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "blackbarry_strawberries_cake_vanilla_cake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bsvc
bonus_reagents = list("nutriment" = 14, "vitamin" = 4)
tastes = list("blackbarry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
/obj/item/reagent_containers/food/snacks/cakeslice/bsvc
name = "blackberry and strawberry vanilla cake slice"
desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "blackbarry_strawberries_cake_vanilla_slice"
filling_color = "#FFD700"
tastes = list("blackbarry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
/obj/item/reagent_containers/food/snacks/store/cake/bscc // blackbarry strawberries chocolate cake
name = "blackberry and strawberry chocolate cake"
desc = "A plain cake, filled with assortment of blackberries and strawberries!"
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "blackbarry_strawberries_cake_coco_cake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bscc
bonus_reagents = list("nutriment" = 14, "vitamin" = 4, "cocoa" = 5)
tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
/obj/item/reagent_containers/food/snacks/cakeslice/bscc
name = "blackberry and strawberry chocolate cake slice"
desc = "Just a slice of cake filled with assortment of blackberries and strawberries!"
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "blackbarry_strawberries_cake_coco_cake_slice"
filling_color = "#FFD700"
tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3)
foodtype = GRAIN | DAIRY | FRUIT | SUGAR
obj/item/reagent_containers/food/snacks/store/cake/holy_cake
name = "angel food cake"
desc = "A cake made for angels and chaplains alike! Contains holy water."
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "holy_cake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice
bonus_reagents = list("nutriment" = 1, "vitamin" = 3, "holy_water" = 10)
tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1)
foodtype = GRAIN | DAIRY | SUGAR
/obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice
name = "angel food cake slice"
desc = "A slice of heavenly cake."
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "holy_cake_slice"
filling_color = "#00FFFF"
tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1)
foodtype = GRAIN | DAIRY | SUGAR
obj/item/reagent_containers/food/snacks/store/cake/pound_cake
name = "pound cake"
desc = "A condensed cake made for filling people up quickly."
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "pound_cake"
slices_num = 7 //Its ment to feed the party
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice
bonus_reagents = list("nutriment" = 60)
tastes = list("cake" = 5, "sweetness" = 1, "batter" = 1)
foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD
/obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice
name = "pound cake slice"
desc = "A slice of condensed cake made for filling people up quickly."
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "pound_cake_slice"
filling_color = "#00FFFF"
tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1)
foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD
obj/item/reagent_containers/food/snacks/store/cake/hardware_cake
name = "hardware cake"
desc = "A cake that is made with electronic boards and leaks acid..."
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "hardware_cake"
slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice
bonus_reagents = list("sacid" = 15, "oil" = 15)
tastes = list("acid" = 1, "metal" = 1, "regret" = 10)
foodtype = GRAIN | GROSS
/obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice
name = "hardware cake slice"
desc = "A slice of electronic boards and some acid."
icon = 'modular_citadel/icons/obj/food/cake.dmi'
icon_state = "hardware_cake_slice"
filling_color = "#00FFFF"
tastes = list("acid" = 1, "metal" = 1, "regret" = 10)
foodtype = GRAIN | GROSS
@@ -54,6 +54,43 @@
tastes = list("fish" = 1, "chips" = 1)
foodtype = MEAT | VEGETABLES | FRIED
/obj/item/reagent_containers/food/snacks/sushi_basic
name = "funa hosomaki"
desc = "A small cylindrical kudzu skin, filled with rice and fish."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushie_basic"
bonus_reagents = list("vitamin" = 2)
list_reagents = list("nutriment" = 4)
bitesize = 10
filling_color = "#F2EEEA" //rgb(242, 238, 234)
tastes = list("fish" = 1, "rice" = 2, "salt" = 1)
foodtype = MEAT | VEGETABLES
/obj/item/reagent_containers/food/snacks/sushi_adv
name = "funa nigiri"
desc = "A peace of carp lightly placed on some rice."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushie_adv"
bonus_reagents = list("vitamin" = 2)
list_reagents = list("nutriment" = 6)
bitesize = 10
filling_color = "#F2EEEA" //rgb(242, 238, 234)
tastes = list("fish" = 2, "rice" = 2, "salt" = 1)
foodtype = MEAT | VEGETABLES
/obj/item/reagent_containers/food/snacks/sushi_pro
name = "funa nigiri"
desc = "A well prepared peace of the best of the carp fillet placed on rice. Looks fancy and fresh!"
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushie_pro"
bonus_reagents = list("nutriment" = 2, "vitamin" = 2)
list_reagents = list("nutriment" = 6, "vitamin" = 2)
bitesize = 10
filling_color = "#F2EEEA" //rgb(242, 238, 234)
tastes = list("fish" = 3, "rice" = 2, "salt" = 1)
foodtype = MEAT | VEGETABLES
////////////////////////////////////////////MEATS AND ALIKE////////////////////////////////////////////
/obj/item/reagent_containers/food/snacks/tofu
@@ -207,6 +207,16 @@
tastes = list("cobwebs" = 1, "sugar" = 2)
foodtype = JUNKFOOD | SUGAR
/obj/item/reagent_containers/food/snacks/tobiko
name = "tobiko"
desc = "Spider eggs wrapped in a thin salted Kudzu pod"
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushie_egg"
list_reagents = list("nutriment" = 6, "vitamin" = 2)
filling_color = "#FF3333" // R225 G051 B051
tastes = list("seaweed" = 1, "cobwebs" = 1, "salty" = 2)
foodtype = MEAT | VEGETABLES
/obj/item/reagent_containers/food/snacks/chococoin
name = "chocolate coin"
desc = "A completely edible but nonflippable festive coin."
@@ -569,3 +579,12 @@
filling_color = "#A0522D"
tastes = list("chocolate" = 1)
foodtype = JUNKFOOD | SUGAR
/obj/item/reagent_containers/food/snacks/riceball
name = "onigiri"
desc = "A ball of rice with some light salt and a wrap of Kudzu skin."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "riceball"
list_reagents = list("nutriment" = 6, "sodiumchloride" = 2)
tastes = list("rice" = 3, "salt" = 1)
foodtype = GRAIN
@@ -102,3 +102,13 @@
list_reagents = list("nutriment" = 2, "vitamin" = 2)
tastes = list("bread" = 2)
foodtype = GRAIN
/obj/item/reagent_containers/food/snacks/tuna_sandwich
name = "tuna sandwich"
desc = "Both a salad and a sandwich in one."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "tunasandwich"
trash = /obj/item/trash/plate
bonus_reagents = list("nutriment" = 1, "vitamin" = 3)
tastes = list("tuna" = 4, "mayonnaise" = 2, "bread" = 2)
foodtype = GRAIN | MEAT
@@ -0,0 +1,95 @@
//////////////////////////Sushi Components///////////////////////
/obj/item/reagent_containers/food/snacks/sushi_rice
name = "Sushi Rice"
desc = "A bowl of sticky rice for making sushi."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushi_rice"
list_reagents = list("sodiumchloride" = 5)
tastes = list("rice" = 5, "salt" = 1)
foodtype = GRAIN
/obj/item/reagent_containers/food/snacks/sea_weed
name = "Sea Weed Sheet"
desc = "A thin, light salt sheet of plant mater. This is commenly used in sushi recipes,"
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sea_weed"
list_reagents = list("sodiumchloride" = 2)
tastes = list("plants" = 2, "salt" = 1)
foodtype = VEGETABLES
/obj/item/reagent_containers/food/snacks/tuna
name = "Canned Tuna"
desc = "A small can of tuna fish beloved by felines."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "tuna_can"
//trash = /obj/item/trash/tuna_used //I dont know if I like this idea - A Masked Cat
list_reagents = list("sodiumchloride" = 5, "mercury" = 2)
tastes = list("tuna" = 15, "mercury" = 1, "salt" = 3)
foodtype = MEAT
//////////////////////////Sushi/////////////////////////////////
/obj/item/reagent_containers/food/snacks/sushie_basic
name = "Funa Hosomaki"
desc = "A small cylindrical filled with rice and fish."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushie_basic"
bonus_reagents = list("vitamin" = 2)
list_reagents = list("nutriment" = 1)
bitesize = 1
filling_color = "#F2EEEA" //rgb(242, 238, 234)
tastes = list("fish" = 1, "rice" = 1, "salt" = 1)
foodtype = MEAT | VEGETABLES
/obj/item/reagent_containers/food/snacks/sushie_adv
name = "Funa Nigiri"
desc = "A pice of carp lightly placed on some rice."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushie_adv"
bonus_reagents = list("vitamin" = 2)
list_reagents = list("nutriment" = 2)
bitesize = 1
filling_color = "#F2EEEA" //rgb(242, 238, 234)
tastes = list("fish" = 1, "rice" = 1, "salt" = 1)
foodtype = MEAT | VEGETABLES
/obj/item/reagent_containers/food/snacks/sushie_pro
name = "Funa Nigiri"
desc = "A well prepared pice of the best of the carp fillet placed on rice. Looks fancy and fresh!"
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushie_pro"
bonus_reagents = list("nutriment" = 1, "vitamin" = 2)
list_reagents = list("nutriment" = 8, "vitamin" = 1)
bitesize = 1
filling_color = "#F2EEEA" //rgb(242, 238, 234)
tastes = list("fish" = 1, "rice" = 1, "salt" = 1)
foodtype = MEAT | VEGETABLES
/obj/item/reagent_containers/food/snacks/tobiko
name = "Tobiko"
desc = "Spider eggs wrapped in a thin salted Kudzu pod"
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "sushie_egg"
list_reagents = list("nutriment" = 3, "vitamin" = 2)
filling_color = "#FF3333" // R225 G051 B051
tastes = list("seaweed" = 1, "salty" = 2)
foodtype = MEAT | VEGETABLES
/obj/item/reagent_containers/food/snacks/riceball
name = "Onigiri"
desc = "A ball of rice with some light salt and a wrap of Kudzu skin."
icon = 'modular_citadel/icons/obj/food/food.dmi'
icon_state = "riceball"
list_reagents = list("nutriment" = 5, "sodiumchloride" = 2)
tastes = list("rice" = 4, "salt" = 1)
foodtype = GRAIN
/obj/item/reagent_containers/food/snacks/sashimi
name = "carp sashimi"
desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself."
icon_state = "sashimi"
bonus_reagents = list("nutriment" = 1, "capsaicin" = 4, "vitamin" = 4)
list_reagents = list("nutriment" = 6, "capsaicin" = 5)
filling_color = "#FA8072"
tastes = list("fish" = 1, "hot peppers" = 1)
foodtype = MEAT | TOXIC
@@ -102,6 +102,52 @@
result = /obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice
subcategory = CAT_CAKE
/datum/crafting_recipe/food/holycake
name = "Angel food cake"
reqs = list(
/datum/reagent/water/holywater = 15,
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1
)
result = /obj/item/reagent_containers/food/snacks/store/cake/holy_cake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/poundcake
name = "Pound cake"
reqs = list(
/obj/item/reagent_containers/food/snacks/store/cake/plain = 4
)
result = /obj/item/reagent_containers/food/snacks/store/cake/pound_cake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/hardwarecake
name = "Hardware cake"
reqs = list(
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
/obj/item/circuitboard = 2,
/datum/reagent/toxin/acid = 5
)
result = /obj/item/reagent_containers/food/snacks/store/cake/hardware_cake
subcategory = CAT_CAKE
/datum/crafting_recipe/food/bscccake
name = "blackberry and strawberry chocolate cake"
reqs = list(
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/chocolatebar = 2,
/obj/item/reagent_containers/food/snacks/grown/berries = 5
)
result = /obj/item/reagent_containers/food/snacks/store/cake/bscc
subcategory = CAT_CAKE
/datum/crafting_recipe/food/bscvcake
name = "blackberry and strawberry vanilla cake"
reqs = list(
/obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
/obj/item/reagent_containers/food/snacks/grown/berries = 5
)
result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc
subcategory = CAT_CAKE
/datum/crafting_recipe/food/cak
name = "Living cat/cake hybrid"
reqs = list(
@@ -114,4 +160,4 @@
/datum/reagent/teslium = 1 //To shock the whole thing into life
)
result = /mob/living/simple_animal/pet/cat/cak
subcategory = CAT_CAKE //Cat! Haha, get it? CAT? GET IT???
subcategory = CAT_CAKE //Cat! Haha, get it? CAT? GET IT? We get it - Love Catpeople
@@ -1,5 +1,3 @@
////////////////////////////////////////////////KEBABS////////////////////////////////////////////////
/datum/crafting_recipe/food/humankebab
@@ -71,16 +69,6 @@
result = /obj/item/reagent_containers/food/snacks/fishfingers
subcategory = CAT_MEAT
/datum/crafting_recipe/food/sashimi
name = "Sashimi"
reqs = list(
/datum/reagent/consumable/soysauce = 5,
/obj/item/reagent_containers/food/snacks/spidereggs = 1,
/obj/item/reagent_containers/food/snacks/carpmeat = 1
)
result = /obj/item/reagent_containers/food/snacks/sashimi
subcategory = CAT_MEAT
////////////////////////////////////////////////MR SPIDER////////////////////////////////////////////////
/datum/crafting_recipe/food/spidereggsham
@@ -345,3 +345,13 @@
)
result = /obj/item/reagent_containers/food/snacks/salad/ricepudding
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/riceball
name = "Onigiri"
reqs = list(
/datum/reagent/consumable/soysauce = 1,
/obj/item/reagent_containers/food/snacks/grown/kudzupod = 1,
/obj/item/reagent_containers/food/snacks/salad/boiledrice = 1
)
result = /obj/item/reagent_containers/food/snacks/riceball
subcategory = CAT_MISCFOOD
@@ -62,5 +62,13 @@
result = /obj/item/reagent_containers/food/snacks/notasandwich
subcategory = CAT_SANDWICH
/datum/crafting_recipe/food/notasandwich
name = "Tuna sandwich"
reqs = list(
/obj/item/reagent_containers/food/snacks/breadslice/plain = 2,
/obj/item/reagent_containers/food/snacks/tuna = 1,
/obj/item/reagent_containers/food/snacks/grown/onion = 1,
/obj/item/reagent_containers/food/condiment/mayonnaise = 5
)
result = /obj/item/reagent_containers/food/snacks/tuna_sandwich
subcategory = CAT_SANDWICH
@@ -0,0 +1,94 @@
//////////////////////////Sushi Components///////////////////////
/datum/crafting_recipe/food/sushi_rice
name = "Sushi Rice"
reqs = list(
/datum/reagent/water = 40,
/datum/reagent/consumable/rice = 10
)
result = /obj/item/reagent_containers/food/snacks/sushi_rice
subcategory = CAT_SUSHI
/datum/crafting_recipe/food/sea_weed
name = "Sea Weed Sheet"
reqs = list(
/datum/reagent/water = 30,
/datum/reagent/consumable/soysauce = 5,
/obj/item/reagent_containers/food/snacks/grown/kudzupod = 1,
)
result = /obj/item/reagent_containers/food/snacks/sea_weed
subcategory = CAT_SUSHI
/datum/crafting_recipe/food/tuna_can
name = "Can of Tuna"
reqs = list(
/datum/reagent/consumable/sodiumchloride = 15,
/datum/reagent/consumable/cooking_oil = 5,
/obj/item/reagent_containers/food/snacks/carpmeat = 1,
)
result = /obj/item/reagent_containers/food/snacks/tuna
subcategory = CAT_SUSHI
//////////////////////////Sushi/////////////////////////////////
/datum/crafting_recipe/food/sashimi
name = "Sashimi"
reqs = list(
/datum/reagent/consumable/soysauce = 5,
/obj/item/reagent_containers/food/snacks/spidereggs = 1,
/obj/item/reagent_containers/food/snacks/carpmeat = 1
)
result = /obj/item/reagent_containers/food/snacks/sashimi
subcategory = CAT_SUSHI
/datum/crafting_recipe/food/riceball
name = "Onigiri"
reqs = list(
/datum/reagent/consumable/soysauce = 1,
/obj/item/reagent_containers/food/snacks/sea_weed = 1,
/obj/item/reagent_containers/food/snacks/sushi_rice = 1
)
result = /obj/item/reagent_containers/food/snacks/riceball
subcategory = CAT_SUSHI
/datum/crafting_recipe/food/sushie_egg
name = "Tobiko"
reqs = list(
/datum/reagent/consumable/soysauce = 6,
/obj/item/reagent_containers/food/snacks/spidereggs = 1,
/obj/item/reagent_containers/food/snacks/sea_weed = 2,
)
result = /obj/item/reagent_containers/food/snacks/tobiko
subcategory = CAT_SUSHI
/datum/crafting_recipe/food/sushie_basic
name = "Funa Hosomaki"
reqs = list(
/datum/reagent/consumable/soysauce = 3,
/obj/item/reagent_containers/food/snacks/sushi_rice = 1,
/obj/item/reagent_containers/food/snacks/carpmeat = 2,
/obj/item/reagent_containers/food/snacks/sea_weed = 3,
)
result = /obj/item/reagent_containers/food/snacks/sushie_basic
subcategory = CAT_SUSHI
/datum/crafting_recipe/food/sushie_adv
name = "Funa Nigiri"
reqs = list(
/datum/reagent/consumable/soysauce = 5,
/obj/item/reagent_containers/food/snacks/sushi_rice = 1,
/obj/item/reagent_containers/food/snacks/carpmeat = 1
)
result = /obj/item/reagent_containers/food/snacks/sushie_adv
subcategory = CAT_SUSHI
/datum/crafting_recipe/food/sushie_pro
name = "Well made Funa Nigiri"
reqs = list(
/datum/reagent/consumable/soysauce = 10,
/obj/item/reagent_containers/food/snacks/sushi_rice = 2,
/obj/item/reagent_containers/food/snacks/carpmeat = 5,
/obj/item/reagent_containers/food/snacks/sea_weed = 1
)
result = /obj/item/reagent_containers/food/snacks/sushie_pro
subcategory = CAT_SUSHI
+2
View File
@@ -304,6 +304,8 @@
else if(href_list["create"])
var/amount = (text2num(href_list["amount"]))
//Can't be outside these (if you change this keep a sane limit)
amount = CLAMP(amount, 1, 50)
var/datum/design/D = locate(href_list["create"])
create_product(D, amount)
updateUsrDialog()
@@ -1309,4 +1309,35 @@
set_pin_data(IC_OUTPUT, 2, regurgitated_contents)
push_data()
activate_pin(2)
//Degens
/obj/item/integrated_circuit/input/bonermeter
name = "bonermeter"
desc = "Detects the target's arousal and various statistics about the target's arousal levels. Invasive!"
icon_state = "medscan"
complexity = 4
inputs = list("target" = IC_PINTYPE_REF)
outputs = list(
"current arousal" = IC_PINTYPE_NUMBER,
"minimum arousal" = IC_PINTYPE_NUMBER,
"maximum arousal" = IC_PINTYPE_NUMBER,
"can be aroused" = IC_PINTYPE_BOOLEAN
)
activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT)
spawn_flags = IC_SPAWN_RESEARCH
power_draw_per_use = 40
/obj/item/integrated_circuit/input/bonermeter/do_work()
var/mob/living/L = get_pin_data_as_type(IC_INPUT, 1, /mob/living)
if(!istype(L) || !L.Adjacent(get_turf(src)) ) //Invalid input
return
set_pin_data(IC_OUTPUT, 1, L.getArousalLoss())
set_pin_data(IC_OUTPUT, 2, L.min_arousal)
set_pin_data(IC_OUTPUT, 3, L.max_arousal)
set_pin_data(IC_OUTPUT, 4, L.canbearoused)
push_data()
activate_pin(2)
@@ -144,7 +144,7 @@
w_class = WEIGHT_CLASS_SMALL
complexity = 10
cooldown_per_use = 1
ext_cooldown = 1
ext_cooldown = 2
inputs = list("direction" = IC_PINTYPE_DIR)
outputs = list("obstacle" = IC_PINTYPE_REF)
activators = list("step towards dir" = IC_PINTYPE_PULSE_IN,"on step"=IC_PINTYPE_PULSE_OUT,"blocked"=IC_PINTYPE_PULSE_OUT)
@@ -125,7 +125,7 @@
name = "man-machine interface tank"
desc = "This circuit is just a jar filled with an artificial liquid mimicking the cerebrospinal fluid."
extended_desc = "This jar can hold 1 man-machine interface and let it take control of some basic functions of the assembly."
complexity = 29
complexity = 60
inputs = list("laws" = IC_PINTYPE_LIST)
outputs = list(
"man-machine interface" = IC_PINTYPE_REF,
@@ -254,7 +254,7 @@
name = "pAI connector circuit"
desc = "This circuit lets you fit in a personal artificial intelligence to give it some form of control over the bot."
extended_desc = "You can wire various functions to it."
complexity = 29
complexity = 60
inputs = list("laws" = IC_PINTYPE_LIST)
outputs = list(
"personal artificial intelligence" = IC_PINTYPE_REF,
+4 -4
View File
@@ -22,11 +22,11 @@
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400),
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
new /datum/data/mining_equipment("Survival Knife", /obj/item/kitchen/knife/combat/survival, 450),
new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
new /datum/data/mining_equipment("Larger Ore Bag", /obj/item/storage/bag/ore/large, 500),
new /datum/data/mining_equipment("500 Point Transfer Card", /obj/item/card/mining_point_card/mp500, 500),
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750),
new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 750),
@@ -50,9 +50,11 @@
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 2000),
new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 3000),
new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800),
new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
@@ -67,9 +69,7 @@
new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000),
new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000),
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000),
new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 12000),
new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 15000)
new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000)
)
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,62 @@
/*
Hello and welcome to sprite_accessories: For sprite accessories, such as hair,
facial hair, and possibly tattoos and stuff somewhere along the line. This file is
intended to be friendly for people with little to no actual coding experience.
The process of adding in new hairstyles has been made pain-free and easy to do.
Enjoy! - Doohl
Notice: This all gets automatically compiled in a list in dna.dm, so you do not
have to define any UI values for sprite accessories manually for hair and facial
hair. Just add in new hair types and the game will naturally adapt.
!!WARNING!!: changing existing hair information can be VERY hazardous to savefiles,
to the point where you may completely corrupt a server's savefiles. Please refrain
from doing this unless you absolutely know what you are doing, and have defined a
conversion in savefile.dm
*/
/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female,var/roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked
if(!istype(L))
L = list()
if(!istype(male))
male = list()
if(!istype(female))
female = list()
for(var/path in typesof(prototype))
if(path == prototype)
continue
if(roundstart)
var/datum/sprite_accessory/P = path
if(initial(P.locked))
continue
var/datum/sprite_accessory/D = new path()
if(D.icon_state)
L[D.name] = D
else
L += D.name
switch(D.gender)
if(MALE)
male += D.name
if(FEMALE)
female += D.name
else
male += D.name
female += D.name
return L
/datum/sprite_accessory
var/icon //the icon file the accessory is located in
var/icon_state //the icon_state of the accessory
var/name //the preview name of the accessory
var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations
var/gender_specific //Something that can be worn by either gender, but looks different on each
var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none.
var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears.
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?
@@ -0,0 +1,25 @@
//////////.//////////////////
// MutantParts Definitions //
/////////////////////////////
/datum/sprite_accessory/body_markings
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/body_markings/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/body_markings/dtiger
name = "Dark Tiger Body"
icon_state = "dtiger"
gender_specific = 1
/datum/sprite_accessory/body_markings/ltiger
name = "Light Tiger Body"
icon_state = "ltiger"
gender_specific = 1
/datum/sprite_accessory/body_markings/lbelly
name = "Light Belly"
icon_state = "lbelly"
gender_specific = 1
@@ -0,0 +1,7 @@
datum/sprite_accessory/caps
icon = 'icons/mob/mutant_bodyparts.dmi'
color_src = HAIR
/datum/sprite_accessory/caps/round
name = "Round"
icon_state = "round"
@@ -0,0 +1,12 @@
/datum/sprite_accessory/ears
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/ears/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/ears/cat
name = "Cat"
icon_state = "cat"
hasinner = 1
color_src = HAIR
@@ -0,0 +1,18 @@
/datum/sprite_accessory/frills
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/frills/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/frills/simple
name = "Simple"
icon_state = "simple"
/datum/sprite_accessory/frills/short
name = "Short"
icon_state = "short"
/datum/sprite_accessory/frills/aquatic
name = "Aquatic"
icon_state = "aqua"
@@ -0,0 +1,89 @@
/////////////////////////////
// Facial Hair Definitions //
/////////////////////////////
/datum/sprite_accessory/facial_hair
icon = 'icons/mob/human_face.dmi'
gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P)
// please make sure they're sorted alphabetically and categorized
/datum/sprite_accessory/facial_hair/abe
name = "Beard (Abraham Lincoln)"
icon_state = "facial_abe"
/datum/sprite_accessory/facial_hair/brokenman
name = "Beard (Broken Man)"
icon_state = "facial_brokenman"
/datum/sprite_accessory/facial_hair/chinstrap
name = "Beard (Chinstrap)"
icon_state = "facial_chin"
/datum/sprite_accessory/facial_hair/dwarf
name = "Beard (Dwarf)"
icon_state = "facial_dwarf"
/datum/sprite_accessory/facial_hair/fiveoclock
name = "Beard (Five o Clock Shadow)"
icon_state = "facial_fiveoclock"
/datum/sprite_accessory/facial_hair/fullbeard
name = "Beard (Full)"
icon_state = "facial_fullbeard"
/datum/sprite_accessory/facial_hair/gt
name = "Beard (Goatee)"
icon_state = "facial_gt"
/datum/sprite_accessory/facial_hair/hip
name = "Beard (Hipster)"
icon_state = "facial_hip"
/datum/sprite_accessory/facial_hair/jensen
name = "Beard (Jensen)"
icon_state = "facial_jensen"
/datum/sprite_accessory/facial_hair/neckbeard
name = "Beard (Neckbeard)"
icon_state = "facial_neckbeard"
/datum/sprite_accessory/facial_hair/vlongbeard
name = "Beard (Very Long)"
icon_state = "facial_wise"
/datum/sprite_accessory/facial_hair/longbeard
name = "Beard (Long)"
icon_state = "facial_longbeard"
/datum/sprite_accessory/facial_hair/fu
name = "Moustache (Fu Manchu)"
icon_state = "facial_fumanchu"
/datum/sprite_accessory/facial_hair/hogan
name = "Moustache (Hulk Hogan)"
icon_state = "facial_hogan" //-Neek
/datum/sprite_accessory/facial_hair/selleck
name = "Moustache (Selleck)"
icon_state = "facial_selleck"
/datum/sprite_accessory/facial_hair/chaplin
name = "Moustache (Square)"
icon_state = "facial_chaplin"
/datum/sprite_accessory/facial_hair/vandyke
name = "Moustache (Van Dyke)"
icon_state = "facial_vandyke"
/datum/sprite_accessory/facial_hair/watson
name = "Moustache (Watson)"
icon_state = "facial_watson"
/datum/sprite_accessory/facial_hair/shaved
name = "Shaved"
icon_state = null
gender = NEUTER
/datum/sprite_accessory/facial_hair/elvis
name = "Sideburns (Elvis)"
icon_state = "facial_elvis"
@@ -0,0 +1,460 @@
//////////////////////
// Hair Definitions //
//////////////////////
/datum/sprite_accessory/hair
icon = 'icons/mob/human_face.dmi' // default icon for all hairs
// please make sure they're sorted alphabetically and, where needed, categorized
// try to capitalize the names please~
// try to spell
// you do not need to define _s or _l sub-states, game automatically does this for you
/datum/sprite_accessory/hair/afro
name = "Afro"
icon_state = "hair_afro"
/datum/sprite_accessory/hair/afro2
name = "Afro 2"
icon_state = "hair_afro2"
/datum/sprite_accessory/hair/afro_large
name = "Afro (Large)"
icon_state = "hair_bigafro"
/datum/sprite_accessory/hair/antenna
name = "Ahoge"
icon_state = "hair_antenna"
/datum/sprite_accessory/hair/bald
name = "Bald"
icon_state = null
/datum/sprite_accessory/hair/balding
name = "Balding Hair"
icon_state = "hair_e"
/datum/sprite_accessory/hair/bedhead
name = "Bedhead"
icon_state = "hair_bedhead"
/datum/sprite_accessory/hair/bedhead2
name = "Bedhead 2"
icon_state = "hair_bedheadv2"
/datum/sprite_accessory/hair/bedhead3
name = "Bedhead 3"
icon_state = "hair_bedheadv3"
/datum/sprite_accessory/hair/beehive
name = "Beehive"
icon_state = "hair_beehive"
/datum/sprite_accessory/hair/beehive2
name = "Beehive 2"
icon_state = "hair_beehivev2"
/datum/sprite_accessory/hair/bob
name = "Bob Hair"
icon_state = "hair_bob"
/datum/sprite_accessory/hair/bob2
name = "Bob Hair 2"
icon_state = "hair_bob2"
/datum/sprite_accessory/hair/bob3
name = "Bob Hair 3"
icon_state = "hair_bobcut"
/datum/sprite_accessory/hair/bobcurl
name = "Bobcurl"
icon_state = "hair_bobcurl"
/datum/sprite_accessory/hair/boddicker
name = "Boddicker"
icon_state = "hair_boddicker"
/datum/sprite_accessory/hair/bowl
name = "Bowl"
icon_state = "hair_bowlcut"
/datum/sprite_accessory/hair/braid
name = "Braid (Floorlength)"
icon_state = "hair_braid"
/datum/sprite_accessory/hair/braided
name = "Braided"
icon_state = "hair_braided"
/datum/sprite_accessory/hair/front_braid
name = "Braided Front"
icon_state = "hair_braidfront"
/datum/sprite_accessory/hair/not_floorlength_braid
name = "Braid (High)"
icon_state = "hair_braid2"
/datum/sprite_accessory/hair/lowbraid
name = "Braid (Low)"
icon_state = "hair_hbraid"
/datum/sprite_accessory/hair/shortbraid
name = "Braid (Short)"
icon_state = "hair_shortbraid"
/datum/sprite_accessory/hair/braidtail
name = "Braided Tail"
icon_state = "hair_braidtail"
/datum/sprite_accessory/hair/bun
name = "Bun Head"
icon_state = "hair_bun"
/datum/sprite_accessory/hair/bun2
name = "Bun Head 2"
icon_state = "hair_bunhead2"
/datum/sprite_accessory/hair/largebun
name = "Bun (Large)"
icon_state = "hair_largebun"
/datum/sprite_accessory/hair/business
name = "Business Hair"
icon_state = "hair_business"
/datum/sprite_accessory/hair/business2
name = "Business Hair 2"
icon_state = "hair_business2"
/datum/sprite_accessory/hair/business3
name = "Business Hair 3"
icon_state = "hair_business3"
/datum/sprite_accessory/hair/business4
name = "Business Hair 4"
icon_state = "hair_business4"
/datum/sprite_accessory/hair/buzz
name = "Buzzcut"
icon_state = "hair_buzzcut"
/datum/sprite_accessory/hair/combover
name = "Combover"
icon_state = "hair_combover"
/datum/sprite_accessory/hair/crew
name = "Crewcut"
icon_state = "hair_crewcut"
/datum/sprite_accessory/hair/curls
name = "Curls"
icon_state = "hair_curls"
/datum/sprite_accessory/hair/cut
name = "Cut Hair"
icon_state = "hair_c"
/datum/sprite_accessory/hair/devillock
name = "Devil Lock"
icon_state = "hair_devilock"
/datum/sprite_accessory/hair/dreadlocks
name = "Dreadlocks"
icon_state = "hair_dreads"
/datum/sprite_accessory/hair/drillhair
name = "Drill Hair"
icon_state = "hair_drillhair"
/datum/sprite_accessory/hair/drillhairextended
name = "Drill Hair (Extended)"
icon_state = "hair_drillhairextended"
/datum/sprite_accessory/hair/emo
name = "Emo"
icon_state = "hair_emo"
/datum/sprite_accessory/hair/feather
name = "Feather"
icon_state = "hair_feather"
/datum/sprite_accessory/hair/sargeant
name = "Flat Top"
icon_state = "hair_sargeant"
/datum/sprite_accessory/hair/bigflattop
name = "Flat Top (Big)"
icon_state = "hair_bigflattop"
/datum/sprite_accessory/hair/fag
name = "Flow Hair"
icon_state = "hair_f"
/datum/sprite_accessory/hair/gelled
name = "Gelled Back"
icon_state = "hair_gelled"
/datum/sprite_accessory/hair/gentle
name = "Gentle"
icon_state = "hair_gentle"
/datum/sprite_accessory/hair/halfbang
name = "Half-banged Hair"
icon_state = "hair_halfbang"
/datum/sprite_accessory/hair/halfbang2
name = "Half-banged Hair 2"
icon_state = "hair_halfbang2"
/datum/sprite_accessory/hair/hedgehog
name = "Hedgehog Hair"
icon_state = "hair_hedgehog"
/datum/sprite_accessory/hair/himecut
name = "Hime Cut"
icon_state = "hair_himecut"
/datum/sprite_accessory/hair/himecut2
name = "Hime Cut 2"
icon_state = "hair_himecut2"
/datum/sprite_accessory/hair/himeup
name = "Hime Updo"
icon_state = "hair_himeup"
/datum/sprite_accessory/hair/hitop
name = "Hitop"
icon_state = "hair_hitop"
/datum/sprite_accessory/hair/jensen
name = "Jensen Hair"
icon_state = "hair_jensen"
/datum/sprite_accessory/hair/keanu
name = "Keanu Hair"
icon_state = "hair_keanu"
/datum/sprite_accessory/hair/kusangi
name = "Kusanagi Hair"
icon_state = "hair_kusanagi"
/datum/sprite_accessory/hair/long
name = "Long Hair 1"
icon_state = "hair_long"
/datum/sprite_accessory/hair/long2
name = "Long Hair 2"
icon_state = "hair_long2"
/datum/sprite_accessory/hair/long3
name = "Long Hair 3"
icon_state = "hair_long3"
/datum/sprite_accessory/hair/long_over_eye
name = "Long Over Eye"
icon_state = "hair_longovereye"
/datum/sprite_accessory/hair/longbangs
name = "Long Bangs"
icon_state = "hair_lbangs"
/datum/sprite_accessory/hair/longemo
name = "Long Emo"
icon_state = "hair_longemo"
/datum/sprite_accessory/hair/longfringe
name = "Long Fringe"
icon_state = "hair_longfringe"
/datum/sprite_accessory/hair/sidepartlongalt
name = "Long Side Part"
icon_state = "hair_longsidepart"
/datum/sprite_accessory/hair/megaeyebrows
name = "Mega Eyebrows"
icon_state = "hair_megaeyebrows"
/datum/sprite_accessory/hair/messy
name = "Messy"
icon_state = "hair_messy"
/datum/sprite_accessory/hair/mohawk
name = "Mohawk"
icon_state = "hair_d"
/datum/sprite_accessory/hair/reversemohawk
name = "Mohawk (Reverse)"
icon_state = "hair_reversemohawk"
/datum/sprite_accessory/hair/odango
name = "Odango"
icon_state = "hair_odango"
/datum/sprite_accessory/hair/ombre
name = "Ombre"
icon_state = "hair_ombre"
/datum/sprite_accessory/hair/oneshoulder
name = "One Shoulder"
icon_state = "hair_oneshoulder"
/datum/sprite_accessory/hair/over_eye
name = "Over Eye"
icon_state = "hair_shortovereye"
//Donator item - fractious
/datum/sprite_accessory/hair/over_eye_fr
name = "Over Eye (fract)"
icon_state = "hair_shortovereye_1f"
ckeys_allowed = list("fractious")
/datum/sprite_accessory/hair/parted
name = "Parted"
icon_state = "hair_parted"
/datum/sprite_accessory/hair/partedside
name = "Parted (Side)"
icon_state = "hair_part"
/datum/sprite_accessory/hair/kagami
name = "Pigtails"
icon_state = "hair_kagami"
/datum/sprite_accessory/hair/pigtail
name = "Pigtails 2"
icon_state = "hair_pigtails"
/datum/sprite_accessory/hair/pigtail2
name = "Pigtails 3"
icon_state = "hair_pigtails2"
/datum/sprite_accessory/hair/pixie
name = "Pixie Cut"
icon_state = "hair_pixie"
/datum/sprite_accessory/hair/pompadour
name = "Pompadour"
icon_state = "hair_pompadour"
/datum/sprite_accessory/hair/bigpompadour
name = "Pompadour (Big)"
icon_state = "hair_bigpompadour"
/datum/sprite_accessory/hair/ponytail1
name = "Ponytail"
icon_state = "hair_ponytail"
/datum/sprite_accessory/hair/ponytail2
name = "Ponytail 2"
icon_state = "hair_ponytail2"
/datum/sprite_accessory/hair/ponytail3
name = "Ponytail 3"
icon_state = "hair_ponytail3"
/datum/sprite_accessory/hair/ponytail4
name = "Ponytail 4"
icon_state = "hair_ponytail4"
/datum/sprite_accessory/hair/ponytail5
name = "Ponytail 5"
icon_state = "hair_ponytail5"
/datum/sprite_accessory/hair/highponytail
name = "Ponytail (High)"
icon_state = "hair_highponytail"
/datum/sprite_accessory/hair/longponytail
name = "Ponytail (Long)"
icon_state = "hair_longstraightponytail"
/datum/sprite_accessory/hair/sidetail
name = "Ponytail (Side)"
icon_state = "hair_sidetail"
/datum/sprite_accessory/hair/sidetail2
name = "Ponytail (Side) 2"
icon_state = "hair_sidetail2"
/datum/sprite_accessory/hair/sidetail3
name = "Ponytail (Side) 3"
icon_state = "hair_sidetail3"
/datum/sprite_accessory/hair/sidetail4
name = "Ponytail (Side) 4"
icon_state = "hair_sidetail4"
/datum/sprite_accessory/hair/quiff
name = "Quiff"
icon_state = "hair_quiff"
/datum/sprite_accessory/hair/short
name = "Short Hair"
icon_state = "hair_a"
/datum/sprite_accessory/hair/shorthair2
name = "Short Hair 2"
icon_state = "hair_shorthair2"
/datum/sprite_accessory/hair/shorthair3
name = "Short Hair 3"
icon_state = "hair_shorthair3"
/datum/sprite_accessory/hair/shoulderlength
name = "Shoulder-length Hair"
icon_state = "hair_b"
/datum/sprite_accessory/hair/sidecut
name = "Sidecut"
icon_state = "hair_sidecut"
/datum/sprite_accessory/hair/skinhead
name = "Skinhead"
icon_state = "hair_skinhead"
/datum/sprite_accessory/hair/protagonist
name = "Slightly Long Hair"
icon_state = "hair_protagonist"
/datum/sprite_accessory/hair/spiky
name = "Spiky"
icon_state = "hair_spikey"
/datum/sprite_accessory/hair/spiky2
name = "Spiky 2"
icon_state = "hair_spiky"
/datum/sprite_accessory/hair/spiky3
name = "Spiky 3"
icon_state = "hair_spiky2"
/datum/sprite_accessory/hair/swept
name = "Swept Back Hair"
icon_state = "hair_swept"
/datum/sprite_accessory/hair/swept2
name = "Swept Back Hair 2"
icon_state = "hair_swept2"
/datum/sprite_accessory/hair/tressshoulder
name = "Tress Shoulder"
icon_state = "hair_tressshoulder"
/datum/sprite_accessory/hair/updo
name = "Updo"
icon_state = "hair_updo"
/datum/sprite_accessory/hair/longer
name = "Very Long Hair"
icon_state = "hair_vlong"
/datum/sprite_accessory/hair/longest
name = "Very Long Hair 2"
icon_state = "hair_longest"
/datum/sprite_accessory/hair/longest2
name = "Very Long Over Eye"
icon_state = "hair_longest2"
/datum/sprite_accessory/hair/longestalt
name = "Very Long with Fringe"
icon_state = "hair_vlongfringe"
@@ -0,0 +1,26 @@
/datum/sprite_accessory/horns
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/horns/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/horns/simple
name = "Simple"
icon_state = "simple"
/datum/sprite_accessory/horns/short
name = "Short"
icon_state = "short"
/datum/sprite_accessory/horns/curled
name = "Curled"
icon_state = "curled"
/datum/sprite_accessory/horns/ram
name = "Ram"
icon_state = "ram"
/datum/sprite_accessory/horns/angler
name = "Angeler"
icon_state = "angler"
@@ -0,0 +1,8 @@
/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them.
icon = null //These datums exist for selecting legs on preference, and little else
/datum/sprite_accessory/legs/none
name = "Normal Legs"
/datum/sprite_accessory/legs/digitigrade_lizard
name = "Digitigrade Legs"
@@ -0,0 +1,68 @@
/datum/sprite_accessory/moth_wings
icon = 'icons/mob/wings.dmi'
color_src = null
/datum/sprite_accessory/moth_wings/plain
name = "Plain"
icon_state = "plain"
/datum/sprite_accessory/moth_wings/monarch
name = "Monarch"
icon_state = "monarch"
/datum/sprite_accessory/moth_wings/luna
name = "Luna"
icon_state = "luna"
/datum/sprite_accessory/moth_wings/atlas
name = "Atlas"
icon_state = "atlas"
/datum/sprite_accessory/moth_wings/reddish
name = "Reddish"
icon_state = "redish"
/datum/sprite_accessory/moth_wings/royal
name = "Royal"
icon_state = "royal"
/datum/sprite_accessory/moth_wings/gothic
name = "Gothic"
icon_state = "gothic"
/datum/sprite_accessory/moth_wings/lovers
name = "Lovers"
icon_state = "lovers"
/datum/sprite_accessory/moth_wings/whitefly
name = "White Fly"
icon_state = "whitefly"
/datum/sprite_accessory/moth_wings/punished
name = "Burnt Off"
icon_state = "punished"
locked = TRUE
/datum/sprite_accessory/moth_wings/firewatch
name = "Firewatch"
icon_state = "firewatch"
/datum/sprite_accessory/moth_wings/deathhead
name = "Deathshead"
icon_state = "deathhead"
/datum/sprite_accessory/moth_wings/poison
name = "Poison"
icon_state = "poison"
/datum/sprite_accessory/moth_wings/ragged
name = "Ragged"
icon_state = "ragged"
/datum/sprite_accessory/moth_wings/moonfly
name = "Moon Fly"
icon_state = "moonfly"
/datum/sprite_accessory/moth_wings/snow
name = "Snow"
icon_state = "snow"
@@ -0,0 +1,53 @@
/datum/sprite_accessory/spines
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/spines_animated
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/spines/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/spines_animated/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/spines/short
name = "Short"
icon_state = "short"
/datum/sprite_accessory/spines_animated/short
name = "Short"
icon_state = "short"
/datum/sprite_accessory/spines/shortmeme
name = "Short + Membrane"
icon_state = "shortmeme"
/datum/sprite_accessory/spines_animated/shortmeme
name = "Short + Membrane"
icon_state = "shortmeme"
/datum/sprite_accessory/spines/long
name = "Long"
icon_state = "long"
/datum/sprite_accessory/spines_animated/long
name = "Long"
icon_state = "long"
/datum/sprite_accessory/spines/longmeme
name = "Long + Membrane"
icon_state = "longmeme"
/datum/sprite_accessory/spines_animated/longmeme
name = "Long + Membrane"
icon_state = "longmeme"
/datum/sprite_accessory/spines/aqautic
name = "Aquatic"
icon_state = "aqua"
/datum/sprite_accessory/spines_animated/aqautic
name = "Aquatic"
icon_state = "aqua"
@@ -0,0 +1,18 @@
/datum/sprite_accessory/snouts
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/snouts/sharp
name = "Sharp"
icon_state = "sharp"
/datum/sprite_accessory/snouts/round
name = "Round"
icon_state = "round"
/datum/sprite_accessory/snouts/sharplight
name = "Sharp + Light"
icon_state = "sharplight"
/datum/sprite_accessory/snouts/roundlight
name = "Round + Light"
icon_state = "roundlight"
@@ -0,0 +1,96 @@
///////////////////////
// Socks Definitions //
///////////////////////
/datum/sprite_accessory/socks
icon = 'icons/mob/underwear.dmi'
/datum/sprite_accessory/socks/nude
name = "Nude"
icon_state = null
// please make sure they're sorted alphabetically and categorized
/datum/sprite_accessory/socks/black_knee
name = "Knee-high (Black)"
icon_state = "black_knee"
/datum/sprite_accessory/socks/commie_knee
name = "Knee-High (Commie)"
icon_state = "commie_knee"
/datum/sprite_accessory/socks/usa_knee
name = "Knee-High (Freedom)"
icon_state = "assblastusa_knee"
/datum/sprite_accessory/socks/rainbow_knee
name = "Knee-high (Rainbow)"
icon_state = "rainbow_knee"
/datum/sprite_accessory/socks/striped_knee
name = "Knee-high (Striped)"
icon_state = "striped_knee"
/datum/sprite_accessory/socks/thin_knee
name = "Knee-high (Thin)"
icon_state = "thin_knee"
/datum/sprite_accessory/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/socks/black_norm
name = "Normal (Black)"
icon_state = "black_norm"
/datum/sprite_accessory/socks/white_norm
name = "Normal (White)"
icon_state = "white_norm"
/datum/sprite_accessory/socks/pantyhose
name = "Pantyhose"
icon_state = "pantyhose"
/datum/sprite_accessory/socks/black_short
name = "Short (Black)"
icon_state = "black_short"
/datum/sprite_accessory/socks/white_short
name = "Short (White)"
icon_state = "white_short"
/datum/sprite_accessory/socks/black_thigh
name = "Thigh-high (Black)"
icon_state = "black_thigh"
/datum/sprite_accessory/socks/commie_thigh
name = "Thigh-high (Commie)"
icon_state = "commie_thigh"
/datum/sprite_accessory/socks/usa_thigh
name = "Thigh-high (Freedom)"
icon_state = "assblastusa_thigh"
/datum/sprite_accessory/socks/rainbow_thigh
name = "Thigh-high (Rainbow)"
icon_state = "rainbow_thigh"
/datum/sprite_accessory/socks/striped_thigh
name = "Thigh-high (Striped)"
icon_state = "striped_thigh"
/datum/sprite_accessory/socks/thin_thigh
name = "Thigh-high (Thin)"
icon_state = "thin_thigh"
/datum/sprite_accessory/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"
@@ -0,0 +1,55 @@
/datum/sprite_accessory/tails
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/tails_animated
icon = 'icons/mob/mutant_bodyparts.dmi'
/datum/sprite_accessory/tails/lizard/smooth
name = "Smooth"
icon_state = "smooth"
/datum/sprite_accessory/tails_animated/lizard/smooth
name = "Smooth"
icon_state = "smooth"
/datum/sprite_accessory/tails/lizard/dtiger
name = "Dark Tiger"
icon_state = "dtiger"
/datum/sprite_accessory/tails_animated/lizard/dtiger
name = "Dark Tiger"
icon_state = "dtiger"
/datum/sprite_accessory/tails/lizard/ltiger
name = "Light Tiger"
icon_state = "ltiger"
/datum/sprite_accessory/tails_animated/lizard/ltiger
name = "Light Tiger"
icon_state = "ltiger"
/datum/sprite_accessory/tails/lizard/spikes
name = "Spikes"
icon_state = "spikes"
/datum/sprite_accessory/tails_animated/lizard/spikes
name = "Spikes"
icon_state = "spikes"
/datum/sprite_accessory/tails/human/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/tails_animated/human/none
name = "None"
icon_state = "none"
/*
/datum/sprite_accessory/tails/human/cat
name = "Cat"
icon_state = "cat"
color_src = HAIR
/datum/sprite_accessory/tails_animated/human/cat
name = "Cat"
icon_state = "cat"
color_src = HAIR*/
@@ -0,0 +1,308 @@
////////////////////////////
// Undershirt Definitions //
////////////////////////////
/datum/sprite_accessory/undershirt
icon = 'icons/mob/underwear.dmi'
gender = NEUTER
/datum/sprite_accessory/undershirt/nude
name = "Nude"
icon_state = null
// please make sure they're sorted alphabetically and categorized
/datum/sprite_accessory/undershirt/bluejersey
name = "Shirt, Jersey - Blue"
icon_state = "shirt_bluejersey"
/datum/sprite_accessory/undershirt/redjersey
name = "Shirt, Jersey - Red"
icon_state = "shirt_redjersey"
/datum/sprite_accessory/undershirt/bluepolo
name = "Shirt, Polo - Blue"
icon_state = "bluepolo"
/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
name = "Shirt - Alien"
icon_state = "shirt_alien"
/datum/sprite_accessory/undershirt/mondmondjaja
name = "Shirt - Band"
icon_state = "band"
/datum/sprite_accessory/undershirt/shirt_black
name = "Shirt - Black"
icon_state = "shirt_black"
/datum/sprite_accessory/undershirt/blueshirt
name = "Shirt - Blue"
icon_state = "shirt_blue"
/datum/sprite_accessory/undershirt/clownshirt
name = "Shirt - Clown"
icon_state = "shirt_clown"
/datum/sprite_accessory/undershirt/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
name = "Shirt - Ian"
icon_state = "ian"
/datum/sprite_accessory/undershirt/ilovent
name = "Shirt - I Love NT"
icon_state = "ilovent"
/datum/sprite_accessory/undershirt/lover
name = "Shirt - Lover"
icon_state = "lover"
/datum/sprite_accessory/undershirt/matroska
name = "Shirt - Matroska"
icon_state = "matroska"
/datum/sprite_accessory/undershirt/meat
name = "Shirt - Meat"
icon_state = "shirt_meat"
/datum/sprite_accessory/undershirt/nano
name = "Shirt - Nanotrasen"
icon_state = "shirt_nano"
/datum/sprite_accessory/undershirt/peace
name = "Shirt - Peace"
icon_state = "peace"
/datum/sprite_accessory/undershirt/pacman
name = "Shirt - Pogoman"
icon_state = "pogoman"
/datum/sprite_accessory/undershirt/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
name = "Shirt - Skull"
icon_state = "shirt_skull"
/datum/sprite_accessory/undershirt/ss13
name = "Shirt - SS13"
icon_state = "shirt_ss13"
/datum/sprite_accessory/undershirt/stripe
name = "Shirt - Striped"
icon_state = "shirt_stripes"
/datum/sprite_accessory/undershirt/tiedye
name = "Shirt - Tie-dye"
icon_state = "shirt_tiedye"
/datum/sprite_accessory/undershirt/uk
name = "Shirt - UK"
icon_state = "uk"
/datum/sprite_accessory/undershirt/usa
name = "Shirt - USA"
icon_state = "shirt_assblastusa"
/datum/sprite_accessory/undershirt/shirt_white
name = "Shirt - White"
icon_state = "shirt_white"
/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
name = "Shirt, Sports - Blue"
icon_state = "blueshirtsport"
gender = NEUTER
/datum/sprite_accessory/undershirt/greenshirtsport
name = "Shirt, Sports - Green"
icon_state = "greenshirtsport"
gender = NEUTER
/datum/sprite_accessory/undershirt/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
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/undershirt/female_midriff
name = "Tank Top - Midriff"
icon_state = "tank_midriff"
/datum/sprite_accessory/undershirt/tank_red
name = "Tank Top - Red"
icon_state = "tank_red"
/datum/sprite_accessory/undershirt/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/undershirt/female_red
name = "Bra - Red"
icon_state = "bra_red"
/datum/sprite_accessory/undershirt/female_pink
name = "Bra - Pink"
icon_state = "bra_pink"
/datum/sprite_accessory/undershirt/female_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
name = "Bra - Freedom"
icon_state = "bra_assblastusa"
/datum/sprite_accessory/undershirt/female_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_black
name = "Bra - Black"
icon_state = "bra_black"
/datum/sprite_accessory/undershirt/female_uk
name = "Bra - UK"
icon_state = "bra_uk"
/datum/sprite_accessory/undershirt/female_white
name = "Bra - White"
icon_state = "bra_white"
/datum/sprite_accessory/undershirt/female_white_neko
name = "Bra, Neko - white"
icon_state = "bra_neko_white"
/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"
icon_state = "sports_bra"
/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"
icon_state = "sports_bra_alt"
/datum/sprite_accessory/undershirt/female_yellow
name = "Bra - Yellow"
icon_state = "bra_yellow"
/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"
icon_state = "bra_blue"
/datum/sprite_accessory/undershirt/swimsuit_green
name = "Swimsuit, Top - Green"
icon_state = "bra_swimming_green"
/datum/sprite_accessory/undershirt/swimsuit_purple
name = "Swimsuit, Top - Purple"
icon_state = "bra_swimming_purple"
@@ -0,0 +1,171 @@
///////////////////////////
// Underwear Definitions //
///////////////////////////
/datum/sprite_accessory/underwear
icon = 'icons/mob/underwear.dmi'
gender = NEUTER
/datum/sprite_accessory/underwear/nude
name = "Nude"
icon_state = null
/datum/sprite_accessory/underwear/mankini
name = "Mankini - Green"
icon_state = "mankini_green"
/datum/sprite_accessory/underwear/male_kinky
name = "Jockstrap - White"
icon_state = "jockstrap_white"
/datum/sprite_accessory/underwear/male_white
name = "Briefs - White"
icon_state = "briefs_white"
/datum/sprite_accessory/underwear/male_black
name = "Briefs - Black"
icon_state = "briefs_black"
/datum/sprite_accessory/underwear/male_grey
name = "Briefs - Grey"
icon_state = "briefs_grey"
/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
name = "Boxers - Heart"
icon_state = "boxers_heart"
/datum/sprite_accessory/underwear/male_stripe
name = "Boxers - Striped"
icon_state = "boxers_striped"
/datum/sprite_accessory/underwear/male_commie
name = "Boxers - Striped Communist"
icon_state = "boxers_commie"
/datum/sprite_accessory/underwear/male_usastripe
name = "Boxers - Striped Freedom"
icon_state = "boxers_assblastusa"
/datum/sprite_accessory/underwear/male_uk
name = "Boxers - Striped UK"
icon_state = "boxers_uk"
/datum/sprite_accessory/underwear/female_whitealt
name = "Boxer Briefs - White"
icon_state = "boxer_briefs_white"
/datum/sprite_accessory/underwear/female_blackalt
name = "Boxer Briefs - Black"
icon_state = "boxer_briefs_black"
/datum/sprite_accessory/underwear/female_pink
name = "Boxer Briefs - Pink"
icon_state = "boxer_briefs_pink"
/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_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
name = "Panties - Commie"
icon_state = "panties_commie"
/datum/sprite_accessory/underwear/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
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
name = "Panties - UK"
icon_state = "panties_uk"
/datum/sprite_accessory/underwear/female_white
name = "Panties - White"
icon_state = "panties_white"
/datum/sprite_accessory/underwear/female_white_neko
name = "Panties, Neko - White"
icon_state = "panties_neko_white"
/datum/sprite_accessory/underwear/female_black_neko
name = "Panties, Neko - Black"
icon_state = "panties_neko_black"
/datum/sprite_accessory/underwear/swimsuit_red
name = "Swimsuit, One Piece - Red"
icon_state = "swimming_red"
/datum/sprite_accessory/underwear/swimsuit
name = "Swimsuit, One Piece - Black"
icon_state = "swimming_black"
/datum/sprite_accessory/underwear/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/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"
@@ -0,0 +1,26 @@
/datum/sprite_accessory/wings/none
name = "None"
icon_state = "none"
/datum/sprite_accessory/wings_open
icon = 'icons/mob/wings.dmi'
/datum/sprite_accessory/wings_open/angel
name = "Angel"
icon_state = "angel"
color_src = 0
dimension_x = 46
center = TRUE
dimension_y = 34
/datum/sprite_accessory/wings
icon = 'icons/mob/wings.dmi'
/datum/sprite_accessory/wings/angel
name = "Angel"
icon_state = "angel"
color_src = 0
dimension_x = 46
center = TRUE
dimension_y = 34
locked = TRUE
@@ -39,6 +39,19 @@
restraint_check = TRUE
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/human/mawp
key = "mawp"
key_third_person = "mawps"
message = "mawps annoyingly."
emote_type = EMOTE_AUDIBLE
/datum/emote/living/carbon/human/mawp/run_emote(mob/living/user, params)
. = ..()
if(.)
if(ishuman(user))
if(prob(10))
user.adjustEarDamage(-5, -5)
/datum/emote/living/carbon/human/mumble
key = "mumble"
key_third_person = "mumbles"
@@ -18,6 +18,16 @@
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
if(ishuman(src)) //user just returned, y'know, the user's own species. dumb.
var/mob/living/carbon/human/H = src
var/datum/species/pref_species = H.dna.species
if(get_visible_name() == "Unknown") // same as flavor text, but hey it works.
msg += "You can't make out what species they are.\n"
else if(skipface)
msg += "You can't make out what species they are.\n"
else
msg += "[t_He] [t_is] a [H.dna.custom_species ? H.dna.custom_species : pref_species.name]!\n"
//uniform
if(w_uniform && !(SLOT_W_UNIFORM in obscured))
//accessory
@@ -50,6 +50,8 @@
var/nameless = FALSE //For drones of both the insectoid and robotic kind. And other types of nameless critters.
var/custom_species = null
var/datum/personal_crafting/handcrafting
var/datum/physiology/physiology
+9 -4
View File
@@ -1,9 +1,14 @@
/mob/living/carbon/human/say_mod(input, message_mode)
verb_say = dna.species.say_mod
if(slurring)
return "slurs"
else
. = ..()
switch(slurring)
if(25 to 50)
return "jumbles"
if(50 to 75)
return "slurs"
if(75 to INFINITY)
return "garbles"
else
. = ..()
/mob/living/carbon/human/treat_message(message)
message = dna.species.handle_speech(message,src)
+1 -6
View File
@@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
stuttering = max(stuttering-1, 0)
if(slurring)
slurring = max(slurring-1,0)
slurring = max(slurring-1,0,drunkenness)
if(cultslurring)
cultslurring = max(cultslurring-1, 0)
@@ -550,16 +550,11 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put
drunkenness = max(drunkenness - (drunkenness * 0.04), 0)
if(drunkenness >= 6)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/drunk)
if(prob(25))
slurring += 2
jitteriness = max(jitteriness - 3, 0)
if(has_trait(TRAIT_DRUNK_HEALING))
adjustBruteLoss(-0.12, FALSE)
adjustFireLoss(-0.06, FALSE)
if(drunkenness >= 11 && slurring < 5)
slurring += 1.2
if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director"))
if(SSresearch.science_tech)
if(drunkenness >= 12.9 && drunkenness <= 13.8)
+1 -1
View File
@@ -334,7 +334,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
message = stutter(message)
if(slurring)
message = slur(message)
message = slur(message,slurring)
if(cultslurring)
message = cultslur(message)
@@ -345,13 +345,18 @@
/mob/living/simple_animal/hostile/proc/AttackingTarget()
in_melee = TRUE
if(isliving(target))
var/mob/living/L = target
if(L.Adjacent(src) && vore_active && L.devourable) // aggressive check to ensure vore attacks can be made
if(prob(voracious_chance))
vore_attack(src,L,src)
if(vore_active)
if(isliving(target))
var/mob/living/L = target
if(L.Adjacent(src) && L.devourable) // aggressive check to ensure vore attacks can be made
if(prob(voracious_chance))
vore_attack(src,L,src)
else
return L.attack_animal(src)
else
return L.attack_animal(src)
return L.attack_animal(src) //literally every single fucking one of these need this I guess.
else
return target.attack_animal(src)
else
return target.attack_animal(src)
@@ -187,12 +187,12 @@
var/mob/living/carbon/C = L
var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT)
if(S && S.resistance_flags & GOLIATH_RESISTANCE)
L.Stun(75)
L.Stun(25)
else if(S && S.resistance_flags & GOLIATH_WEAKNESS)
L.Stun(125)
L.Stun(115)
else
L.Stun(100)
L.adjustBruteLoss(rand(10,15))
L.Stun(75)
L.adjustBruteLoss(rand(15,20)) // Less stun more harm
latched = TRUE
if(!latched)
retract()
+7 -7
View File
@@ -64,7 +64,7 @@
p++
return sanitize(t)
/proc/slur(n)
/proc/slur(n,var/strength=50)
var/phrase = html_decode(n)
var/leng = lentext(phrase)
var/counter=lentext(phrase)
@@ -72,7 +72,7 @@
var/newletter=""
while(counter>=1)
newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
if(rand(1,3)==3)
if(rand(1,100)<=strength)
if(lowertext(newletter)=="o")
newletter="u"
if(lowertext(newletter)=="s")
@@ -83,17 +83,17 @@
newletter="oo"
if(lowertext(newletter)=="c")
newletter="k"
if(rand(1,20)==20)
if(rand(1,100) <= strength*0.5)
if(newletter==" ")
newletter="...huuuhhh..."
if(newletter==".")
newletter=" *BURP*."
switch(rand(1,20))
if(1)
if(rand(1,100) <= strength)
if(rand(1,5) == 1)
newletter+="'"
if(10)
if(rand(1,5) == 1)
newletter+="[newletter]"
if(20)
if(rand(1,5) == 1)
newletter+="[newletter][newletter]"
newphrase+="[newletter]";counter-=1
return newphrase
+4
View File
@@ -200,6 +200,10 @@
charge = 0
update_icon()
/obj/item/stock_parts/cell/lascarbine
name = "laser carbine power supply"
maxcharge = 2500
/obj/item/stock_parts/cell/pulse //200 pulse shots
name = "pulse rifle power cell"
maxcharge = 40000
@@ -88,6 +88,9 @@
icon_state = "riotshotgun"
mag_type = /obj/item/ammo_box/magazine/internal/shot/riot
sawn_desc = "Come with me if you want to live."
unique_reskin = list("Tatical" = "riotshotgun",
"Wood Stock" = "wood_riotshotgun"
)
/obj/item/gun/ballistic/shotgun/riot/attackby(obj/item/A, mob/user, params)
..()
@@ -200,6 +203,10 @@
icon_state = "cshotgun"
mag_type = /obj/item/ammo_box/magazine/internal/shot/com
w_class = WEIGHT_CLASS_HUGE
unique_reskin = list("Tatical" = "cshotgun",
"Slick" = "cshotgun_slick"
)
/obj/item/gun/ballistic/shotgun/automatic/combat/compact
name = "compact combat shotgun"
@@ -207,6 +214,10 @@
icon_state = "cshotgunc"
mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact
w_class = WEIGHT_CLASS_NORMAL
unique_reskin = list("Tatical" = "cshotgunc",
"Slick" = "cshotgunc_slick"
)
//Dual Feed Shotgun
@@ -39,6 +39,21 @@
selfcharge = EGUN_SELFCHARGE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
/obj/item/gun/energy/laser/carbine
name = "laser carbine"
desc = "A ruggedized laser carbine featuring much higher capacity and improved handling when compared to a normal laser gun."
icon = 'icons/obj/guns/energy.dmi'
icon_state = "lasernew"
item_state = "laser"
force = 10
throwforce = 10
ammo_type = list(/obj/item/ammo_casing/energy/lasergun)
cell_type = /obj/item/stock_parts/cell/lascarbine
resistance_flags = FIRE_PROOF | ACID_PROOF
/obj/item/gun/energy/laser/carbine/nopin
pin = null
/obj/item/gun/energy/laser/captain/scattershot
name = "scatter shot laser rifle"
icon_state = "lasercannon"
@@ -1277,8 +1277,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(!M.has_trait(TRAIT_ALCOHOL_TOLERANCE))
M.confused = max(M.confused+2,0)
M.Dizzy(10)
if (!M.slurring)
M.slurring = 1
M.slurring = max(M.slurring,50)
M.slurring += 3
switch(current_cycle)
if(51 to 200)
@@ -1306,8 +1305,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.dizziness +=1.5
switch(current_cycle)
if(15 to 45)
if(!M.slurring)
M.slurring = 1
M.slurring = max(M.slurring,50)
M.slurring += 3
if(45 to 55)
if(prob(50))
@@ -1336,8 +1334,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.dizziness +=2
switch(current_cycle)
if(15 to 45)
if(!M.slurring)
M.slurring = 1
M.slurring = max(M.slurring,50)
M.slurring += 3
if(45 to 55)
if(prob(50))
@@ -1364,8 +1361,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "A drink enjoyed by people during the 1960's."
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M)
if (!M.slurring)
M.slurring = 1
M.slurring = max(M.slurring,50)
switch(current_cycle)
if(1 to 5)
M.Dizzy(10)
@@ -402,8 +402,7 @@
taste_description = "mushroom"
/datum/reagent/mushroomhallucinogen/on_mob_life(mob/living/carbon/M)
if(!M.slurring)
M.slurring = 1
M.slurring = max(M.slurring,50)
switch(current_cycle)
if(1 to 5)
M.Dizzy(5)
@@ -1912,3 +1912,20 @@
description = "The primary precursor for an ancient feline delicacy known as skooma. While it has no notable effects on it's own, mixing it with morphine in a chilled container may yield interesting results."
color = "#FAEAFF"
taste_description = "synthetic catnip"
/datum/reagent/penis_enlargement
name = "Penis Enlargement"
id = "penis_enlargement"
description = "A patented chemical forumula by Doctor Ronald Hyatt that is guaranteed to bring maximum GROWTH and LENGTH to your penis, today!"
color = "#888888"
taste_description = "chinese dragon powder"
metabolization_rate = INFINITY //So it instantly removes all of itself. Don't want to put strain on the system.
/datum/reagent/penis_enlargement/on_mob_life(mob/living/carbon/C)
var/obj/item/organ/genital/penis/P = C.getorganslot(ORGAN_SLOT_PENIS)
if(P)
var/added_length = round(volume/30,0.01) //Every 30u gives an extra inch. Rounded to the nearest 0.01 so float fuckery doesn't occur with the division by 30.
if(added_length >= 0.20) //Only add the length if it's greater than or equal to 0.2. This is to prevent people from smoking the reagents and causing the penis to update constantly.
P.length += added_length
P.update()
..()
@@ -233,3 +233,7 @@
/obj/item/reagent_containers/pill/get_belt_overlay()
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch")
/obj/item/reagent_containers/pill/penis_enlargement
name = "penis enlargement pill"
list_reagents = list("penis_enlargement" = 30)
+157 -121
View File
@@ -1,6 +1,10 @@
/////////////////////////////////////////
/////////////////Weapons/////////////////
/////////////////////////////////////////
///////////////////////////////
///////Weapons & Ammo//////////
///////////////////////////////
//////////////
//Ammo Boxes//
//////////////
/datum/design/c38/sec
id = "sec_38"
@@ -13,6 +17,40 @@
id = "sec_38lethal"
build_path = /obj/item/ammo_box/c38/lethal
//////////////
//WT550 Mags//
//////////////
/datum/design/mag_oldsmg
name = "WT-550 Semi-Auto SMG Magazine (4.6x30mm)"
desc = "A 20 round magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg"
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_box/magazine/wt550m9
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mag_oldsmg/ap_mag
name = "WT-550 Semi-Auto SMG Armour Piercing Magazine (4.6x30mm AP)"
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg_ap"
materials = list(MAT_METAL = 6000, MAT_SILVER = 600)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtap
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mag_oldsmg/ic_mag
name = "WT-550 Semi-Auto SMG Incendiary Magazine (4.6x30mm IC)"
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg_ic"
materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_GLASS = 1000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtic
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
//////////////
//Ammo Shells/
//////////////
/datum/design/rubbershot/sec
id = "sec_rshot"
build_type = PROTOLATHE
@@ -43,6 +81,40 @@
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/stunshell
name = "Stun Shell"
desc = "A stunning shell for a shotgun."
id = "stunshell"
build_type = PROTOLATHE
materials = list(MAT_METAL = 200)
build_path = /obj/item/ammo_casing/shotgun/stunslug
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/techshell
name = "Unloaded Technological Shotshell"
desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects."
id = "techshotshell"
build_type = PROTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = 200)
build_path = /obj/item/ammo_casing/shotgun/techshell
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/cryostatis_shotgun_dart
name = "Cryostasis Shotgun Dart"
desc = "A shotgun dart designed with similar internals to that of a cryostatis beaker, allowing reagents to not react when inside."
id = "shotgundartcryostatis"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3500)
build_path = /obj/item/ammo_casing/shotgun/dart/noreact
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
//////////////
//Firing Pins/
//////////////
/datum/design/pin_testing
name = "Test-Range Firing Pin"
desc = "This safety firing pin allows firearms to be operated within proximity to a firing range."
@@ -63,6 +135,20 @@
category = list("Firing Pins")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
//////////////
//Guns////////
//////////////
/datum/design/lasercarbine
name = "Laser Carbine"
desc = "Beefed up version of a standard laser gun."
id = "lasercarbine"
build_type = PROTOLATHE
materials = list(MAT_METAL = 15000, MAT_GLASS = 10000, MAT_GOLD = 2500, MAT_SILVER = 2500)
build_path = /obj/item/gun/energy/laser/carbine/nopin
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/stunrevolver
name = "Tesla Revolver"
desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers."
@@ -83,16 +169,6 @@
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/tele_shield
name = "Telescopic Riot Shield"
desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
id = "tele_shield"
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_GLASS = 4000, MAT_SILVER = 300, MAT_TITANIUM = 200)
build_path = /obj/item/shield/riot/tele
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/beamrifle
name = "Beam Marksman Rifle"
desc = "A powerful long ranged anti-material rifle that fires charged particle beams to obliterate targets."
@@ -122,11 +198,11 @@
materials = list(MAT_METAL = 5000, MAT_GLASS = 1000)
build_path = /obj/item/gun/syringe/rapidsyringe
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL //uwu
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/temp_gun
name = "Temperature Gun"
desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want
desc = "A gun that shoots temperature beam like projectiles to change temperature."
id = "temp_gun"
build_type = PROTOLATHE
materials = list(MAT_METAL = 5000, MAT_GLASS = 500, MAT_SILVER = 3000)
@@ -145,46 +221,6 @@
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/large_grenade
name = "Large Grenade"
desc = "A grenade that affects a larger area and use larger containers."
id = "large_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000)
build_path = /obj/item/grenade/chem_grenade/large
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE //Citadel edit added to science
/datum/design/pyro_grenade
name = "Pyro Grenade"
desc = "An advanced grenade that is able to self ignite its mixture."
id = "pyro_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_PLASMA = 500)
build_path = /obj/item/grenade/chem_grenade/pyro
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cryo_grenade
name = "Cryo Grenade"
desc = "An advanced grenade that rapidly cools its contents upon detonation."
id = "cryo_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
build_path = /obj/item/grenade/chem_grenade/cryo
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/adv_grenade
name = "Advanced Release Grenade"
desc = "An advanced grenade that can be detonated several times, best used with a repeating igniter."
id = "adv_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 500)
build_path = /obj/item/grenade/chem_grenade/adv_release
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/xray
name = "X-ray Laser Gun"
desc = "Not quite as menacing as it sounds"
@@ -215,64 +251,6 @@
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
//WT550 Mags
/datum/design/mag_oldsmg
name = "WT-550 Semi-Auto SMG Magazine (4.6x30mm)"
desc = "A 20 round magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg"
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_box/magazine/wt550m9
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mag_oldsmg/ap_mag
name = "WT-550 Semi-Auto SMG Armour Piercing Magazine (4.6x30mm AP)"
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg_ap"
materials = list(MAT_METAL = 6000, MAT_SILVER = 600)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtap
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/mag_oldsmg/ic_mag
name = "WT-550 Semi-Auto SMG Incendiary Magazine (4.6x30mm IC)"
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg_ic"
materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_GLASS = 1000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtic
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/stunshell
name = "Stun Shell"
desc = "A stunning shell for a shotgun."
id = "stunshell"
build_type = PROTOLATHE
materials = list(MAT_METAL = 200)
build_path = /obj/item/ammo_casing/shotgun/stunslug
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/techshell
name = "Unloaded Technological Shotshell"
desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects."
id = "techshotshell"
build_type = PROTOLATHE
materials = list(MAT_METAL = 1000, MAT_GLASS = 200)
build_path = /obj/item/ammo_casing/shotgun/techshell
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/suppressor
name = "Universal Suppressor"
desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels."
id = "suppressor"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
build_path = /obj/item/suppressor
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/gravitygun
name = "One-point Bluespace-gravitational Manipulator"
desc = "A multi-mode device that blasts one-point bluespace-gravitational bolts that locally distort gravity."
@@ -293,12 +271,70 @@
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/cryostatis_shotgun_dart
name = "Cryostasis Shotgun Dart"
desc = "A shotgun dart designed with similar internals to that of a cryostatis beaker, allowing reagents to not react when inside."
id = "shotgundartcryostatis"
///////////
//Grenades/
///////////
/datum/design/large_grenade
name = "Large Grenade"
desc = "A grenade that affects a larger area and use larger containers."
id = "large_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3500)
build_path = /obj/item/ammo_casing/shotgun/dart/noreact
category = list("Ammo")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
materials = list(MAT_METAL = 3000)
build_path = /obj/item/grenade/chem_grenade/large
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/pyro_grenade
name = "Pyro Grenade"
desc = "An advanced grenade that is able to self ignite its mixture."
id = "pyro_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_PLASMA = 500)
build_path = /obj/item/grenade/chem_grenade/pyro
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/cryo_grenade
name = "Cryo Grenade"
desc = "An advanced grenade that rapidly cools its contents upon detonation."
id = "cryo_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
build_path = /obj/item/grenade/chem_grenade/cryo
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
/datum/design/adv_grenade
name = "Advanced Release Grenade"
desc = "An advanced grenade that can be detonated several times, best used with a repeating igniter."
id = "adv_Grenade"
build_type = PROTOLATHE
materials = list(MAT_METAL = 3000, MAT_GLASS = 500)
build_path = /obj/item/grenade/chem_grenade/adv_release
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
//////////
//MISC////
//////////
/datum/design/tele_shield
name = "Telescopic Riot Shield"
desc = "An advanced riot shield made of lightweight materials that collapses for easy storage."
id = "tele_shield"
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_GLASS = 4000, MAT_SILVER = 300, MAT_TITANIUM = 200)
build_path = /obj/item/shield/riot/tele
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/suppressor
name = "Universal Suppressor"
desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels."
id = "suppressor"
build_type = PROTOLATHE
materials = list(MAT_METAL = 2000, MAT_SILVER = 500)
build_path = /obj/item/suppressor
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+2 -2
View File
@@ -564,7 +564,7 @@
display_name = "Weapon Development Technology"
description = "Our researchers have found new to weaponize just about everything now."
prereq_ids = list("engineering")
design_ids = list("pin_testing", "tele_shield")
design_ids = list("pin_testing", "tele_shield", "lasercarbine")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
export_price = 5000
@@ -963,7 +963,7 @@
prereq_ids = list("biotech","engineering")
boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien,
/obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor,
/obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor)
/obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 20000
hidden = TRUE
+1 -1
View File
@@ -13,7 +13,7 @@
/obj/item/reagent_containers/food/condiment/pack/hotsauce = 5,
/obj/item/reagent_containers/food/condiment/saltshaker = 5,
/obj/item/reagent_containers/food/condiment/peppermill = 5,
/obj/item/reagent_containers/glass/bowl = 20)
/obj/item/reagent_containers/glass/bowl = 30)
contraband = list(/obj/item/kitchen/rollingpin = 2,
/obj/item/kitchen/knife/butcher = 2)
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
@@ -0,0 +1,4 @@
author: "deathride58"
delete-after: True
changes:
- code_imp: "get_hearers_in_view() now actually caches the results of view() instead of calling view() twice"
@@ -0,0 +1,5 @@
author: "Poojawa"
delete-after: True
changes:
- rscadd: "Added custom species names! Examining people will now display their species name unless they're an Unknown or have their face hidden. like flavor text. Set it in your character window!"
- code_imp: "changed how health scanners print messages, wrapping it in msg for one to_chat instead of printing every line to_chat."
@@ -0,0 +1,6 @@
author: "BurgerBB"
delete-after: True
changes:
- rscadd: "Adds the bonermeter; a device that measures arousal based statistics."
- refactor: "Added a new input to the electrostimulator that controls the strength of the shock. It accepts negative inputs which reduce arousal. Added a new output to the electrostimulator that displays the amount of arousal gained."
- balance: "Rebalanced the electro-stimulator to be less spammy by giving it a 2.5 second enforced cooldown per circuit contraption. Increased the complexity of electro stimulator from 10 to 15."
@@ -0,0 +1,4 @@
author: "BurgerB"
delete-after: True
changes:
- tweak: "Tweaked the UI of the loadout to be less cluttered due to an issue with formatting."
@@ -0,0 +1,4 @@
author: "BurgerBB"
delete-after: True
changes:
- refactor: "Reworked the Vent Clog event to spray smoke instead of foam, also made it shoot smoke over time instead through each vent instead of all at once."
@@ -0,0 +1,5 @@
author: "deathride58"
delete-after: True
changes:
- balance: "Locomotion circuits are now restricted to jogging speed"
- balance: "MMI circuits and pAI circuits both now have 60 complexity, up from their original 29."
@@ -0,0 +1,5 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- rscadd: "cakes!"
- imageadd: "Made some sprites! -Love them really came out well"
@@ -0,0 +1,7 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- rscadd: "new economics"
- tweak: "cargo and robotics relationships"
- balance: "unbalanced something"
- bugfix: "fixed a maybe oversight"
@@ -0,0 +1,7 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- rscdel: "Fun"
- tweak: "costs of suit voucher"
- balance: "Unblances miner vender"
- bugfix: "spare cheaper brute kit"
@@ -0,0 +1,5 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- tweak: "harm from hentie"
- balance: "rebalanced goliaths stun to be less auto death"
@@ -0,0 +1,4 @@
author: "BurgerBB"
delete-after: True
changes:
- tweak: "Increased the spawn area of the City of Cogs (Reebe). This does not affect the area in which builders can build."
@@ -0,0 +1,4 @@
author: "BurgerBB"
delete-after: True
changes:
- balance: "Significantly tweaks the Wizard race transformation event to be less unreasonably troublesome."
@@ -0,0 +1,4 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- bugfix: "restores the deathriplys missing armor"
@@ -0,0 +1,4 @@
author: "BurgerBB"
delete-after: True
changes:
- rscadd: "Adds a new 0 cost trait that makes you immune* to Crocin and Hexacrocin"
@@ -0,0 +1,5 @@
author: "BurgerBB"
delete-after: True
changes:
- tweak: "Tweaks how slurring works so it's more of a gradual change into slurring instead of immediate."
- balance: "Slurring is now directly proportional to your drunkenness, with other sources of slur being added on top of it."
@@ -0,0 +1,4 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- rscadd: "new lockable colalr"
@@ -0,0 +1,7 @@
author: "BurgerBB"
delete-after: True
changes:
- tweak: "Bras are now separate from underwear, meaning you can mix and match bras if you're into that."
- tweak: "Men can wear female accessory clothing, and females can wear men accessory clothing. It's not a fetish, mom, it's PROGRESSIVE."
- code_imp: "Reorganized accessories into their own files to prevent a massive 1000 line file."
- server: "i'm 10% sure that merging this PR will cause preference corruption sooooooooooo I just need to hear from @deathride58 or perhaps someone else on how much damage this could possibly do."
@@ -0,0 +1,4 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- tweak: "armor"
@@ -0,0 +1,5 @@
author: "Trilbyspaceclone"
delete-after: True
changes:
- bugfix: "missing hopes and dreams"
- code_imp: "orgized the weapon file to be more cat brain friendly"

Some files were not shown because too many files have changed in this diff Show More