Merge branch 'master' into plant-adding

This commit is contained in:
DragonTrance
2021-02-21 12:06:48 -07:00
committed by GitHub
246 changed files with 4270 additions and 3557 deletions
@@ -473,12 +473,27 @@
for(var/obj/item/organ/genital/G in internal_organs)
if(G.can_masturbate_with) //filter out what you can't masturbate with
if(G.is_exposed(worn_stuff)) //Nude or through_clothing
genitals_list += G
if(!G.dontlist)
genitals_list += G
if(genitals_list.len)
ret_organ = input(src, "with what?", "Masturbate", null) as null|obj in genitals_list
return ret_organ
return null //error stuff
/mob/living/carbon/human/proc/target_genitals(mob/living/carbon/human/T) //used for targeting others
var/obj/item/organ/genital/ret_organ
var/list/genitals_list = list()
var/list/worn_stuff = get_equipped_items()
for(var/obj/item/organ/genital/G in T.internal_organs)
if(G.can_climax) //filter out what you can't masturbate with
if(G.is_exposed(worn_stuff)) //Nude or through_clothing
if(!G.dontlist)
genitals_list += G
if(genitals_list.len)
ret_organ = input(src, "", "Gentials", null) as null|obj in genitals_list
return ret_organ
return null //error stuff
/mob/living/carbon/human/proc/pick_climax_genitals()
var/obj/item/organ/genital/ret_organ
@@ -488,7 +503,8 @@
for(var/obj/item/organ/genital/G in internal_organs)
if(G.can_climax) //filter out what you can't masturbate with
if(G.is_exposed(worn_stuff)) //Nude or through_clothing
genitals_list += G
if(!G.dontlist)
genitals_list += G
if(genitals_list.len)
ret_organ = input(src, "with what?", "Climax", null) as null|obj in genitals_list
return ret_organ
@@ -1,21 +1,19 @@
/obj/item/organ/genital/belly //I know, I know a belly aint a genital. but it is in the sake of code.
name = "belly"
desc = "a belly."
desc = "You see a belly on their midsection."
icon_state = "belly"
icon = 'modular_citadel/icons/obj/genitals/breasts.dmi'
zone = "chest"
slot = "belly"
w_class = 3
size = 1
var/breast_values = list ("a" = 1, "b" = 2, "c" = 3, "d" = 4, "e" = 5, "f" = 6, "g" = 7, "h" = 8, "i" = 9, "j" = 10, "k" = 11, "l" = 12, "m" = 13, "n" = 14, "o" = 15, "huge" = 16, "massive" = 17, "giga" = 25, "impossible" = 30, "flat" = 0) // Note: Do not forget to define new sizes.
var/statuscheck = FALSE
shape = "Pair"
can_masturbate_with = TRUE
masturbation_verb = "massage"
can_climax = TRUE
fluid_transfer_factor = 0.5
can_climax = FALSE
var/sent_full_message = TRUE //defaults to 1 since they're full to start
/obj/item/organ/genital/belly/on_life()
if(QDELETED(src))
return
@@ -26,7 +24,7 @@
var/string
if(owner)
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
if(ishuman(owner)) .
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
color = "#[skintone2hex(H.skin_tone)]"
else
@@ -12,3 +12,4 @@
var/cum_rate = CUM_RATE
var/cum_efficiency = CUM_EFFICIENCY
var/obj/item/organ/ovipositor/linked_ovi
dontlist = TRUE
@@ -23,6 +23,8 @@
var/hidden = FALSE
var/colourtint = ""
var/mode = "clothes"
var/obj/item/equipment //for fun stuff that goes on the gentials/maybe rings down the line
var/dontlist = FALSE
/obj/item/organ/genital/Initialize()
. = ..()
@@ -229,6 +231,11 @@
B.color = "#[dna.features["belly_color"]]"
B.update()
if(dna.features["hide_belly"]) //autohide bellies if they have the option ticked.
B.toggle_visibility("Always hidden")
/mob/living/carbon/human/proc/give_breasts()
if(!dna)
return FALSE
@@ -422,9 +429,9 @@
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]"
colourcode = S.color_src
if(G.slot == "belly")
if(G.slot == "belly") //we have a different size system to the rest of the genitals
genital_overlay.icon = 'hyperstation/icons/obj/genitals/belly.dmi'
genital_overlay.icon_state = "belly"
genital_overlay.icon_state = "belly_[size]"
colourcode = "belly_color"
@@ -433,7 +440,6 @@
if(use_skintones && H.dna.features["genitals_use_skintone"])
genital_overlay.color = "#[skintone2hex(H.skin_tone)]"
// genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]-s_[aroused_state]_[layertext]"
if (colourtint)
genital_overlay.color = "#[colourtint]"
else
@@ -14,3 +14,4 @@
var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF
var/list/oviflags = list()
var/obj/item/organ/eggsack/linked_eggsack
dontlist = TRUE
@@ -44,21 +44,26 @@
size = 2
if(owner.has_status_effect(/datum/status_effect/chem/penis_enlarger))
o.remove_status_effect(/datum/status_effect/chem/penis_enlarger)
if(11 to 20) //If massive
if(11 to 18) //If massive
length = cached_length
size = 3
if(owner.has_status_effect(/datum/status_effect/chem/penis_enlarger))
o.remove_status_effect(/datum/status_effect/chem/penis_enlarger)
if(21 to 28) //If massive and due for large effects
if(18 to 26) //If massive and due for large effects
length = cached_length
size = 3
if(!owner.has_status_effect(/datum/status_effect/chem/penis_enlarger))
o.apply_status_effect(/datum/status_effect/chem/penis_enlarger)
if(28 to INFINITY) //If comical
if(26 to 34) //If hyper
length = cached_length
size = 4 //no new sprites for anything larger yet
if(!owner.has_status_effect(/datum/status_effect/chem/penis_enlarger))
o.apply_status_effect(/datum/status_effect/chem/penis_enlarger)
if(34 to INFINITY) //If extreme-hyper
length = cached_length
size = 5 //no new sprites for anything larger yet
if(!owner.has_status_effect(/datum/status_effect/chem/penis_enlarger))
o.apply_status_effect(/datum/status_effect/chem/penis_enlarger)
if (round(length) > round(prev_length))
to_chat(o, "<span class='warning'>Your [pick(GLOB.gentlemans_organ_names)] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [uppertext(round(length))] inch penis.</b></span>")
@@ -21,6 +21,7 @@
var/sent_full_message = TRUE //defaults to 1 since they're full to start
/obj/item/organ/genital/testicles/on_life()
if(QDELETED(src))
return
@@ -9,6 +9,7 @@
fluid_id = /datum/reagent/consumable/femcum
producing = TRUE
var/pregnant = FALSE //this is for pregnancy code
dontlist = TRUE
/obj/item/organ/genital/womb/on_life()
@@ -93,7 +93,7 @@
path = /obj/item/storage/pill_bottle/heat
ckeywhitelist = list("natak")
/datum/gear/natak
/datum/gear/crystalshard
name = "Crystalline Shards"
category = SLOT_IN_BACKPACK
path = /obj/item/clothing/head/crystalline
@@ -105,3 +105,28 @@
path = /obj/item/toy/plush/mammal/lyricalpaws
ckeywhitelist = list("lyricalpaws")
/datum/gear/cherostavikmask
name = "Keaton Mask"
category = SLOT_IN_BACKPACK
path = /obj/item/clothing/mask/keaton
ckeywhitelist = list("cherostavik")
//if this works then ckey has to be all lowercase.
//Second change maybe it has to do with underscore's (_) as well. Also fuck you it doesn't want to appear in suit/uniform it's going in backpack
/datum/gear/enzo_leonplushie
name = "Enzo Leon Plushie"
category = SLOT_IN_BACKPACK
path = /obj/item/toy/plush/mammal/enzo_leon
ckeywhitelist = list("enzoleon")
/datum/gear/enzo_leonshirt
name = "Altevain Standard-Issue Uniform"
category = SLOT_IN_BACKPACK
path = /obj/item/clothing/under/enzoshirt
ckeywhitelist = list("enzoleon")
/datum/gear/enzo_leonjacket
name = "Altevain Colony-Ship Command Jacket"
category = SLOT_IN_BACKPACK
path = /obj/item/clothing/suit/toggle/enzojacket
ckeywhitelist = list("enzoleon")
@@ -1,41 +1,41 @@
/datum/gear/navyblueuniformhos
name = "Head of Security navyblue uniform"
name = "Head of Security's navyblue uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/head_of_security/navyblue
restricted_roles = list("Head of Security")
/datum/gear/navybluehosberet
name = "Head of security's Naviblue beret"
name = "Head of Security's navyblue beret"
category = SLOT_HEAD
path = /obj/item/clothing/head/beret/sec/navyhos
restricted_roles = list("Head of Security")
/datum/gear/navybluejackethos
name = "head of security's navyblue jacket"
name = "Head of Security's navyblue jacket"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/security/hos
restricted_roles = list("Head of Security")
/datum/gear/navybluejacketofficer
name = "security officer's navyblue jacket"
name = "Security Officer's navyblue jacket"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/security/officer
restricted_roles = list("Security Officer")
/datum/gear/navyblueofficerberet
name = "Security officer's Navyblue beret"
name = "Security Officer's navyblue beret"
category = SLOT_HEAD
path = /obj/item/clothing/head/beret/sec/navyofficer
restricted_roles = list("Security Officer")
/datum/gear/navyblueuniformofficer
name = "Security officer navyblue uniform"
name = "Security Officer's navyblue uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/security/navyblue
restricted_roles = list("Security Officer")
/datum/gear/navybluejacketwarden
name = "warden navyblue jacket"
name = "Warden's navyblue jacket"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/security/warden
restricted_roles = list("Warden")
@@ -47,7 +47,7 @@
restricted_roles = list("Warden")
/datum/gear/navyblueuniformwarden
name = "Warden navyblue uniform"
name = "Warden's navyblue uniform"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/warden/navyblue
restricted_roles = list("Warden")
@@ -59,13 +59,13 @@
restricted_roles = list("Security Officer", "Warden", "Head of Security")
/datum/gear/hosskirt
name = "Head of security's skirt"
name = "Head of Security's skirt"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/rank/head_of_security/skirt
restricted_roles = list("Head of Security")
/datum/gear/sechud
name = "Security Hud"
name = "Security HUD"
category = SLOT_GLASSES
path = /obj/item/clothing/glasses/hud/security
restricted_roles = list("Security Officer", "Warden", "Head of Security")
@@ -213,3 +213,8 @@
name = "Black Suit Jacket"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/toggle/lawyer/black
/datum/gear/nemes
name = "Pharoah tunic"
category = SLOT_WEAR_SUIT
path = /obj/item/clothing/suit/nemes
@@ -49,6 +49,7 @@
path = /obj/item/clothing/under/lawyer/galaxy_blue
cost = 3
/datum/gear/galaxy_r
name = "Pulsar Gonne"
category = SLOT_W_UNIFORM
@@ -193,7 +194,7 @@
// Pantsless Sweaters
/datum/gear/turtleneck
name = "Tactitool Turtleneck"
name = "Tactifool Turtleneck"
category = SLOT_W_UNIFORM
path = /obj/item/clothing/under/syndicate/cosmetic
@@ -89,6 +89,7 @@
//belly
WRITE_FILE(S["feature_has_belly"], features["has_belly"])
WRITE_FILE(S["feature_belly_color"], features["belly_color"])
WRITE_FILE(S["feature_hide_belly"], features["hide_belly"])
//gear loadout
if(islist(chosen_gear))
@@ -23,7 +23,7 @@
new /obj/item/clothing/under/rank/chief_medical_officer/turtleneck(src)
/obj/item/clothing/under/syndicate/cosmetic
name = "tactitool turtleneck"
name = "tactifool turtleneck"
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
@@ -32,9 +32,6 @@
mutantrace_variation = NO_MUTANTRACE_VARIATION
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
/obj/item/clothing/under/syndicate/tacticool
has_sensor = TRUE
// Sweaters are good enough for this category too.
/obj/item/clothing/under/bb_sweater
@@ -876,6 +876,10 @@ datum/sprite_accessory/ears/human/gret
name = "Otie"
icon_state = "otie"
/datum/sprite_accessory/mam_snouts/orca
name = "Orca"
icon_state = "orca"
/datum/sprite_accessory/mam_snouts/pede
name = "Scolipede"
icon_state = "pede"
@@ -984,6 +988,36 @@ datum/sprite_accessory/ears/human/gret
name = "Synthetic Lizard Barless Alt - Snout Tertiary Under"
icon_state = "synthlizbarlessalt_tertunder"
/datum/sprite_accessory/mam_snouts/synthliz/synthlizaxon
color_src = MATRIXED
name = "Synthetic Lizard - AXON"
icon_state = "synthlizaxon"
/datum/sprite_accessory/mam_snouts/synthliz/synthlizaxon_alt
color_src = MATRIXED
name = "Synthetic Lizard - AXON Alt"
icon_state = "synthlizaxon_alt"
/datum/sprite_accessory/mam_snouts/synthliz/synthlizaxon_tert
color_src = MATRIXED
name = "Synthetic Lizard - AXON Tertiary"
icon_state = "synthlizaxon_tert"
/datum/sprite_accessory/mam_snouts/synthliz/synthlizproto1
color_src = MATRIXED
name = "Synthetic Lizard - Prototype Visor 1"
icon_state = "synthlizproto1"
/datum/sprite_accessory/mam_snouts/synthliz/synthlizproto2
color_src = MATRIXED
name = "Synthetic Lizard - Prototype Visor 2"
icon_state = "synthlizproto2"
/datum/sprite_accessory/mam_snouts/synthliz/synthlizspectre
color_src = MATRIXED
name = "Synthetic Lizard - Spectre"
icon_state = "synthlizspectre"
/******************************************
**************** Snouts *******************
*************but higher up*****************/
@@ -1166,7 +1200,6 @@ datum/sprite_accessory/ears/human/gret
icon_state = "gret"
color_src = MUTCOLORS3
/datum/sprite_accessory/mam_ears/elephant
name = "Elephant"
icon_state = "elephant"
@@ -1183,6 +1216,10 @@ datum/sprite_accessory/ears/human/gret
name = "Fox"
icon_state = "fox"
/datum/sprite_accessory/mam_ears/goathorns
name = "Goat Horns"
icon_state = "goathorns"
/datum/sprite_accessory/mam_ears/husky
name = "Husky"
icon_state = "wolf"
@@ -1537,6 +1574,18 @@ datum/sprite_accessory/mam_tails/insect
name = "Redpanda"
icon_state = "redpanda"
/datum/sprite_accessory/mam_body_markings/abs
name = "Abdominals"
icon_state = "abs"
/datum/sprite_accessory/mam_body_markings/abstwo
name = "Abdominals Two-Tones"
icon_state = "absbelly"
/datum/sprite_accessory/mam_body_markings/absthree
name = "Abdominals Three-Tones"
icon_state = "absarms"
/datum/sprite_accessory/mam_body_markings/bee
name = "Bee"
icon_state = "bee"
@@ -2148,6 +2197,21 @@ datum/sprite_accessory/mam_tails/insect
name = "Synthetic Lizard - Antennae Plate"
icon_state = "synth_antennaeover"
/datum/sprite_accessory/antenna/synthliz/synthliz_integrator
color_src = MATRIXED
name = "Synthetic Lizard - Integrator Horns"
icon_state = "synth_integrator"
/datum/sprite_accessory/antenna/synthliz/synthliz_antennaquad
color_src = MATRIXED
name = "Synthetic Lizard - Quad Antennae"
icon_state = "synth_antennaquad"
/datum/sprite_accessory/antenna/synthliz/synthliz_cobrahood
color_src = MATRIXED
name = "Synthetic Lizard - Cobra Hood"
icon_state = "synth_cobrahood"
// *** Snooooow flaaaaake ***
/datum/sprite_accessory/horns/guilmon
@@ -201,7 +201,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
. = ..()
if(purity < 0.5)//DO NOT SPLIT INTO DIFFERENT CHEM: This relies on DoNotSplit - has to be done this way.
if(volume < 0.5)//You don't get to escape that easily
FallInLove(pick(GLOB.player_list), M)
//FallInLove(pick(GLOB.player_list), M) //goodbye
M.reagents.remove_reagent(type, volume)
if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them.
@@ -286,6 +286,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
M.adjustCloneLoss(-2, 0)
M.setOrganLoss(ORGAN_SLOT_BRAIN, -1)
M.nutrition += 10
M.thirst += 10
..()
//Unobtainable, used if SDGF is impure but not too impure
@@ -12,6 +12,7 @@
glass_icon_state = "semen"
glass_name = "chalice of semen"
glass_desc = "In the Sumerian mythology, Enki - the God of water, was believed to have created the Tigris and Euphrates rivers by masturbating and ejaculating into their empty riverbeds."
hydration = 2 * REAGENTS_METABOLISM //thats one way to stay hydrated...
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
if(!istype(T))
@@ -55,6 +56,7 @@
color = "#AAAAAA77"
can_synth = FALSE
nutriment_factor = 0.5 * REAGENTS_METABOLISM
hydration = 1 * REAGENTS_METABOLISM //thats one way to stay hydrated...
/obj/effect/decal/cleanable/femcum
name = "female ejaculate"