Merge remote-tracking branch 'citadel/master' into god_wish_your_plushies_holy_shit
This commit is contained in:
@@ -19,6 +19,12 @@
|
||||
mentor_follow(M)
|
||||
return TRUE
|
||||
|
||||
if(href_list["mentor_unfollow"])
|
||||
var/mob/living/M = locate(href_list["mentor_follow"])
|
||||
if(M && mentor_datum.following == M)
|
||||
mentor_unfollow()
|
||||
return TRUE
|
||||
|
||||
/client/proc/mentor_datum_set(admin)
|
||||
mentor_datum = GLOB.mentor_datums[ckey]
|
||||
if(!mentor_datum && check_rights_for(src, R_ADMIN,0)) // admin with no mentor datum?let's fix that
|
||||
|
||||
@@ -69,6 +69,16 @@
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/aformal
|
||||
|
||||
/datum/gear/coat/runed
|
||||
name = "Runed winter coat"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/narsie/fake
|
||||
|
||||
/datum/gear/coat/brass
|
||||
name = "Brass winter coat"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/ratvar/fake
|
||||
|
||||
/* Commented out until it is "balanced"
|
||||
/datum/gear/coat/sec
|
||||
name = "Security winter coat"
|
||||
|
||||
@@ -103,6 +103,45 @@
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/stripeddress
|
||||
|
||||
/datum/gear/sundresswhite
|
||||
name = "White Sundress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/sundresswhite
|
||||
|
||||
/datum/gear/sundress
|
||||
name = "Sundress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/sundress
|
||||
|
||||
/datum/gear/greendress
|
||||
name = "Green Dress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/greendress
|
||||
|
||||
/datum/gear/pinkdress
|
||||
name = "Pink Dress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pinkdress
|
||||
/datum/gear/flowerdress
|
||||
name = "Flower Dress"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/flowerdress
|
||||
|
||||
/datum/gear/sweptskirt
|
||||
name = "Swept skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/sweptskirt
|
||||
|
||||
/datum/gear/croptop
|
||||
name = "Croptop"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/croptop
|
||||
|
||||
/datum/gear/yoga
|
||||
name = "Yoga Pants"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pants/yoga
|
||||
|
||||
/datum/gear/kilt
|
||||
name = "Kilt"
|
||||
category = SLOT_W_UNIFORM
|
||||
@@ -116,7 +155,7 @@
|
||||
/datum/gear/athleticshorts
|
||||
name = "Athletic Shorts"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/shorts
|
||||
path = /obj/item/clothing/under/shorts/red
|
||||
|
||||
/datum/gear/bjeans
|
||||
name = "Black Jeans"
|
||||
@@ -153,6 +192,26 @@
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pants/track
|
||||
|
||||
/datum/gear/rippedjeans
|
||||
name = "Ripped Jeans"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pants/jeanripped
|
||||
|
||||
/datum/gear/jeanshort
|
||||
name = "Jean Shorts"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pants/jeanshort
|
||||
|
||||
/datum/gear/denimskirt
|
||||
name = "Denim Skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pants/denimskirt
|
||||
|
||||
/datum/gear/yoga
|
||||
name = "Yoga Pants"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pants/yoga
|
||||
|
||||
// Pantsless Sweaters
|
||||
|
||||
/datum/gear/turtleneck
|
||||
@@ -362,4 +421,4 @@
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/stripper_green
|
||||
cost = 3
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/arousable = TRUE
|
||||
var/widescreenpref = TRUE
|
||||
var/autostand = TRUE
|
||||
var/lewdchem = FALSE
|
||||
var/auto_ooc = FALSE
|
||||
|
||||
//vore prefs
|
||||
var/toggleeatingnoise = TRUE
|
||||
@@ -54,6 +54,5 @@ 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.canbearoused = arousable
|
||||
character.client?.prefs.lewdchem = lewdchem
|
||||
if(icon_updates)
|
||||
character.update_genitals()
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
/* //
|
||||
// GLOBALIZED POLYCHROME FOR ALL CLOTHING //
|
||||
// //
|
||||
// NOTICE: POLYCHROME STUFF MUST USE ALTERNATE_WORN_ICON AND PLACE THEIR OVERLAYS IN BOTH THE ICON AND ALTERNATE_WORN_ICON //
|
||||
// //
|
||||
*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// COPYPASTE THE FOLLOWING PROC TO WHATEVER CATERGORY OF CLOTHING YOU WANT TO POLYCHROME
|
||||
|
||||
// THIS IS REQUIRED DUE TO EACH CLOTHING CATEGORY HAVING A SNOWFLAKE WORN_OVERLAYS() THING
|
||||
|
||||
// Don't forget to append the appropriate typepath! Also, refer to polychromic_clothes.dm for example implementations
|
||||
|
||||
/*
|
||||
/obj/item/clothing/worn_overlays(isinhands, icon_file) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon
|
||||
. = ..()
|
||||
if(hasprimary | hassecondary | hastertiary)
|
||||
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
|
||||
if(hasprimary) //checks if overlays are enabled
|
||||
var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
|
||||
primary_worn.color = primary_color //colors the overlay
|
||||
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
|
||||
if(hassecondary)
|
||||
var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
|
||||
secondary_worn.color = secondary_color
|
||||
. += secondary_worn
|
||||
if(hastertiary)
|
||||
var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
|
||||
tertiary_worn.color = tertiary_color
|
||||
. += tertiary_worn
|
||||
*/
|
||||
|
||||
/obj/item/clothing/
|
||||
var/hasprimary = FALSE //These vars allow you to choose which overlays a clothing has
|
||||
var/hassecondary = FALSE
|
||||
var/hastertiary = FALSE
|
||||
var/primary_color = "#FFFFFF" //RGB in hexcode
|
||||
var/secondary_color = "#FFFFFF"
|
||||
var/tertiary_color = "#808080"
|
||||
|
||||
var/force_alternate_icon = FALSE
|
||||
|
||||
/obj/item/clothing/update_icon() // picks the colored overlays from the ICON file
|
||||
..()
|
||||
if(hasprimary) //Checks if the overlay is enabled
|
||||
var/mutable_appearance/primary_overlay = mutable_appearance(icon, "[item_color]-primary") //Automagically picks overlays
|
||||
primary_overlay.color = primary_color //Colors the greyscaled overlay
|
||||
add_overlay(primary_overlay) //Applies the coloured overlay onto the item sprite. but NOT the mob sprite.
|
||||
if(hassecondary)
|
||||
var/mutable_appearance/secondary_overlay = mutable_appearance(icon, "[item_color]-secondary")
|
||||
secondary_overlay.color = secondary_color
|
||||
add_overlay(secondary_overlay)
|
||||
if(hastertiary)
|
||||
var/mutable_appearance/tertiary_overlay = mutable_appearance(icon, "[item_color]-tertiary")
|
||||
tertiary_overlay.color = tertiary_color
|
||||
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
|
||||
if("Primary Color")
|
||||
var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it.
|
||||
if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL.
|
||||
primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly
|
||||
update_icon() //updates the item icon
|
||||
user.regenerate_icons() //updates the worn icon. Probably a bad idea, but it works.
|
||||
if("Secondary Color")
|
||||
var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null
|
||||
if(secondary_color_input)
|
||||
secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
user.regenerate_icons()
|
||||
if("Tertiary Color")
|
||||
var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null
|
||||
if(tertiary_color_input)
|
||||
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)
|
||||
. = ..()
|
||||
if(hasprimary | hassecondary | hastertiary)
|
||||
. += "<span class='notice'>Alt-click to recolor it.</span>"
|
||||
|
||||
/obj/item/clothing/Initialize()
|
||||
..()
|
||||
if(hasprimary | hassecondary | hastertiary)
|
||||
update_icon() //Applies the overlays and default colors onto the clothes on spawn.
|
||||
@@ -1,168 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Polychromic Uniforms: //
|
||||
// //
|
||||
// Polychromic clothes simply consist of 4 sprites: A base, unrecoloured sprite, and up to 3 greyscaled sprites. //
|
||||
// In order to add more polychromic clothes, simply create a base sprite, and up to 3 recolourable overlays for it, //
|
||||
// and then name them as follows: [name], [name]-primary, [name]-secondary, [name]-tertiary. The sprites should //
|
||||
// ideally be in 'modular_citadel/icons/polyclothes/item/uniform.dmi' and 'modular_citadel/icons/polyclothes/mob/uniform.dmi' for the //
|
||||
// worn sprites. After that, copy paste the code from any of the example clothes and //
|
||||
// change the names around. [name] should go in BOTH icon_state and item_color. You can preset colors and disable //
|
||||
// any overlays using the self-explainatory vars. //
|
||||
// //
|
||||
// -Tori //
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/clothing/under/polychromic //enables all three overlays to reduce copypasta and defines basic stuff
|
||||
name = "polychromic suit"
|
||||
desc = "For when you want to show off your horrible colour coordination skills."
|
||||
icon = 'modular_citadel/icons/polyclothes/item/uniform.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/polyclothes/mob/uniform.dmi'
|
||||
icon_state = "polysuit"
|
||||
item_color = "polysuit"
|
||||
item_state = "sl_suit"
|
||||
hasprimary = TRUE
|
||||
hassecondary = TRUE
|
||||
hastertiary = TRUE
|
||||
primary_color = "#FFFFFF" //RGB in hexcode
|
||||
secondary_color = "#FFFFFF"
|
||||
tertiary_color = "#808080"
|
||||
can_adjust = FALSE
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION // because I'm too lazy to port these to digi-compatible and to prove a point from /tg/ whining - Pooj
|
||||
suit_style = NORMAL_SUIT_STYLE
|
||||
|
||||
/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon
|
||||
. = ..()
|
||||
if(hasprimary | hassecondary | hastertiary)
|
||||
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
|
||||
if(hasprimary) //checks if overlays are enabled
|
||||
var/mutable_appearance/primary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-primary") //automagical sprite selection
|
||||
primary_worn.color = primary_color //colors the overlay
|
||||
. += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite.
|
||||
if(hassecondary)
|
||||
var/mutable_appearance/secondary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-secondary")
|
||||
secondary_worn.color = secondary_color
|
||||
. += secondary_worn
|
||||
if(hastertiary)
|
||||
var/mutable_appearance/tertiary_worn = mutable_appearance(alternate_worn_icon, "[item_color]-tertiary")
|
||||
tertiary_worn.color = tertiary_color
|
||||
. += tertiary_worn
|
||||
|
||||
/obj/item/clothing/under/polychromic/shirt //COPY PASTE THIS TO MAKE A NEW THING
|
||||
name = "polychromic button-up shirt"
|
||||
desc = "A fancy button-up shirt made with polychromic threads."
|
||||
icon_state = "polysuit"
|
||||
item_color = "polysuit"
|
||||
item_state = "sl_suit"
|
||||
primary_color = "#FFFFFF" //RGB in hexcode
|
||||
secondary_color = "#353535"
|
||||
tertiary_color = "#353535"
|
||||
|
||||
/obj/item/clothing/under/polychromic/kilt
|
||||
name = "polychromic kilt"
|
||||
desc = "It's not a skirt!"
|
||||
icon_state = "polykilt"
|
||||
item_color = "polykilt"
|
||||
item_state = "kilt"
|
||||
primary_color = "#FFFFFF" //RGB in hexcode
|
||||
secondary_color = "#F08080"
|
||||
hastertiary = FALSE // so it doesn't futz with digilegs
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
/obj/item/clothing/under/polychromic/skirt
|
||||
name = "polychromic skirt"
|
||||
desc = "A fancy skirt made with polychromic threads."
|
||||
icon_state = "polyskirt"
|
||||
item_color = "polyskirt"
|
||||
item_state = "rainbow"
|
||||
primary_color = "#FFFFFF" //RGB in hexcode
|
||||
secondary_color = "#F08080"
|
||||
tertiary_color = "#808080"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
/obj/item/clothing/under/polychromic/shorts
|
||||
name = "polychromic shorts"
|
||||
desc = "For ease of movement and style."
|
||||
icon_state = "polyshorts"
|
||||
item_color = "polyshorts"
|
||||
item_state = "rainbow"
|
||||
primary_color = "#353535" //RGB in hexcode
|
||||
secondary_color = "#808080"
|
||||
tertiary_color = "#808080"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
/obj/item/clothing/under/polychromic/jumpsuit
|
||||
name = "polychromic tri-tone jumpsuit"
|
||||
desc = "A fancy jumpsuit made with polychromic threads."
|
||||
icon_state = "polyjump"
|
||||
item_color = "polyjump"
|
||||
item_state = "rainbow"
|
||||
primary_color = "#FFFFFF" //RGB in hexcode
|
||||
secondary_color = "#808080"
|
||||
tertiary_color = "#FF3535"
|
||||
|
||||
/obj/item/clothing/under/polychromic/shortpants
|
||||
name = "polychromic athletic shorts"
|
||||
desc = "95% Polychrome, 5% Spandex!"
|
||||
icon_state = "polyshortpants"
|
||||
item_color = "polyshortpants"
|
||||
item_state = "rainbow"
|
||||
hastertiary = FALSE
|
||||
primary_color = "#FFFFFF" //RGB in hexcode
|
||||
secondary_color = "#F08080"
|
||||
gender = PLURAL //Because shortS
|
||||
body_parts_covered = GROIN //Because there's no shirt included
|
||||
|
||||
/obj/item/clothing/under/polychromic/pleat
|
||||
name = "polychromic pleated skirt"
|
||||
desc = "A magnificent pleated skirt complements the woolen polychromatic sweater."
|
||||
icon_state = "polypleat"
|
||||
item_color = "polypleat"
|
||||
item_state = "rainbow"
|
||||
primary_color = "#8CC6FF" //RGB in hexcode
|
||||
secondary_color = "#808080"
|
||||
tertiary_color = "#FF3535"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
/obj/item/clothing/under/polychromic/femtank
|
||||
name = "polychromic feminine tank top"
|
||||
desc = "Great for showing off your chest in style. Not recommended for males."
|
||||
icon_state = "polyfemtankpantsu"
|
||||
item_color = "polyfemtankpantsu"
|
||||
item_state = "rainbow"
|
||||
hastertiary = FALSE
|
||||
primary_color = "#808080" //RGB in hexcode
|
||||
secondary_color = "#FF3535"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
|
||||
/obj/item/clothing/under/polychromic/shortpants/pantsu
|
||||
name = "polychromic panties"
|
||||
desc = "Topless striped panties. Now with 120% more polychrome!"
|
||||
icon_state = "polypantsu"
|
||||
item_color = "polypantsu"
|
||||
item_state = "rainbow"
|
||||
hastertiary = FALSE
|
||||
primary_color = "#FFFFFF" //RGB in hexcode
|
||||
secondary_color = "#8CC6FF"
|
||||
body_parts_covered = GROIN
|
||||
|
||||
/obj/item/clothing/under/polychromic/bottomless
|
||||
name = "polychromic bottomless shirt"
|
||||
desc = "Great for showing off your junk in dubious style."
|
||||
icon_state = "polybottomless"
|
||||
item_color = "polybottomless"
|
||||
item_state = "rainbow"
|
||||
hastertiary = FALSE
|
||||
primary_color = "#808080" //RGB in hexcode
|
||||
secondary_color = "#FF3535"
|
||||
body_parts_covered = CHEST|ARMS //Because there's no bottom included
|
||||
|
||||
/obj/item/clothing/under/polychromic/shimatank
|
||||
name = "polychromic tank top"
|
||||
desc = "For those lazy summer days."
|
||||
icon_state = "polyshimatank"
|
||||
item_color = "polyshimatank"
|
||||
item_state = "rainbow"
|
||||
primary_color = "#808080" //RGB in hexcode
|
||||
secondary_color = "#FFFFFF"
|
||||
tertiary_color = "#8CC6FF"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
@@ -1,16 +1,18 @@
|
||||
/client/proc/mentor_follow(mob/living/M)
|
||||
if(!is_mentor())
|
||||
return
|
||||
if(isnull(M))
|
||||
return
|
||||
if(!ismob(usr))
|
||||
return
|
||||
mentor_datum.following = M
|
||||
usr.reset_perspective(M)
|
||||
verbs += /client/proc/mentor_unfollow
|
||||
to_chat(GLOB.admins, "<span class='mentor'><span class='prefix'>MENTOR:</span> <EM>[key_name(usr)]</EM> is now following <EM>[key_name(M)]</span>")
|
||||
to_chat(usr, "<span class='info'>Click the \"Stop Following\" button in the Mentor tab to stop following [key_name(M)].</span>")
|
||||
log_mentor("[key_name(usr)] began following [key_name(M)]")
|
||||
var/orbiting = TRUE
|
||||
if(!isobserver(usr))
|
||||
mentor_datum.following = M
|
||||
usr.reset_perspective(M)
|
||||
verbs += /client/proc/mentor_unfollow
|
||||
to_chat(usr, "<span class='info'>Click the <a href='?_src_=mentor;mentor_unfollow=[REF(M)];[MentorHrefToken(TRUE)]'>\"Stop Following\"</a> button here or in the Mentor tab to stop following [key_name(M)].</span>")
|
||||
orbiting = FALSE
|
||||
else
|
||||
var/mob/dead/observer/O = usr
|
||||
O.ManualFollow(M)
|
||||
to_chat(GLOB.admins, "<span class='mentor'><span class='prefix'>MENTOR:</span> <EM>[key_name(usr)]</EM> is now [orbiting ? "orbiting" : "following"] <EM>[key_name(M)][key_name(M)][orbiting ? " as a ghost" : ""].</span>")
|
||||
log_mentor("[key_name(usr)] [orbiting ? "is now orbiting" : "began following"][key_name(M)][orbiting ? " as a ghost" : ""].")
|
||||
|
||||
/client/proc/mentor_unfollow()
|
||||
set category = "Mentor"
|
||||
@@ -21,6 +23,6 @@
|
||||
return
|
||||
usr.reset_perspective()
|
||||
verbs -= /client/proc/mentor_unfollow
|
||||
to_chat(GLOB.admins, "<span class='mentor'><span class='prefix'>MENTOR:</span> <EM>[key_name(usr)]</EM> is no longer following <EM>[key_name(mentor_datum.following)]</span>")
|
||||
log_mentor("[key_name(usr)] stopped following [key_name(mentor_datum.following)]")
|
||||
to_chat(GLOB.admins, "<span class='mentor'><span class='prefix'>MENTOR:</span> <EM>[key_name(usr)]</EM> is no longer following <EM>[key_name(mentor_datum.following)].</span>")
|
||||
log_mentor("[key_name(usr)] stopped following [key_name(mentor_datum.following)].")
|
||||
mentor_datum.following = null
|
||||
@@ -19,7 +19,7 @@
|
||||
log_mentor("MENTORHELP: [key_name_mentor(src, 0, 0, 0, 0)]: [msg]")
|
||||
|
||||
for(var/client/X in GLOB.mentors | GLOB.admins)
|
||||
X << 'sound/items/bikehorn.ogg'
|
||||
SEND_SOUND(X, 'sound/items/bikehorn.ogg')
|
||||
to_chat(X, mentor_msg)
|
||||
|
||||
to_chat(src, "<span class='mentornotice'><font color='purple'>PM to-<b>Mentors</b>: [msg]</font></span>")
|
||||
|
||||
@@ -41,18 +41,16 @@
|
||||
playsound_local(src, 'sound/misc/ui_toggleoff.ogg', 50, FALSE, pressure_affected = FALSE) //Slightly modified version of the above!
|
||||
if(client)
|
||||
client.show_popup_menus = !combatmode // So we can right-click for alternate actions and all that other good shit. Also moves examine to shift+rightclick to make it possible to attack while sprinting
|
||||
if(hud_used && hud_used.static_inventory)
|
||||
for(var/obj/screen/combattoggle/selector in hud_used.static_inventory)
|
||||
selector.rebasetointerbay(src)
|
||||
var/obj/screen/combattoggle/T = locate() in hud_used?.static_inventory
|
||||
T?.update_icon_state()
|
||||
combatmessagecooldown = 10 SECONDS + world.time //This is set 100% of the time to make sure squeezing regen out of process cycles doesn't result in the combat mode message getting spammed
|
||||
SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode)
|
||||
return TRUE
|
||||
|
||||
mob/living/carbon/proc/toggle_vore_mode()
|
||||
voremode = !voremode
|
||||
if(hud_used && hud_used.static_inventory)
|
||||
for(var/obj/screen/voretoggle/selector in hud_used.static_inventory)
|
||||
selector.rebaseintomygut(src)
|
||||
var/obj/screen/voretoggle/T = locate() in hud_used?.static_inventory
|
||||
T?.update_icon_state()
|
||||
if(combatmode)
|
||||
return FALSE //let's not override the main draw of the game these days
|
||||
SEND_SIGNAL(src, COMSIG_VORE_TOGGLED, src, voremode)
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
/mob/living/carbon/human
|
||||
var/sprinting = FALSE
|
||||
|
||||
/mob/living/carbon/human/Move(NewLoc, direct)
|
||||
var/oldpseudoheight = pseudo_z_axis
|
||||
. = ..()
|
||||
@@ -28,9 +25,8 @@
|
||||
playsound_local(src, 'sound/misc/sprintactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
else
|
||||
playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
if(hud_used && hud_used.static_inventory)
|
||||
for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory)
|
||||
selector.insert_witty_toggle_joke_here(src)
|
||||
var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
|
||||
S?.update_icon_state()
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/sprint_hotkey(targetstatus)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/mob/living
|
||||
var/sprinting = FALSE
|
||||
var/recoveringstam = FALSE
|
||||
var/incomingstammult = 1
|
||||
var/bufferedstam = 0
|
||||
|
||||
@@ -424,12 +424,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
if(A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
var/blocked = 0
|
||||
if(ishuman(A))
|
||||
var/mob/living/carbon/human/H = A
|
||||
if(H.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
|
||||
blocked = 1
|
||||
if(!blocked)
|
||||
if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
|
||||
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
|
||||
L.Knockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
/mob/living/silicon/robot
|
||||
var/sprinting = FALSE
|
||||
|
||||
/mob/living/silicon/robot/Move(NewLoc, direct)
|
||||
. = ..()
|
||||
if(. && sprinting && !(movement_type & FLYING) && canmove && !resting)
|
||||
@@ -24,9 +21,8 @@
|
||||
if(shutdown)
|
||||
playsound_local(src, 'sound/effects/light_flicker.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
playsound_local(src, 'sound/misc/sprintdeactivate.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
if(hud_used && hud_used.static_inventory)
|
||||
for(var/obj/screen/sprintbutton/selector in hud_used.static_inventory)
|
||||
selector.insert_witty_toggle_joke_here(src)
|
||||
var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
|
||||
S?.update_icon_state()
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/robot/proc/sprint_hotkey(targetstatus)
|
||||
|
||||
+11
-1
@@ -50,7 +50,7 @@
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/m45 //Kinda NT in throey
|
||||
/datum/design/m45 //Kinda NT in theory
|
||||
name = "handgun magazine (.45)"
|
||||
id = "m45"
|
||||
build_type = PROTOLATHE
|
||||
@@ -68,3 +68,13 @@
|
||||
build_path = /obj/item/ammo_box/magazine/pistolm9mm
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/sl357
|
||||
name = "revolver speedloader (.357)"
|
||||
desc = "A revolver speedloader."
|
||||
id = "sl357"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 30000)
|
||||
build_path = /obj/item/ammo_box/a357
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
@@ -170,6 +170,9 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
|
||||
/datum/reagent/fermi/enthrall/on_mob_add(mob/living/carbon/M)
|
||||
. = ..()
|
||||
if(M.client?.prefs.cit_toggles & NEVER_HYPNO) // Just in case people are opting out of this
|
||||
holder.remove_reagent(id, 10000000)
|
||||
return
|
||||
if(!ishuman(M))//Just to make sure screwy stuff doesn't happen.
|
||||
return
|
||||
if(!creatorID)
|
||||
@@ -183,7 +186,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
E.enthrallID = creatorID
|
||||
E.enthrallGender = creatorGender
|
||||
E.master = get_mob_by_key(creatorID)
|
||||
to_chat(M, to_chat(M, "<span class='big love'><i>Your aldled, plastic, mind bends under the chemical influence of a new [(M.client?.prefs.lewdchem?"master":"leader")]. Your highest priority is now to stay by [creatorName]'s side, following and aiding them at all costs.</i></span>")) //THIS SHOULD ONLY EVER APPEAR IF YOU MINDBREAK YOURSELF AND THEN GET INJECTED FROM SOMEONE ELSE.
|
||||
to_chat(M, "<span class='big love'><i>Your addled, plastic, mind bends under the chemical influence of a new [(E.lewd?"master":"leader")]. Your highest priority is now to stay by [creatorName]'s side, following and aiding them at all costs.</i></span>") //THIS SHOULD ONLY EVER APPEAR IF YOU MINDBREAK YOURSELF AND THEN GET INJECTED FROM SOMEONE ELSE.
|
||||
log_game("FERMICHEM: Narcissist [M] ckey: [M.key] been rebound to [creatorName], ID: [creatorID]")
|
||||
return
|
||||
if((M.ckey == creatorID) && (creatorName == M.real_name)) //same name AND same player - same instance of the player. (should work for clones?)
|
||||
@@ -194,7 +197,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
Vc.Remove(M)
|
||||
nVc.Insert(M)
|
||||
qdel(Vc)
|
||||
to_chat(M, "<span class='notice'><i>You feel your vocal chords tingle you speak in a more charasmatic and sultry tone.)]</span>")
|
||||
to_chat(M, "<span class='notice'><i>You feel your vocal chords tingle you speak in a more charasmatic and sultry tone.</i></span>")
|
||||
else
|
||||
log_game("FERMICHEM: MKUltra: [creatorName], [creatorID], is enthralling [M.name], [M.ckey]")
|
||||
M.apply_status_effect(/datum/status_effect/chem/enthrall)
|
||||
@@ -230,7 +233,6 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
FallInLove(C, M)
|
||||
return
|
||||
|
||||
if (M.ckey == creatorID && creatorName == M.real_name)//If you yourself drink it, it supresses the vocal effects, for stealth. NEVERMIND ADD THIS LATER I CAN'T GET IT TO WORK
|
||||
return
|
||||
if(!M.client)
|
||||
@@ -261,7 +263,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
E.master = creator
|
||||
else
|
||||
E = M.has_status_effect(/datum/status_effect/chem/enthrall)
|
||||
if(M.client?.prefs.lewdchem)
|
||||
if(E.lewd)
|
||||
to_chat(M, "<span class='big love'><i>Your mind shatters under the volume of the mild altering chem inside of you, breaking all will and thought completely. Instead the only force driving you now is the instinctual desire to obey and follow [creatorName]. Your highest priority is now to stay by their side and protect them at all costs.</i></span>")
|
||||
else
|
||||
to_chat(M, "<span class='big warning'><i>The might volume of chemicals in your system overwhelms your mind, and you suddenly agree with what [creatorName] has been saying. Your highest priority is now to stay by their side and protect them at all costs.</i></span>")
|
||||
@@ -288,6 +290,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
chemical_flags = REAGENT_DONOTSPLIT
|
||||
can_synth = FALSE
|
||||
var/mob/living/carbon/love
|
||||
var/lewd = FALSE
|
||||
|
||||
/datum/reagent/fermi/enthrallExplo/on_mob_life(mob/living/carbon/M)//Love gas, only affects while it's in your system,Gives a positive moodlet if close, gives brain damagea and a negative moodlet if not close enough.
|
||||
if(HAS_TRAIT(M, TRAIT_MINDSHIELD))
|
||||
@@ -303,24 +306,25 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
if(!love)
|
||||
return
|
||||
M.apply_status_effect(STATUS_EFFECT_INLOVE, love)
|
||||
to_chat(M, "[(M.client?.prefs.lewdchem?"<span class='love'>":"<span class='warning'>")][(M.client?.prefs.lewdchem?"You develop a sudden crush on [love], your heart beginning to race as you look upon them with new eyes.":"You suddenly feel like making friends with [love].")] You feel strangely drawn towards them.</span>")
|
||||
lewd = (M.client?.prefs.cit_toggles & HYPNO) && (love.client?.prefs.cit_toggles & HYPNO)
|
||||
to_chat(M, "[(lewd?"<span class='love'>":"<span class='warning'>")][(lewd?"You develop a sudden crush on [love], your heart beginning to race as you look upon them with new eyes.":"You suddenly feel like making friends with [love].")] You feel strangely drawn towards them.</span>")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has temporarily bonded with [love] ckey: [love.key]")
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Times people have bonded")
|
||||
else
|
||||
if(get_dist(M, love) < 8)
|
||||
if(HAS_TRAIT(M, TRAIT_NYMPHO)) //Add this back when merged/updated.
|
||||
M.adjustArousalLoss(5)
|
||||
var/message = "[(M.client?.prefs.lewdchem?"I'm next to my crush..! Eee!":"I'm making friends with [love]!")]"
|
||||
var/message = "[(lewd?"I'm next to my crush..! Eee!":"I'm making friends with [love]!")]"
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "InLove", /datum/mood_event/InLove, message)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "MissingLove")
|
||||
else
|
||||
var/message = "[(M.client?.prefs.lewdchem?"I can't keep my crush off my mind, I need to see them again!":"I really want to make friends with [love]!")]"
|
||||
var/message = "[(lewd?"I can't keep my crush off my mind, I need to see them again!":"I really want to make friends with [love]!")]"
|
||||
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "MissingLove", /datum/mood_event/MissingLove, message)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "InLove")
|
||||
if(prob(5))
|
||||
M.Stun(10)
|
||||
M.emote("whimper")//does this exist?
|
||||
to_chat(M, "[(M.client?.prefs.lewdchem?"<span class='love'>":"<span class='warning'>")] You're overcome with a desire to see [love].</span>")
|
||||
to_chat(M, "[(lewd?"<span class='love'>":"<span class='warning'>")] You're overcome with a desire to see [love].</span>")
|
||||
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5)//I found out why everyone was so damaged!
|
||||
..()
|
||||
|
||||
@@ -330,7 +334,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
M.remove_status_effect(STATUS_EFFECT_INLOVE)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "InLove")
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "MissingLove")
|
||||
to_chat(M, "[(M.client?.prefs.lewdchem?"<span class='love'>":"<span class='warning'>")]Your feelings for [love] suddenly vanish!")
|
||||
to_chat(M, "[(lewd?"<span class='love'>":"<span class='warning'>")]Your feelings for [love] suddenly vanish!")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] is no longer in temp bond")
|
||||
..()
|
||||
|
||||
@@ -338,7 +342,8 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
if(Lover.has_status_effect(STATUS_EFFECT_INLOVE))
|
||||
to_chat(Lover, "<span class='warning'>You are already fully devoted to someone else!</span>")
|
||||
return
|
||||
to_chat(Lover, "[(Lover.client?.prefs.lewdchem?"<span class='love'>":"<span class='warning'>")]You develop a deep and sudden bond with [Love][(Lover.client?.prefs.lewdchem?", your heart beginning to race as your mind filles with thoughts about them.":".")] You are determined to keep them safe and happy, and feel drawn towards them.</span>")
|
||||
var/lewd = (Lover.client?.prefs.cit_toggles & HYPNO) && (Love.client?.prefs.cit_toggles & HYPNO)
|
||||
to_chat(Lover, "[(lewd?"<span class='love'>":"<span class='warning'>")]You develop a deep and sudden bond with [Love][(lewd?", your heart beginning to race as your mind filles with thoughts about them.":".")] You are determined to keep them safe and happy, and feel drawn towards them.</span>")
|
||||
if(Lover.mind)
|
||||
Lover.mind.store_memory("You are in love with [Love].")
|
||||
Lover.faction |= "[REF(Love)]"
|
||||
|
||||
@@ -56,8 +56,8 @@
|
||||
|
||||
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)
|
||||
//If they've opted out, then route processing though liver.
|
||||
if(!(H.client?.prefs.cit_toggles & BREAST_ENLARGEMENT))
|
||||
var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
|
||||
if(L)
|
||||
L.swelling += 0.05
|
||||
@@ -94,9 +94,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/reagent/fermi/breast_enlarger/overdose_process(mob/living/carbon/M) //Turns you into a female if male and ODing, doesn't touch nonbinary and object genders.
|
||||
|
||||
//Acute hepatic pharmacokinesis.
|
||||
if(HAS_TRAIT(M, TRAIT_PHARMA) || !M.canbearoused)
|
||||
if(!(M.client?.prefs.cit_toggles & FORCED_FEM))
|
||||
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
|
||||
L.swelling+= 0.05
|
||||
return ..()
|
||||
@@ -133,15 +131,10 @@
|
||||
|
||||
/datum/reagent/fermi/BEsmaller/on_mob_life(mob/living/carbon/M)
|
||||
var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS)
|
||||
if(!B)
|
||||
//Acute hepatic pharmacokinesis.
|
||||
if(HAS_TRAIT(M, TRAIT_PHARMA) || !M.canbearoused)
|
||||
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
|
||||
L.swelling-= 0.05
|
||||
return ..()
|
||||
|
||||
//otherwise proceed as normal
|
||||
return..()
|
||||
if(!(M.client?.prefs.cit_toggles & BREAST_ENLARGEMENT) || !B)
|
||||
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
|
||||
L.swelling-= 0.05
|
||||
return ..()
|
||||
B.modify_size(-0.05)
|
||||
return ..()
|
||||
|
||||
@@ -221,8 +214,7 @@
|
||||
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)
|
||||
if(!(H.client?.prefs.cit_toggles & PENIS_ENLARGEMENT))
|
||||
var/obj/item/organ/liver/L = H.getorganslot(ORGAN_SLOT_LIVER)
|
||||
if(L)
|
||||
L.swelling += 0.05
|
||||
@@ -252,8 +244,7 @@
|
||||
/datum/reagent/fermi/penis_enlarger/overdose_process(mob/living/carbon/human/M) //Turns you into a male if female and ODing, doesn't touch nonbinary and object genders.
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
//Acute hepatic pharmacokinesis.
|
||||
if(HAS_TRAIT(M, TRAIT_PHARMA) || !M.canbearoused)
|
||||
if(!(M.client?.prefs.cit_toggles & FORCED_MASC))
|
||||
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
|
||||
L.swelling+= 0.05
|
||||
return..()
|
||||
@@ -292,11 +283,9 @@
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/genital/penis/P = H.getorganslot(ORGAN_SLOT_PENIS)
|
||||
if(!P)
|
||||
//Acute hepatic pharmacokinesis.
|
||||
if(HAS_TRAIT(M, TRAIT_PHARMA))
|
||||
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
|
||||
L.swelling-= 0.05
|
||||
if(!(H.client?.prefs.cit_toggles & PENIS_ENLARGEMENT) || !P)
|
||||
var/obj/item/organ/liver/L = M.getorganslot(ORGAN_SLOT_LIVER)
|
||||
L.swelling-= 0.05
|
||||
return..()
|
||||
|
||||
P.modify_size(-0.1)
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
color = "#FFADFF"//PINK, rgb(255, 173, 255)
|
||||
|
||||
/datum/reagent/drug/aphrodisiac/on_mob_life(mob/living/M)
|
||||
if(M && M.canbearoused && !HAS_TRAIT(M, TRAIT_CROCRIN_IMMUNE))
|
||||
if(M && M.canbearoused && !(M.client?.prefs.cit_toggles & NO_APHRO))
|
||||
if(prob(33))
|
||||
M.adjustArousalLoss(2)
|
||||
if(prob(5))
|
||||
@@ -122,7 +122,7 @@
|
||||
overdose_threshold = 20
|
||||
|
||||
/datum/reagent/drug/aphrodisiacplus/on_mob_life(mob/living/M)
|
||||
if(M && M.canbearoused && !HAS_TRAIT(M, TRAIT_CROCRIN_IMMUNE))
|
||||
if(M && M.canbearoused && !(M.client?.prefs.cit_toggles & NO_APHRO))
|
||||
if(prob(33))
|
||||
M.adjustArousalLoss(6)//not quite six times as powerful, but still considerably more powerful.
|
||||
if(prob(5))
|
||||
@@ -154,7 +154,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M)
|
||||
if(M && M.canbearoused && !HAS_TRAIT(M, TRAIT_CROCRIN_IMMUNE) && prob(33))
|
||||
if(M && M.canbearoused && !(M.client?.prefs.cit_toggles & NO_APHRO) && prob(33))
|
||||
if(prob(5) && M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna())
|
||||
if(prob(5)) //Less spam
|
||||
to_chat(M, "<span class='love'>Your libido is going haywire!</span>")
|
||||
|
||||
Reference in New Issue
Block a user