diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 182f1a4f27..8bf6d0e32b 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -242,13 +242,13 @@ pixel_x = 22 }, /obj/structure/rack, -/obj/item/gun/energy{ +/obj/item/gun/energy/e_gun{ pixel_y = -6 }, -/obj/item/gun/energy{ +/obj/item/gun/energy/e_gun{ pixel_y = -3 }, -/obj/item/gun/energy, +/obj/item/gun/energy/e_gun, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "aaI" = ( diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 2415770e66..047e6c955f 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -12,9 +12,9 @@ density = FALSE state_open = TRUE circuit = /obj/item/circuitboard/machine/sleeper - req_access = list(ACCESS_CMO) //Used for reagent deletion and addition of non medicines + var/efficiency = 1 - var/min_health = 30 + var/min_health = -25 var/list/available_chems var/controls_inside = FALSE var/list/possible_chems = list( @@ -31,32 +31,13 @@ /obj/machinery/sleeper/Initialize() . = ..() - create_reagents(500, NO_REACT) + // if(mapload) + // component_parts -= circuit + // QDEL_NULL(circuit) occupant_typecache = GLOB.typecache_living update_icon() reset_chem_buttons() RefreshParts() - add_inital_chems() - new_occupant_dir = dir - -/obj/machinery/sleeper/setDir(newdir) - . = ..() - new_occupant_dir = dir - -/obj/machinery/sleeper/on_deconstruction() - var/obj/item/reagent_containers/sleeper_buffer/buffer = new (loc) - buffer.volume = reagents.maximum_volume - buffer.reagents.maximum_volume = reagents.maximum_volume - reagents.trans_to(buffer.reagents, reagents.total_volume) - -/obj/machinery/sleeper/proc/add_inital_chems() - for(var/i in available_chems) - var/datum/reagent/R = reagents.has_reagent(i) - if(!R) - reagents.add_reagent(i, (20)) - continue - if(R.volume < 20) - reagents.add_reagent(i, (20 - R.volume)) /obj/machinery/sleeper/RefreshParts() var/E @@ -73,15 +54,11 @@ available_chems |= possible_chems[i] reset_chem_buttons() - //Total container size 500 - 2000u - if(reagents) - reagents.maximum_volume = (500*E) - - /obj/machinery/sleeper/update_icon_state() - icon_state = initial(icon_state) if(state_open) - icon_state += "-open" + icon_state = "[initial(icon_state)]-open" + else + icon_state = initial(icon_state) /obj/machinery/sleeper/container_resist(mob/living/user) visible_message("[occupant] emerges from [src]!", @@ -98,10 +75,12 @@ /obj/machinery/sleeper/open_machine() if(!state_open && !panel_open) + // flick("[initial(icon_state)]-anim", src) ..() /obj/machinery/sleeper/close_machine(mob/user) if((isnull(user) || istype(user)) && state_open && !panel_open) + // flick("[initial(icon_state)]-anim", src) ..(user) var/mob/living/mob_occupant = occupant if(mob_occupant && mob_occupant.stat != DEAD) @@ -112,46 +91,23 @@ if (. & EMP_PROTECT_SELF) return if(is_operational() && occupant) - var/datum/reagent/R = pick(reagents.reagent_list) + var/datum/reagent/R = pick(reagents.reagent_list) //cit specific inject_chem(R.type, occupant) open_machine() - //Is this too much? + //Is this too much? Cit specific if(severity == EMP_HEAVY) var/chem = pick(available_chems) available_chems -= chem available_chems += get_random_reagent_id() reset_chem_buttons() -/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/sleeper_buffer)) - var/obj/item/reagent_containers/sleeper_buffer/SB = I - if((SB.reagents.total_volume + reagents.total_volume) < reagents.maximum_volume) - SB.reagents.trans_to(reagents, SB.reagents.total_volume) - visible_message("[user] places the [SB] into the [src].") - qdel(SB) - return - else - SB.reagents.trans_to(reagents, SB.reagents.total_volume) - visible_message("[user] adds as much as they can to the [src] from the [SB].") - return - if(istype(I, /obj/item/reagent_containers)) - var/obj/item/reagent_containers/RC = I - if(RC.reagents.total_volume == 0) - to_chat(user, "The [I] is empty!") - for(var/datum/reagent/R in RC.reagents.reagent_list) - if((obj_flags & EMAGGED) || (allowed(usr))) - break - if(!istype(R, /datum/reagent/medicine)) - visible_message("The [src] gives out a hearty boop and rejects the [I]. The Sleeper's screen flashes with a pompous \"Medicines only, please.\"") - return - RC.reagents.trans_to(reagents, 1000) - visible_message("[user] adds as much as they can to the [src] from the [I].") - return - - /obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user) - if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) + if(user.stat || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) return + if(isliving(user)) + var/mob/living/L = user + if(!(L.mobility_flags & MOBILITY_STAND)) + return close_machine(target) /obj/machinery/sleeper/screwdriver_act(mob/living/user, obj/item/I) @@ -187,23 +143,9 @@ visible_message("[usr] pries open [src].", "You pry open [src].") open_machine() -/obj/machinery/sleeper/AltClick(mob/user) - . = ..() - if(!user.canUseTopic(src, !hasSiliconAccessInArea(user))) - return - if(state_open) - close_machine() - else - open_machine() - return TRUE - -/obj/machinery/sleeper/examine(mob/user) - . = ..() - . += "Alt-click [src] to [state_open ? "close" : "open"] it." - /obj/machinery/sleeper/ui_state(mob/user) if(controls_inside) - return GLOB.notcontained_state + return GLOB.contained_state return GLOB.default_state /obj/machinery/sleeper/ui_interact(mob/user, datum/tgui/ui) @@ -212,6 +154,18 @@ ui = new(user, src, "Sleeper", name) ui.open() +/obj/machinery/sleeper/AltClick(mob/user) + if(!user.canUseTopic(src, !issilicon(user))) + return + if(state_open) + close_machine() + else + open_machine() + +/obj/machinery/sleeper/examine(mob/user) + . = ..() + . += "Alt-click [src] to [state_open ? "close" : "open"] it." + /obj/machinery/sleeper/process() ..() check_nap_violations() @@ -221,22 +175,13 @@ /obj/machinery/sleeper/ui_data() var/list/data = list() - var/chemical_list = list() - var/blood_percent = 0 - data["occupied"] = occupant ? 1 : 0 data["open"] = state_open - data["blood_levels"] = blood_percent - data["blood_status"] = "Patient either has no blood, or does not require it to function." - data["chemical_list"] = chemical_list data["chems"] = list() for(var/chem in available_chems) - var/datum/reagent/R = reagents.has_reagent(chem) - R = GLOB.chemical_reagents_list[chem] - data["synthchems"] += list(list("name" = R.name, "id" = R.type, "synth_allowed" = synth_allowed(chem))) - for(var/datum/reagent/R in reagents.reagent_list) - data["chems"] += list(list("name" = R.name, "id" = R.type, "vol" = R.volume, "purity" = R.purity, "allowed" = chem_allowed(R.type))) + var/datum/reagent/R = GLOB.chemical_reagents_list[chem] + data["chems"] += list(list("name" = R.name, "id" = R.type, "allowed" = chem_allowed(chem))) data["occupant"] = list() var/mob/living/mob_occupant = occupant @@ -264,40 +209,10 @@ data["occupant"]["fireLoss"] = mob_occupant.getFireLoss() data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss() data["occupant"]["brainLoss"] = mob_occupant.getOrganLoss(ORGAN_SLOT_BRAIN) - - if(mob_occupant.reagents.reagent_list.len) + data["occupant"]["reagents"] = list() + if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len) for(var/datum/reagent/R in mob_occupant.reagents.reagent_list) - chemical_list += list(list("name" = R.name, "volume" = R.volume)) - else - chemical_list = "Patient has no reagents." - - data["occupant"]["failing_organs"] = list() - var/mob/living/carbon/C = mob_occupant - if(C) - for(var/obj/item/organ/Or in C.getFailingOrgans()) - if(istype(Or, /obj/item/organ/brain)) - continue - data["occupant"]["failing_organs"] += list(list("name" = Or.name)) - - if(istype(C)) //Non-carbons shouldn't be able to enter sleepers, but this is to prevent runtimes if something ever breaks - if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner. - blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100) - var/blood_id = C.get_blood_id() - var/blood_warning = "" - if(blood_percent < 80) - blood_warning = "Patient has low blood levels." - if(blood_percent < 60) - blood_warning = "Patient has DANGEROUSLY low blood levels." - if(blood_id) - var/blood_type = C.dna.blood_type - if(!(blood_id in GLOB.blood_reagent_types)) // special blood substance - var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] - if(R) - blood_type = R.name - else - blood_type = blood_id - data["blood_status"] = "Patient has [blood_type] type blood. [blood_warning]" - data["blood_levels"] = blood_percent + data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume)) return data /obj/machinery/sleeper/ui_act(action, params) @@ -314,37 +229,14 @@ . = TRUE if("inject") var/chem = text2path(params["chem"]) - var/amount = text2num(params["volume"]) if(!is_operational() || !mob_occupant || isnull(chem)) return if(mob_occupant.health < min_health && chem != /datum/reagent/medicine/epinephrine) return - if(inject_chem(chem, usr, amount)) + if(inject_chem(chem, usr)) . = TRUE if(scrambled_chems && prob(5)) to_chat(usr, "Chemical system re-route detected, results may not be as expected!") - if("synth") - var/chem = text2path(params["chem"]) - if(!is_operational()) - return - reagents.add_reagent(chem_buttons[chem], 10) //other_purity = 0.75 for when the mechanics are in - if("purge") - var/chem = text2path(params["chem"]) - if(allowed(usr)) - if(!is_operational()) - return - reagents.remove_reagent(chem, 1000) - return - if(chem in available_chems) - if(!is_operational()) - return - /*var/datum/reagent/R = reagents.has_reagent(chem) //For when purity effects are in - if(R.purity < 0.8)*/ - reagents.remove_reagent(chem, 1000) - else - visible_message("Access Denied.") - playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) - /obj/machinery/sleeper/emag_act(mob/user) . = ..() @@ -353,10 +245,9 @@ to_chat(user, "You scramble the sleeper's user interface!") return TRUE -//trans to -/obj/machinery/sleeper/proc/inject_chem(chem, mob/user, volume = 10) - if(chem_allowed(chem)) - reagents.trans_id_to(occupant, chem, volume)//emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU +/obj/machinery/sleeper/proc/inject_chem(chem, mob/user) + if((chem in available_chems) && chem_allowed(chem)) + occupant.reagents.add_reagent(chem_buttons[chem], 10) //emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU if(user) log_combat(user, occupant, "injected [chem] into", addition = "via [src]") return TRUE @@ -369,14 +260,6 @@ var/occ_health = mob_occupant.health > min_health || chem == /datum/reagent/medicine/epinephrine return amount && occ_health -/obj/machinery/sleeper/proc/synth_allowed(chem) - var/datum/reagent/R = reagents.has_reagent(chem) - if(!R) - return TRUE - if(R.volume < 50) - return TRUE - return FALSE - /obj/machinery/sleeper/proc/reset_chem_buttons() scrambled_chems = FALSE LAZYINITLIST(chem_buttons) @@ -416,23 +299,6 @@ component_parts += new /obj/item/stack/cable_coil(null) RefreshParts() -/obj/machinery/sleeper/clockwork - name = "soothing sleeper" - desc = "A large cryogenics unit built from brass. Its surface is pleasantly cool the touch." - icon_state = "sleeper_clockwork" - enter_message = "You hear the gentle hum and click of machinery, and are lulled into a sense of peace." - possible_chems = list(list(/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/salbutamol, /datum/reagent/medicine/bicaridine, - /datum/reagent/medicine/kelotane, /datum/reagent/medicine/oculine, /datum/reagent/medicine/inacusiate, /datum/reagent/medicine/mannitol)) - -/obj/machinery/sleeper/clockwork/process() - if(occupant && isliving(occupant)) - var/mob/living/L = occupant - if(GLOB.clockwork_vitality) //If there's Vitality, the sleeper has passive healing - GLOB.clockwork_vitality = max(0, GLOB.clockwork_vitality - 1) - L.adjustBruteLoss(-1) - L.adjustFireLoss(-1) - L.adjustOxyLoss(-5) - /obj/machinery/sleeper/old icon_state = "oldpod" @@ -443,8 +309,6 @@ idle_power_usage = 3000 circuit = /obj/item/circuitboard/machine/sleeper/party var/leddit = FALSE //Get it like reddit and lead alright fine - ui_x = 310 - ui_y = 400 controls_inside = TRUE possible_chems = list( @@ -477,3 +341,23 @@ /obj/machinery/sleeper/party/emag_act(mob/user) ..() leddit = TRUE + +/obj/machinery/sleeper/clockwork + name = "soothing sleeper" + desc = "A large cryogenics unit built from brass. Its surface is pleasantly cool the touch." + icon_state = "sleeper_clockwork" + enter_message = "You hear the gentle hum and click of machinery, and are lulled into a sense of peace." + possible_chems = list( + list(/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/salbutamol, /datum/reagent/medicine/bicaridine, /datum/reagent/medicine/kelotane, /datum/reagent/medicine/oculine, /datum/reagent/medicine/inacusiate, /datum/reagent/medicine/mannitol) + ) //everything is available at start + fair_market_price = 0 //it's free + +/obj/machinery/sleeper/clockwork/process() + ..() + if(occupant && isliving(occupant)) + var/mob/living/L = occupant + if(GLOB.clockwork_vitality) //If there's Vitality, the sleeper has passive healing + GLOB.clockwork_vitality = max(0, GLOB.clockwork_vitality - 1) + L.adjustBruteLoss(-1) + L.adjustFireLoss(-1) + L.adjustOxyLoss(-5) diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index 9db9449fcb..e5e97d2b2b 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -342,12 +342,30 @@ name = "divine lightblade" desc = "A giant blade of bright and holy light, said to cut down the wicked with ease." force = 5 - block_chance = 50 armour_penetration = 0 + block_parry_data = /datum/block_parry_data/chaplain var/chaplain_spawnable = TRUE can_reflect = FALSE obj_flags = UNIQUE_RENAME +/datum/block_parry_data/chaplain + parry_stamina_cost = 12 + parry_time_windup = 2 + parry_time_active = 5 + parry_time_spindown = 3 + // parry_flags = PARRY_DEFAULT_HANDLE_FEEDBACK + parry_time_perfect = 1 + parry_time_perfect_leeway = 1 + parry_imperfect_falloff_percent = 7.5 + parry_efficiency_to_counterattack = 100 + parry_efficiency_considered_successful = 80 + parry_efficiency_perfect = 120 + parry_efficiency_perfect_override = list( + TEXT_ATTACK_TYPE_PROJECTILE = 30, + ) + parry_failed_stagger_duration = 3 SECONDS + parry_failed_clickcd_duration = 2 SECONDS + /obj/item/dualsaber/hypereutactic/chaplain/ComponentInitialize() . = ..() AddComponent(/datum/component/two_handed, force_unwielded=5, force_wielded=20, \ diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index f3c4679d21..1316f45530 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -569,7 +569,6 @@ buildstacktype = /obj/item/stack/tile/brass buildstackamount = 1 item_chair = null - var/turns = 0 /obj/structure/chair/brass/ComponentInitialize() return //it spins with the power of ratvar, not components. @@ -581,16 +580,12 @@ /obj/structure/chair/brass/process() setDir(turn(dir,-90)) playsound(src, 'sound/effects/servostep.ogg', 50, FALSE) - turns++ - if(turns >= 8) - STOP_PROCESSING(SSfastprocess, src) /obj/structure/chair/brass/ratvar_act() return /obj/structure/chair/brass/AltClick(mob/living/user) . = ..() - turns = 0 if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return if(!(datum_flags & DF_ISPROCESSING)) diff --git a/code/modules/antagonists/abductor/equipment/orderable_gear.dm b/code/modules/antagonists/abductor/equipment/orderable_gear.dm index d15e450c99..f21294b041 100644 --- a/code/modules/antagonists/abductor/equipment/orderable_gear.dm +++ b/code/modules/antagonists/abductor/equipment/orderable_gear.dm @@ -37,14 +37,14 @@ GLOBAL_LIST_INIT(abductor_gear, subtypesof(/datum/abductor_gear)) description = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras." id = "science_tool" build_path = /obj/item/abductor/gizmo -/* + /datum/abductor_gear/advanced_baton name = "Advanced Baton" description = "A quad-mode baton used for incapacitation and restraining of specimens." id = "advanced_baton" cost = 2 - build_path = /obj/item/melee/baton/abductor //does not exist? -*/ + build_path = /obj/item/abductor/baton //does not exist? + /datum/abductor_gear/superlingual_matrix name = "Superlingual Matrix" description = "A mysterious structure that allows for instant communication between users. Pretty impressive until you need to eat something." diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index f06f4fe68a..2e244fa272 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -30,6 +30,22 @@ /// Possible gear to be dispensed var/list/possible_gear +/obj/machinery/abductor/console/Initialize(mapload) + . = ..() + possible_gear = get_abductor_gear() + +/** + * get_abductor_gear: Returns a list of a filtered abductor gear sorted by categories + */ +/obj/machinery/abductor/console/proc/get_abductor_gear() + var/list/filtered_modules = list() + for(var/path in GLOB.abductor_gear) + var/datum/abductor_gear/AG = new path + if(!filtered_modules[AG.category]) + filtered_modules[AG.category] = list() + filtered_modules[AG.category][AG] = AG + return filtered_modules + /obj/machinery/abductor/console/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(!HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING) && !HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING)) to_chat(user, "You start mashing alien buttons at random!") diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 607a8ecb55..6364a9a1c1 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -543,6 +543,7 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS + rad_flags = RAD_NO_CONTAMINATE /obj/item/clothing/suit/hooded/wintercoat/centcom name = "centcom winter coat" @@ -1062,4 +1063,4 @@ name = "Samurai outfit" desc = "An outfit used by traditional japanese warriors." icon_state = "samurai" - item_state = "samurai" \ No newline at end of file + item_state = "samurai" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm index 73233f3e09..b8282931d2 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm @@ -348,6 +348,12 @@ name = "Cowboy Shirt Shortsleeved Red" icon_state = "cowboyshirt_reds" +/datum/sprite_accessory/underwear/top/bra_binder + name = "Bra (binder)" + icon_state = "bra_binder" + has_color = TRUE - - +/datum/sprite_accessory/underwear/top/bra_binder_strapless + name = "Bra (binder, strapless)" + icon_state = "bra_binder_strapless" + has_color = TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 27338f598f..cda6faded0 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -14,7 +14,7 @@ brutemod = 1.25 //They're weak to punches attack_type = BURN //burn bish damage_overlay_type = "" //We are too cool for regular damage overlays - species_traits = list(MUTCOLORS, NO_UNDERWEAR, HAIR, HAS_FLESH, HAS_BONE) // i mean i guess they have blood so they can have wounds too + species_traits = list(MUTCOLORS, HAIR, HAS_FLESH, HAS_BONE) // i mean i guess they have blood so they can have wounds too species_language_holder = /datum/language_holder/ethereal inherent_traits = list(TRAIT_NOHUNGER) sexes = FALSE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d454f85d1c..358eff7a47 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -649,8 +649,6 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) continue if(overrides.len && (A in overrides)) continue - if(A.IsObscured()) - continue statpanel(listed_turf.name, null, A) if(mind) add_spells_to_statpanel(mind.spell_list) diff --git a/code/modules/research/nanites/nanite_cloud_controller.dm b/code/modules/research/nanites/nanite_cloud_controller.dm index 1a0a5dbd4d..44ebe11c29 100644 --- a/code/modules/research/nanites/nanite_cloud_controller.dm +++ b/code/modules/research/nanites/nanite_cloud_controller.dm @@ -36,8 +36,9 @@ /obj/machinery/computer/nanite_cloud_controller/proc/eject(mob/living/user) if(!disk) return - if(!istype(user) || !Adjacent(user))// ||!user.put_in_active_hand(disk)) - disk.forceMove(drop_location()) + disk.forceMove(drop_location()) + if(istype(user) && user.Adjacent(src)) + user.put_in_active_hand(disk) disk = null /obj/machinery/computer/nanite_cloud_controller/proc/get_backup(cloud_id) diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm index 5a330f7a4f..495c788845 100644 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -53,8 +53,9 @@ /obj/machinery/nanite_program_hub/proc/eject(mob/living/user) if(!disk) return - if(!istype(user) || !Adjacent(user))// || !user.put_in_active_hand(disk)) - disk.forceMove(drop_location()) + disk.forceMove(drop_location()) + if(istype(user) && Adjacent(user)) + user.put_in_active_hand(disk) disk = null /obj/machinery/nanite_program_hub/AltClick(mob/user) diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm index 804f256cf6..b6a2c8b28b 100644 --- a/code/modules/research/nanites/nanite_programmer.dm +++ b/code/modules/research/nanites/nanite_programmer.dm @@ -39,8 +39,9 @@ /obj/machinery/nanite_programmer/proc/eject(mob/living/user) if(!disk) return - if(!istype(user) || !Adjacent(user))// || !user.put_in_active_hand(disk)) - disk.forceMove(drop_location()) + disk.forceMove(drop_location()) + if(istype(user) && user.Adjacent(src)) + user.put_in_active_hand(disk) disk = null program = null diff --git a/html/changelog.html b/html/changelog.html index 4c0cb5af0a..50b6b864c1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,30 @@ -->
+

15 August 2020

+

LetterN updated:

+ +

silicons updated:

+ + +

14 August 2020

+

silicons updated:

+ + +

13 August 2020

+

LetterN updated:

+ +

12 August 2020

DeltaFire15 updated: