This commit is contained in:
Ghommie
2019-12-20 23:40:21 +01:00
773 changed files with 13656 additions and 4558 deletions
@@ -132,7 +132,7 @@
amount += 0.1
var/multiplier = fluid_mult
if(reagents.total_volume >= 5)
multiplier *= 0.5
multiplier *= 0.8
if(reagents.total_volume < reagents.maximum_volume)
reagents.isolate_reagent(fluid_id)//remove old reagents if it changed and just clean up generally
reagents.add_reagent(fluid_id, (amount * multiplier))//generate the cum
@@ -7,6 +7,7 @@
slot = ORGAN_SLOT_BREASTS
size = "c" //refer to the breast_values static list below for the cups associated number values
fluid_id = "milk"
fluid_rate = MILK_RATE
shape = "pair"
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION
masturbation_verb = "massage"
@@ -63,7 +64,7 @@
//Allows breasts to grow and change size, with sprite changes too.
//maximum wah
//Comical sizes slow you down in movement and actions.
//Rediculous sizes makes you more cumbersome.
//Ridiculous sizes makes you more cumbersome.
//this is far too lewd wah
/obj/item/organ/genital/breasts/modify_size(modifier, min = -INFINITY, max = INFINITY)
@@ -119,7 +120,7 @@
shape = D.features["breasts_shape"]
fluid_id = D.features["breasts_fluid"]
if(!D.features["breasts_producing"])
DISABLE_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION)
DISABLE_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION|CAN_CLIMAX_WITH|CAN_MASTURBATE_WITH)
if(!isnum(size))
cached_size = breast_values[size]
else
@@ -37,15 +37,11 @@
name = "[sizeword][dildo_shape] [can_customize ? "custom " : ""][dildo_type]"
/obj/item/dildo/AltClick(mob/living/user)
if(QDELETED(src))
return
if(!isliving(user))
return
if(isAI(user))
return
if(user.stat > 0)//unconscious or dead
. = ..()
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
customize(user)
return TRUE
/obj/item/dildo/proc/customize(mob/living/user)
if(!can_customize)
@@ -150,7 +146,8 @@ obj/item/dildo/custom
playsound(loc, 'sound/weapons/gagging.ogg', 50, 1, -1)
user.Stun(150)
user.adjust_blurriness(8)
user.adjust_eye_damage(10)
var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES)
eyes?.applyOrganDamage(10)
return MANUAL_SUICIDE
/obj/item/dildo/flared/huge/suicide_act(mob/living/user)
@@ -159,6 +156,5 @@ obj/item/dildo/custom
playsound(loc, 'sound/weapons/gagging.ogg', 50, 2, -1)
user.Stun(300)
user.adjust_blurriness(8)
user.adjust_eye_damage(15)
return MANUAL_SUICIDE
@@ -91,4 +91,14 @@
category = SLOT_HEAD
path = /obj/item/clothing/head/caphat/formal/fedcover/sec
restricted_desc = "Engineering, Security, and Cargo"
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Warden","Detective","Security Officer","Head of Security","Cargo Technician", "Shaft Miner", "Quartermaster")
/datum/gear/santahatr
name = "Red Santa Hat"
category = SLOT_HEAD
path = /obj/item/clothing/head/christmashat
/datum/gear/santahatg
name = "Green Santa Hat"
category = SLOT_HEAD
path = /obj/item/clothing/head/christmashatg
@@ -56,4 +56,19 @@
/datum/gear/bluecuffs
name = "Blue leg wraps"
category = SLOT_SHOES
path= /obj/item/clothing/shoes/wraps/blue
path= /obj/item/clothing/shoes/wraps/blue
/datum/gear/christmasbootsr
name = "Red Christmas Boots"
category = SLOT_SHOES
path= /obj/item/clothing/shoes/winterboots/christmasbootsr
/datum/gear/christmasbootsg
name = "Green Christmas Boots"
category = SLOT_SHOES
path= /obj/item/clothing/shoes/winterboots/christmasbootsg
/datum/gear/santaboots
name = "Santa Boots"
category = SLOT_SHOES
path= /obj/item/clothing/shoes/winterboots/santaboots
@@ -204,3 +204,18 @@
path = /obj/item/clothing/suit/storage/fluff/modernfedcoat/eng
restricted_desc = "Engineering and Cargo"
restricted_roles = list("Chief Engineer","Atmospheric Technician","Station Engineer","Cargo Technician", "Shaft Miner", "Quartermaster")
/datum/gear/christmascoatr
name = "Red Christmas Coat"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatr
/datum/gear/christmascoatg
name = "Green Christmas Coat"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatg
/datum/gear/christmascoatrg
name = "Red and Green Christmas Coat"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/hooded/wintercoat/christmascoatrg
@@ -330,6 +330,27 @@
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/gear_harness
//Christmas
/datum/gear/christmasmaler
name = "Red Masculine Christmas Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/christmas/christmasmaler
/datum/gear/christmasmaleg
name = "Green Masculine Christmas Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/christmas/christmasmaleg
/datum/gear/christmasfemaler
name = "Red Feminine Christmas Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/christmas/christmasfemaler
/datum/gear/christmasfemaleg
name = "Green Feminine Christmas Suit"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/christmas/christmasfemaleg
/datum/gear/pinkstripper
name = "Pink stripper outfit"
category = SLOT_W_UNIFORM
@@ -56,7 +56,7 @@
add_overlay(tertiary_overlay)
/obj/item/clothing/AltClick(mob/living/user)
..()
. = ..()
if(hasprimary | hassecondary | hastertiary)
var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays
switch(choice) //Lets the list's options actually lead to something
@@ -78,6 +78,7 @@
tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1)
update_icon()
user.regenerate_icons()
return TRUE
/obj/item/clothing/examine(mob/user)
. = ..()
@@ -1,29 +0,0 @@
/obj/item/reagent_containers/food/snacks/carpmeat/aquatic
name = "fillet"
desc = "A fillet of one of the local water dwelling species."
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
icon = 'modular_citadel/icons/obj/foods.dmi'
icon_state = "ipcmeat"
desc = "Gross robot meat."
filling_color = "#000000"
tastes = list("metal" = 1)
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
desc = "Tastes like chicken, that's... not what it is!"
icon = 'modular_citadel/icons/obj/foods.dmi'
icon_state = "mothmeat"
filling_color = "#BF896B"
tastes = list("insects" = 1)
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/avian
desc = "Tastes like chicken, that's because it is!"
icon = 'modular_citadel/icons/obj/foods.dmi'
icon_state = "birdmeat"
filling_color = "#BF896B"
tastes = list("chicken" = 1)
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/mammal
desc = "Tastes sweet... reminds you vaguely of chicken."
filling_color = "#6B8E23"
tastes = list("brains" = 1, "meat" = 1)
@@ -1,76 +0,0 @@
/obj/item/robot_module/loader
name = "loader robot module"
/obj/item/robot_module/loader/New()
..()
emag = new /obj/item/borg/stun(src)
modules += new /obj/item/extinguisher(src)
modules += new /obj/item/weldingtool/largetank/cyborg(src)
modules += new /obj/item/screwdriver(src)
modules += new /obj/item/wrench(src)
modules += new /obj/item/crowbar(src)
modules += new /obj/item/wirecutters(src)
modules += new /obj/item/multitool(src)
modules += new /obj/item/t_scanner(src)
modules += new /obj/item/analyzer(src)
modules += new /obj/item/assembly/signaler
modules += new /obj/item/soap/nanotrasen(src)
fix_modules()
/obj/item/robot_module/k9
name = "Security K-9 Unit module"
/obj/item/robot_module/k9/New()
..()
modules += new /obj/item/restraints/handcuffs/cable/zipties/cyborg/dog(src)
modules += new /obj/item/dogborg/jaws/big(src)
modules += new /obj/item/dogborg/pounce(src)
modules += new /obj/item/clothing/mask/gas/sechailer/cyborg(src)
modules += new /obj/item/soap/tongue(src)
modules += new /obj/item/analyzer/nose(src)
modules += new /obj/item/storage/bag/borgdelivery(src)
//modules += new /obj/item/assembly/signaler(src)
//modules += new /obj/item/detective_scanner(src)
modules += new /obj/item/gun/energy/disabler/cyborg(src)
emag = new /obj/item/gun/energy/laser/cyborg(src)
fix_modules()
/obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
var/obj/item/gun/energy/gun/advtaser/cyborg/T = locate(/obj/item/gun/energy/gun/advtaser/cyborg) in get_usable_modules()
if(T)
if(T.power_supply.charge < T.power_supply.maxcharge)
var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select]
T.power_supply.give(S.e_cost * coeff)
T.update_icon()
else
T.charge_tick = 0
fix_modules()
/obj/item/robot_module/borgi
name = "Borgi module"
/obj/item/robot_module/borgi/New()
..()
modules += new /obj/item/dogborg/jaws/small(src)
modules += new /obj/item/storage/bag/borgdelivery(src)
modules += new /obj/item/soap/tongue(src)
modules += new /obj/item/healthanalyzer(src)
modules += new /obj/item/analyzer/nose(src)
emag = new /obj/item/dogborg/pounce(src)
fix_modules()
/obj/item/robot_module/medihound
name = "MediHound module"
/obj/item/robot_module/medihound/New()
..()
modules += new /obj/item/dogborg/jaws/small(src)
modules += new /obj/item/storage/bag/borgdelivery(src)
modules += new /obj/item/analyzer/nose(src)
modules += new /obj/item/soap/tongue(src)
modules += new /obj/item/healthanalyzer(src)
modules += new /obj/item/dogborg/sleeper(src)
modules += new /obj/item/twohanded/shockpaddles/hound(src)
modules += new /obj/item/sensor_device(src)
emag = new /obj/item/dogborg/pounce(src)
fix_modules()
@@ -162,9 +162,6 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
to_chat(user, "<span class='alert'>[GLOB.meta_gas_names[id]]: [round(gas_concentration*100, 0.01)] %</span>")
to_chat(user, "<span class='info'>Temperature: [round(environment.temperature-T0C)] &deg;C</span>")
/obj/item/analyzer/nose/AltClick(mob/user) //Barometer output for measuring when the next storm happens
. = ..()
/obj/item/analyzer/nose/afterattack(atom/target, mob/user, proximity)
. = ..()
if(!proximity)
@@ -356,15 +353,6 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
icon = 'icons/mob/dogborg.dmi'
icon_state= "kibble"
//Defibs
/obj/item/twohanded/shockpaddles/cyborg/hound
name = "Paws of Life"
desc = "MediHound specific shock paws."
icon = 'icons/mob/dogborg.dmi'
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
// Pounce stuff for K-9
/obj/item/dogborg/pounce
@@ -14,7 +14,7 @@
. += speed
/mob/living/silicon/robot/proc/togglesprint(shutdown = FALSE) //Basically a copypaste of the proc from /mob/living/carbon/human
if(!shutdown && (!cell || cell.charge < 25))
if(!shutdown && (!cell || cell.charge < 25) || !cansprint)
return FALSE
sprinting = shutdown ? FALSE : !sprinting
if(!resting && canmove)
-27
View File
@@ -1,27 +0,0 @@
/mob/proc/use_that_empty_hand() //currently unused proc so i can implement 2-handing any item a lot easier in the future.
return
/mob/say_mod(input, message_mode)
var/customsayverb = findtext(input, "*")
if(customsayverb && message_mode != MODE_WHISPER_CRIT)
message_mode = MODE_CUSTOM_SAY
return lowertext(copytext(input, 1, customsayverb))
else
return ..()
/atom/movable/proc/attach_spans(input, list/spans)
var/customsayverb = findtext(input, "*")
if(customsayverb)
input = capitalize(copytext(input, customsayverb+1))
if(input)
return "[message_spans_start(spans)][input]</span>"
else
return
/mob/living/compose_message(atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode, face_name = FALSE)
. = ..()
if(istype(speaker, /mob/living))
var/turf/speakturf = get_turf(speaker)
var/turf/sourceturf = get_turf(src)
if(istype(speakturf) && istype(sourceturf) && !(speakturf in get_hear(5, sourceturf)))
. = "<citspan class='small'>[.]</citspan>" //Don't ask how the fuck this works. It just does.
@@ -207,8 +207,10 @@
var/mob/M = loc
M.update_inv_hands()
/obj/item/gun/ballistic/automatic/AM4B/AltClick(mob/living/user)
. = ..()
if(!in_range(src, user)) //Basic checks to prevent abuse
return
. = TRUE
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
@@ -217,6 +219,7 @@
if(body_color_input)
body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
update_icon()
/obj/item/gun/ballistic/automatic/AM4B/examine(mob/user)
. = ..()
. += "<span class='notice'>Alt-click to recolor it.</span>"
@@ -30,8 +30,10 @@ obj/item/gun/energy/e_gun/cx/update_icon()
M.update_inv_hands()
obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user)
. = ..()
if(!in_range(src, user)) //Basic checks to prevent abuse
return
. = TRUE
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
@@ -83,15 +83,17 @@
return 1
/obj/item/gun/energy/pumpaction/AltClick(mob/living/user) //for changing firing modes since attackself is already used for pumping
. = ..()
if(!in_range(src, user)) //Basic checks to prevent abuse
return
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(ammo_type.len > 1)
select_fire(user)
update_icon()
if(user.incapacitated() || !istype(user))
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
else
select_fire(user)
update_icon()
return TRUE
/obj/item/gun/energy/pumpaction/examine(mob/user) //so people don't ask HOW TO CHANGE FIRING MODE
. = ..()
@@ -183,7 +185,6 @@
name = "particle blast"
damage = 13
icon_state = "disablerpellet"
icon = 'modular_citadel/icons/obj/projectiles.dmi'
/obj/item/projectile/beam/disabler/slug
name = "positron blast"
@@ -191,12 +192,10 @@
range = 14
speed = 0.6
icon_state = "disablerslug"
icon = 'modular_citadel/icons/obj/projectiles.dmi'
/obj/item/projectile/energy/electrode/pump
name = "electron blast"
icon_state = "stunjectile"
icon = 'modular_citadel/icons/obj/projectiles.dmi'
color = null
nodamage = 1
knockdown = 100
@@ -56,18 +56,17 @@
var/mob/living/carbon/human/H = M
var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS)
//If they have Acute hepatic pharmacokinesis, then route processing though liver.
if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused)
var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
if(L)
L.swelling += 0.05
else
H.adjustToxLoss(1)
return..()
//otherwise proceed as normal
if(!B) //If they don't have breasts, give them breasts.
//If they have Acute hepatic pharmacokinesis, then route processing though liver.
if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused)
var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
if(L)
L.swelling += 0.05
else
H.adjustToxLoss(1)
return..()
//otherwise proceed as normal
B = new
if(H.dna.species.use_skintones && H.dna.features["genitals_use_skintone"])
B.color = skintone2hex(H.skin_tone)
@@ -222,18 +221,17 @@
return ..()
var/mob/living/carbon/human/H = M
var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS)
//If they have Acute hepatic pharmacokinesis, then route processing though liver.
if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused)
var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
if(L)
L.swelling += 0.05
else
H.adjustToxLoss(1)
return ..()
//otherwise proceed as normal
if(!P)//They do have a preponderance for escapism, or so I've heard.
//If they have Acute hepatic pharmacokinesis, then route processing though liver.
if(HAS_TRAIT(H, TRAIT_PHARMA) || !H.canbearoused)
var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
if(L)
L.swelling += 0.05
else
H.adjustToxLoss(1)
return ..()
//otherwise proceed as normal
P = new
P.length = 1
to_chat(H, "<span class='warning'>Your groin feels warm, as you feel a newly forming bulge down below.</b></span>")
@@ -14,7 +14,7 @@
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
if(!istype(T))
return
if(reac_volume < 3)
if(reac_volume < 10)
return
var/obj/effect/decal/cleanable/semen/S = locate() in T
@@ -80,7 +80,7 @@
/datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume)
if(!istype(T))
return
if(reac_volume < 3)
if(reac_volume < 10)
return
var/obj/effect/decal/cleanable/femcum/S = locate() in T