Merge branch 'Citadel-Station-13:master' into WanderingFox95-TribalOverhaul
This commit is contained in:
@@ -99,8 +99,8 @@
|
||||
. = ..()
|
||||
if(!. && ismob(loc) && loc == usr)
|
||||
var/mob/M = loc
|
||||
if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand))
|
||||
var/atom/movable/screen/inventory/hand/H = over_object
|
||||
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
|
||||
|
||||
/obj/item/defibrillator/attackby(obj/item/W, mob/user, params)
|
||||
@@ -283,7 +283,7 @@
|
||||
var/combat = FALSE //If it penetrates armor and gives additional functionality
|
||||
var/grab_ghost = FALSE
|
||||
var/tlimit = DEFIB_TIME_LIMIT * 10
|
||||
var/base_icon_state = "defibpaddles"
|
||||
base_icon_state = "defibpaddles"
|
||||
var/disarm_shock_time = 10
|
||||
var/wielded = FALSE // track wielded status on item
|
||||
|
||||
@@ -620,7 +620,7 @@
|
||||
if(req_defib)
|
||||
if(defib.healdisk)
|
||||
H.heal_overall_damage(25, 25)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds
|
||||
var/late = timelimit && (tplus > timelimit)
|
||||
var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT]
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
/obj/item/dogborg/sleeper/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "dogborg_sleeper", name, 375, 550) //UI DOES NOT EXIST
|
||||
ui = new(user, src, "Sleeper", name)
|
||||
ui.open()
|
||||
|
||||
/obj/item/dogborg/sleeper/ui_data()
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
|
||||
/obj/item/multitool/ai_detect/proc/show_hud(mob/user)
|
||||
if(user && hud_type)
|
||||
var/obj/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"]
|
||||
var/atom/movable/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"]
|
||||
PM.alpha = 150
|
||||
var/datum/atom_hud/H = GLOB.huds[hud_type]
|
||||
if(!H.hudusers[user])
|
||||
@@ -194,7 +194,7 @@
|
||||
|
||||
/obj/item/multitool/ai_detect/proc/remove_hud(mob/user)
|
||||
if(user && hud_type)
|
||||
var/obj/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"]
|
||||
var/atom/movable/screen/plane_master/camera_static/PM = user.hud_used.plane_masters["[CAMERA_STATIC_PLANE]"]
|
||||
PM.alpha = 255
|
||||
var/datum/atom_hud/H = GLOB.huds[hud_type]
|
||||
H.remove_hud_from(user)
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
/obj/item/paicard/proc/setPersonality(mob/living/silicon/pai/personality)
|
||||
src.pai = personality
|
||||
src.add_overlay("pai-null")
|
||||
var/list/policies = CONFIG_GET(keyed_list/policyconfig)
|
||||
var/list/policies = CONFIG_GET(keyed_list/policy)
|
||||
var/policy = policies[POLICYCONFIG_PAI]
|
||||
if(policy)
|
||||
to_chat(personality, policy)
|
||||
|
||||
@@ -130,8 +130,8 @@
|
||||
. = ..()
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand))
|
||||
var/atom/movable/screen/inventory/hand/H = over_object
|
||||
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
|
||||
|
||||
/obj/item/storage/portable_chem_mixer/ui_interact(mob/user, datum/tgui/ui)
|
||||
|
||||
@@ -105,6 +105,12 @@ GLOBAL_LIST_INIT(channel_tokens, list(
|
||||
keyslot = new /obj/item/encryptionkey/binary
|
||||
recalculateChannels()
|
||||
|
||||
/obj/item/radio/headset/headset_prisoner
|
||||
name = "prison radio headset"
|
||||
desc = "An updated, modular intercom that fits over the head. Takes encryption keys. It looks like it has been modified to not broadcast."
|
||||
icon_state = "prisoner_headset"
|
||||
prison_radio = TRUE
|
||||
|
||||
/obj/item/radio/headset/headset_sec
|
||||
name = "security radio headset"
|
||||
desc = "This is used by your elite security force."
|
||||
|
||||
@@ -426,18 +426,21 @@ GENETICS SCANNER
|
||||
if(ishuman(C))
|
||||
if(H.is_bleeding())
|
||||
msg += "<span class='danger'>Subject is bleeding!</span>\n"
|
||||
var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
|
||||
var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
|
||||
var/integrated_blood_percent = round((C.integrating_blood / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
|
||||
var/blood_type = C.dna.blood_type
|
||||
if(!(blood_typepath in GLOB.blood_reagent_types))
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_typepath]
|
||||
if(R)
|
||||
blood_type = R.name
|
||||
if(C.scan_blood_volume() <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.scan_blood_volume() > (BLOOD_VOLUME_OKAY*C.blood_ratio))
|
||||
msg += "<span class='danger'>LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl,</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
else if(C.scan_blood_volume() <= (BLOOD_VOLUME_OKAY*C.blood_ratio))
|
||||
msg += "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl,</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
|
||||
if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_SAFE * C.blood_ratio) && (C.scan_blood_volume() + C.integrating_blood) > (BLOOD_VOLUME_OKAY*C.blood_ratio))
|
||||
msg += "<span class='danger'>LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""].</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
else if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_OKAY * C.blood_ratio))
|
||||
msg += "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""].</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
else
|
||||
msg += "<span class='info'>Blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]</span>\n"
|
||||
msg += "<span class='info'>Blood level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""]. type: [blood_type]</span>\n"
|
||||
|
||||
|
||||
var/cyberimp_detect
|
||||
for(var/obj/item/organ/cyberimp/CI in C.internal_organs)
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/obj/item/dyespray
|
||||
name = "hair dye spray"
|
||||
desc = "A spray to dye your hair any gradients you'd like."
|
||||
icon = 'icons/obj/dyespray.dmi'
|
||||
icon_state = "dyespray"
|
||||
|
||||
/obj/item/dyespray/attack_self(mob/user)
|
||||
dye(user)
|
||||
|
||||
/obj/item/dyespray/pre_attack(atom/target, mob/living/user, params)
|
||||
dye(target)
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Applies a gradient and a gradient color to a mob.
|
||||
*
|
||||
* Arguments:
|
||||
* * target - The mob who we will apply the gradient and gradient color to.
|
||||
*/
|
||||
|
||||
/obj/item/dyespray/proc/dye(mob/target)
|
||||
if(!ishuman(target))
|
||||
return
|
||||
var/mob/living/carbon/human/human_target = target
|
||||
|
||||
var/new_grad_style = input(usr, "Choose a color pattern:", "Character Preference") as null|anything in GLOB.hair_gradients_list
|
||||
if(!new_grad_style)
|
||||
return
|
||||
|
||||
var/new_grad_color = input(usr, "Choose a secondary hair color:", "Character Preference","#"+human_target.grad_color) as color|null
|
||||
if(!new_grad_color)
|
||||
return
|
||||
|
||||
human_target.grad_style = new_grad_style
|
||||
human_target.grad_color = sanitize_hexcolor(new_grad_color)
|
||||
to_chat(human_target, "<span class='notice'>You start applying the hair dye...</span>")
|
||||
if(!do_after(usr, 30, target = human_target))
|
||||
return
|
||||
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
|
||||
human_target.update_hair()
|
||||
@@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(gift_item_blacklist, typecacheof(list(
|
||||
/obj/mafia_game_board,
|
||||
/obj/docking_port,
|
||||
/obj/shapeshift_holder,
|
||||
/obj/screen
|
||||
/atom/movable/screen
|
||||
)))
|
||||
|
||||
GLOBAL_LIST_EMPTY(possible_gifts)
|
||||
|
||||
@@ -255,18 +255,31 @@
|
||||
icon_state = "knife"
|
||||
desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable."
|
||||
|
||||
/obj/item/kitchen/knife/carrotshiv
|
||||
/obj/item/kitchen/knife/shiv
|
||||
name = "glass shiv"
|
||||
icon = 'icons/obj/shards.dmi'
|
||||
icon_state = "shiv"
|
||||
item_state = "shiv"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
desc = "A makeshift glass shiv."
|
||||
force = 8
|
||||
throwforce = 12//fuck git
|
||||
attack_verb = list("shanked", "shivved")
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
custom_materials = list(/datum/material/glass=400)
|
||||
|
||||
/obj/item/kitchen/knife/shiv/carrot
|
||||
name = "carrot shiv"
|
||||
icon_state = "carrotshiv"
|
||||
item_state = "carrotshiv"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
desc = "Unlike other carrots, you should probably keep this far away from your eyes."
|
||||
force = 8
|
||||
throwforce = 12//fuck git
|
||||
custom_materials = null
|
||||
attack_verb = list("shanked", "shivved")
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/kitchen/knife/shiv/carrot/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] forcefully drives \the [src] into [user.p_their()] eye! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/kitchen/rollingpin
|
||||
name = "rolling pin"
|
||||
|
||||
@@ -337,7 +337,7 @@
|
||||
page_link = "Guide_to_chemistry"
|
||||
|
||||
/obj/item/book/manual/wiki/chemistry/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
new /obj/item/book/manual/wiki/cit/chemistry(loc)
|
||||
new /obj/item/book/manual/wiki/cit/chem_recipies(loc)
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
hitcost = 75 //Costs more than a standard cyborg esword
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
sharpness = SHARP_EDGED
|
||||
light_color = "#40ceff"
|
||||
light_color = LIGHT_COLOR_RED
|
||||
tool_behaviour = TOOL_SAW
|
||||
toolspeed = 0.7
|
||||
|
||||
|
||||
@@ -73,14 +73,14 @@
|
||||
|
||||
/datum/block_parry_data/captain_saber
|
||||
parry_time_windup = 0
|
||||
parry_time_active = 6
|
||||
parry_time_active = 10
|
||||
parry_time_spindown = 0
|
||||
parry_time_perfect = 0.75
|
||||
parry_time_perfect_leeway = 0.75
|
||||
parry_time_perfect_leeway = 1.5
|
||||
parry_imperfect_falloff_percent = 30
|
||||
parry_efficiency_perfect = 100
|
||||
parry_failed_stagger_duration = 3 SECONDS
|
||||
parry_failed_clickcd_duration = 1 SECONDS
|
||||
parry_failed_clickcd_duration = 0
|
||||
parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK
|
||||
parry_automatic_enabled = TRUE
|
||||
|
||||
@@ -179,19 +179,23 @@
|
||||
// Fast, efficient parry.
|
||||
/datum/block_parry_data/traitor_rapier
|
||||
parry_time_windup = 0
|
||||
parry_time_active = 6
|
||||
parry_time_active = 10
|
||||
parry_time_spindown = 0
|
||||
parry_time_active_visual_override = 3
|
||||
parry_time_spindown_visual_override = 2
|
||||
parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK | PARRY_LOCK_ATTACKING
|
||||
parry_time_perfect = 1
|
||||
parry_time_perfect_leeway = 1
|
||||
parry_time_perfect = 2
|
||||
parry_time_perfect_leeway = 2
|
||||
parry_time_perfect_leeway_override = list(
|
||||
TEXT_ATTACK_TYPE_PROJECTILE = 1
|
||||
)
|
||||
parry_imperfect_falloff_percent = 30
|
||||
parry_efficiency_to_counterattack = INFINITY
|
||||
parry_efficiency_to_counterattack = 100
|
||||
parry_efficiency_considered_successful = 1
|
||||
parry_data = list(
|
||||
PARRY_KNOCKDOWN_ATTACKER = 10,
|
||||
PARRY_DISARM_ATTACKER = TRUE
|
||||
)
|
||||
parry_efficiency_perfect = 100
|
||||
parry_stamina_cost = 5
|
||||
parry_failed_stagger_duration = 2 SECONDS
|
||||
|
||||
@@ -446,7 +446,7 @@
|
||||
mood_message = null
|
||||
cheer_up()
|
||||
|
||||
/obj/item/toy/plush/proc/update_desc()
|
||||
/obj/item/toy/plush/update_desc()
|
||||
desc = normal_desc
|
||||
if(mood_message)
|
||||
desc += mood_message
|
||||
@@ -466,7 +466,7 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths())
|
||||
can_random_spawn = FALSE
|
||||
|
||||
/obj/item/toy/plush/random/Initialize()
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
..()
|
||||
var/newtype
|
||||
var/list/snowflake_list = CONFIG_GET(keyed_list/snowflake_plushies)
|
||||
|
||||
|
||||
@@ -745,9 +745,9 @@
|
||||
Grippers oh god oh fuck
|
||||
***********************************************************************/
|
||||
|
||||
/obj/item/weapon/gripper
|
||||
/obj/item/gripper
|
||||
name = "engineering gripper"
|
||||
desc = "A simple grasping tool for interacting with various engineering related items, such as circuits, gas tanks, conveyer belts and more. Alt click to drop instead of use."
|
||||
desc = "A simple grasping tool for interacting with various engineering related items, such as circuits, gas tanks, conveyer belts and more."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "gripper"
|
||||
|
||||
@@ -776,18 +776,29 @@
|
||||
|
||||
var/obj/item/wrapped = null // Item currently being held.
|
||||
|
||||
//Used to interact with UI's of held items, such as gas tanks and airlock electronics.
|
||||
/obj/item/weapon/gripper/AltClick(mob/user)
|
||||
// Used to drop whatever's in the gripper.
|
||||
/obj/item/gripper/proc/drop_held(silent = FALSE)
|
||||
if(wrapped)
|
||||
wrapped.forceMove(get_turf(wrapped))
|
||||
to_chat(user, "<span class='notice'>You drop the [wrapped].</span>")
|
||||
if(!silent)
|
||||
to_chat(usr, "<span class='notice'>You drop the [wrapped].</span>")
|
||||
modify_appearance(wrapped, FALSE)
|
||||
wrapped = null
|
||||
return ..()
|
||||
update_appearance()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/gripper/pre_attack(var/atom/target, var/mob/living/silicon/robot/user, proximity, params)
|
||||
/obj/item/gripper/proc/takeitem(obj/item/item, silent = FALSE)
|
||||
if(!silent)
|
||||
to_chat(usr, "<span class='notice'>You collect \the [item].</span>")
|
||||
item.loc = src
|
||||
wrapped = item
|
||||
update_appearance()
|
||||
|
||||
if(!proximity)
|
||||
return
|
||||
/obj/item/gripper/pre_attack(atom/target, mob/living/silicon/robot/user, params)
|
||||
var/proximity = get_dist(user, target)
|
||||
if(proximity > 1)
|
||||
return STOP_ATTACK_PROC_CHAIN
|
||||
|
||||
if(!wrapped)
|
||||
for(var/obj/item/thing in src.contents)
|
||||
@@ -795,21 +806,24 @@
|
||||
break
|
||||
|
||||
if(wrapped) //Already have an item.
|
||||
var/obj/item/item = wrapped
|
||||
drop_held(TRUE)
|
||||
//Temporary put wrapped into user so target's attackby() checks pass.
|
||||
wrapped.loc = user
|
||||
item.loc = user
|
||||
|
||||
//Pass the attack on to the target. This might delete/relocate wrapped.
|
||||
var/resolved = target.attackby(wrapped,user)
|
||||
if(!resolved && wrapped && target)
|
||||
wrapped.afterattack(target,user,1)
|
||||
var/resolved = target.attackby(item, user, params)
|
||||
if(!resolved && item && target)
|
||||
item.afterattack(target, user, proximity, params)
|
||||
//If wrapped was neither deleted nor put into target, put it back into the gripper.
|
||||
if(wrapped && user && (wrapped.loc == user))
|
||||
wrapped.loc = src
|
||||
else
|
||||
wrapped = null
|
||||
if(item && user && (item.loc == user))
|
||||
takeitem(item, TRUE)
|
||||
return
|
||||
else
|
||||
item = null
|
||||
return STOP_ATTACK_PROC_CHAIN
|
||||
|
||||
else if(istype(target,/obj/item))
|
||||
else if(isitem(target))
|
||||
var/obj/item/I = target
|
||||
var/grab = 0
|
||||
|
||||
@@ -824,24 +838,94 @@
|
||||
|
||||
//We can grab the item, finally.
|
||||
if(grab)
|
||||
to_chat(user, "<span class='notice'>You collect \the [I].</span>")
|
||||
I.loc = src
|
||||
wrapped = I
|
||||
takeitem(I)
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='danger'>Your gripper cannot hold \the [target].</span>")
|
||||
|
||||
/obj/item/weapon/gripper/mining
|
||||
// Rare cases - meant to be handled by code\modules\mob\living\silicon\robot\robot.dm:584 and the weirdness of get_active_held_item() of borgs.
|
||||
/obj/item/gripper/attack_self(mob/user)
|
||||
if(wrapped)
|
||||
wrapped.attack_self(user)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
// Splitable items
|
||||
/obj/item/gripper/AltClick(mob/user)
|
||||
if(wrapped)
|
||||
wrapped.AltClick(user)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
// Even rarer cases
|
||||
/obj/item/gripper/CtrlClick(mob/user)
|
||||
if(wrapped)
|
||||
wrapped.CtrlClick(user)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
// At this point you're just kidding me, but have this one as well.
|
||||
/obj/item/gripper/CtrlShiftClick(mob/user)
|
||||
if(wrapped)
|
||||
wrapped.CtrlShiftClick(user)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
// Make it clear what we can do with it.
|
||||
/obj/item/gripper/examine(mob/user)
|
||||
. = ..()
|
||||
if(wrapped)
|
||||
. += "<span class='notice'>It is holding [icon2html(wrapped, user)] [wrapped].</span>"
|
||||
. += "<span class='notice'>Examine the little preview to examine it.</span>"
|
||||
. += "<span class='notice'>Attempting to drop the gripper will only drop [wrapped].</span>"
|
||||
|
||||
// Resets vis_contents and if holding something, add it to vis_contents.
|
||||
/obj/item/gripper/update_appearance(updates)
|
||||
. = ..()
|
||||
vis_contents = list()
|
||||
if(wrapped)
|
||||
modify_appearance(wrapped, TRUE)
|
||||
vis_contents += wrapped
|
||||
|
||||
// Generates the "minified" version of the item being held and adjust it's position.
|
||||
/obj/item/gripper/proc/modify_appearance(obj/item, minify = FALSE)
|
||||
if(minify)
|
||||
var/matrix/new_transform = new
|
||||
new_transform.Scale(0.5, 0.5)
|
||||
item.transform = new_transform
|
||||
item.pixel_x = 8
|
||||
item.pixel_y = -8
|
||||
else
|
||||
item.pixel_x = initial(pixel_x)
|
||||
item.pixel_y = initial(pixel_y)
|
||||
item.transform = new
|
||||
|
||||
// I kind of wanted the item to be held in the gripper when stored as well, but i realized "store" is just drop as well, so i'll do this for now.
|
||||
// This will handle cases where the borg runs out of power or is damaged enough so the module is forcefully stored.
|
||||
/obj/item/gripper/cyborg_unequip(mob/user)
|
||||
. = ..()
|
||||
if(wrapped)
|
||||
drop_held()
|
||||
|
||||
// Clear references on being destroyed
|
||||
/obj/item/Destroy()
|
||||
for(var/obj/item/gripper/gripper in vis_locs)
|
||||
if(gripper.wrapped == src)
|
||||
gripper.wrapped = null
|
||||
gripper.update_appearance()
|
||||
. = ..()
|
||||
|
||||
/obj/item/gripper/mining
|
||||
name = "shelter capsule deployer"
|
||||
desc = "A simple grasping tool for carrying and deploying shelter capsules. Alt click to drop instead of use."
|
||||
desc = "A simple grasping tool for carrying and deploying shelter capsules."
|
||||
icon_state = "gripper_mining"
|
||||
can_hold = list(
|
||||
/obj/item/survivalcapsule
|
||||
)
|
||||
|
||||
/obj/item/weapon/gripper/medical
|
||||
/obj/item/gripper/medical
|
||||
name = "medical gripper"
|
||||
desc = "A simple grasping tool for interacting with medical equipment, such as beakers, blood bags, chem bags and more. Alt click to drop instead of use."
|
||||
desc = "A simple grasping tool for interacting with medical equipment, such as beakers, blood bags, chem bags and more."
|
||||
icon_state = "gripper_medical"
|
||||
can_hold = list(
|
||||
/obj/item/storage/bag/bio,
|
||||
|
||||
@@ -90,7 +90,7 @@ as performing this in action() will cause the upgrade to end up in the borg inst
|
||||
to_chat(user, "<span class='notice'>There's no room for another VTEC unit!</span>")
|
||||
return FALSE
|
||||
|
||||
//R.speed = -2 // Gotta go fast.
|
||||
//R.vtec = -2 // Gotta go fast.
|
||||
//Citadel change - makes vtecs give an ability rather than reducing the borg's speed instantly
|
||||
VC = new /obj/effect/proc_holder/silicon/cyborg/vtecControl
|
||||
R.AddAbility(VC)
|
||||
@@ -100,7 +100,7 @@ as performing this in action() will cause the upgrade to end up in the borg inst
|
||||
. = ..()
|
||||
if (.)
|
||||
R.RemoveAbility(VC)
|
||||
R.speed = initial(R.speed)
|
||||
R.vtec = initial(R.vtec)
|
||||
R.cansprint = 1
|
||||
|
||||
/obj/item/borg/upgrade/disablercooler
|
||||
@@ -690,11 +690,11 @@ as performing this in action() will cause the upgrade to end up in the borg inst
|
||||
if(istype(user))
|
||||
switch(currentState)
|
||||
if (0)
|
||||
user.speed = initial(user.speed)
|
||||
user.vtec = initial(user.vtec)
|
||||
if (1)
|
||||
user.speed = initial(user.speed) - maxReduction * 0.5
|
||||
user.vtec = initial(user.vtec) - maxReduction * 0.5
|
||||
if (2)
|
||||
user.speed = initial(user.speed) - maxReduction * 1
|
||||
user.vtec = initial(user.vtec) - maxReduction * 1
|
||||
|
||||
action.button_icon_state = "Chevron_State_[currentState]"
|
||||
action.UpdateButtonIcon()
|
||||
|
||||
@@ -548,7 +548,7 @@
|
||||
force = 3
|
||||
throwforce = 3
|
||||
throw_speed = 3
|
||||
var/base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted
|
||||
base_icon_state = "eshield" // [base_icon_state]1 for expanded, [base_icon_state]0 for contracted
|
||||
var/on_force = 10
|
||||
var/on_throwforce = 8
|
||||
var/on_throw_speed = 2
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
. = ..()
|
||||
update_desc()
|
||||
|
||||
/obj/item/stack/spacecash/proc/update_desc()
|
||||
/obj/item/stack/spacecash/update_desc()
|
||||
var/total_worth = get_item_credit_value()
|
||||
desc = "It's worth [total_worth] credit[( total_worth > 1 ) ? "s" : ""]"
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
/obj/item/stack/license_plates
|
||||
name = "invalid plate"
|
||||
desc = "someone fucked up"
|
||||
icon = 'icons/obj/machines/prison.dmi'
|
||||
icon_state = "empty_plate"
|
||||
novariants = FALSE
|
||||
max_amount = 50
|
||||
|
||||
/obj/item/stack/license_plates/empty
|
||||
name = "empty license plate"
|
||||
desc = "Instead of a license plate number, this could contain a quote like \"Live laugh love\"."
|
||||
|
||||
/obj/item/stack/license_plates/empty/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/license_plates/filled
|
||||
name = "license plate"
|
||||
desc = "Prison labor paying off."
|
||||
icon_state = "filled_plate_1_1"
|
||||
|
||||
///Override to allow for variations
|
||||
/obj/item/stack/license_plates/filled/update_icon_state()
|
||||
if(novariants)
|
||||
return
|
||||
if(amount <= (max_amount * (1/3)))
|
||||
icon_state = "filled_plate_[rand(1,6)]_1"
|
||||
else if (amount <= (max_amount * (2/3)))
|
||||
icon_state = "filled_plate_[rand(1,6)]_2"
|
||||
else
|
||||
icon_state = "filled_plate_[rand(1,6)]_3"
|
||||
@@ -3,6 +3,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
|
||||
new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("scooter frame", /obj/item/scooter_frame, 10, time = 25, one_per_turf = 0), \
|
||||
new/datum/stack_recipe("railing", /obj/structure/railing, 3, time = 18, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("catwalk tile", /obj/item/stack/tile/catwalk, 1, 4, 20), \
|
||||
))
|
||||
|
||||
/obj/item/stack/rods
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
* Glass sheets
|
||||
*/
|
||||
GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE), \
|
||||
null, \
|
||||
new/datum/stack_recipe_list("glass working bases", list( \
|
||||
new/datum/stack_recipe("chem dish", /obj/item/glasswork/glass_base/dish, 10), \
|
||||
@@ -95,8 +95,8 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
|
||||
|
||||
GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
|
||||
new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass
|
||||
@@ -147,10 +147,10 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
* Reinforced glass sheets
|
||||
*/
|
||||
GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 20, on_floor = TRUE, window_checks = TRUE), \
|
||||
null, \
|
||||
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
|
||||
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \
|
||||
))
|
||||
|
||||
|
||||
@@ -198,8 +198,8 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
. += GLOB.reinforced_glass_recipes
|
||||
|
||||
GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/plasma/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/plasma/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \
|
||||
new/datum/stack_recipe("directional reinforced window", /obj/structure/window/plasma/reinforced/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/plasma/reinforced/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass
|
||||
@@ -226,7 +226,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
S.efficiency *= 1.2
|
||||
|
||||
GLOBAL_LIST_INIT(titaniumglass_recipes, list(
|
||||
new/datum/stack_recipe("shuttle window", /obj/structure/window/shuttle/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE)
|
||||
new/datum/stack_recipe("shuttle window", /obj/structure/window/shuttle/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE)
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/titaniumglass
|
||||
@@ -250,7 +250,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
|
||||
S.efficiency *= 1.5
|
||||
|
||||
GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
new/datum/stack_recipe("plastitanium window", /obj/structure/window/plastitanium/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE)
|
||||
new/datum/stack_recipe("plastitanium window", /obj/structure/window/plastitanium/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE)
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/plastitaniumglass
|
||||
@@ -355,7 +355,19 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
|
||||
/obj/item/shard/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/lightreplacer))
|
||||
I.attackby(src, user)
|
||||
var/obj/item/lightreplacer/L = I
|
||||
L.attackby(src, user)
|
||||
else if(istype(I, /obj/item/stack/sheet/cloth))
|
||||
var/obj/item/stack/sheet/cloth/C = I
|
||||
to_chat(user, "<span class='notice'>You begin to wrap the [C] around the [src]...</span>")
|
||||
if(do_after(user, 35, target = src))
|
||||
var/obj/item/kitchen/knife/shiv/S = new /obj/item/kitchen/knife/shiv
|
||||
C.use(1)
|
||||
to_chat(user, "<span class='notice'>You wrap the [C] around the [src] forming a makeshift weapon.</span>")
|
||||
remove_item_from_storage(src)
|
||||
qdel(src)
|
||||
user.put_in_hands(S)
|
||||
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -502,6 +502,8 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
new /datum/stack_recipe("sterile masks box", /obj/item/storage/box/masks), \
|
||||
new /datum/stack_recipe("body bag box", /obj/item/storage/box/bodybags), \
|
||||
new /datum/stack_recipe("prescription glasses box", /obj/item/storage/box/rxglasses), \
|
||||
new /datum/stack_recipe("oxygen tank box", /obj/item/storage/box/emergencytank), \
|
||||
new /datum/stack_recipe("extended oxygen tank box", /obj/item/storage/box/engitank), \
|
||||
null, \
|
||||
new /datum/stack_recipe("disk box", /obj/item/storage/box/disks), \
|
||||
new /datum/stack_recipe("light tubes box", /obj/item/storage/box/lights/tubes), \
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
amount -= max_amount
|
||||
new type(loc, max_amount, FALSE)
|
||||
if(!merge_type)
|
||||
merge_type = type
|
||||
merge_type = src.type
|
||||
|
||||
if(LAZYLEN(mats_per_unit))
|
||||
set_mats_per_unit(mats_per_unit, 1)
|
||||
|
||||
@@ -555,3 +555,10 @@
|
||||
color = "#92661A"
|
||||
turf_type = /turf/open/floor/bronze
|
||||
custom_materials = list(/datum/material/bronze = 250)
|
||||
|
||||
/obj/item/stack/tile/catwalk
|
||||
name = "catwalk tile"
|
||||
singular_name = "catwalk floor tile"
|
||||
desc = "Flooring that shows its contents underneath. Engineers love it!"
|
||||
icon_state = "catwalk_tile"
|
||||
turf_type = /turf/open/floor/plating/catwalk_floor
|
||||
|
||||
@@ -259,8 +259,8 @@
|
||||
/obj/item/storage/backpack/satchel/bone
|
||||
name = "bone satchel"
|
||||
desc = "A grotesque satchel made of sinews and bones."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "goliath_saddle"
|
||||
icon_state = "satchel-bone"
|
||||
item_state = "satchel-bone"
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
|
||||
/obj/item/storage/backpack/satchel/bone/ComponentInitialize()
|
||||
|
||||
@@ -317,7 +317,7 @@
|
||||
* Trays - Agouri
|
||||
*/
|
||||
/obj/item/storage/bag/tray
|
||||
name = "tray"
|
||||
name = "serving tray"
|
||||
icon = 'icons/obj/food/containers.dmi'
|
||||
icon_state = "tray"
|
||||
desc = "A metal tray to lay food on."
|
||||
@@ -377,6 +377,12 @@
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/bag/tray/cafeteria
|
||||
name = "cafeteria tray"
|
||||
icon = 'icons/obj/food/containers.dmi'
|
||||
icon_state = "foodtray"
|
||||
desc = "A cheap metal tray to pile today's meal onto."
|
||||
|
||||
//bluespace tray, holds more items
|
||||
/obj/item/storage/bag/tray/bluespace
|
||||
name = "bluespace tray"
|
||||
|
||||
@@ -102,12 +102,22 @@
|
||||
new /obj/item/disk/nanite_program(src)
|
||||
|
||||
// Ordinary survival box
|
||||
/obj/item/storage/box/survival
|
||||
name = "survival box"
|
||||
desc = "A box with the bare essentials of ensuring the survival of you and others."
|
||||
icon_state = "internals"
|
||||
illustration = "emergencytank"
|
||||
var/mask_type = /obj/item/clothing/mask/breath
|
||||
var/internal_type = /obj/item/tank/internals/emergency_oxygen
|
||||
var/medipen_type = /obj/item/reagent_containers/hypospray/medipen
|
||||
|
||||
/obj/item/storage/box/survival/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new mask_type(src)
|
||||
if(!isnull(medipen_type))
|
||||
new medipen_type(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new internal_type(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
@@ -115,10 +125,13 @@
|
||||
..() // we want the survival stuff too.
|
||||
new /obj/item/radio/off(src)
|
||||
|
||||
/obj/item/storage/box/survival_mining/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/explorer(src)
|
||||
// Mining survival box
|
||||
/obj/item/storage/box/survival/mining
|
||||
mask_type = /obj/item/clothing/mask/gas/explorer
|
||||
|
||||
/obj/item/storage/box/survival/mining/PopulateContents()
|
||||
..()
|
||||
new /obj/item/crowbar/red(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
@@ -126,39 +139,30 @@
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
// Engineer survival box
|
||||
/obj/item/storage/box/engineer/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
/obj/item/storage/box/survival/engineer
|
||||
name = "extended-capacity survival box"
|
||||
desc = "A box with the bare essentials of ensuring the survival of you and others. This one is labelled to contain an extended-capacity tank."
|
||||
illustration = "extendedtank"
|
||||
internal_type = /obj/item/tank/internals/emergency_oxygen/engi
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/engineer/radio/PopulateContents()
|
||||
/obj/item/storage/box/survival/engineer/radio/PopulateContents()
|
||||
..() // we want the regular items too.
|
||||
new /obj/item/radio/off(src)
|
||||
|
||||
// Syndie survival box
|
||||
/obj/item/storage/box/syndie/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/syndicate(src)
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
/obj/item/storage/box/survival/syndie //why is this its own thing if it's just the engi box with a syndie mask and medipen?
|
||||
name = "extended-capacity survival box"
|
||||
desc = "A box with the bare essentials of ensuring the survival of you and others. This one is labelled to contain an extended-capacity tank."
|
||||
illustration = "extendedtank"
|
||||
mask_type = /obj/item/clothing/mask/gas/syndicate
|
||||
internal_type = /obj/item/tank/internals/emergency_oxygen/engi
|
||||
medipen_type = null
|
||||
|
||||
// Security survival box
|
||||
/obj/item/storage/box/security/PopulateContents()
|
||||
new /obj/item/clothing/mask/gas/sechailer(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
/obj/item/storage/box/survival/security
|
||||
mask_type = /obj/item/clothing/mask/gas/sechailer
|
||||
|
||||
if(!isplasmaman(loc))
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
else
|
||||
new /obj/item/tank/internals/plasmaman/belt(src)
|
||||
|
||||
/obj/item/storage/box/security/radio/PopulateContents()
|
||||
/obj/item/storage/box/survival/security/radio/PopulateContents()
|
||||
..() // we want the regular stuff too
|
||||
new /obj/item/radio/off(src)
|
||||
|
||||
@@ -1244,6 +1248,26 @@
|
||||
icon_state = "box_pink"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/emergencytank
|
||||
name = "emergency oxygen tank box"
|
||||
desc = "A box of emergency oxygen tanks."
|
||||
illustration = "emergencytank"
|
||||
|
||||
/obj/item/storage/box/emergencytank/PopulateContents()
|
||||
..()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src) //in case anyone ever wants to do anything with spawning them, apart from crafting the box
|
||||
|
||||
/obj/item/storage/box/engitank
|
||||
name = "extended-capacity emergency oxygen tank box"
|
||||
desc = "A box of extended-capacity emergency oxygen tanks."
|
||||
illustration = "extendedtank"
|
||||
|
||||
/obj/item/storage/box/engitank/PopulateContents()
|
||||
..()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/tank/internals/emergency_oxygen/engi(src) //in case anyone ever wants to do anything with spawning them, apart from crafting the box
|
||||
|
||||
/obj/item/storage/box/mre //base MRE type.
|
||||
name = "Nanotrasen MRE Ration Kit Menu 0"
|
||||
desc = "A package containing food suspended in an outdated bluespace pocket which lasts for centuries. If you're lucky you may even be able to enjoy the meal without getting food poisoning."
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
|
||||
attack_speed = CLICK_CD_MELEE
|
||||
|
||||
var/stamina_loss_amount = 35
|
||||
var/stamina_loss_amount = 40
|
||||
var/turned_on = FALSE
|
||||
var/knockdown = TRUE
|
||||
/// block percent needed to prevent knockdown/disarm
|
||||
@@ -25,7 +25,7 @@
|
||||
var/hitcost = 750
|
||||
var/throw_hit_chance = 35
|
||||
var/preload_cell_type //if not empty the baton starts with this type of cell
|
||||
var/cooldown_duration = 5 SECONDS //How long our baton rightclick goes on cooldown for after applying a knockdown
|
||||
var/cooldown_duration = 3.5 SECONDS //How long our baton rightclick goes on cooldown for after applying a knockdown
|
||||
var/status_duration = 5 SECONDS //how long our status effects last for otherwise
|
||||
COOLDOWN_DECLARE(shove_cooldown)
|
||||
|
||||
|
||||
@@ -80,8 +80,8 @@
|
||||
|
||||
/obj/item/watertank/MouseDrop(obj/over_object)
|
||||
var/mob/M = loc
|
||||
if(istype(M) && istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
if(istype(M) && istype(over_object, /atom/movable/screen/inventory/hand))
|
||||
var/atom/movable/screen/inventory/hand/H = over_object
|
||||
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -889,8 +889,8 @@
|
||||
M.put_in_hands(src)
|
||||
to_chat(usr, "<span class='notice'>You pick up the deck.</span>")
|
||||
|
||||
else if(istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
else if(istype(over_object, /atom/movable/screen/inventory/hand))
|
||||
var/atom/movable/screen/inventory/hand/H = over_object
|
||||
if(M.putItemFromInventoryInHandIfPossible(src, H.held_index))
|
||||
to_chat(usr, "<span class='notice'>You pick up the deck.</span>")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user