mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-21 21:10:47 +01:00
Merge branch 'master' into Kristopher-Uniform-Patreon
This commit is contained in:
@@ -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)
|
||||
..()
|
||||
|
||||
/*
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user