Merge remote-tracking branch 'refs/remotes/Citadel-Station-13/master' into job-menu-improvements
This commit is contained in:
@@ -93,6 +93,7 @@
|
||||
#define FIRE_PRIORITY_SERVER_MAINT 10
|
||||
#define FIRE_PRIORITY_RESEARCH 10
|
||||
#define FIRE_PRIORITY_VIS 10
|
||||
#define FIRE_PRIORITY_VORE 10
|
||||
#define FIRE_PRIORITY_GARBAGE 15
|
||||
#define FIRE_PRIORITY_WET_FLOORS 20
|
||||
#define FIRE_PRIORITY_AIR 20
|
||||
|
||||
@@ -107,7 +107,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
|
||||
/obj/item/storage/toolbox/artistic = 2,
|
||||
/obj/item/toy/eightball = 1,
|
||||
/obj/item/reagent_containers/pill/floorpill = 1,
|
||||
/obj/item/reagent_containers/food/snacks/cannedpeaches/maint = 1,
|
||||
/obj/item/reagent_containers/food/snacks/cannedpeaches/maint = 2,
|
||||
/obj/item/storage/daki = 3, //VERY IMPORTANT CIT CHANGE - adds bodypillows to maint
|
||||
/obj/item/storage/pill_bottle/penis_enlargement = 2,
|
||||
/obj/item/storage/pill_bottle/breast_enlargement = 2,
|
||||
|
||||
@@ -9,6 +9,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
|
||||
runlevels = RUNLEVEL_GAME
|
||||
|
||||
var/list/quirks = list() //Assoc. list of all roundstart quirk datum types; "name" = /path/
|
||||
var/list/quirk_names_by_path = list()
|
||||
var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad
|
||||
var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process
|
||||
|
||||
@@ -22,11 +23,68 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
|
||||
var/datum/quirk/T = V
|
||||
quirks[initial(T.name)] = T
|
||||
quirk_points[initial(T.name)] = initial(T.value)
|
||||
quirk_names_by_path[T] = initial(T.name)
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects)
|
||||
/datum/controller/subsystem/processing/quirks/proc/AssignQuirks(mob/living/user, client/cli, spawn_effects, roundstart = FALSE, datum/job/job, silent = FALSE, mob/to_chat_target)
|
||||
GenerateQuirks(cli)
|
||||
for(var/V in cli.prefs.character_quirks)
|
||||
var/list/quirks = cli.prefs.character_quirks.Copy()
|
||||
var/list/cut
|
||||
if(job && job.blacklisted_quirks)
|
||||
cut = filter_quirks(quirks, job)
|
||||
for(var/V in quirks)
|
||||
user.add_quirk(V, spawn_effects)
|
||||
if(!silent && LAZYLEN(cut))
|
||||
to_chat(to_chat_target || user, "<span class='boldwarning'>All of your non-neutral character quirks have been cut due to these quirks conflicting with your job assignment: [english_list(cut)].</span>")
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/quirk_path_by_name(name)
|
||||
return quirks[name]
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/quirk_points_by_name(name)
|
||||
return quirk_points[name]
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/quirk_name_by_path(path)
|
||||
return quirk_names_by_path[path]
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/total_points(list/quirk_names)
|
||||
. = 0
|
||||
for(var/i in quirk_names)
|
||||
. += quirk_points_by_name(i)
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/filter_quirks(list/quirks, datum/job/job)
|
||||
var/list/cut = list()
|
||||
var/list/banned_names = list()
|
||||
for(var/i in job.blacklisted_quirks)
|
||||
var/name = quirk_name_by_path(i)
|
||||
if(name)
|
||||
banned_names += name
|
||||
var/list/blacklisted = quirks & banned_names
|
||||
if(length(blacklisted))
|
||||
for(var/i in blacklisted)
|
||||
quirks -= i
|
||||
cut += i
|
||||
|
||||
/* //Code to automatically reduce positive quirks until balance is even.
|
||||
var/points_used = total_points(quirks)
|
||||
if(points_used > 0)
|
||||
//they owe us points, let's collect.
|
||||
for(var/i in quirks)
|
||||
var/points = quirk_points_by_name(i)
|
||||
if(points > 0)
|
||||
cut += i
|
||||
quirks -= i
|
||||
points_used -= points
|
||||
if(points_used <= 0)
|
||||
break
|
||||
*/
|
||||
|
||||
//Nah, let's null all non-neutrals out.
|
||||
if(cut.len)
|
||||
for(var/i in quirks)
|
||||
if(quirk_points_by_name(i) != 0)
|
||||
//cut += i -- Commented out: Only show the ones that triggered the quirk purge.
|
||||
quirks -= i
|
||||
|
||||
return cut
|
||||
|
||||
/datum/controller/subsystem/processing/quirks/proc/GenerateQuirks(client/user)
|
||||
if(user.prefs.character_quirks.len)
|
||||
|
||||
@@ -385,7 +385,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
if(player.mind.assigned_role != player.mind.special_role)
|
||||
SSjob.EquipRank(N, player.mind.assigned_role, 0)
|
||||
if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character))
|
||||
SSquirks.AssignQuirks(N.new_character, N.client, TRUE)
|
||||
SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N)
|
||||
CHECK_TICK
|
||||
if(captainless)
|
||||
for(var/mob/dead/new_player/N in GLOB.player_list)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
SUBSYSTEM_DEF(bellies)
|
||||
name = "Bellies"
|
||||
priority = 5
|
||||
priority = FIRE_PRIORITY_VORE
|
||||
wait = 1 SECONDS
|
||||
flags = SS_KEEP_TIMING|SS_NO_INIT
|
||||
runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
var/mob/living/quirk_holder
|
||||
|
||||
/datum/quirk/New(mob/living/quirk_mob, spawn_effects)
|
||||
..()
|
||||
if(!quirk_mob || (human_only && !ishuman(quirk_mob)) || quirk_mob.has_quirk(type))
|
||||
qdel(src)
|
||||
quirk_holder = quirk_mob
|
||||
|
||||
@@ -498,6 +498,23 @@ Code:
|
||||
else
|
||||
menu += "[ldat]"
|
||||
|
||||
menu += "<h4>Pimpin' Ride:</h4>"
|
||||
|
||||
ldat = null
|
||||
for (var/obj/vehicle/ridden/janicart/M in world)
|
||||
var/turf/ml = get_turf(M)
|
||||
|
||||
if(ml)
|
||||
if (ml.z != cl.z)
|
||||
continue
|
||||
var/direction = get_dir(src, M)
|
||||
ldat += "Ride - <b>\[[ml.x],[ml.y] ([uppertext(dir2text(direction))])\]</b><br>"
|
||||
|
||||
if (!ldat)
|
||||
menu += "None"
|
||||
else
|
||||
menu += "[ldat]"
|
||||
|
||||
menu += "<h4>Located Janitorial Cart:</h4>"
|
||||
|
||||
ldat = null
|
||||
|
||||
@@ -524,12 +524,15 @@
|
||||
/obj/item/grenade/chem_grenade,
|
||||
/obj/item/lightreplacer,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/reagent_containers/glass/beaker,
|
||||
/obj/item/reagent_containers/glass/bottle,
|
||||
/obj/item/reagent_containers/spray,
|
||||
/obj/item/soap,
|
||||
/obj/item/holosign_creator,
|
||||
/obj/item/key/janitor,
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/melee/flyswatter,
|
||||
/obj/item/paint/paint_remover,
|
||||
/obj/item/assembly/mousetrap
|
||||
))
|
||||
|
||||
|
||||
+3
-2
@@ -137,7 +137,7 @@ GLOBAL_VAR(restart_counter)
|
||||
// but those are both private, so let's put the commit info in the runtime
|
||||
// log which is ultimately public.
|
||||
log_runtime(GLOB.revdata.get_log_message())
|
||||
|
||||
|
||||
/world/Topic(T, addr, master, key)
|
||||
TGS_TOPIC //redirect to server tools if necessary
|
||||
|
||||
@@ -270,7 +270,8 @@ GLOBAL_VAR(restart_counter)
|
||||
if (M.client)
|
||||
n++
|
||||
|
||||
features += "[SSmapping.config.map_name]" //CIT CHANGE - makes the hub entry display the current map
|
||||
if(SSmapping.config) // this just stops the runtime, honk.
|
||||
features += "[SSmapping.config.map_name]" //CIT CHANGE - makes the hub entry display the current map
|
||||
|
||||
if(get_security_level())//CIT CHANGE - makes the hub entry show the security level
|
||||
features += "[get_security_level()] alert"
|
||||
|
||||
@@ -1699,7 +1699,7 @@
|
||||
/datum/supply_pack/service/janitor/janpremium
|
||||
name = "Janitor Premium Supplies"
|
||||
desc = "Do to the union for better supplies, we have desided to make a deal for you, In this crate you can get a brand new chem, Drying Angent this stuff is the work of slimes or magic! This crate also contains a rag to test out the Drying Angent magic, three wet floor signs, and some spare bottles of ammonia."
|
||||
cost = 3000
|
||||
cost = 1750
|
||||
access = ACCESS_JANITOR
|
||||
contains = list(/obj/item/caution,
|
||||
/obj/item/caution,
|
||||
@@ -1707,9 +1707,20 @@
|
||||
/obj/item/reagent_containers/rag,
|
||||
/obj/item/reagent_containers/glass/bottle/ammonia,
|
||||
/obj/item/reagent_containers/glass/bottle/ammonia,
|
||||
/obj/item/reagent_containers/glass/bottle/ammonia,
|
||||
/obj/item/reagent_containers/spray/drying_agent)
|
||||
crate_name = "janitor backpack crate"
|
||||
|
||||
/datum/supply_pack/service/janitor/janpimp
|
||||
name = "Custodial Cruiser"
|
||||
desc = "Clown steal your ride? Assistant lock it in the dorms? Order a new one and get back to cleaning in style!"
|
||||
cost = 3000
|
||||
access = ACCESS_JANITOR
|
||||
contains = list(/obj/vehicle/ridden/janicart,
|
||||
/obj/item/key/janitor)
|
||||
crate_name = "janitor ride crate"
|
||||
crate_type = /obj/structure/closet/crate/large
|
||||
|
||||
/datum/supply_pack/service/mule
|
||||
name = "MULEbot Crate"
|
||||
desc = "Pink-haired Quartermaster not doing her job? Replace her with this tireless worker, today!"
|
||||
|
||||
@@ -65,6 +65,9 @@
|
||||
var/warcry = "AT"
|
||||
|
||||
/obj/item/clothing/gloves/rapid/Touch(mob/living/target,proximity = TRUE)
|
||||
if(!istype(target))
|
||||
return
|
||||
|
||||
var/mob/living/M = loc
|
||||
|
||||
if(M.a_intent == INTENT_HARM)
|
||||
@@ -87,6 +90,9 @@
|
||||
warcry = "owo" //Shouldn't ever come into play
|
||||
|
||||
/obj/item/clothing/gloves/rapid/hug/Touch(mob/living/target,proximity = TRUE)
|
||||
if(!istype(target))
|
||||
return
|
||||
|
||||
var/mob/living/M = loc
|
||||
|
||||
if(M.a_intent == INTENT_HELP)
|
||||
|
||||
@@ -78,6 +78,12 @@
|
||||
// these vars are not really standardized but all would theoretically create stuff on death
|
||||
for(var/v in list("butcher_results","corpse","weapon1","weapon2","blood_volume") & mob.vars)
|
||||
mob.vars[v] = null
|
||||
ENABLE_BITFIELD(mob.flags_1, HOLOGRAM_1)
|
||||
if(isliving(mob))
|
||||
var/mob/living/L = mob
|
||||
L.feeding = FALSE
|
||||
L.devourable = FALSE
|
||||
L.digestable = FALSE
|
||||
return mob
|
||||
|
||||
/obj/effect/holodeck_effect/mobspawner/deactivate(var/obj/machinery/computer/holodeck/HC)
|
||||
@@ -100,7 +106,7 @@
|
||||
|
||||
/obj/effect/holodeck_effect/mobspawner/penguin
|
||||
mobtype = /mob/living/simple_animal/pet/penguin/emperor
|
||||
|
||||
|
||||
/obj/effect/holodeck_effect/mobspawner/penguin/Initialize()
|
||||
if(prob(1))
|
||||
mobtype = /mob/living/simple_animal/pet/penguin/emperor/shamebrero
|
||||
|
||||
@@ -69,6 +69,8 @@
|
||||
if(default_deconstruction_screwdriver(user, "dnamod", "dnamod", I))
|
||||
update_icon()
|
||||
return
|
||||
else if(default_unfasten_wrench(user, I))
|
||||
return
|
||||
if(default_deconstruction_crowbar(I))
|
||||
return
|
||||
if(iscyborg(user))
|
||||
|
||||
@@ -218,13 +218,13 @@
|
||||
|
||||
// Strawberry
|
||||
/obj/item/seeds/strawberries
|
||||
name = "pack of green grape seeds"
|
||||
name = "pack of strawberrie seeds"
|
||||
desc = "These seeds grow into strawberries vines."
|
||||
icon_state = "seed-strawberry"
|
||||
species = "strawberry"
|
||||
plantname = "Strawberry Vine"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/strawberries
|
||||
reagents_add = list("vitamin" = 0.07, "nutriment" = 0.1, "sugar" = 0.1)
|
||||
reagents_add = list("vitamin" = 0.07, "nutriment" = 0.1, "sugar" = 0.2)
|
||||
mutatelist = list()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/strawberries
|
||||
@@ -233,4 +233,4 @@
|
||||
icon_state = "strawberries"
|
||||
filling_color = "#7FFF00"
|
||||
tastes = list("strawberries" = 1)
|
||||
wine_power = 20
|
||||
wine_power = 20
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
var/antag_rep = 10
|
||||
|
||||
var/list/mind_traits // Traits added to the mind of the mob assigned this job
|
||||
var/list/blacklisted_quirks //list of quirk typepaths blacklisted.
|
||||
|
||||
var/display_order = JOB_DISPLAY_ORDER_DEFAULT
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
display_order = JOB_DISPLAY_ORDER_CAPTAIN
|
||||
|
||||
blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/nonviolent, /datum/quirk/insanity)
|
||||
|
||||
/datum/job/captain/get_access()
|
||||
return get_all_accesses()
|
||||
|
||||
|
||||
@@ -419,7 +419,7 @@
|
||||
SSticker.mode.make_antag_chance(humanc)
|
||||
|
||||
if(humanc && CONFIG_GET(flag/roundstart_traits))
|
||||
SSquirks.AssignQuirks(humanc, humanc.client, TRUE)
|
||||
SSquirks.AssignQuirks(humanc, humanc.client, TRUE, FALSE, job, FALSE)
|
||||
|
||||
log_manifest(character.mind.key,character.mind,character,latejoin = TRUE)
|
||||
|
||||
|
||||
@@ -636,14 +636,15 @@
|
||||
else if(canmove)
|
||||
if(on_fire)
|
||||
resist_fire() //stop, drop, and roll
|
||||
else if(resting) //cit change - allows resisting out of resting
|
||||
return
|
||||
if(resting) //cit change - allows resisting out of resting
|
||||
resist_a_rest() // ditto
|
||||
else if(iscarbon(src)) //Citadel Change for embedded removal memes
|
||||
var/mob/living/carbon/C = src
|
||||
if(!C.handcuffed && !C.legcuffed)
|
||||
return TRUE
|
||||
else if(last_special <= world.time)
|
||||
return
|
||||
if(resist_embedded()) //Citadel Change for embedded removal memes
|
||||
return
|
||||
if(last_special <= world.time)
|
||||
resist_restraints() //trying to remove cuffs.
|
||||
return
|
||||
|
||||
|
||||
/mob/proc/resist_grab(moving_resist)
|
||||
|
||||
@@ -49,6 +49,8 @@
|
||||
// Simple animals have only one belly. This creates it (if it isn't already set up)
|
||||
/mob/living/simple_animal/init_vore()
|
||||
vore_init = TRUE
|
||||
if(CHECK_BITFIELD(flags_1, HOLOGRAM_1))
|
||||
return
|
||||
if(vore_organs.len)
|
||||
return
|
||||
if(no_vore) //If it can't vore, let's not give it a stomach.
|
||||
|
||||
@@ -32,4 +32,12 @@
|
||||
id = "mining"
|
||||
build_path = /obj/item/circuitboard/computer/mining
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/miningshuttle
|
||||
name = "Computer Design (Mining Shuttle Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Mining Shuttle Console."
|
||||
id = "miningshuttle"
|
||||
build_path = /obj/item/circuitboard/computer/mining_shuttle
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
@@ -290,6 +290,16 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/light_replacer
|
||||
name = "Light Replacer"
|
||||
desc = "A device to automatically replace lights. Refill with working light bulbs."
|
||||
id = "light_replacer"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000)
|
||||
build_path = /obj/item/lightreplacer
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/blutrash
|
||||
name = "Trashbag of Holding"
|
||||
desc = "An advanced trash bag with bluespace properties; capable of holding a plethora of garbage."
|
||||
|
||||
@@ -57,16 +57,6 @@
|
||||
category = list("Misc","Power Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/light_replacer
|
||||
name = "Light Replacer"
|
||||
desc = "A device to automatically replace lights. Refill with working light bulbs."
|
||||
id = "light_replacer"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000)
|
||||
build_path = /obj/item/lightreplacer
|
||||
category = list("Power Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/inducer
|
||||
name = "Inducer"
|
||||
desc = "The NT-75 Electromagnetic Power Inducer can wirelessly induce electric charge in an object, allowing you to recharge power cells without having to remove them."
|
||||
|
||||
@@ -432,7 +432,7 @@
|
||||
display_name = "Computer Consoles"
|
||||
description = "Computers and how they work."
|
||||
prereq_ids = list("datatheory")
|
||||
design_ids = list("cargo", "cargorequest", "libraryconsole", "mining", "crewconsole", "rdcamera", "comconsole", "idcardconsole", "seccamera")
|
||||
design_ids = list("cargo", "cargorequest", "libraryconsole", "mining", "miningshuttle", "crewconsole", "rdcamera", "comconsole", "idcardconsole", "seccamera")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000)
|
||||
export_price = 5000
|
||||
|
||||
|
||||
@@ -354,7 +354,8 @@
|
||||
if("mam_body_markings" in S.default_features)
|
||||
var/datum/sprite_accessory/Smark
|
||||
Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]]
|
||||
body_markings_icon = Smark.icon
|
||||
if(Smark)
|
||||
body_markings_icon = Smark.icon
|
||||
if(H.dna.features.["mam_body_markings"] != "None")
|
||||
body_markings = lowertext(H.dna.features.["mam_body_markings"])
|
||||
auxmarking = lowertext(H.dna.features.["mam_body_markings"])
|
||||
|
||||
@@ -31,7 +31,9 @@
|
||||
/obj/item/seeds/replicapod = 3,
|
||||
/obj/item/seeds/wheat/rice = 3,
|
||||
/obj/item/seeds/soya = 3,
|
||||
/obj/item/seeds/sugarcane = 3,
|
||||
/obj/item/seeds/sunflower = 3,
|
||||
/obj/item/seeds/strawberries = 3,
|
||||
/obj/item/seeds/tea = 3,
|
||||
/obj/item/seeds/tobacco = 3,
|
||||
/obj/item/seeds/tomato = 3,
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Bhijn"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "You can now actually use the resist hotkey to resist out of handcuffs. Woah, revolutionary"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Linzolle"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "mining shuttle console can now be printed after computer consoles have been researched"
|
||||
@@ -0,0 +1,9 @@
|
||||
author: "Owai-Seek"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "custodial cruiser cargo crate"
|
||||
- tweak: "removed light replacer from power designs and moved to misc designs"
|
||||
- tweak: "added pimpin ride to custodial locator"
|
||||
- tweak: "added additional items to janibelt whitelist"
|
||||
- tweak: "made plant DNA manipulator unwrenchable"
|
||||
- balance: "reduced janitor premium supply costs"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "Raptorizer"
|
||||
delete-after: True
|
||||
changes:
|
||||
- tweak: "Doubled peach spawn rate"
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "kappa-sama"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "seed"
|
||||
@@ -3,9 +3,7 @@
|
||||
// box of hugs
|
||||
/obj/item/storage/box/hug/attack_self(mob/user)
|
||||
. = ..()
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
|
||||
if(mood)
|
||||
mood.add_event("hugbox", /datum/mood_event/hugbox)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"hugbox", /datum/mood_event/hugbox)
|
||||
|
||||
//Removed headpats here, duplicate code?
|
||||
|
||||
@@ -13,25 +11,17 @@
|
||||
/obj/item/toy/plush/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(stuffed || grenade)
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
|
||||
if(mood)
|
||||
mood.add_event("plushpet", /datum/mood_event/plushpet)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushpet", /datum/mood_event/plushpet)
|
||||
else
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
|
||||
if(mood)
|
||||
mood.add_event("plush_nostuffing", /datum/mood_event/plush_nostuffing)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plush_nostuffing", /datum/mood_event/plush_nostuffing)
|
||||
|
||||
// Jack the Ripper starring plush
|
||||
/obj/item/toy/plush/attackby(obj/item/I, mob/living/user, params)
|
||||
. = ..()
|
||||
if(I.is_sharp())
|
||||
if(!grenade)
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
|
||||
if(mood)
|
||||
mood.add_event("plushjack", /datum/mood_event/plushjack)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushjack", /datum/mood_event/plushjack)
|
||||
|
||||
// plush playing (plush-on-plush action)
|
||||
if(istype(I, /obj/item/toy/plush))
|
||||
GET_COMPONENT_FROM(mood, /datum/component/mood, user)
|
||||
if(mood)
|
||||
mood.add_event("plushplay", /datum/mood_event/plushplay)
|
||||
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushplay", /datum/mood_event/plushplay)
|
||||
|
||||
@@ -322,31 +322,6 @@
|
||||
name = "worn pet collar"
|
||||
desc = "a pet collar that looks well used."
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/examine(mob/user)
|
||||
. = ..()
|
||||
if(usr.ckey != "technicalmagi")
|
||||
to_chat(user, "There's something odd about the it. You probably shouldn't wear it...")//warn people not to wear it if they're not Naomi, lest they become as crazy as she is
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/equipped()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/dropped()
|
||||
. = ..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi/process()
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(loc))
|
||||
H = loc
|
||||
if(!H)
|
||||
return
|
||||
else if(H.get_item_by_slot(SLOT_NECK) == src)
|
||||
if(H.arousalloss < H.max_arousal / 3)
|
||||
H.arousalloss = H.max_arousal / 3
|
||||
if(prob(5) && H.hallucination < 15)
|
||||
H.hallucination += 10
|
||||
|
||||
/obj/item/clothing/neck/cloak/green
|
||||
name = "Generic Green Cloak"
|
||||
desc = "This cloak doesn't seem too special."
|
||||
|
||||
@@ -13,18 +13,19 @@
|
||||
/mob/living/carbon/human/species/xeno
|
||||
race = /datum/species/xeno
|
||||
|
||||
/mob/living/carbon/human/resist()
|
||||
. = ..()
|
||||
if(wear_suit && wear_suit.breakouttime)//added in human cuff breakout proc
|
||||
/mob/living/proc/resist_embedded()
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/resist_embedded()
|
||||
if(handcuffed || legcuffed || (wear_suit && wear_suit.breakouttime))
|
||||
return
|
||||
if(.)
|
||||
if(canmove && !on_fire)
|
||||
for(var/obj/item/bodypart/L in bodyparts)
|
||||
if(istype(L) && L.embedded_objects.len)
|
||||
for(var/obj/item/I in L.embedded_objects)
|
||||
if(istype(I) && I.w_class >= WEIGHT_CLASS_NORMAL) //minimum weight class to insta-ripout via resist
|
||||
remove_embedded_unsafe(L, I, src, 1.5) //forcefully call the remove embedded unsafe proc but with extra pain multiplier. if you want to remove it less painfully, examine and remove it carefully.
|
||||
return FALSE //Hands are occupied
|
||||
if(canmove && !on_fire)
|
||||
for(var/obj/item/bodypart/L in bodyparts)
|
||||
if(istype(L) && L.embedded_objects.len)
|
||||
for(var/obj/item/I in L.embedded_objects)
|
||||
if(istype(I) && I.w_class >= WEIGHT_CLASS_NORMAL) //minimum weight class to insta-ripout via resist
|
||||
remove_embedded_unsafe(L, I, src, 1.5) //forcefully call the remove embedded unsafe proc but with extra pain multiplier. if you want to remove it less painfully, examine and remove it carefully.
|
||||
return TRUE //Hands are occupied
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/remove_embedded_unsafe(obj/item/bodypart/L, obj/item/I, mob/user, painmul = 1)
|
||||
|
||||
@@ -152,11 +152,13 @@
|
||||
SSbellies.belly_list += src
|
||||
|
||||
/obj/belly/Destroy()
|
||||
SSbellies.belly_list -= src
|
||||
if(owner)
|
||||
owner.vore_organs -= src
|
||||
owner = null
|
||||
. = ..()
|
||||
Remove(owner)
|
||||
return ..()
|
||||
|
||||
/obj/belly/proc/Remove(mob/living/owner)
|
||||
owner.vore_organs -= src
|
||||
owner = null
|
||||
|
||||
// Called whenever an atom enters this belly
|
||||
/obj/belly/Entered(var/atom/movable/thing,var/atom/OldLoc)
|
||||
|
||||
@@ -4,10 +4,16 @@
|
||||
recent_sound = FALSE
|
||||
return SSBELLIES_IGNORED
|
||||
|
||||
if(!owner)
|
||||
qdel(src)
|
||||
SSbellies.belly_list -= src
|
||||
return SSBELLIES_PROCESSED
|
||||
|
||||
if(loc != owner)
|
||||
if(istype(owner))
|
||||
loc = owner
|
||||
if(isliving(owner)) //we don't have machine based bellies. (yet :honk:)
|
||||
forceMove(owner)
|
||||
else
|
||||
SSbellies.belly_list -= src
|
||||
qdel(src)
|
||||
return SSBELLIES_PROCESSED
|
||||
|
||||
|
||||
Reference in New Issue
Block a user