Merge branch 'master' into Kristopher-Uniform-Patreon

This commit is contained in:
QuoteFox
2021-04-27 19:28:13 +01:00
committed by GitHub
148 changed files with 6694 additions and 5936 deletions
@@ -1,39 +1,32 @@
/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M, backpackstuffs)
/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M)
var/mob/the_mob = N
if(!the_mob)
the_mob = M // cause this doesn't get assigned if player is a latejoiner
if(the_mob.client && the_mob.client.prefs && (the_mob.client.prefs.chosen_gear && the_mob.client.prefs.chosen_gear.len))
if(the_mob.client.prefs)
if(!ishuman(M))//no silicons allowed
return
for(var/i in the_mob.client.prefs.chosen_gear)
var/list/queued_to_equip = list() //Items that will equip onto the player
. = list() //Items that will be stored into the player's backpack, handled by EquipRank()
for(var/i in the_mob.client.prefs.chosen_gear) //Prepare the player's loadout gear
var/datum/gear/G = i
G = GLOB.loadout_items[slot_to_string(initial(G.category))][initial(G.name)]
if(!G)
continue
if(G.restricted_roles && G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles))
continue
if(G.ckeywhitelist && G.ckeywhitelist.len && !(the_mob.client.ckey in G.ckeywhitelist))
continue
if(G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles))
continue //If the player can't equip this because they lack the required job
if(G.ckeywhitelist.len && !(the_mob.client.ckey in G.ckeywhitelist))
continue //And you may ask yourself, "Well... How did I get here?"
if(G.category == SLOT_IN_BACKPACK || G.blacklist_join_equip)
. += new G.path
else
queued_to_equip += G
for(var/datum/gear/G in queued_to_equip)
var/obj/item/I = new G.path
if(iscarbon(M) && backpackstuffs && (G.category == SLOT_IN_BACKPACK || G.blacklist_join_equip))
var/mob/living/carbon/C = M
var/obj/item/storage/backpack/B = C.back
if(!B || !SEND_SIGNAL(B, COMSIG_TRY_STORAGE_INSERT, I, null, TRUE, TRUE))
I.forceMove(get_turf(C))
continue
else if(G.blacklist_join_equip) //Assume we're gonna be put in a backpack and not equipped
continue
else if(backpackstuffs && G.category != SLOT_IN_BACKPACK)
continue
if(!M.equip_to_slot_if_possible(I, G.category, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first
if(iscarbon(M))
var/mob/living/carbon/C = M
var/obj/item/storage/backpack/B = C.back
if(!B || !SEND_SIGNAL(B, COMSIG_TRY_STORAGE_INSERT, I, null, TRUE, TRUE)) // Otherwise, try to put it in the backpack, for carbons.
I.forceMove(get_turf(C))
else if(!M.equip_to_slot_if_possible(I, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // Otherwise, try to put it in the backpack
I.forceMove(get_turf(M)) // If everything fails, just put it on the floor under the mob.
if(!M.equip_to_slot_if_possible(I, G.category, disable_warning = TRUE, bypass_equip_delay_self = TRUE))
. += I //If the player's unable to equip the item, queue it for storage
/datum/controller/subsystem/job/proc/FreeRole(rank)
if(!rank)
@@ -105,7 +105,7 @@
o.add_movespeed_modifier(BREAST_MOVEMENT_SPEED, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc)
sizeMoveMod(moveCalc)
*/
if((B.cached_size) < 40)
if((B?.cached_size) < 40)
..()
/*
+2 -30
View File
@@ -65,6 +65,8 @@
/obj/item/clothing/under/jabroni = 3,
/obj/item/electropack/vibrator/small = 2,
/obj/item/electropack/vibrator = 2,
/obj/item/fleshlight = 2,
/obj/item/storage/box/portallight = 1,
)
contraband = list(
/obj/item/clothing/under/gear_harness = 3,
@@ -87,32 +89,6 @@
refill_canister = /obj/item/vending_refill/kink
baseprice = 2
/*
/obj/machinery/vending/nazivend
name = "Nazivend"
desc = "A vending machine containing Nazi German supplies. A label reads: \"Remember the gorrilions lost.\""
icon = 'icons/obj/citvending.dmi'
icon_state = "nazi"
vend_reply = "SIEG HEIL!"
product_slogans = "Das Vierte Reich wird zuruckkehren!;ENTFERNEN JUDEN!;Billiger als die Juden jemals geben!;Rader auf dem adminbus geht rund und rund.;Warten Sie, warum wir wieder hassen Juden?- *BZZT*"
products = list(
/obj/item/clothing/head/stalhelm = 20,
/obj/item/clothing/head/panzer = 20,
/obj/item/clothing/suit/soldiercoat = 20,
// /obj/item/clothing/under/soldieruniform = 20,
/obj/item/clothing/shoes/jackboots = 20
)
contraband = list(
/obj/item/clothing/head/naziofficer = 10,
// /obj/item/clothing/suit/officercoat = 10,
// /obj/item/clothing/under/officeruniform = 10,
/obj/item/clothing/suit/space/hardsuit/nazi = 3,
/obj/item/gun/energy/plasma/MP40k = 4
)
premium = list()
refill_canister = /obj/item/vending_refill/nazi
*/
/obj/machinery/vending/sovietvend
name = "KomradeVendtink"
desc = "Rodina-mat' zovyot!"
@@ -152,10 +128,6 @@
icon = 'modular_citadel/icons/vending_restock.dmi'
icon_state = "refill_kink"
/obj/item/vending_refill/nazi
machine_name = "nazivend"
icon_state = "refill_nazi"
/obj/item/vending_refill/soviet
machine_name = "sovietvend"
icon_state = "refill_soviet"
+26 -17
View File
@@ -321,7 +321,7 @@
setArousalLoss(min_arousal)
/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, impreg = FALSE,cover = FALSE, mb_time = 30) //Used for climaxing with any living thing
/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, impreg = FALSE,cover = FALSE,remote = FALSE, mb_time = 30) //Used for climaxing with any living thing
var/total_fluids = 0
var/datum/reagents/fluid_source = null
@@ -334,10 +334,14 @@
fluid_source = G.linked_organ.reagents
total_fluids = fluid_source.total_volume
if(mb_time) //Skip warning if this is an instant climax.
if(mb_time && !remote) //Skip warning if this is an instant climax.
src.visible_message("<span class='love'>[src] is about to climax with [L]!</span>", \
"<span class='userlove'>You're about to climax with [L]!</span>", \
"<span class='userlove'>You're preparing to climax with something!</span>")
if(remote)
src.visible_message("<span class='love'>[src] is about to climax with someone!</span>", \
"<span class='userlove'>You're about to climax with someone!</span>", \
"<span class='userlove'>You're preparing to climax with something!</span>")
if(cover)//covering the partner in cum, this overrides other options.
if(do_after(src, mb_time, target = src) && in_range(src, L))
@@ -369,7 +373,9 @@
setArousalLoss(min_arousal)
if(spillage && !cover)
if(do_after(src, mb_time, target = src) && in_range(src, L))
if(do_after(src, mb_time, target = src))
if(!in_range(src, L) && !remote)
return
fluid_source.trans_to(L, total_fluids*G.fluid_transfer_factor)
total_fluids -= total_fluids*G.fluid_transfer_factor
if(total_fluids > 5)
@@ -411,19 +417,21 @@
if(impreg)
//Role them odds, only people with the dicks can send the chance to the person with the settings enabled at the momment.
var/obj/item/organ/genital/womb/W = L.getorganslot("womb")
if (L.breedable == 1 && W.pregnant == 0) //Dont get pregnant again, if you are pregnant.
log_game("Debug: [L] has been impregnated by [src]")
to_chat(L, "<span class='userlove'>You feel your hormones change, and a motherly instinct take over.</span>") //leting them know magic has happened.
W.pregnant = 1
if (HAS_TRAIT(L, TRAIT_HEAT))
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "heat", /datum/mood_event/heat) //well done you perv.
REMOVE_TRAIT(L, TRAIT_HEAT, type) //take the heat away, you satisfied it!
if(prob(L.impregchance))
var/obj/item/organ/genital/womb/W = L.getorganslot("womb")
if(W) //check if they have a womb.
if (L.breedable == 1 && W.pregnant == 0) //Dont get pregnant again, if you are pregnant.
log_game("Debug: [L] has been impregnated by [src]")
to_chat(L, "<span class='userlove'>You feel your hormones change, and a motherly instinct take over.</span>") //leting them know magic has happened.
W.pregnant = 1
if (HAS_TRAIT(L, TRAIT_HEAT))
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "heat", /datum/mood_event/heat) //well done you perv.
REMOVE_TRAIT(L, TRAIT_HEAT, type) //take the heat away, you satisfied it!
//Make breasts produce quicker.
var/obj/item/organ/genital/breasts/B = L.getorganslot("breasts")
if (B.fluid_mult < 0.5 && B)
B.fluid_mult = 0.5
//Make breasts produce quicker.
var/obj/item/organ/genital/breasts/B = L.getorganslot("breasts")
if (B.fluid_mult < 0.5 && B)
B.fluid_mult = 0.5
/mob/living/carbon/human/proc/mob_fill_container(obj/item/organ/genital/G, obj/item/reagent_containers/container, mb_time = 30) //For beaker-filling, beware the bartender
@@ -458,9 +466,10 @@
if(do_after(src, mb_time, target = src) && in_range(src, container))
fluid_source.trans_to(container, total_fluids)
src.visible_message("<span class='love'>[src] uses [p_their()] [G.name] to fill [container]!</span>", \
"<span class='userlove'>You used your [G.name] to fill [container].</span>", \
"<span class='userlove'>You used your [G.name] and fill [container] with a total of [total_fluids]u's.</span>", \
"<span class='userlove'>You have relieved some pressure.</span>")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
container.add_cum_overlay() //your aim is bad...
if(G.can_climax)
setArousalLoss(min_arousal)
@@ -491,7 +500,7 @@
if(!G.dontlist)
genitals_list += G
if(genitals_list.len)
ret_organ = input(src, "", "Gentials", null) as null|obj in genitals_list
ret_organ = input(src, "", "Genitals", null) as null|obj in genitals_list
return ret_organ
return null //error stuff
@@ -430,12 +430,12 @@
//otherwise, appear under clothing
if(G.slot == "penis" || G.slot == "testicles")
if(G.size < 3) //is actually "less than 11 inches"
genital_overlay.layer = -GENITALS_UNDER_LAYER
genital_overlay.layer = -GENITALS_UNDER_LAYER
if(G.slot == "breasts")
var/obj/item/organ/genital/breasts/B = G
if(B.cached_size < 8) //anything smaller than a g-cup
genital_overlay.layer = -GENITALS_UNDER_LAYER
//Get the icon
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[aroused_state]_[layertext]"
colourcode = S.color_src
@@ -99,16 +99,23 @@
path = /obj/item/clothing/head/crystalline
ckeywhitelist = list("dragontrance")
/datum/gear/lyricalpawsplush
name = "Winter Dawn Plushie"
category = SLOT_IN_BACKPACK
path = /obj/item/toy/plush/mammal/lyricalpaws
ckeywhitelist = list("lyricalpaws")
/datum/gear/lyricalpawssuit
name = "Fleet Commander's Overcoat"
category = SLOT_IN_BACKPACK
path = /obj/item/clothing/suit/hooded/wintercoat/chloe
path = /obj/item/clothing/suit/chloe
ckeywhitelist = list("lyricalpaws")
/datum/gear/lyricalpawshat
name = "Fleet Commander's Beret"
category = SLOT_IN_BACKPACK
path = /obj/item/clothing/head/chloe
cost = 0
ckeywhitelist = list("lyricalpaws")
datum/gear/darksabresheath
name = "Dark Sabre Sheath"
category = SLOT_IN_BACKPACK
path = /obj/item/storage/belt/sabre/chloesabre
ckeywhitelist = list("lyricalpaws")
/datum/gear/cherostavikmask
@@ -175,12 +175,12 @@
name = "Teal Lipstick"
category = SLOT_IN_BACKPACK
path = /obj/item/lipstick/teal
/datum/gear/lipstick_fuchsia
name = "Fuchsia Lipstick"
category = SLOT_IN_BACKPACK
path = /obj/item/lipstick/fuchsia
/datum/gear/lipstick_navy
name = "Navy Blue Lipstick"
category = SLOT_IN_BACKPACK
@@ -196,6 +196,46 @@
category = SLOT_IN_BACKPACK
path = /obj/item/lipstick/white
/datum/gear/nailpolish_red
name = "Red Nail Polish"
category = SLOT_IN_BACKPACK
path = /obj/item/nailpolish/red
/datum/gear/nailpolish_blue
name = "Blue Nail Polish"
category = SLOT_IN_BACKPACK
path = /obj/item/nailpolish/blue
/datum/gear/nailpolish_aqua
name = "Cyan Nail Polish"
category = SLOT_IN_BACKPACK
path = /obj/item/nailpolish/aqua
/datum/gear/nailpolish_black
name = "Black Nail Polish"
category = SLOT_IN_BACKPACK
path = /obj/item/nailpolish/black
/datum/gear/nailpolish_white
name = "White Nail Polish"
category = SLOT_IN_BACKPACK
path = /obj/item/nailpolish/white
/datum/gear/nailpolish_navy
name = "Navy Nail Polish"
category = SLOT_IN_BACKPACK
path = /obj/item/nailpolish/navy
/datum/gear/nailpolish_yellow
name = "Yellow Nail Polish"
category = SLOT_IN_BACKPACK
path = /obj/item/nailpolish/yellow
/datum/gear/nailpolish_purple
name = "Purple Nail Polish"
category = SLOT_IN_BACKPACK
path = /obj/item/nailpolish/purple
/datum/gear/condom
name = "Condom"
category = SLOT_IN_BACKPACK
@@ -50,8 +50,8 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids)
var/path //item-to-spawn path
var/cost = 1 //normally, each loadout costs a single point.
var/geargroupID //defines the ID that the gear inherits from the config
var/list/restricted_roles
var/list/ckeywhitelist
var/list/restricted_roles = list()
var/list/ckeywhitelist = list()
var/restricted_desc
var/blacklist_join_equip = FALSE //If we don't equip this when we join
@@ -56,7 +56,6 @@
datum/preferences/copy_to(mob/living/carbon/human/character, icon_updates = 1)
..()
character.give_genitals(TRUE)
character.flavor_text = features["flavor_text"] //Let's update their flavor_text at least initially
character.ooc_text = features["ooc_text"] //Let's update their flavor_text at least initially
character.canbearoused = arousable
character.client?.prefs.lewdchem = lewdchem
@@ -85,6 +85,7 @@
WRITE_FILE(S["feature_can_get_preg"], features["can_get_preg"])
//flavor text
WRITE_FILE(S["feature_flavor_text"], features["flavor_text"])
WRITE_FILE(S["feature_silicon_flavor_text"], features["silicon_flavor_text"])
WRITE_FILE(S["feature_ooc_text"], features["ooc_text"])
//custom job titles
WRITE_FILE(S["alt_titles_preferences"], alt_titles_preferences)
@@ -1558,6 +1558,14 @@ datum/sprite_accessory/mam_tails/insect
name = "Wolf"
icon_state = "wolf"
/datum/sprite_accessory/mam_tails/spade
name = "Demon Spade"
icon_state = "spade"
/datum/sprite_accessory/mam_tails_animated/spade
name = "Demon Spade"
icon_state = "spade"
/datum/sprite_accessory/mam_tails/synthliz
recommended_species = list("synthliz")
color_src = MUTCOLORS
@@ -12,7 +12,6 @@
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))
@@ -56,7 +55,6 @@
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"