mirror of
https://github.com/KabKebab/GS13.git
synced 2026-08-22 20:46:55 +01:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -1,39 +0,0 @@
|
||||
/client/proc/citaPPoptions(mob/M) // why is this client and not /datum/admins? noone knows, in PP src == client, instead of holder. wtf.
|
||||
var/body = "<br>"
|
||||
if(M.client)
|
||||
body += "<A href='?_src_=holder;[HrefToken()];makementor=[M.ckey]'>Make mentor</A> | "
|
||||
body += "<A href='?_src_=holder;[HrefToken()];removementor=[M.ckey]'>Remove mentor</A>"
|
||||
return body
|
||||
|
||||
/client/proc/cmd_admin_man_up(mob/M in GLOB.mob_list)
|
||||
set category = "Special Verbs"
|
||||
set name = "Man Up"
|
||||
|
||||
if(!M)
|
||||
return
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
to_chat(M, "<span class='warning bold reallybig'>Man up, and deal with it.</span><br><span class='warning big'>Move on.</span>")
|
||||
M.playsound_local(M, 'modular_citadel/sound/misc/manup.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
|
||||
log_admin("Man up: [key_name(usr)] told [key_name(M)] to man up")
|
||||
var/message = "<span class='adminnotice'>[key_name_admin(usr)] told [key_name_admin(M)] to man up.</span>"
|
||||
message_admins(message)
|
||||
admin_ticket_log(M, message)
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Man Up")
|
||||
|
||||
/client/proc/cmd_admin_man_up_global()
|
||||
set category = "Special Verbs"
|
||||
set name = "Man Up Global"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
to_chat(world, "<span class='warning bold reallybig'>Man up, and deal with it.</span><br><span class='warning big'>Move on.</span>")
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
M.playsound_local(M, 'modular_citadel/sound/misc/manup.ogg', 50, FALSE, pressure_affected = FALSE)
|
||||
|
||||
log_admin("Man up global: [key_name(usr)] told everybody to man up")
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(usr)] told everybody to man up.</span>")
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Man Up Global")
|
||||
@@ -1,59 +0,0 @@
|
||||
/datum/admins/proc/citaTopic(href, href_list)
|
||||
if(href_list["makementor"])
|
||||
makeMentor(href_list["makementor"])
|
||||
else if(href_list["removementor"])
|
||||
removeMentor(href_list["removementor"])
|
||||
|
||||
/datum/admins/proc/makeMentor(ckey)
|
||||
if(!usr.client)
|
||||
return
|
||||
if (!check_rights(0))
|
||||
return
|
||||
if(!ckey)
|
||||
return
|
||||
var/client/C = GLOB.directory[ckey]
|
||||
if(C)
|
||||
if(check_rights_for(C, R_ADMIN,0))
|
||||
to_chat(usr, "<span class='danger'>The client chosen is an admin! Cannot mentorize.</span>")
|
||||
return
|
||||
if(SSdbcore.Connect())
|
||||
var/datum/DBQuery/query_get_mentor = SSdbcore.NewQuery("SELECT id FROM [format_table_name("mentor")] WHERE ckey = '[ckey]'")
|
||||
if(query_get_mentor.NextRow())
|
||||
to_chat(usr, "<span class='danger'>[ckey] is already a mentor.</span>")
|
||||
return
|
||||
var/datum/DBQuery/query_add_mentor = SSdbcore.NewQuery("INSERT INTO `[format_table_name("mentor")]` (`id`, `ckey`) VALUES (null, '[ckey]')")
|
||||
if(!query_add_mentor.warn_execute())
|
||||
return
|
||||
var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new mentor [ckey]');")
|
||||
if(!query_add_admin_log.warn_execute())
|
||||
return
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>Failed to establish database connection. The changes will last only for the current round.</span>")
|
||||
new /datum/mentors(ckey)
|
||||
to_chat(usr, "<span class='adminnotice'>New mentor added.</span>")
|
||||
|
||||
/datum/admins/proc/removeMentor(ckey)
|
||||
if(!usr.client)
|
||||
return
|
||||
if (!check_rights(0))
|
||||
return
|
||||
if(!ckey)
|
||||
return
|
||||
var/client/C = GLOB.directory[ckey]
|
||||
if(C)
|
||||
if(check_rights_for(C, R_ADMIN,0))
|
||||
to_chat(usr, "<span class='danger'>The client chosen is an admin, not a mentor! Cannot de-mentorize.</span>")
|
||||
return
|
||||
C.remove_mentor_verbs()
|
||||
C.mentor_datum = null
|
||||
GLOB.mentors -= C
|
||||
if(SSdbcore.Connect())
|
||||
var/datum/DBQuery/query_remove_mentor = SSdbcore.NewQuery("DELETE FROM [format_table_name("mentor")] WHERE ckey = '[ckey]'")
|
||||
if(!query_remove_mentor.warn_execute())
|
||||
return
|
||||
var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed mentor [ckey]');")
|
||||
if(!query_add_admin_log.warn_execute())
|
||||
return
|
||||
else
|
||||
to_chat(usr, "<span class='danger'>Failed to establish database connection. The changes will last only for the current round.</span>")
|
||||
to_chat(usr, "<span class='adminnotice'>Mentor removed.</span>")
|
||||
@@ -239,11 +239,14 @@
|
||||
var/total_fluids = 0
|
||||
var/datum/reagents/fluid_source = null
|
||||
var/condomed = 0
|
||||
var/sounded = 0
|
||||
|
||||
if(G.name == "penis")//if the select organ is a penis
|
||||
var/obj/item/organ/genital/penis/P = src.getorganslot("penis")
|
||||
if(P.condom) //if the penis is condomed
|
||||
condomed = 1
|
||||
if(P.sounding)
|
||||
sounded = 1
|
||||
if(G.producing) //Can it produce its own fluids, such as breasts?
|
||||
fluid_source = G.reagents
|
||||
else
|
||||
@@ -258,10 +261,10 @@
|
||||
"<span class='userlove'>You start to [G.masturbation_verb] your [G.name].</span>")
|
||||
|
||||
if(do_after(src, mb_time, target = src))
|
||||
if(total_fluids > 5 &&!condomed)
|
||||
if(total_fluids > 5 &&!condomed &&!sounded)
|
||||
fluid_source.reaction(src.loc, TOUCH, 1, 0)
|
||||
fluid_source.clear_reagents()
|
||||
if(!condomed)
|
||||
if(!condomed &&!sounded)
|
||||
src.visible_message("<span class='love'>[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!</span>", \
|
||||
"<span class='userlove'>You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].</span>", \
|
||||
"<span class='userlove'>You have relieved yourself.</span>")
|
||||
@@ -269,7 +272,11 @@
|
||||
src.visible_message("<span class='love'>[src] orgasms, climaxing into [p_their()] condom </span>", \
|
||||
"<span class='userlove'>You cum into your condom.</span>", \
|
||||
"<span class='userlove'>You have relieved yourself.</span>")
|
||||
if(total_fluids > 0 &&condomed)
|
||||
if(sounded) //sounded
|
||||
src.visible_message("<span class='love'>[src] orgasms, but the rod blocks anything from leaking out!</span>", \
|
||||
"<span class='userlove'>You cum with the rod inside.</span>", \
|
||||
"<span class='userlove'>You don't quite feel totally relieved.</span>")
|
||||
if(total_fluids > 0 &&condomed &&!sounded)
|
||||
src.condomclimax()
|
||||
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
|
||||
@@ -359,6 +366,12 @@
|
||||
if(G.can_climax)
|
||||
setArousalLoss(min_arousal)
|
||||
|
||||
//Hyper - antag code
|
||||
if(src.mind.special_role == ROLE_LEWD_TRAITOR)
|
||||
for(var/datum/objective/obj in src.mind.objectives)
|
||||
if (L.mind == obj.target)
|
||||
L.mind.sexed = TRUE //sexed
|
||||
to_chat(src, "<span class='userlove'>You feel deep satisfaction with yourself.</span>")
|
||||
|
||||
if(impreg)
|
||||
//Role them odds, only people with the dicks can send the chance to the person with the settings enabled at the momment.
|
||||
@@ -385,6 +398,9 @@
|
||||
if(P.condom) //if the penis is condomed
|
||||
to_chat(src, "<span class='warning'>You cannot fill containers when there is a condom over your [G.name].</span>")
|
||||
return
|
||||
if(P.sounding) //if the penis is sounded
|
||||
to_chat(src, "<span class='warning'>You cannot fill containers when there is a rod inside your [G.name].</span>")
|
||||
return
|
||||
if(G.producing) //Can it produce its own fluids, such as breasts?
|
||||
fluid_source = G.reagents
|
||||
else
|
||||
@@ -534,9 +550,27 @@
|
||||
return
|
||||
|
||||
//Ok, now we check what they want to do.
|
||||
var/choice = input(src, "Select sexual activity", "Sexual activity:") in list("Masturbate", "Climax alone", "Climax with partner", "Fill container", "Remove condom")
|
||||
var/choice = input(src, "Select sexual activity", "Sexual activity:") in list("Masturbate", "Climax alone", "Climax with partner", "Fill container", "Remove condom", "Remove sounding rod")
|
||||
|
||||
switch(choice)
|
||||
if("Remove sounding rod")
|
||||
if(restrained(TRUE)) //TRUE ignores grabs
|
||||
to_chat(src, "<span class='warning'>You can't do that while restrained!</span>")
|
||||
return
|
||||
var/free_hands = get_num_arms()
|
||||
if(!free_hands)
|
||||
to_chat(src, "<span class='warning'>You need at least one free arm.</span>")
|
||||
return
|
||||
var/obj/item/organ/genital/penis/P = src.getorganslot("penis")
|
||||
if(!P.sounding)
|
||||
to_chat(src, "<span class='warning'>You don't have a rod inside!</span>")
|
||||
return
|
||||
if(P.sounding)
|
||||
to_chat(src, "<span class='warning'>You pull the rod off from the tip of your penis!</span>")
|
||||
src.removesounding()
|
||||
return
|
||||
return
|
||||
|
||||
if("Remove condom")
|
||||
if(restrained(TRUE)) //TRUE ignores grabs
|
||||
to_chat(src, "<span class='warning'>You can't do that while restrained!</span>")
|
||||
@@ -611,7 +645,7 @@
|
||||
var/mob/living/partner = pick_partner() //Get someone
|
||||
if(partner)
|
||||
var/obj/item/organ/genital/penis/P = picked_organ
|
||||
if(partner.breedable == 1 && picked_organ.name == "penis"&&!P.condom == 1)
|
||||
if(partner.breedable == 1 && picked_organ.name == "penis"&&!P.condom == 1&&!P.sounding == 1)
|
||||
var/impreg = input(src, "Would this action carry the risk of pregnancy?", "Choose a option", "Yes") as anything in list("Yes", "No")
|
||||
if(impreg == "Yes") //If we are impregging
|
||||
var/spillage = input(src, "Would your fluids spill outside?", "Choose overflowing option", "Yes") as anything in list("Yes", "No")
|
||||
|
||||
@@ -44,9 +44,11 @@
|
||||
if(!sent_full_message)
|
||||
send_full_message()
|
||||
sent_full_message = TRUE
|
||||
/*
|
||||
if(HAS_TRAIT(owner, TRAIT_FLUID_LEAK))
|
||||
reagents.get_master_reagent().reaction_turf(get_turf(owner), 3)
|
||||
reagents.remove_reagent(fluid_id, 3)
|
||||
*/
|
||||
return FALSE
|
||||
sent_full_message = FALSE
|
||||
reagents.isolate_reagent(fluid_id)
|
||||
@@ -159,4 +161,4 @@
|
||||
else if (cached_size >= 25 && cached_size < 30)
|
||||
size = "giga"
|
||||
else if (cached_size >= 30)
|
||||
size = "impossible"
|
||||
size = "impossible"
|
||||
|
||||
@@ -387,9 +387,6 @@
|
||||
if(/obj/item/organ/genital/breasts)
|
||||
S = GLOB.breasts_shapes_list[G.shape]
|
||||
|
||||
|
||||
|
||||
|
||||
if(!S || S.icon_state == "none")
|
||||
continue
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
fluid_transfer_factor = 0.5
|
||||
size = 2 //arbitrary value derived from length and girth for sprites.
|
||||
var/condom = 0 //No condom, its better this way...
|
||||
var/sounding = 0
|
||||
var/length = 6 //inches
|
||||
var/cached_length //used to detect a change in length
|
||||
var/girth = 3.38
|
||||
@@ -75,6 +76,9 @@
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(girth, 0.25)] inch[round(girth, 0.25) != 1 ? "es" : ""] in girth."
|
||||
|
||||
if(owner)
|
||||
var/length_new = length*owner.size_multiplier
|
||||
var/girth_new = girth*owner.size_multiplier
|
||||
desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] penis. You estimate it's about [round(length_new, 0.25)] inch[round(length_new, 0.25) != 1 ? "es" : ""] long and [round(girth_new, 0.25)] inch[round(girth_new, 0.25) != 1 ? "es" : ""] in girth."
|
||||
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
||||
if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow...
|
||||
var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need.
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
can_climax = TRUE
|
||||
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
|
||||
@@ -69,7 +70,6 @@
|
||||
|
||||
/obj/item/organ/genital/testicles/update_appearance()
|
||||
switch(size)
|
||||
//if(0.1 to 1) //Hyper - Change the displayed ball sizes
|
||||
if(0.1 to 3)
|
||||
size_name = "average"
|
||||
//if(1.1 to 2)
|
||||
|
||||
@@ -93,9 +93,9 @@
|
||||
pixel_x = rand(-7,7)
|
||||
|
||||
/obj/item/dildo/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(can_customize)
|
||||
user << "<span class='notice'>Alt-Click \the [src.name] to customize it.</span>"
|
||||
. += "<span class='notice'>Alt-Click \the [src.name] to customize it.</span>"
|
||||
|
||||
/obj/item/dildo/random//totally random
|
||||
name = "random dildo"//this name will show up in vendors and shit so you know what you're vending(or don't, i guess :^))
|
||||
@@ -111,7 +111,7 @@
|
||||
obj/item/dildo/human
|
||||
dildo_shape = "human"
|
||||
name = "human dildo"
|
||||
attack_verb = list("penetrated", "slapped", "inseminated")
|
||||
attack_verb = list("penetrated", "slapped", "inseminated")
|
||||
|
||||
obj/item/dildo/plain
|
||||
dildo_shape = "plain"
|
||||
@@ -128,6 +128,12 @@ obj/item/dildo/flared/huge
|
||||
desc = "THIS THING IS HUGE!"
|
||||
dildo_size = 4
|
||||
|
||||
obj/item/dildo/flared/gigantic
|
||||
name = "bitch breaker"
|
||||
desc = "You can barely carry this thing! Meant for... \"advanced\" interrogation techniques."
|
||||
dildo_size = 5
|
||||
attack_verb = list("penetrated", "slapped", "gaped", "prolapsed", "inseminated", "destroyed", "broke", "demolished", "whacked")
|
||||
|
||||
obj/item/dildo/custom
|
||||
name = "customizable dildo"
|
||||
desc = "Thanks to significant advances in synthetic nanomaterials, this dildo is capable of taking on many different forms to fit the user's preferences! Pricy!"
|
||||
@@ -162,3 +168,13 @@ obj/item/dildo/custom
|
||||
user.adjust_eye_damage(15)
|
||||
return MANUAL_SUICIDE
|
||||
|
||||
/obj/item/dildo/flared/gigantic/suicide_act(mob/living/user)
|
||||
if(do_after(user,45,target=src))
|
||||
user.visible_message("<span class='suicide'>[user] tears-up and gags as they try to deepthroat the [src]! WHY WOULD THEY DO THAT? It looks like [user.p_theyre()] trying to commit suicide!!</span>")
|
||||
playsound(loc, 'sound/weapons/gagging.ogg', 50, 2, -1)
|
||||
user.Stun(400)
|
||||
user.adjust_blurriness(24)
|
||||
user.adjust_eye_damage(20)
|
||||
user.adjustOxyLoss(15)
|
||||
return MANUAL_SUICIDE
|
||||
|
||||
|
||||
@@ -1,2 +1,7 @@
|
||||
/client
|
||||
var/cryo_warned = -3000//when was the last time we warned them about not cryoing without an ahelp, set to -5 minutes so that rounstart cryo still warns
|
||||
|
||||
//respawn
|
||||
var/lastrespawn = 0 //when the last time they respawned.
|
||||
var/list/pastcharacters = list() //to stop players spawning back in with the same character.
|
||||
var/respawn_observing = 0
|
||||
@@ -57,10 +57,20 @@
|
||||
path = /obj/item/toy/plush/mammal/grug
|
||||
ckeywhitelist = list("herrdoktah")
|
||||
|
||||
|
||||
/datum/gear/hshack
|
||||
name = "Plastitanium Shackles"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/suit/shackles
|
||||
ckeywhitelist = list("heliocintrini")
|
||||
|
||||
/datum/gear/luwethring
|
||||
name = "Wedding Band"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/clothing/gloves/ring/luweth
|
||||
ckeywhitelist = list("luweth")
|
||||
|
||||
/datum/gear/bluedice
|
||||
name = "Blue D20"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/dice/d20/blue
|
||||
ckeywhitelist = list("jackattack41498")
|
||||
@@ -68,4 +68,32 @@
|
||||
name = "Security Hud"
|
||||
category = SLOT_GLASSES
|
||||
path = /obj/item/clothing/glasses/hud/security
|
||||
restricted_roles = list("Security Officer", "Warden", "Head of Security")
|
||||
restricted_roles = list("Security Officer", "Warden", "Head of Security")
|
||||
|
||||
/datum/gear/pinksec
|
||||
name = "Pink Security Jumpsuit"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/security/pink
|
||||
cost = 1
|
||||
restricted_roles = list("Security Officer","Warden","Head of Security")
|
||||
|
||||
/datum/gear/pinksecskirt
|
||||
name = "Pink Security Jumpskirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/security/skirt/slut/pink
|
||||
cost = 1
|
||||
restricted_roles = list("Security Officer","Warden","Head of Security")
|
||||
|
||||
/datum/gear/secwintercoat
|
||||
name = "Security Winter Coat"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/security
|
||||
cost = 1
|
||||
restricted_roles = list("Security Officer","Warden","Head of Security")
|
||||
|
||||
/datum/gear/pinksecwintercoat
|
||||
name = "Pink Security Winter Coat"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/security/pink
|
||||
cost = 1
|
||||
restricted_roles = list("Security Officer","Warden","Head of Security")
|
||||
|
||||
@@ -18,6 +18,16 @@
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/toy/plush/slimeplushie
|
||||
|
||||
/datum/gear/toy/plush/borgplushie/secdrake
|
||||
name = "SecDrake Plushie"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/toy/plush/borgplushie/secdrake
|
||||
|
||||
/datum/gear/toy/plush/borgplushie/meddrake
|
||||
name = "MediDrake Plushie"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/toy/plush/borgplushie/meddrake
|
||||
|
||||
/datum/gear/plushlamp
|
||||
name = "Lamp plushie"
|
||||
category = SLOT_IN_BACKPACK
|
||||
@@ -194,4 +204,16 @@
|
||||
/datum/gear/lipstick_white
|
||||
name = "White Lipstick"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/lipstick/white
|
||||
path = /obj/item/lipstick/white
|
||||
|
||||
/datum/gear/condom
|
||||
name = "Condom"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/condom
|
||||
cost = 1
|
||||
|
||||
/datum/gear/sounding
|
||||
name = "Sounding rod"
|
||||
category = SLOT_IN_BACKPACK
|
||||
path = /obj/item/sounding
|
||||
cost = 1
|
||||
|
||||
@@ -54,6 +54,12 @@
|
||||
path = /obj/item/clothing/head/flakhelm
|
||||
cost = 2
|
||||
|
||||
/datum/gear/delinquent //Now you too can become like your favorite punchy ghost protagonist
|
||||
name = "Delinquent Hat"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/delinquent
|
||||
cost = 3
|
||||
|
||||
/datum/gear/bunnyears
|
||||
name = "Bunny Ears"
|
||||
category = SLOT_HEAD
|
||||
|
||||
@@ -23,6 +23,11 @@
|
||||
category = SLOT_SHOES
|
||||
path = /obj/item/clothing/shoes/jackboots/toeless
|
||||
|
||||
/datum/gear/jackboots/tall
|
||||
name = "tall jackboots"
|
||||
category = SLOT_SHOES
|
||||
path = /obj/item/clothing/shoes/jackboots/tall
|
||||
|
||||
/datum/gear/winterboots
|
||||
name = "Winter boots"
|
||||
category = SLOT_SHOES
|
||||
@@ -86,4 +91,4 @@
|
||||
datum/gear/highheels
|
||||
name = "High Heels"
|
||||
category = SLOT_SHOES
|
||||
path= /obj/item/clothing/shoes/highheels
|
||||
path= /obj/item/clothing/shoes/highheels
|
||||
|
||||
@@ -38,6 +38,18 @@
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/suit_jacket/white
|
||||
|
||||
/datum/gear/galaxy_b
|
||||
name = "De Void of Soul"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lawyer/galaxy_blue
|
||||
cost = 3
|
||||
|
||||
/datum/gear/galaxy_r
|
||||
name = "Pulsar Gonne"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/lawyer/galaxy_red
|
||||
cost = 3
|
||||
|
||||
/datum/gear/assistantformal
|
||||
name = "Assistant's formal uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
@@ -153,6 +165,21 @@
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/pants/track
|
||||
|
||||
/datum/gear/redwshort
|
||||
name = "Red workout short"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/shorts/redwshort
|
||||
|
||||
/datum/gear/yellowwshort
|
||||
name = "Yellow workout short"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/shorts/yellowwshort
|
||||
|
||||
/datum/gear/pinkwshort
|
||||
name = "Pink workout short"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/shorts/pinkwshort
|
||||
|
||||
/datum/gear/comfortable
|
||||
name = "Padded Uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
@@ -416,4 +443,10 @@
|
||||
name = "Polychromic Bottomless Shirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/polychromic/bottomless
|
||||
cost = 2
|
||||
cost = 2
|
||||
|
||||
/datum/gear/corset
|
||||
name = "Corset"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/corset
|
||||
cost = 1
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/arousable = TRUE
|
||||
var/widescreenpref = TRUE
|
||||
var/autostand = TRUE
|
||||
var/auto_ooc = FALSE
|
||||
var/lewdchem = TRUE
|
||||
|
||||
//vore prefs
|
||||
@@ -23,8 +24,11 @@
|
||||
var/hound_sleeper = TRUE
|
||||
var/cit_toggles = TOGGLES_CITADEL
|
||||
|
||||
//Hyper prefs
|
||||
var/noncon = FALSE //Definitely want this off by default
|
||||
|
||||
// stuff that was in base
|
||||
max_save_slots = 10
|
||||
max_save_slots = 20
|
||||
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
|
||||
@@ -13,7 +13,15 @@
|
||||
features["mcolor3"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||
features["mcolor2"] = sanitize_hexcolor(features["mcolor2"], 3, 0)
|
||||
features["mcolor3"] = sanitize_hexcolor(features["mcolor3"], 3, 0)
|
||||
|
||||
|
||||
S["alt_titles_preferences"] >> alt_titles_preferences
|
||||
alt_titles_preferences = SANITIZE_LIST(alt_titles_preferences)
|
||||
if(SSjob)
|
||||
for(var/datum/job/job in SSjob.occupations)
|
||||
if(alt_titles_preferences[job.title])
|
||||
if(!(alt_titles_preferences[job.title] in job.alt_titles))
|
||||
alt_titles_preferences.Remove(job.title)
|
||||
|
||||
//gear loadout
|
||||
var/text_to_load
|
||||
S["loadout"] >> text_to_load
|
||||
@@ -76,6 +84,8 @@
|
||||
WRITE_FILE(S["feature_can_get_preg"], features["can_get_preg"])
|
||||
//flavor text
|
||||
WRITE_FILE(S["feature_flavor_text"], features["flavor_text"])
|
||||
//custom job titles
|
||||
WRITE_FILE(S["alt_titles_preferences"], alt_titles_preferences)
|
||||
|
||||
//gear loadout
|
||||
if(islist(chosen_gear))
|
||||
|
||||
@@ -80,9 +80,9 @@
|
||||
user.regenerate_icons()
|
||||
|
||||
/obj/item/clothing/examine(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(hasprimary | hassecondary | hastertiary)
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>") // so people don't "OOC how do you use polychromic clothes????"
|
||||
. += "<span class='notice'>Alt-click to recolor it.</span>"
|
||||
|
||||
/obj/item/clothing/Initialize()
|
||||
..()
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
. = ..()
|
||||
if(combattoggle_redir)
|
||||
if(world.time >= nextadrenalinepop)
|
||||
to_chat(user, "<span class='notice'>The built-in adrenaline injector is ready for use.</span>")
|
||||
. += "<span class='notice'>The built-in adrenaline injector is ready for use.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[DisplayTimeText(nextadrenalinepop - world.time)] left before the adrenaline injector can be used again.")
|
||||
. += "<span class='notice'>[DisplayTimeText(nextadrenalinepop - world.time)] left before the adrenaline injector can be used again."
|
||||
|
||||
/obj/item/clothing/glasses/phantomthief/syndicate/proc/injectadrenaline(mob/user, combatmodestate)
|
||||
if(istype(user))
|
||||
|
||||
@@ -172,5 +172,5 @@
|
||||
update_light()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to recolor it.</span>"
|
||||
|
||||
@@ -237,3 +237,21 @@
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/merp.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
|
||||
/datum/emote/living/bark
|
||||
key = "bark"
|
||||
key_third_person = "barks like a dog!"
|
||||
message = "barks like a dog!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = FALSE
|
||||
restraint_check = FALSE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/bark/run_emote(mob/living/user, params)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
var/path = pick(list('modular_citadel/sound/voice/bark.ogg', 'modular_citadel/sound/voice/bark1.ogg', 'modular_citadel/sound/voice/bark2.ogg'))
|
||||
playsound(user, path, 50, 1, -1)
|
||||
@@ -217,6 +217,27 @@
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/mam_ears/deerantlers
|
||||
name = "Deer Antlers"
|
||||
icon_state = "deerantlers"
|
||||
hasinner = 1
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/deerantlersears
|
||||
name = "Deer Antlers with Ears"
|
||||
icon_state = "deerantlersears"
|
||||
hasinner = 1
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/mam_ears/deerears
|
||||
name = "Deer Ears"
|
||||
icon_state = "deerears"
|
||||
hasinner = 1
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
@@ -247,6 +268,12 @@
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = SKINTONE
|
||||
|
||||
datum/sprite_accessory/ears/human/gret
|
||||
name = "Gret"
|
||||
icon_state = "gret"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = SKINTONE
|
||||
|
||||
/datum/sprite_accessory/ears/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
@@ -729,6 +756,10 @@
|
||||
extra2 = TRUE
|
||||
extra2_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/elephant
|
||||
name = "Elephant"
|
||||
icon_state = "elephant"
|
||||
@@ -739,6 +770,18 @@
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/foxalt
|
||||
name = "Fox Alt"
|
||||
icon_state = "foxalt"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/hshort
|
||||
name = "Small"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/hshark
|
||||
name = "hShark"
|
||||
icon_state = "hshark"
|
||||
@@ -773,6 +816,12 @@
|
||||
extra = TRUE
|
||||
extra_color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/skullbird
|
||||
name = "Skullbird"
|
||||
icon_state = "skullbird"
|
||||
extra = TRUE
|
||||
extra_color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/mam_snouts/lcanid
|
||||
name = "Mammal, Long"
|
||||
icon_state = "lcanid"
|
||||
@@ -1039,21 +1088,32 @@
|
||||
icon_state = "horn1"
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_ears/deer
|
||||
name = "Deer"
|
||||
icon_state = "deer"
|
||||
color_src = MUTCOLORS3
|
||||
/datum/sprite_accessory/mam_ears/deerantlers
|
||||
name = "Deer Antlers"
|
||||
icon_state = "deerantlers"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/deerantlersears
|
||||
name = "Deer Antlers with Ears"
|
||||
icon_state = "deerantlersears"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/deerears
|
||||
name = "Deer Ears"
|
||||
icon_state = "deerears"
|
||||
|
||||
/datum/sprite_accessory/mam_ears/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
|
||||
|
||||
/datum/sprite_accessory/mam_ears/elf
|
||||
name = "Elf"
|
||||
icon_state = "elf"
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/mam_ears/gret
|
||||
name = "Gret"
|
||||
icon_state = "gret"
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
|
||||
/datum/sprite_accessory/mam_ears/elephant
|
||||
name = "Elephant"
|
||||
@@ -1748,7 +1808,7 @@ datum/sprite_accessory/mam_tails/insect
|
||||
/datum/sprite_accessory/taur/synthliz/wolf/inv
|
||||
name = "Virgo - Synthetic Wolf (Inverted)"
|
||||
icon_state = "synthwolfinv"
|
||||
|
||||
|
||||
/******************************************
|
||||
*************** Ayyliums ******************
|
||||
*******************************************/
|
||||
|
||||
@@ -227,6 +227,7 @@
|
||||
liked_food = MEAT
|
||||
|
||||
/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
|
||||
C.grant_language(/datum/language/xenocommon)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
|
||||
species_traits += DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
@@ -234,6 +235,7 @@
|
||||
. = ..()
|
||||
|
||||
/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
|
||||
C.remove_language(/datum/language/xenocommon)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
|
||||
species_traits -= DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
@@ -294,6 +296,14 @@
|
||||
mutant_bodyparts -= "mam_waggingtail"
|
||||
mutant_bodyparts |= "mam_tail"
|
||||
H.update_body()
|
||||
|
||||
/datum/species/synthliz/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
|
||||
..()
|
||||
H.grant_language(/datum/language/machine)
|
||||
|
||||
/datum/species/synthliz/on_species_loss(mob/living/carbon/human/H)
|
||||
H.remove_language(/datum/language/machine)
|
||||
..()
|
||||
//Praise the Omnissiah, A challange worthy of my skills - HS
|
||||
|
||||
//EXOTIC//
|
||||
|
||||
@@ -24,12 +24,14 @@
|
||||
var/datum/action/innate/monitor_change/screen
|
||||
|
||||
/datum/species/ipc/on_species_gain(mob/living/carbon/human/C)
|
||||
C.grant_language(/datum/language/machine)
|
||||
if(isipcperson(C) && !screen)
|
||||
screen = new
|
||||
screen.Grant(C)
|
||||
..()
|
||||
|
||||
/datum/species/ipc/on_species_loss(mob/living/carbon/human/C)
|
||||
C.remove_language(/datum/language/machine)
|
||||
if(screen)
|
||||
screen.Remove(C)
|
||||
..()
|
||||
|
||||
@@ -350,20 +350,15 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
cell.use(750) //Less than a stunbaton since stunbatons hit everytime.
|
||||
weather_immunities -= "lava"
|
||||
|
||||
/mob/living/silicon/robot/throw_impact(atom/A)
|
||||
/mob/living/silicon/robot/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
|
||||
|
||||
if(!leaping)
|
||||
return ..()
|
||||
|
||||
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(hit_atom)
|
||||
if(isliving(hit_atom))
|
||||
var/mob/living/L = hit_atom
|
||||
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) ? 225 : 45) // 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)
|
||||
@@ -376,8 +371,8 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
spawn(pounce_cooldown_time) //3s by default
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
else if(A.density && !A.CanPass(src))
|
||||
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='userdanger'>You smash into [A]!</span>")
|
||||
else if(hit_atom.density && !hit_atom.CanPass(src))
|
||||
visible_message("<span class ='danger'>[src] smashes into [hit_atom]!</span>", "<span class ='userdanger'>You smash into [hit_atom]!</span>")
|
||||
playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
|
||||
@@ -75,14 +75,12 @@
|
||||
|
||||
/obj/item/robot_module/k9/be_transformed_to(obj/item/robot_module/old_module)
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/static/list/k9_models
|
||||
var/static/list/k9_models
|
||||
if(!k9_models)
|
||||
k9_models = list()
|
||||
var/list/L = list("Default" = "k9")
|
||||
for(var/a in L)
|
||||
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
|
||||
wide.pixel_x = -16
|
||||
k9_models[a] = wide
|
||||
k9_models = list(
|
||||
"k9" = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "k9"),
|
||||
"Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakesecbox")
|
||||
)
|
||||
if(R.client?.ckey == "nezuli")
|
||||
var/image/bad_snowflake = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "alina-sec")
|
||||
bad_snowflake.pixel_x = -16
|
||||
@@ -92,9 +90,13 @@
|
||||
if(!k9_borg_icon)
|
||||
return
|
||||
switch(k9_borg_icon)
|
||||
if("Default")
|
||||
if("k9")
|
||||
cyborg_base_icon = "k9"
|
||||
moduleselect_icon = "k9"
|
||||
if("Drake")
|
||||
cyborg_base_icon = "drakesec"
|
||||
cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi'
|
||||
sleeper_overlay = "drakesecsleeper"
|
||||
if("Alina")
|
||||
cyborg_base_icon = "alina-sec"
|
||||
special_light_key = "alina"
|
||||
@@ -138,12 +140,11 @@
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/static/list/medihound_models
|
||||
if(!medihound_models)
|
||||
medihound_models = list()
|
||||
var/list/L = list("Default" = "medihound", "Dark" = "medihounddark")
|
||||
for(var/a in L)
|
||||
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
|
||||
wide.pixel_x = -16
|
||||
medihound_models[a] = wide
|
||||
medihound_models = list(
|
||||
"medihound" = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "medihound"),
|
||||
"Dark" = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "medihounddark"),
|
||||
"Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakemedbox")
|
||||
)
|
||||
if(R.client?.ckey == "nezuli")
|
||||
var/image/bad_snowflake = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "alina-med")
|
||||
bad_snowflake.pixel_x = -16
|
||||
@@ -158,6 +159,10 @@
|
||||
if("Dark")
|
||||
cyborg_base_icon = "medihounddark"
|
||||
sleeper_overlay = "mdsleeper"
|
||||
if("Drake")
|
||||
cyborg_base_icon = "drakemed"
|
||||
cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi'
|
||||
sleeper_overlay = "drakemedsleeper"
|
||||
if("Alina")
|
||||
cyborg_base_icon = "alina-med"
|
||||
special_light_key = "alina"
|
||||
@@ -191,6 +196,26 @@
|
||||
cyborg_pixel_offset = -16
|
||||
dogborg = TRUE
|
||||
|
||||
/obj/item/robot_module/scrubpup/be_transformed_to(obj/item/robot_module/old_module)
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/static/list/scrubpup_models
|
||||
if(!scrubpup_models)
|
||||
scrubpup_models = list(
|
||||
"scrubpup" = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "scrubpup"),
|
||||
"Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakejanitbox")
|
||||
)
|
||||
var/scrubpup_borg_icon = show_radial_menu(R, R , scrubpup_models, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE, tooltips = TRUE)
|
||||
if(!scrubpup_borg_icon)
|
||||
return
|
||||
switch(scrubpup_borg_icon)
|
||||
if("scrubpup")
|
||||
cyborg_base_icon = "scrubpup"
|
||||
if("Drake")
|
||||
cyborg_base_icon = "drakejanit"
|
||||
cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi'
|
||||
sleeper_overlay = "drakejanitsleeper"
|
||||
return ..()
|
||||
|
||||
/obj/item/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
|
||||
..()
|
||||
var/obj/item/lightreplacer/LR = locate(/obj/item/lightreplacer) in basic_modules
|
||||
@@ -378,7 +403,8 @@
|
||||
"Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "whitespider"),
|
||||
"BootyF" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "bootypeace"),
|
||||
"BootyM" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "bootypeaceM"),
|
||||
"BootyS" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "bootypeaceS")
|
||||
"BootyS" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "bootypeaceS"),
|
||||
"Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakepeacebox")
|
||||
)
|
||||
peace_models = sortList(peace_models)
|
||||
var/peace_borg_icon = show_radial_menu(R, R , peace_models, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE, tooltips = TRUE)
|
||||
@@ -402,6 +428,15 @@
|
||||
cyborg_base_icon = "bootypeaceS"
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
hat_offset = 3
|
||||
if("Drake")
|
||||
cyborg_base_icon = "drakepeace"
|
||||
can_be_pushed = FALSE
|
||||
hat_offset = INFINITY
|
||||
cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi'
|
||||
sleeper_overlay = "drakepeacesleeper"
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
return ..()
|
||||
|
||||
/obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module)
|
||||
@@ -585,6 +620,15 @@
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
if("Drake")
|
||||
cyborg_base_icon = "drakeeng"
|
||||
can_be_pushed = FALSE
|
||||
hat_offset = INFINITY
|
||||
cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi'
|
||||
sleeper_overlay = "drakeengsleeper"
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
if("Alina")
|
||||
cyborg_base_icon = "alina-eng"
|
||||
special_light_key = "alina"
|
||||
@@ -623,7 +667,8 @@
|
||||
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymin"),
|
||||
"BootyF" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "bootyminer"),
|
||||
"BootyM" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "bootyminerM"),
|
||||
"BootyS" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "bootyminerS")
|
||||
"BootyS" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "bootyminerS"),
|
||||
"Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakeminebox")
|
||||
)
|
||||
miner_models = sortList(miner_models)
|
||||
var/miner_borg_icon = show_radial_menu(R, R , miner_models, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE, tooltips = TRUE)
|
||||
@@ -666,6 +711,15 @@
|
||||
cyborg_base_icon = "bootyminerS"
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
|
||||
hat_offset = 3
|
||||
if("Drake")
|
||||
cyborg_base_icon = "drakemine"
|
||||
can_be_pushed = FALSE
|
||||
hat_offset = INFINITY
|
||||
cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi'
|
||||
sleeper_overlay = "drakeminesleeper"
|
||||
has_snowflake_deadsprite = TRUE
|
||||
dogborg = TRUE
|
||||
cyborg_pixel_offset = -16
|
||||
return ..()
|
||||
|
||||
/obj/item/robot_module/standard/be_transformed_to(obj/item/robot_module/old_module)
|
||||
|
||||
@@ -176,9 +176,9 @@
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/examine(mob/user)
|
||||
. = ..()
|
||||
if(cell)
|
||||
to_chat(user, "<span class='notice'>[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.</span>")
|
||||
. += "<span class='notice'>[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] doesn't seem to have a cell!</span>")
|
||||
. += "<span class='notice'>[src] doesn't seem to have a cell!</span>"
|
||||
|
||||
/obj/item/gun/ballistic/automatic/magrifle_e/can_shoot()
|
||||
if(QDELETED(cell))
|
||||
@@ -239,9 +239,9 @@
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/examine(mob/user)
|
||||
. = ..()
|
||||
if(cell)
|
||||
to_chat(user, "<span class='notice'>[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.</span>")
|
||||
. += "<span class='notice'>[src]'s cell is [round(cell.charge / cell.maxcharge, 0.1) * 100]% full.</span>"
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] doesn't seem to have a cell!</span>")
|
||||
. += "<span class='notice'>[src] doesn't seem to have a cell!</span>"
|
||||
|
||||
/obj/item/gun/ballistic/automatic/pistol/mag_e/can_shoot()
|
||||
if(QDELETED(cell))
|
||||
|
||||
@@ -218,8 +218,8 @@
|
||||
body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
/obj/item/gun/ballistic/automatic/AM4B/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to recolor it.</span>"
|
||||
|
||||
/obj/item/ammo_box/magazine/toy/AM4C
|
||||
name = "foam force AM4-C magazine"
|
||||
|
||||
@@ -94,8 +94,8 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/gun/energy/pumpaction/examine(mob/user) //so people don't ask HOW TO CHANGE FIRING MODE
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to change firing modes.</span>")
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to change firing modes.</span>"
|
||||
|
||||
/obj/item/gun/energy/pumpaction/worn_overlays(isinhands, icon_file) //ammo counter for inhands
|
||||
. = ..()
|
||||
|
||||
@@ -81,6 +81,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
SM.real_name = M.real_name
|
||||
M.dna.transfer_identity(SM)
|
||||
SM.updateappearance(mutcolor_update=1)
|
||||
SM.size_multiplier = M.size_multiplier
|
||||
var/mob/dead/observer/C = pick(candies)
|
||||
message_admins("Ghost candidate found! [C] key [C.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)")
|
||||
SM.key = C.key
|
||||
@@ -171,6 +172,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
C.real_name = M.real_name
|
||||
M.dna.transfer_identity(C, transfer_SE=1)
|
||||
C.updateappearance(mutcolor_update=1)
|
||||
C.size_multiplier = M.size_multiplier
|
||||
C.apply_status_effect(/datum/status_effect/chem/SGDF)
|
||||
var/datum/status_effect/chem/SGDF/S = C.has_status_effect(/datum/status_effect/chem/SGDF)
|
||||
S.original = M
|
||||
@@ -231,6 +233,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
SM.real_name = M.real_name
|
||||
M.dna.transfer_identity(SM)
|
||||
SM.updateappearance(mutcolor_update=1)
|
||||
SM.size_multiplier = M.size_multiplier
|
||||
M.mind.transfer_to(SM)
|
||||
M.visible_message("<span class='warning'>[M]'s body shudders, the growth factor rapidly splitting into a new clone of [M].</span>")
|
||||
|
||||
|
||||
@@ -50,6 +50,9 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
if(istype(O, /obj/item/bedsheet))
|
||||
new /obj/item/bedsheet/cosmos(get_turf(O))
|
||||
qdel(O)
|
||||
if(istype(O, /obj/item/clothing/suit/hooded/wintercoat))
|
||||
new /obj/item/clothing/suit/hooded/wintercoat/cosmic(get_turf(O))
|
||||
qdel(O)
|
||||
|
||||
|
||||
/datum/reagent/fermi/astral/on_mob_life(mob/living/carbon/M) // Gives you the ability to astral project for a moment!
|
||||
|
||||
@@ -10,8 +10,9 @@
|
||||
pixel_y = 0 // Override value from parent.
|
||||
|
||||
/obj/item/holder/micro/examine(var/mob/user)
|
||||
. = list()
|
||||
for(var/mob/living/M in contents)
|
||||
M.examine(user)
|
||||
. += M.examine(user)
|
||||
|
||||
/obj/item/holder/MouseDrop(mob/M as mob)
|
||||
..()
|
||||
|
||||
Reference in New Issue
Block a user