diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 920f6c5cdf0..138c9d53f90 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -2281,7 +2281,7 @@ name = "Emergency Shuttle Airlock" }, /obj/docking_port/mobile/emergency{ - name = "Box emergency shuttle"; + name = "Box emergency shuttle" }, /obj/docking_port/stationary{ dir = 4; @@ -64022,6 +64022,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"cTW" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) (1,1,1) = {" aaa @@ -75982,7 +75986,7 @@ aaa cyc cyy cyc -czy +cTW cyO cyi cyi @@ -105020,7 +105024,7 @@ bfS biE bkf bfS -cTP +cTO bmZ bpL bre @@ -105277,7 +105281,7 @@ bfS biD bke bfS -cTQ +cTO bmZ bpK brd @@ -105534,7 +105538,7 @@ bfS bfS bfS bfS -cTR +cTO bmZ bon bon @@ -105790,13 +105794,13 @@ cTJ cHD bgo cTK -cTN +cTK blq cTS -cTT +cTK bpQ -cTU -cTV +cTK +cTJ btm buy bvz diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 6451ef82ae7..8c17948b1fb 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -79816,7 +79816,6 @@ /area/shuttle/abandoned) "cWT" = ( /obj/structure/table, -/obj/item/device/camera, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -79824,6 +79823,8 @@ /obj/structure/light_construct{ dir = 1 }, +/obj/item/folder/blue, +/obj/item/pen, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "cWU" = ( @@ -79832,6 +79833,8 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, +/obj/structure/table, +/obj/item/device/camera, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "cWV" = ( @@ -80229,13 +80232,15 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) "cXH" = ( -/obj/structure/table, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/item/device/megaphone, /obj/structure/light_construct, +/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ + x_offset = -3; + y_offset = -7 + }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "cXI" = ( @@ -90386,6 +90391,38 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"dDN" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dDO" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/chair/office/light, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dDP" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/table, +/obj/item/device/megaphone, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) (1,1,1) = {" aaa @@ -101583,10 +101620,10 @@ cWt cWE cVF cWU -cXe -cWo -cXB cXa +cWo +cXa +dDP cVF cJI cYp @@ -101840,9 +101877,9 @@ cVG cVF cVF cWT -cVY +dDN cWo -cWR +dDO cXH cVF cVF diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index d5c02647eb1..32bebbb6a0e 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -30349,6 +30349,7 @@ dir = 8 }, /obj/effect/turf_decal/bot, +/obj/machinery/computer/rdconsole, /turf/open/floor/plasteel, /area/science/robotics/lab) "bbP" = ( diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index 49d9d76a77d..309c366eafd 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -373,6 +373,10 @@ }, /turf/open/floor/plating, /area/shuttle/abandoned) +"bu" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) (1,1,1) = {" aa @@ -1148,7 +1152,7 @@ aa aC ax aC -bb +bu aJ aj aj diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 046f6999116..8f4d4eed88c 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -722,11 +722,12 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, +/obj/structure/table, +/obj/item/device/camera, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bs" = ( /obj/structure/table, -/obj/item/device/camera, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" @@ -734,6 +735,8 @@ /obj/structure/light_construct{ dir = 1 }, +/obj/item/folder/blue, +/obj/item/pen, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "bt" = ( @@ -1162,13 +1165,15 @@ /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "cg" = ( -/obj/structure/table, /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/item/device/megaphone, /obj/structure/light_construct, +/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship{ + x_offset = -3; + y_offset = -7 + }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) "ch" = ( @@ -1765,6 +1770,38 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) +"dk" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/chair/office/light{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dl" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/chair/office/light, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/abandoned) +"dm" = ( +/obj/effect/decal/cleanable/dirt{ + desc = "A thin layer of dust coating the floor."; + name = "dust" + }, +/obj/structure/table, +/obj/item/device/megaphone, +/turf/open/floor/mineral/titanium, +/area/shuttle/abandoned) (1,1,1) = {" aa @@ -2130,10 +2167,10 @@ aR bc ac br -bC -aL -bZ bx +aL +bx +dm ac cA cN @@ -2147,9 +2184,9 @@ ae ac ac bs -ax +dk aL -bp +dl cg ac ac diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 9c10208d013..98448336e17 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -176,3 +176,11 @@ #define LAVALAND_DEFAULT_ATMOS "o2=14;n2=23;TEMP=300" #define THERMAL_ENERGY(gas) (gas.temperature * gas.heat_capacity()) + +#define ADD_GAS(gas_id, out_list)\ + var/list/tmp_gaslist = GLOB.gaslist_cache[gas_id];\ + out_list[gas_id] = tmp_gaslist.Copy(); + +//ASSERT_GAS(gas_id, gas_mixture) - used to guarantee that the gas list for this id exists in gas_mixture.gases. +//Must be used before adding to a gas. May be used before reading from a gas. +#define ASSERT_GAS(gas_id, gas_mixture) if (!gas_mixture.gases[gas_id]) { ADD_GAS(gas_id, gas_mixture.gases) }; diff --git a/code/__DEFINES/clockcult.dm b/code/__DEFINES/clockcult.dm index fc93ccbf1cf..5f167bf96c9 100644 --- a/code/__DEFINES/clockcult.dm +++ b/code/__DEFINES/clockcult.dm @@ -55,8 +55,6 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us #define POWER_PLASTEEL (CLOCKCULT_POWER_UNIT*0.05) //how much power is in one sheet of plasteel -#define RATVAR_POWER_CHECK "ratvar?" //when passed into can_use_power(), converts it into a check for if ratvar has woken/the fabricator is debug - //Ark defines #define GATEWAY_SUMMON_RATE 1 //the time amount the Gateway to the Celestial Derelict gets each process tick; defaults to 1 per tick diff --git a/code/__DEFINES/configuration.dm b/code/__DEFINES/configuration.dm index c78dfb28ab2..3db0ca24c2c 100644 --- a/code/__DEFINES/configuration.dm +++ b/code/__DEFINES/configuration.dm @@ -2,6 +2,7 @@ #define CONFIG_DEF(X) /datum/config_entry/##X { resident_file = CURRENT_RESIDENT_FILE }; /datum/config_entry/##X #define CONFIG_GET(X) global.config.Get(/datum/config_entry/##X) #define CONFIG_SET(X, Y) global.config.Set(/datum/config_entry/##X, ##Y) +#define CONFIG_TWEAK(X) /datum/config_entry/##X #define CONFIG_MAPS_FILE "maps.txt" diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 874b17b8f1d..7e597f0e106 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -196,7 +196,8 @@ plane = HUD_PLANE /obj/screen/drop/Click() - usr.drop_item_v() + if(usr.stat == CONSCIOUS) + usr.dropItemToGround(usr.get_active_held_item()) /obj/screen/act_intent name = "intent" diff --git a/code/controllers/configuration/entries/config.dm b/code/controllers/configuration/entries/config.dm index dda8fd9a3ce..f4f27b14247 100644 --- a/code/controllers/configuration/entries/config.dm +++ b/code/controllers/configuration/entries/config.dm @@ -56,7 +56,6 @@ CONFIG_DEF(flag/log_twitter) // log certain expliotable parrots and other such f CONFIG_DEF(flag/log_world_topic) // log all world.Topic() calls CONFIG_DEF(flag/allow_admin_ooccolor) // Allows admins with relevant permissions to have their own ooc colour - protection = CONFIG_ENTRY_LOCKED CONFIG_DEF(flag/allow_vote_restart) // allow votes to restart @@ -348,4 +347,26 @@ CONFIG_DEF(number/error_msg_delay) // How long to wait between messaging admins CONFIG_DEF(flag/irc_announce_new_game) -CONFIG_DEF(flag/debug_admin_hrefs) \ No newline at end of file +CONFIG_DEF(flag/debug_admin_hrefs) + +CONFIG_DEF(number/mc_tick_rate/base_mc_tick_rate) + integer = FALSE + value = 1 + +CONFIG_DEF(number/mc_tick_rate/high_pop_mc_tick_rate) + integer = FALSE + value = 1.1 + +CONFIG_DEF(number/mc_tick_rate/high_pop_mc_mode_amount) + value = 65 + +CONFIG_DEF(number/mc_tick_rate/disable_high_pop_mc_mode_amount) + value = 60 + +CONFIG_TWEAK(number/mc_tick_rate) + abstract_type = /datum/config_entry/number/mc_tick_rate + +CONFIG_TWEAK(number/mc_tick_rate/ValidateAndSet(str_val)) + . = ..() + if (.) + Master.UpdateTickRate() \ No newline at end of file diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 6ed3121179d..b92853a2c47 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -573,3 +573,13 @@ GLOBAL_REAL(Master, /datum/controller/master) = new for(var/S in subsystems) var/datum/controller/subsystem/SS = S SS.StopLoadingMap() + + +/datum/controller/master/proc/UpdateTickRate() + if (!processing) + return + var/client_count = length(GLOB.clients) + if (client_count < CONFIG_GET(number/mc_tick_rate/disable_high_pop_mc_mode_amount)) + processing = CONFIG_GET(number/mc_tick_rate/base_mc_tick_rate) + else if (client_count > CONFIG_GET(number/mc_tick_rate/high_pop_mc_mode_amount)) + processing = CONFIG_GET(number/mc_tick_rate/high_pop_mc_tick_rate) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm index 81b51e9ae73..f0178576bf4 100644 --- a/code/datums/diseases/advance/symptoms/cough.dm +++ b/code/datums/diseases/advance/symptoms/cough.dm @@ -61,7 +61,7 @@ BONUS if(power >= 1.5) var/obj/item/I = M.get_active_held_item() if(I && I.w_class == WEIGHT_CLASS_TINY) - M.drop_item() + M.dropItemToGround(I) if(power >= 2 && prob(10)) to_chat(M, "[pick("You have a coughing fit!", "You can't stop coughing!")]") M.Stun(20) diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index d740a4213c8..8974c388b1f 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -85,7 +85,7 @@ "[A] strikes your abdomen, neck and back consecutively!") playsound(get_turf(D), 'sound/weapons/cqchit2.ogg', 50, 1, -1) var/obj/item/I = D.get_active_held_item() - if(I && D.drop_item()) + if(I && D.temporarilyRemoveItemFromInventory(I)) A.put_in_hands(I) D.adjustStaminaLoss(50) D.apply_damage(25, BRUTE) @@ -145,7 +145,7 @@ D.visible_message("[A] strikes [D]'s jaw with their hand!", \ "[A] strikes your jaw, disorienting you!") playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1) - if(I && D.drop_item()) + if(I && D.temporarilyRemoveItemFromInventory(I)) A.put_in_hands(I) D.Jitter(2) D.apply_damage(5, BRUTE) @@ -193,7 +193,6 @@ to_chat(user, "You remember the basics of CQC.") var/datum/martial_art/cqc/D = new(null) D.teach(user) - user.drop_item() visible_message("[src] beeps ominously, and a moment later it bursts up in flames.") - new /obj/effect/decal/cleanable/ash(get_turf(src)) qdel(src) + new /obj/effect/decal/cleanable/ash(user.drop_location()) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 84f0f00e45b..a898c1866bb 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -150,7 +150,7 @@ if(prob(60)) I = D.get_active_held_item() if(I) - if(D.drop_item()) + if(D.temporarilyRemoveItemFromInventory(I)) A.put_in_hands(I) D.visible_message("[A] has disarmed [D]!", \ "[A] has disarmed [D]!") diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index ac5083cc17b..8fe8fcd3660 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -41,7 +41,7 @@ "[A] grabs your wrist and violently wrenches it to the side!") playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) D.emote("scream") - D.drop_item() + D.dropItemToGround(D.get_active_held_item()) D.apply_damage(5, BRUTE, pick("l_arm", "r_arm")) D.Stun(60) return 1 @@ -79,7 +79,7 @@ D.visible_message("[A] kicks [D] in the head!", \ "[A] kicks you in the jaw!") D.apply_damage(20, BRUTE, "head") - D.drop_item() + D.drop_all_held_items() playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) D.Stun(80) return 1 @@ -168,10 +168,9 @@ to_chat(user, message) var/datum/martial_art/the_sleeping_carp/theSleepingCarp = new(null) theSleepingCarp.teach(user) - user.drop_item() - visible_message("[src] lights up in fire and quickly burns to ash.") - new /obj/effect/decal/cleanable/ash(get_turf(src)) qdel(src) + visible_message("[src] lights up in fire and quickly burns to ash.") + new /obj/effect/decal/cleanable/ash(user.drop_location()) /obj/item/twohanded/bostaff name = "bo staff" diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index 5b44fd966fe..c3bef23a2a2 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -270,7 +270,7 @@ GLOBAL_LIST_EMPTY(mutations_list) /datum/mutation/human/cough/on_life(mob/living/carbon/human/owner) if(prob(5) && owner.stat == CONSCIOUS) - owner.drop_item() + owner.drop_all_held_items() owner.emote("cough") /datum/mutation/human/dwarfism diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index ae938f18cef..c508907bf4d 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -250,9 +250,10 @@ if(istype(I, /obj/item/device/assembly)) var/obj/item/device/assembly/A = I if(A.attachable) - if(!L.drop_item()) + if(!L.temporarilyRemoveItemFromInventory(A)) return - attach_assembly(target_wire, A) + if(!attach_assembly(target_wire, A)) + A.forceMove(L.drop_location()) . = TRUE else to_chat(L, "You need an attachable assembly!") diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 3b5b8625597..c529ab546d4 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -90,7 +90,7 @@ if("healing") M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) - M.put_in_hands_or_del(new /obj/item/gun/magic/staff/healing(M)) + M.put_in_hands(new /obj/item/gun/magic/staff/healing(M), TRUE) to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.") if("robeless") M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index 41c843c3f01..f8b25afa5e5 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -37,8 +37,9 @@ return 1 /obj/effect/proc_holder/changeling/weapon/sting_action(mob/living/user) - if(!user.drop_item()) - to_chat(user, "The [user.get_active_held_item()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!") + var/obj/item/held = user.get_active_held_item() + if(held && !user.dropItemToGround(held)) + to_chat(user, "[held] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!") return var/limb_regen = 0 if(user.active_hand_index % 2 == 0) //we regen the arm before changing it into the weapon @@ -338,7 +339,7 @@ if(INTENT_DISARM) var/obj/item/I = C.get_active_held_item() if(I) - if(C.drop_item()) + if(C.dropItemToGround(I)) C.visible_message("[I] is yanked off [C]'s hand by [src]!","A tentacle pulls [I] away from you!") on_hit(I) //grab the item as if you had hit it directly with the tentacle return 1 diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index b3cdf248aab..c23074c5060 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -127,8 +127,9 @@ /obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) add_logs(user, target, "stung", object="falso armblade sting") - if(!target.drop_item()) - to_chat(user, "The [target.get_active_held_item()] is stuck to their hand, you cannot grow a false armblade over it!") + var/obj/item/held = target.get_active_held_item() + if(held && !target.dropItemToGround(held)) + to_chat(user, "[held] is stuck to their hand, you cannot grow a false armblade over it!") return if(ismonkey(target)) diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm index 8cb84d43c23..e88f112a0af 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm @@ -88,7 +88,7 @@ if(istype(I, /obj/item/clockwork/slab)) to_chat(user, "\"I don't think you want to drop your slab into that.\"\n\"If you really want to, try throwing it.\"") return TRUE - if(user.drop_item() && uses) + if(uses && user.dropItemToGround(I)) user.visible_message("[user] drops [I] into [src]!", "You drop [I] into [src]!") pass_through_gateway(I, TRUE) return TRUE diff --git a/code/game/gamemodes/clock_cult/clock_items/clock_components.dm b/code/game/gamemodes/clock_cult/clock_items/clock_components.dm index b1409aae186..65c4f9f0afa 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clock_components.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clock_components.dm @@ -20,7 +20,6 @@ "You crush [src], capturing its escaping energy for use as power.") playsound(user, 'sound/effects/pop_expl.ogg', 50, TRUE) adjust_clockwork_power(POWER_WALL_TOTAL) - user.drop_item() qdel(src) /obj/item/clockwork/component/pickup(mob/living/user) diff --git a/code/game/gamemodes/clock_cult/clock_items/clock_weapons/_call_weapon.dm b/code/game/gamemodes/clock_cult/clock_items/clock_weapons/_call_weapon.dm index afe6aca217b..a87767c05e3 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clock_weapons/_call_weapon.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clock_weapons/_call_weapon.dm @@ -28,7 +28,6 @@ if(weapon.loc == owner) owner.visible_message("[owner]'s [weapon.name] flickers and disappears!") to_chat(owner, "You dismiss [weapon].") - owner.drop_item() QDEL_NULL(weapon) weapon_reset(RATVARIAN_SPEAR_COOLDOWN * 0.5) return diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm index a9c241b2c3f..563e83e9cdc 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm @@ -136,7 +136,7 @@ to_chat(user, "\"You reek of blood. You've got a lot of nerve to even look at that slab.\"") user.visible_message("A sizzling sound comes from [user]'s hands!", "[src] suddenly grows extremely hot in your hands!") playsound(get_turf(user), 'sound/weapons/sear.ogg', 50, 1) - user.drop_item() + user.dropItemToGround(src) user.emote("scream") user.apply_damage(5, BURN, "l_arm") user.apply_damage(5, BURN, "r_arm") diff --git a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm b/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm index ae001c03e5b..44fa24c1346 100644 --- a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm +++ b/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm @@ -90,7 +90,7 @@ if(!no_table_check) return TRUE return FALSE - if(get_clockwork_power(RATVAR_POWER_CHECK)) + if(GLOB.ratvar_awakens) fabrication_values["power_cost"] = 0 var/turf/Y = get_turf(user) @@ -167,7 +167,7 @@ return FALSE if(target.type != expected_type) return FALSE - if(get_clockwork_power(RATVAR_POWER_CHECK)) + if(GLOB.ratvar_awakens) fabrication_values["power_cost"] = 0 if(!get_clockwork_power(fabrication_values["power_cost"])) if(get_clockwork_power() - fabrication_values["power_cost"] < 0) @@ -212,7 +212,7 @@ return FALSE repair_values["healing_for_cycle"] = min(repair_values["amount_to_heal"], FABRICATOR_REPAIR_PER_TICK) //modify the healing for this cycle repair_values["power_required"] = round(repair_values["healing_for_cycle"]*MIN_CLOCKCULT_POWER, MIN_CLOCKCULT_POWER) //and get the power cost from that - if(!get_clockwork_power(RATVAR_POWER_CHECK) && !get_clockwork_power(repair_values["power_required"])) + if(!GLOB.ratvar_awakens && !get_clockwork_power(repair_values["power_required"])) if(!silent) to_chat(user, "You need at least [DisplayPower(repair_values["power_required"])] power to start repairin[target == user ? "g yourself" : "g [target]"], and at least \ [DisplayPower(repair_values["amount_to_heal"]*MIN_CLOCKCULT_POWER, MIN_CLOCKCULT_POWER)] to fully repair [target == user ? "yourself" : "[target.p_them()]"]!") diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index 2a5f64915be..115f9319753 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -21,7 +21,6 @@ if(invoke(user)) uses-- if(uses <= 0) - user.drop_item() qdel(src) /obj/item/paper/talisman/proc/invoke(mob/living/user, successfuluse = 1) @@ -182,7 +181,6 @@ C.Jitter(15) if(is_servant_of_ratvar(target)) target.adjustBruteLoss(15) - user.drop_item() qdel(src) return ..() @@ -204,13 +202,13 @@ user.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit) user.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), slot_shoes) user.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), slot_back) - user.drop_item() + user.dropItemToGround(src) user.put_in_hands(new /obj/item/melee/cultblade(user)) user.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user)) /obj/item/paper/talisman/armor/attack(mob/living/target, mob/living/user) if(iscultist(user) && iscultist(target)) - user.drop_item() + user.temporarilyRemoveItemFromInventory(src) invoke(target) qdel(src) return @@ -335,7 +333,6 @@ else to_chat(user, "[C] is already bound.") if(uses <= 0) - user.drop_item() qdel(src) /obj/item/restraints/handcuffs/energy/cult //For the talisman of shackling diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index 5b85cbd811c..9b24d096c46 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -184,7 +184,7 @@ "[M] has pushed down [src]!") else if (prob(25)) - drop_item() + dropItemToGround(get_active_held_item()) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("[M] has disarmed [src]!", \ "[M] has disarmed [src]!") diff --git a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm index 879f68e960b..5b5bafdd217 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_surgery.dm @@ -49,7 +49,7 @@ /datum/surgery_step/gland_insert/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message("[user] inserts [tool] into [target].", "You insert [tool] into [target].") - user.drop_item() + user.temporarilyRemoveItemFromInventory(tool, TRUE) var/obj/item/organ/heart/gland/gland = tool gland.Insert(target, 2) return 1 diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 5e1d80e1759..e72babc5b00 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -353,7 +353,7 @@ return ..() user.visible_message("[user] scatters [src] in all directions.", \ "You scatter [src] across the area. The particles slowly fade away.") - user.drop_item() + user.dropItemToGround(src) scatter() /obj/item/ectoplasm/revenant/throw_impact(atom/hit_atom) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 7aba0adf260..b9a07093d31 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -97,7 +97,7 @@ return user.visible_message("[user]'s eyes flare a deep crimson!", \ "You feel a strange power seep into your body... you have absorbed the demon's blood-travelling powers!") - user.drop_item() + user.temporarilyRemoveItemFromInventory(src, TRUE) src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E /obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 2179177fc1e..a24efbe3f59 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -91,7 +91,7 @@ to_chat(synd_mind.current, "In your hand you will find a special item capable of triggering a greater challenge for your team. Examine it carefully and consult with your fellow operatives before activating it.") var/obj/item/device/nuclear_challenge/challenge = new /obj/item/device/nuclear_challenge - synd_mind.current.put_in_hands_or_del(challenge) + synd_mind.current.put_in_hands(challenge, TRUE) var/list/foundIDs = synd_mind.current.search_contents_for(/obj/item/card/id) if(foundIDs.len) @@ -110,8 +110,7 @@ P.info = "The nuclear authorization code is: [nuke_code]" P.name = "nuclear bomb code" var/mob/living/carbon/human/H = synd_mind.current - P.forceMove(H.drop_location()) - H.put_in_hands_or_del(P) + H.put_in_hands(P, TRUE) H.update_icons() else nuke_code = "code will be provided later" diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 8870399f248..8cae25eb386 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -105,9 +105,8 @@ /obj/machinery/nuclearbomb/attackby(obj/item/I, mob/user, params) if (istype(I, /obj/item/disk/nuclear)) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.forceMove(src) auth = I add_fingerprint(user) return @@ -309,10 +308,8 @@ . = TRUE if("insert_disk") if(!auth) - var/obj/item/I = usr.get_active_held_item() - if(istype(I, /obj/item/disk/nuclear)) - usr.drop_item() - I.forceMove(src) + var/obj/item/I = usr.is_holding_item_of_type(/obj/item/disk/nuclear) + if(I && usr.transferItemToLoc(I, src)) auth = I . = TRUE if("keypad") diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 42d676c29b2..ced6ebbd35c 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -193,8 +193,8 @@ H.equip_to_slot_or_del(new hat(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), slot_shoes) - H.put_in_hands_or_del(new /obj/item/shield/riot/roman(H)) - H.put_in_hands_or_del(new /obj/item/claymore(H)) + H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) + H.put_in_hands(new /obj/item/claymore(H), TRUE) H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), slot_back) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index d25c7613bca..76c8d0f41cd 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -159,7 +159,7 @@ wizard_mob.equip_to_slot_or_del(new /obj/item/teleportation_scroll(wizard_mob), slot_r_store) var/obj/item/spellbook/spellbook = new /obj/item/spellbook(wizard_mob) spellbook.owner = wizard_mob - wizard_mob.put_in_hands_or_del(spellbook) + wizard_mob.put_in_hands(spellbook, TRUE) to_chat(wizard_mob, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.") to_chat(wizard_mob, "The spellbook is bound to you, and others cannot use it.") diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index b02ee50c036..00289ee84ba 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -71,15 +71,11 @@ if(storedpda) to_chat(user, "There is already a PDA inside!") return - else - var/obj/item/device/pda/P = user.get_active_held_item() - if(istype(P)) - if(!user.drop_item()) - return - storedpda = P - P.loc = src - P.add_fingerprint(user) - update_icon() + else if(!user.transferItemToLoc(O, src)) + return + storedpda = O + O.add_fingerprint(user) + update_icon() else if(istype(O, /obj/item/weldingtool) && user.a_intent != INTENT_HARM) var/obj/item/weldingtool/WT = O diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 7d3c40a0d93..80d50cfb172 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -149,10 +149,10 @@ else if(istype(W, /obj/item/device/analyzer)) if(!isXRay()) - if(!user.drop_item(W)) + if(!user.temporarilyRemoveItemFromInventory(W)) return - upgradeXRay() qdel(W) + upgradeXRay() to_chat(user, "[msg]") else to_chat(user, "[msg2]") diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 1e6fe4c5321..5b828af8208 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -109,11 +109,10 @@ // Upgrades! if(is_type_in_typecache(W, possible_upgrades) && !is_type_in_list(W, upgrades)) // Is a possible upgrade and isn't in the camera already. - if(!user.drop_item(W)) + if(!user.transferItemToLoc(W, src)) return to_chat(user, "You attach \the [W] into the assembly inner circuits.") upgrades += W - W.forceMove(src) return // Taking out upgrades diff --git a/code/game/machinery/computer/gulag_teleporter.dm b/code/game/machinery/computer/gulag_teleporter.dm index ba8fb7914c0..3ea4c2f9b2d 100644 --- a/code/game/machinery/computer/gulag_teleporter.dm +++ b/code/game/machinery/computer/gulag_teleporter.dm @@ -92,18 +92,13 @@ beacon = findbeacon() if("handle_id") if(id) - if(!usr.get_active_held_item()) - usr.put_in_hands(id) - id = null - else - id.forceMove(get_turf(src)) - id = null + usr.put_in_hands(id) + id = null else - var/obj/item/I = usr.get_active_held_item() - if(istype(I, /obj/item/card/id/prisoner)) - if(!usr.drop_item()) + var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id/prisoner) + if(I) + if(!usr.transferItemToLoc(I, src)) return - I.forceMove(src) id = I if("set_goal") var/new_goal = input("Set the amount of points:", "Points", id.goal) as num|null diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 6ec144d2575..f13cfe8c00d 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -27,9 +27,8 @@ /obj/machinery/computer/med_data/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/card/id) && !scan) - if(!user.drop_item()) + if(!user.transferItemToLoc(O, src)) return - O.loc = src scan = O to_chat(user, "You insert [O].") else @@ -215,17 +214,13 @@ src.temp = null if(href_list["scan"]) if(src.scan) - if(ishuman(usr) && !usr.get_active_held_item()) - usr.put_in_hands(scan) - else - scan.loc = get_turf(src) - src.scan = null + usr.put_in_hands(scan) + scan = null else - var/obj/item/I = usr.get_active_held_item() - if(istype(I, /obj/item/card/id)) - if(!usr.drop_item()) + var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id) + if(I) + if(!usr.transferItemToLoc(I, src)) return - I.loc = src src.scan = I else if(href_list["logout"]) src.authenticated = null diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 620fd514023..3e9d6df42a2 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -90,11 +90,10 @@ if(href_list["id"]) if(href_list["id"] =="insert" && !inserted_id) - var/obj/item/card/id/prisoner/I = usr.get_active_held_item() - if(istype(I)) - if(!usr.drop_item()) + var/obj/item/card/id/prisoner/I = usr.is_holding_item_of_type(/obj/item/card/id/prisoner) + if(I) + if(!usr.transferItemToLoc(I, src)) return - I.loc = src inserted_id = I else to_chat(usr, "No valid ID.") diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 1a74c44c30e..7fadcac2f26 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -37,9 +37,8 @@ /obj/machinery/computer/secure_data/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/card/id)) if(!scan) - if(!user.drop_item()) + if(!user.transferItemToLoc(O, src)) return - O.loc = src scan = O to_chat(user, "You insert [O].") else @@ -303,17 +302,13 @@ What a mess.*/ if("Confirm Identity") if(scan) - if(ishuman(usr) && !usr.get_active_held_item()) - usr.put_in_hands(scan) - else - scan.loc = get_turf(src) + usr.put_in_hands(scan) scan = null else - var/obj/item/I = usr.get_active_held_item() - if(istype(I, /obj/item/card/id)) - if(!usr.drop_item()) + var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id) + if(I) + if(!usr.transferItemToLoc(I, src)) return - I.loc = src scan = I if("Log Out") diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index 3c183456bed..c44139acfca 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -29,21 +29,19 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E ID = rand(1,999) name = "[name] [ID]" -/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params) +/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/I, mob/user, params) if(uplinkholder) to_chat(user, "The [src] already has an uplink in it.") return - if(O.hidden_uplink) - var/obj/item/I = user.get_active_held_item() - if(!user.drop_item()) + if(I.hidden_uplink) + if(!user.transferItemToLoc(I, src)) return uplinkholder = I - I.loc = src I.add_fingerprint(user) update_icon() updateUsrDialog() else - to_chat(user, "The [O] doesn't appear to be an uplink...") + to_chat(user, "[I] doesn't appear to be an uplink...") /obj/machinery/computer/telecrystals/uplinker/update_icon() ..() diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 5e7982a87c7..bde5cda27d6 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -128,12 +128,11 @@ to_chat(user, "The frame needs to be secured first!") return var/obj/item/circuitboard/machine/B = P - if(!user.drop_item()) + if(!user.transferItemToLoc(B, src)) return playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) to_chat(user, "You add the circuit board to the frame.") circuit = B - B.loc = src icon_state = "box_2" state = 3 components = list() @@ -239,10 +238,9 @@ req_components[I] -= used_amt to_chat(user, "You add [P] to [src].") return - if(!user.drop_item()) + if(!user.transferItemToLoc(P, src)) break to_chat(user, "You add [P] to [src].") - P.forceMove(src) components += P req_components[I]-- return 1 diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 9e9a449974e..488ffb7379d 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1170,10 +1170,9 @@ to_chat(user, "The maintenance panel is destroyed!") return to_chat(user, "You apply [C]. Next time someone opens the door, it will explode.") - user.drop_item() panel_open = FALSE update_icon() - C.forceMove(src) + user.transferItemToLoc(C, src, TRUE) charge = C else if(istype(C, /obj/item/paper) || istype(C, /obj/item/photo)) if(note) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 95adf12875d..542989fa15c 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -426,7 +426,6 @@ return if(constructionStep != CONSTRUCTION_NOCIRCUIT) return - user.drop_item() qdel(C) user.visible_message("[user] adds a circuit to [src].", \ "You insert and secure [C].") diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index f8186a8a511..9bf40542a77 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -63,10 +63,9 @@ else if (istype(W, /obj/item/device/assembly/flash/handheld)) if (!bulb) - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return user.visible_message("[user] installs [W] into [src].", "You install [W] into [src].") - W.forceMove(src) bulb = W power_change() else diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm index cbf13abeb97..3b4503c3c85 100644 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -33,9 +33,8 @@ /obj/machinery/gulag_item_reclaimer/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/card/id/prisoner)) if(!inserted_id) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.forceMove(src) inserted_id = I to_chat(user, "You insert [I].") return @@ -82,18 +81,13 @@ switch(action) if("handle_id") if(inserted_id) - if(!usr.get_active_held_item()) - usr.put_in_hands(inserted_id) - inserted_id = null - else - inserted_id.forceMove(get_turf(src)) - inserted_id = null + usr.put_in_hands(inserted_id) + inserted_id = null else - var/obj/item/I = usr.get_active_held_item() - if(istype(I, /obj/item/card/id/prisoner)) - if(!usr.drop_item()) + var/obj/item/I = usr.is_holding_item_of_type(/obj/item/card/id/prisoner) + if(I) + if(!usr.transferItemToLoc(I, src)) return - I.forceMove(src) inserted_id = I if("release_items") var/mob/M = locate(params["mobref"]) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 2097b171460..98bef7480b3 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -95,10 +95,8 @@ if(beaker) to_chat(user, "There is already a reagent container loaded!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return - - W.forceMove(src) beaker = W to_chat(user, "You attach [W] to [src].") update_icon() diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 204ae83c9d9..863eb3286b9 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -786,11 +786,9 @@ GLOBAL_LIST_EMPTY(allCasters) else qdel(photo) photo = null - if(istype(user.get_active_held_item(), /obj/item/photo)) - photo = user.get_active_held_item() - if(!user.drop_item()) - return - photo.loc = src + photo = user.is_holding_item_of_type(/obj/item/photo) + if(photo && !user.transferItemToLoc(photo, src)) + photo = null if(issilicon(user)) var/list/nametemp = list() var/find diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index cedb94b7b32..26559c5ef9f 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -71,8 +71,6 @@ add_fingerprint(user) if (istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter)) to_chat(usr, "You put [W] back into [src].") - if(!user.drop_item()) - return qdel(W) return else if (istype(W, /obj/item/wrench)) diff --git a/code/game/machinery/porta_turret/portable_turret_construct.dm b/code/game/machinery/porta_turret/portable_turret_construct.dm index 7eace086360..ab16ee67ede 100644 --- a/code/game/machinery/porta_turret/portable_turret_construct.dm +++ b/code/game/machinery/porta_turret/portable_turret_construct.dm @@ -84,9 +84,8 @@ if(PTURRET_INTERNAL_ARMOUR_ON) if(istype(I, /obj/item/gun/energy)) //the gun installation part var/obj/item/gun/energy/E = I - if(!user.drop_item()) + if(!user.transferItemToLoc(E, src)) return - E.forceMove(src) installed_gun = E to_chat(user, "You add [I] to the turret.") build_step = PTURRET_GUN_EQUIPPED @@ -101,7 +100,7 @@ if(PTURRET_GUN_EQUIPPED) if(isprox(I)) build_step = PTURRET_SENSORS_ON - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(I)) return to_chat(user, "You add the proximity sensor to the turret.") qdel(I) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 4a72fa90c6d..d373e1267a0 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -50,9 +50,8 @@ to_chat(user, "Your gun has no external power connector.") return 1 - if(!user.drop_item()) + if(!user.transferItemToLoc(G, src)) return 1 - G.loc = src charging = G use_power = ACTIVE_POWER_USE update_icon(scan = TRUE) diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 957f533a293..a9162b85f84 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -83,16 +83,15 @@ if(istype(I, /obj/item/coin)) var/obj/item/coin/C = I if(prob(2)) - if(!user.drop_item()) + if(!user.transferItemToLoc(C, drop_location())) return - C.loc = loc C.throw_at(user, 3, 10) if(prob(10)) balance = max(balance - SPIN_PRICE, 0) to_chat(user, "[src] spits your coin back out!") else - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(C)) return to_chat(user, "You insert a [C.cmineral] coin into [src]'s slot!") balance += C.value diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 886798156e4..b45b393ab2d 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -140,18 +140,13 @@ if(cell) to_chat(user, "There is already a power cell inside!") return - else - // insert cell - var/obj/item/stock_parts/cell/C = usr.get_active_held_item() - if(istype(C)) - if(!user.drop_item()) - return - cell = C - C.loc = src - C.add_fingerprint(usr) + else if(!user.transferItemToLoc(I, src)) + return + cell = I + I.add_fingerprint(usr) - user.visible_message("\The [user] inserts a power cell into \the [src].", "You insert the power cell into \the [src].") - SStgui.update_uis(src) + user.visible_message("\The [user] inserts a power cell into \the [src].", "You insert the power cell into \the [src].") + SStgui.update_uis(src) else to_chat(user, "The hatch must be open to insert a power cell!") return diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 7c51c383fab..0854e63e5b6 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -298,32 +298,31 @@ if(suit) to_chat(user, "The unit already contains a suit!.") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return suit = I else if(istype(I, /obj/item/clothing/head/helmet)) if(helmet) to_chat(user, "The unit already contains a helmet!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return helmet = I else if(istype(I, /obj/item/clothing/mask)) if(mask) to_chat(user, "The unit already contains a mask!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return mask = I else if(storage) to_chat(user, "The auxiliary storage compartment is full!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return storage = I - I.loc = src visible_message("[user] inserts [I] into [src]", "You load [I] into [src].") update_icon() return diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 24365464a80..acd5f51d3f2 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -150,11 +150,10 @@ to_chat(user, "The cover is screwed on, it won't pry off!") else if(istype(I, /obj/item/bombcore)) if(!payload) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return payload = I to_chat(user, "You place [payload] into [src].") - payload.loc = src else to_chat(user, "[payload] is already loaded into [src]! You'll have to remove it first.") else if(istype(I, /obj/item/weldingtool)) @@ -463,11 +462,10 @@ return else if(istype(I, /obj/item/reagent_containers/glass/beaker) || istype(I, /obj/item/reagent_containers/glass/bottle)) if(beakers.len < max_beakers) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return beakers += I to_chat(user, "You load [src] with [I].") - I.loc = src else to_chat(user, "The [I] wont fit! The [src] can only hold up to [max_beakers] containers.") return diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 0039b2e1e03..7240804d8fc 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -189,9 +189,8 @@ var/obj/item/reagent_containers/food/snacks/S = W if(!S.junkiness) if(!iscompartmentfull(user)) - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return - W.loc = src food_load(W) to_chat(user, "You insert [W] into [src]'s chef compartment.") else @@ -279,9 +278,8 @@ if(!premium.len) to_chat(user, "[src] doesn't have a coin slot.") return - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return - W.loc = src coin = W to_chat(user, "You insert [W] into [src].") return diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 51e27bebcce..79c54874f08 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -430,7 +430,7 @@ if(!istype(T)) return var/datum/gas_mixture/GM = new - GM.assert_gas("plasma") + ASSERT_GAS("plasma", GM) if(prob(10)) GM.gases["plasma"][MOLES] += 100 GM.temperature = 1500+T0C //should be enough to start a fire diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 6d9c3f25734..dd4e9d98592 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -30,6 +30,7 @@ var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. var/step_energy_drain = 10 var/melee_energy_drain = 15 + var/overload_step_energy_drain_min = 100 max_integrity = 300 //max_integrity is base health var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 4102ba914b1..96576db1544 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -203,7 +203,7 @@ chassis.leg_overload_mode = 1 chassis.bumpsmash = 1 chassis.step_in = min(1, round(chassis.step_in/2)) - chassis.step_energy_drain = chassis.step_energy_drain*chassis.leg_overload_coeff + chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min,chassis.step_energy_drain*chassis.leg_overload_coeff) chassis.occupant_message("You enable leg actuators overload.") else chassis.leg_overload_mode = 0 diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 7091bfd72a7..a75294c28f3 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -161,7 +161,7 @@ var/obj/item/mecha_parts/mecha_equipment/E = W spawn() if(E.can_attach(src)) - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(W)) return E.attach(src) user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") @@ -226,11 +226,10 @@ else if(istype(W, /obj/item/stock_parts/cell)) if(state==4) if(!cell) - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return var/obj/item/stock_parts/cell/C = W to_chat(user, "You install the powercell.") - C.forceMove(src) cell = C log_message("Powercell installed") else diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 3f32b18178c..656c151b3f5 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -128,7 +128,7 @@ /obj/effect/particle_effect/smoke/bad/smoke_mob(mob/living/carbon/M) if(..()) - M.drop_item() + M.drop_all_held_items() M.adjustOxyLoss(1) M.emote("cough") return 1 @@ -169,7 +169,7 @@ qdel(H) var/list/G_gases = G.gases if(G_gases["plasma"]) - G.assert_gas("n2") + ASSERT_GAS("n2", G) G_gases["n2"][MOLES] += (G_gases["plasma"][MOLES]) G_gases["plasma"][MOLES] = 0 G.garbage_collect() @@ -205,7 +205,6 @@ /obj/effect/particle_effect/smoke/sleeping/smoke_mob(mob/living/carbon/M) if(..()) - M.drop_item() M.Sleeping(200) M.emote("cough") return 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a82b75784cd..96803032d56 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -529,7 +529,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) to_chat(M, "You become nearsighted!") if(prob(50)) if(M.stat != DEAD) - if(M.drop_item()) + if(M.drop_all_held_items()) to_chat(M, "You drop what you're holding and clutch at your eyes!") M.adjust_blurriness(10) M.Unconscious(20) diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index f04f8d44414..13fe778a38b 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -513,7 +513,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(!lit) set_lit(TRUE) if(fancy) - user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.", "Without even breaking stride, you flip open and lights [src] in one smooth movement.") + user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.", "Without even breaking stride, you flip open and light [src] in one smooth movement.") else var/prot = FALSE var/mob/living/carbon/human/H = user diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 25b1a60955c..4be687a3a01 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -59,7 +59,7 @@ if(target.handcuffed) return - if(!user.drop_item() && !dispense) + if(!user.temporarilyRemoveItemFromInventory(src) && !dispense) return var/obj/item/restraints/handcuffs/cuffs = src @@ -68,7 +68,7 @@ else if(dispense) cuffs = new type() - cuffs.loc = target + cuffs.forceMove(target) target.handcuffed = cuffs target.update_handcuffed() diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index d727c517bdd..cff958926dc 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -233,7 +233,7 @@ /obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag) if(user && target == user) - user.drop_item() + user.dropItemToGround(src) if(proximity_flag) consume_everything(target) ..() @@ -243,7 +243,7 @@ if(ismob(target)) var/mob/M if(src.loc == M) - M.drop_item() + M.dropItemToGround(src) consume_everything(target) /obj/item/melee/supermatter_sword/pickup(user) @@ -267,7 +267,7 @@ /obj/item/melee/supermatter_sword/suicide_act(mob/user) user.visible_message("[user] touches [src]'s blade. It looks like [user.p_theyre()] tired of waiting for the radiation to kill [user.p_them()]!") - user.drop_item() + user.dropItemToGround(src, TRUE) shard.CollidedWith(user) /obj/item/melee/supermatter_sword/proc/consume_everything(target) diff --git a/code/game/objects/items/paiwire.dm b/code/game/objects/items/paiwire.dm index 4a75750edf7..994082c5faf 100644 --- a/code/game/objects/items/paiwire.dm +++ b/code/game/objects/items/paiwire.dm @@ -7,8 +7,7 @@ var/obj/machinery/machine /obj/item/pai_cable/proc/plugin(obj/machinery/M, mob/living/user) - if(!user.drop_item()) + if(!user.transferItemToLoc(src, M)) return user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") - src.loc = M machine = M \ No newline at end of file diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index ad6a7ed1272..8607addb4b3 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -122,7 +122,7 @@ return if(user.disabilities & CLUMSY && prob(75) && clumsyCheck) user.visible_message("[user] loses their grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") - user.drop_item() + user.dropItemToGround(src, TRUE) if(prob(10)) target = get_turf(user) else diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 3d7b4a96031..f47c5d30eb1 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -254,7 +254,7 @@ if(!isturf(loc)) to_chat(user, "You cannot install[M], the frame has to be standing on the ground to be perfectly precise!") return - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(M)) to_chat(user, "[M] is stuck to your hand!") return qdel(M) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index d8ff523c252..30c881790ca 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -48,7 +48,7 @@ /obj/item/storage/backpack/holding/suicide_act(mob/living/user) user.visible_message("[user] is jumping into [src]! It looks like [user.p_theyre()] trying to commit suicide.") - user.drop_item() + user.dropItemToGround(src, TRUE) user.Stun(100, ignore_canstun = TRUE) sleep(20) playsound(src, "rustle", 50, 1, -5) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 489f1c6bf07..313988b7d47 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -57,11 +57,9 @@ close_all() to_chat(user, "You fold [src] flat.") - var/obj/item/I = new foldable(get_turf(src)) - user.drop_item() - user.put_in_hands(I) - user.update_inv_hands() + var/obj/item/I = new foldable qdel(src) + user.put_in_hands(I) /obj/item/storage/box/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stack/packageWrap)) diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index 062ca66ddb1..63e9e0bb55f 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -17,7 +17,7 @@ /obj/item/tank/jetpack/New() ..() if(gas_type) - air_contents.assert_gas(gas_type) + ASSERT_GAS(gas_type,air_contents) air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C) ion_trail = new @@ -193,7 +193,7 @@ //Return a jetpack that the mob can use //Back worn jetpacks, hardsuit internal packs, and so on. -//Used in Process_Spacemove() and wherever you want to check for/get a jetpack +//Used in Process_Spacemove() and wherever you want to check for/get a jetpack /mob/proc/get_jetpack() return diff --git a/code/game/objects/items/tanks/tank_types.dm b/code/game/objects/items/tanks/tank_types.dm index 9892c354457..146693dd055 100644 --- a/code/game/objects/items/tanks/tank_types.dm +++ b/code/game/objects/items/tanks/tank_types.dm @@ -21,7 +21,7 @@ /obj/item/tank/internals/oxygen/New() ..() - air_contents.assert_gas("o2") + ASSERT_GAS("o2", air_contents) air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -87,7 +87,7 @@ /obj/item/tank/internals/plasma/New() ..() - air_contents.assert_gas("plasma") + ASSERT_GAS("plasma", air_contents) air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -105,8 +105,7 @@ return ..() /obj/item/tank/internals/plasma/full/New() - ..() - air_contents.assert_gas("plasma") + ..() // Plasma asserted in parent air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -125,13 +124,12 @@ /obj/item/tank/internals/plasmaman/New() ..() - air_contents.assert_gas("plasma") + ASSERT_GAS("plasma", air_contents) air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return /obj/item/tank/internals/plasmaman/full/New() - ..() - air_contents.assert_gas("plasma") + ..() // Plasma asserted in parent air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -145,8 +143,7 @@ w_class = WEIGHT_CLASS_SMALL //thanks i forgot this /obj/item/tank/internals/plasmaman/belt/full/New() - ..() - air_contents.assert_gas("plasma") + ..() // Plasma asserted in parent air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -169,7 +166,7 @@ /obj/item/tank/internals/emergency_oxygen/New() ..() - air_contents.assert_gas("o2") + ASSERT_GAS("o2", air_contents) air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 47ff52811be..706e0aacfb4 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1023,8 +1023,8 @@ throwforce = 12 //pelt your enemies to death with lumps of snow /obj/item/toy/snowball/afterattack(atom/target as mob|obj|turf|area, mob/user) - user.drop_item() - src.throw_at(target, throw_range, throw_speed) + if(user.dropItemToGround(src)) + throw_at(target, throw_range, throw_speed) /obj/item/toy/snowball/throw_impact(atom/hit_atom) if(!..()) @@ -1042,8 +1042,8 @@ w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets /obj/item/toy/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user) - user.drop_item() - src.throw_at(target, throw_range, throw_speed) + if(user.dropItemToGround(src)) + throw_at(target, throw_range, throw_speed) /* * Xenomorph action figure diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index cdb0ba9f457..85d124fefc4 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -53,7 +53,7 @@ return if(iscyborg(user)) return - if(!user.drop_item()) + if(!user.drop_all_held_items()) return if (O.loc != src.loc) step(O, get_dir(O, src)) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 9d6985c6208..606b10da0ac 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -58,14 +58,14 @@ playsound(src.loc, W.usesound, 50, 1) deconstruct() else if(istype(W, /obj/item/assembly/shock_kit)) - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(W)) return var/obj/item/assembly/shock_kit/SK = W var/obj/structure/chair/e_chair/E = new /obj/structure/chair/e_chair(src.loc) playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) E.setDir(dir) E.part = SK - SK.loc = E + SK.forceMove(E) SK.master = E qdel(src) else diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 68de701967c..f6e2023943d 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -27,7 +27,8 @@ LINEN BINS ..() /obj/item/bedsheet/attack_self(mob/user) - user.drop_item() + if(!user.dropItemToGround(src)) + return if(layer == initial(layer)) layer = ABOVE_MOB_LAYER to_chat(user, "You cover yourself with [src].") @@ -275,18 +276,16 @@ LINEN BINS /obj/structure/bedsheetbin/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/bedsheet)) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.loc = src sheets.Add(I) amount++ to_chat(user, "You put [I] in [src].") update_icon() else if(amount && !hidden && I.w_class < WEIGHT_CLASS_BULKY) //make sure there's sheets to hide it among, make sure nothing else is hidden in there. - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) to_chat(user, "\The [I] is stuck to your hand, you cannot hide it among the sheets!") return - I.loc = src hidden = I to_chat(user, "You hide [I] among the sheets.") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 3d77be1bb53..4e3056f39ae 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -229,8 +229,7 @@ "You cut \the [src] apart with \the [W].") deconstruct(TRUE) return 0 - if(user.drop_item()) // so we put in unlit welder too - W.forceMove(loc) + if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too return 1 else if(istype(W, /obj/item/weldingtool) && can_weld_shut) var/obj/item/weldingtool/WT = W diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index f051c643784..61aab75efc3 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -603,10 +603,9 @@ if(do_after(user, 40, target = src)) if( src.state != 1 ) return - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return - W.loc = src to_chat(user, "You install the airlock electronics.") src.state = 2 src.name = "near finished airlock assembly" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index e61e1a18708..0a3574b1a66 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -54,9 +54,8 @@ return if(istype(I, /obj/item/extinguisher)) if(!stored_extinguisher && opened) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - contents += I stored_extinguisher = I to_chat(user, "You place [I] in [src].") update_icon() diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 803c4d46278..afcd855caf0 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -53,10 +53,9 @@ if(F.wielded) to_chat(user, "Unwield the [F.name] first.") return - if(!user.drop_item()) + if(!user.transferItemToLoc(F, src)) return fireaxe = F - F.forceMove(src) to_chat(user, "You place the [F.name] back in the [name].") update_icon() return diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 3d7e9be21a6..b3b60228348 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -259,9 +259,8 @@ else if(istype(W, /obj/item/pipe)) var/obj/item/pipe/P = W if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds. - if(!user.drop_item()) + if(!user.transferItemToLoc(P, drop_location())) return - P.loc = src.loc to_chat(user, "You fit the pipe into \the [src].") else return ..() diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm index 24a6bd4ceb7..ac6a69ed935 100644 --- a/code/game/objects/structures/guncase.dm +++ b/code/game/objects/structures/guncase.dm @@ -39,9 +39,8 @@ return if(istype(I, gun_category) && open) if(LAZYLEN(contents) < capacity) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.forceMove(src) to_chat(user, "You place [I] in [src].") update_icon() else diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 58db777abe6..747e0b33173 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -32,9 +32,8 @@ return 1 /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.loc = src updateUsrDialog() to_chat(user, "You put [I] into [src].") return diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index d0ad32113d5..6093d73bc54 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -100,6 +100,10 @@ /obj/structure/ladder/attackby(obj/item/W, mob/user, params) return attack_hand(user) +/obj/structure/ladder/attack_robot(mob/living/silicon/robot/R) + if(R.Adjacent(src)) + return attack_hand(R) + /obj/structure/ladder/attack_ghost(mob/dead/observer/user) use(user,1) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 54730f5f7a3..dd25c652514 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -160,10 +160,9 @@ FLOOR SAFES . = 1 //no afterattack if(I.w_class + space <= maxspace) space += I.w_class - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) to_chat(user, "\The [I] is stuck to your hand, you cannot put it in the safe!") return - I.forceMove(src) to_chat(user, "You put [I] in [src].") updateUsrDialog() return diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 5d566fdd199..f718649207a 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -104,7 +104,6 @@ "You attach the sign to [T].") playsound(T, 'sound/items/deconstruct.ogg', 50, 1) new sign_path(T) - user.drop_item() qdel(src) else return ..() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 9f1c92d4d31..31521a12da6 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -131,8 +131,7 @@ // If the tray IS empty, continue on (tray will be placed on the table like other items) if(user.a_intent != INTENT_HARM && !(I.flags_1 & ABSTRACT_1)) - if(user.drop_item()) - I.Move(loc) + if(user.transferItemToLoc(I, drop_location())) var/list/click_params = params2list(params) //Center the icon where the user clicked. if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) @@ -441,7 +440,7 @@ /obj/structure/rack/MouseDrop_T(obj/O, mob/user) if ((!( istype(O, /obj/item) ) || user.get_active_held_item() != O)) return - if(!user.drop_item()) + if(!user.dropItemToGround(O)) return if(O.loc != src.loc) step(O, get_dir(O, src)) @@ -454,8 +453,7 @@ return if(user.a_intent == INTENT_HARM) return ..() - if(user.drop_item()) - W.Move(loc) + if(user.transferItemToLoc(W, drop_location())) return 1 /obj/structure/rack/attack_paw(mob/living/user) @@ -518,7 +516,7 @@ building = TRUE to_chat(user, "You start constructing a rack...") if(do_after(user, 50, target = user, progress=TRUE)) - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(src)) return var/obj/structure/rack/R = new /obj/structure/rack(user.loc) user.visible_message("[user] assembles \a [R].\ diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 16990103097..076f39b85f0 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -62,9 +62,8 @@ to_chat(user, "[src] can't hold any more of [I].") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.loc = src to_chat(user, "You put [I] in [src].") update_icon() diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index fde6a391c3e..ece2d2cf443 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -23,12 +23,11 @@ /obj/structure/target_stake/attackby(obj/item/target/T, mob/user) if(pinned_target) return - if(istype(T) && user.drop_item()) + if(istype(T) && user.transferItemToLoc(T, drop_location())) pinned_target = T T.pinnedLoc = src T.density = TRUE T.layer = OBJ_LAYER + 0.01 - T.loc = loc to_chat(user, "You slide the target into the stake.") /obj/structure/target_stake/attack_hand(mob/user) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 47aad947418..bb0213ef0bf 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -88,10 +88,9 @@ if(w_items + I.w_class > WEIGHT_CLASS_HUGE) to_chat(user, "The cistern is full!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) to_chat(user, "\The [I] is stuck to your hand, you cannot put it in the cistern!") return - I.loc = src w_items += I.w_class to_chat(user, "You carefully place [I] into the cistern.") @@ -173,10 +172,9 @@ if(I.w_class > 1) to_chat(user, "[I] is too large for the drain enclosure.") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) to_chat(user, "\[I] is stuck to your hand, you cannot put it in the drain enclosure!") return - I.forceMove(src) hiddenitem = I to_chat(user, "You place [I] into the drain enclosure.") diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 20c4f18a46d..520ba2ee69f 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -209,11 +209,10 @@ //Adding airlock electronics for access. Step 6 complete. else if(istype(W, /obj/item/electronics/airlock)) - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return playsound(loc, W.usesound, 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...") - W.loc = src if(do_after(user, 40, target = src)) if(!src || electronics) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 0dd3673f6a4..f0fb7c44480 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -72,7 +72,7 @@ if(..()) return if(istype(C, /obj/item/light/bulb)) //only for light tiles - if(state && user.drop_item()) + if(state && user.temporarilyRemoveItemFromInventory(C)) qdel(C) state = 0 //fixing it by bashing it with a light bulb, fun eh? update_icon() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 15910adf47b..33d74892290 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -290,7 +290,7 @@ continue var/list/S_gases = S.air.gases for(var/id in S_gases) - total.assert_gas(id) + ASSERT_GAS(id, total) total_gases[id][MOLES] += S_gases[id][MOLES] total.temperature += S.air.temperature diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 0cc147324e7..f670fe760a3 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -716,7 +716,7 @@ GLOBAL_PROTECT(LastAdminCalledProc) if(Rad.anchored) if(!Rad.loaded_tank) var/obj/item/tank/internals/plasma/Plasma = new/obj/item/tank/internals/plasma(Rad) - Plasma.air_contents.assert_gas("plasma") + ASSERT_GAS("plasma", Plasma.air_contents) Plasma.air_contents.gases["plasma"][MOLES] = 70 Rad.drainratio = 0 Rad.loaded_tank = Plasma diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 0dcd6762138..ebd2214aba2 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -89,22 +89,20 @@ var/mob/M = user if(isigniter(S.a_left) == isigniter(S.a_right)) //Check if either part of the assembly has an igniter, but if both parts are igniters, then fuck it return - if(!M.drop_item()) //Remove the assembly from your hands + if(!M.temporarilyRemoveItemFromInventory(src)) //Remove the assembly from your hands return - var/obj/item/device/onetankbomb/R = new /obj/item/device/onetankbomb(loc) + var/obj/item/device/onetankbomb/R = new - M.temporarilyRemoveItemFromInventory(src, TRUE) //Remove the tank from your character,in case you were holding it - if(!M.put_in_hands(R)) //Equips the bomb if possible, or puts it on the floor. - forceMove(get_turf(M)) + M.put_in_hands(R) //Equips the bomb if possible, or puts it on the floor. R.bombassembly = S //Tell the bomb about its assembly part S.master = R //Tell the assembly about its new owner - S.loc = R //Move the assembly out of the fucking way + S.forceMove(R) //Move the assembly out of the fucking way R.bombtank = src //Same for tank master = R - loc = R + forceMove(R) R.update_icon() return diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index ac8349f5f7e..b9cba55ae6e 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -21,10 +21,6 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) cached_gas[ARCHIVE] = 0 cached_gas[GAS_META] = GLOB.meta_gas_info[id] -#define GASLIST(id, out_list)\ - var/list/tmp_gaslist = GLOB.gaslist_cache[id];\ - out_list = tmp_gaslist.Copy(); - /datum/gas_mixture var/list/gases var/temperature //kelvins @@ -43,30 +39,18 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) //listmos procs - //assert_gas(gas_id) - used to guarantee that the gas list for this id exists. - //Must be used before adding to a gas. May be used before reading from a gas. -/datum/gas_mixture/proc/assert_gas(gas_id) - var/cached_gases = gases - if(cached_gases[gas_id]) - return - GASLIST(gas_id, cached_gases[gas_id]) +// The following procs used to live here: thermal_energy(), assert_gas() and add_gas(). They have been moved into defines in code/__DEFINES/atmospherics.dm - //assert_gases(args) - shorthand for calling assert_gas() once for each gas type. + //assert_gases(args) - shorthand for calling ASSERT_GAS() once for each gas type. /datum/gas_mixture/proc/assert_gases() for(var/id in args) - assert_gas(id) - - //add_gas(gas_id) - similar to assert_gas(), but does not check for an existing - //gas list for this id. This can clobber existing gases. - //Used instead of assert_gas() when you know the gas does not exist. Faster than assert_gas(). -/datum/gas_mixture/proc/add_gas(gas_id) - GASLIST(gas_id, gases[gas_id]) + ASSERT_GAS(id, src) //add_gases(args) - shorthand for calling add_gas() once for each gas_type. /datum/gas_mixture/proc/add_gases() var/cached_gases = gases for(var/id in args) - GASLIST(id, cached_gases[id]) + ADD_GAS(id, cached_gases) //garbage_collect() - removes any gas list which is empty. //If called with a list as an argument, only removes gas lists with IDs from that list. @@ -80,6 +64,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) cached_gases -= id //PV = nRT + /datum/gas_mixture/proc/heat_capacity() //joules per kelvin var/list/cached_gases = gases . = 0 @@ -195,7 +180,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) var/list/giver_gases = giver.gases //gas transfer for(var/giver_id in giver_gases) - assert_gas(giver_id) + ASSERT_GAS(giver_id, src) cached_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES] return 1 @@ -212,7 +197,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) removed.temperature = temperature for(var/id in cached_gases) - removed.add_gas(id) + ADD_GAS(id, removed.gases) removed_gases[id][MOLES] = QUANTIZE((cached_gases[id][MOLES] / sum) * amount) cached_gases[id][MOLES] -= removed_gases[id][MOLES] garbage_collect() @@ -230,7 +215,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) removed.temperature = temperature for(var/id in cached_gases) - removed.add_gas(id) + ADD_GAS(id, removed.gases) removed_gases[id][MOLES] = QUANTIZE(cached_gases[id][MOLES] * ratio) cached_gases[id][MOLES] -= removed_gases[id][MOLES] @@ -245,18 +230,19 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) copy.temperature = temperature for(var/id in cached_gases) - copy.add_gas(id) + ADD_GAS(id, copy.gases) copy_gases[id][MOLES] = cached_gases[id][MOLES] return copy + /datum/gas_mixture/copy_from(datum/gas_mixture/sample) var/list/cached_gases = gases //accessing datum vars is slower than proc vars var/list/sample_gases = sample.gases temperature = sample.temperature for(var/id in sample_gases) - assert_gas(id) + ASSERT_GAS(id,src) cached_gases[id][MOLES] = sample_gases[id][MOLES] //remove all gases not in the sample @@ -282,7 +268,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) gas -= "TEMP" gases.Cut() for(var/id in gas) - add_gas(id) + ADD_GAS(id, gases) gases[id][MOLES] = text2num(gas[id]) return 1 @@ -310,10 +296,9 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) //GAS TRANSFER for(var/id in sharer_gases - cached_gases) // create gases not in our cache - add_gas(id) + ADD_GAS(id, gases) for(var/id in cached_gases) // transfer gases - if(!sharer_gases[id]) //checking here prevents an uneeded proc call if the check fails. - sharer.add_gas(id) + ASSERT_GAS(id, sharer) var/gas = cached_gases[id] var/sharergas = sharer_gases[id] diff --git a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm index 086e21daca2..50e1b38e52f 100644 --- a/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm +++ b/code/modules/atmospherics/gasmixtures/immutable_mixtures.dm @@ -69,7 +69,7 @@ /datum/gas_mixture/immutable/cloner/garbage_collect() ..() - add_gas("n2") + ADD_GAS("n2", gases) gases["n2"][MOLES] = MOLES_O2STANDARD + MOLES_N2STANDARD /datum/gas_mixture/immutable/cloner/heat_capacity() diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index abbfcf89242..c4662134090 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -57,7 +57,7 @@ cached_gases["co2"][MOLES] -= reaction_rate cached_gases["agent_b"][MOLES] -= reaction_rate*0.05 - air.assert_gas("o2") //only need to assert oxygen, as this reaction doesn't occur without the other gases existing + ASSERT_GAS("o2", air) //only need to assert oxygen, as this reaction doesn't occur without the other gases existing cached_gases["o2"][MOLES] += reaction_rate air.temperature -= (reaction_rate*20000)/air.heat_capacity() @@ -126,7 +126,7 @@ if(burned_fuel) energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel - air.assert_gas("co2") + ASSERT_GAS("co2", air) cached_gases["co2"][MOLES] += burned_fuel cached_results[id] += burned_fuel @@ -142,14 +142,14 @@ else temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) if(temperature_scale > 0) - air.assert_gas("o2") + ASSERT_GAS("o2", air) oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale if(cached_gases["o2"][MOLES] > cached_gases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN) plasma_burn_rate = (cached_gases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA else plasma_burn_rate = (temperature_scale*(cached_gases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY) - air.assert_gas("co2") + ASSERT_GAS("co2", air) cached_gases["plasma"][MOLES] = QUANTIZE(cached_gases["plasma"][MOLES] - plasma_burn_rate) cached_gases["o2"][MOLES] = QUANTIZE(cached_gases["o2"][MOLES] - (plasma_burn_rate * oxygen_burn_rate)) cached_gases["co2"][MOLES] += plasma_burn_rate diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 2b5a94ef647..4e3ef0f3cc8 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -96,7 +96,7 @@ var/datum/gas_mixture/filtered_out = new filtered_out.temperature = removed.temperature - filtered_out.assert_gas(filter_type) + ASSERT_GAS(filter_type, filtered_out) filtered_out.gases[filter_type][MOLES] = removed.gases[filter_type][MOLES] removed.gases[filter_type][MOLES] = 0 @@ -166,4 +166,3 @@ if(. && on && is_operational()) to_chat(user, "You cannot unwrench [src], turn it off first!") return FALSE - diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index a3a3796f466..853f422c1c9 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -276,10 +276,9 @@ if(beaker) to_chat(user, "A beaker is already loaded into [src]!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return beaker = I - I.loc = src user.visible_message("[user] places [I] in [src].", \ "You place [I] in [src].") var/reagentlist = pretty_string_from_reagent_list(I.reagents.reagent_list) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm b/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm index b953fb29021..7418205c7b5 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm @@ -47,7 +47,7 @@ var/added_oxygen = oxygen_content - total_moles air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen) - air_contents.assert_gas("o2") + ASSERT_GAS("o2", air_contents) air_contents.gases["o2"][MOLES] += added_oxygen update_parents() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm index 4b2b1843fec..3b0055edab4 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm @@ -16,7 +16,7 @@ air_contents.volume = volume air_contents.temperature = T20C if(gas_type) - air_contents.assert_gas(gas_type) + ASSERT_GAS(gas_type, air_contents) air_contents.gases[gas_type][MOLES] = AIR_CONTENTS name = "[name] ([air_contents.gases[gas_type][GAS_META][META_GAS_NAME]])" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 251eab55511..326f47aac4f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -196,37 +196,37 @@ filtered_out.temperature = removed.temperature if(scrub_Toxins && removed_gases["plasma"]) - filtered_out.add_gas("plasma") + ADD_GAS("plasma", filtered_out.gases) filtered_gases["plasma"][MOLES] = removed_gases["plasma"][MOLES] removed_gases["plasma"][MOLES] = 0 if(scrub_CO2 && removed_gases["co2"]) - filtered_out.add_gas("co2") + ADD_GAS("co2", filtered_out.gases) filtered_gases["co2"][MOLES] = removed_gases["co2"][MOLES] removed_gases["co2"][MOLES] = 0 if(removed_gases["agent_b"]) - filtered_out.add_gas("agent_b") + ADD_GAS("agent_b", filtered_out.gases) filtered_gases["agent_b"][MOLES] = removed_gases["agent_b"][MOLES] removed_gases["agent_b"][MOLES] = 0 if(scrub_N2O && removed_gases["n2o"]) - filtered_out.add_gas("n2o") + ADD_GAS("n2o", filtered_out.gases) filtered_gases["n2o"][MOLES] = removed_gases["n2o"][MOLES] removed_gases["n2o"][MOLES] = 0 if(scrub_BZ && removed_gases["bz"]) - filtered_out.add_gas("bz") + ADD_GAS("bz", filtered_out.gases) filtered_gases["bz"][MOLES] = removed_gases["bz"][MOLES] removed_gases["bz"][MOLES] = 0 if(scrub_Freon && removed_gases["freon"]) - filtered_out.add_gas("freon") + ADD_GAS("freon", filtered_out.gases) filtered_gases["freon"][MOLES] = removed_gases["freon"][MOLES] removed_gases["freon"][MOLES] = 0 if(scrub_WaterVapor && removed_gases["water_vapor"]) - filtered_out.add_gas("water_vapor") + ADD_GAS("water_vapor", filtered_out.gases) filtered_gases["water_vapor"][MOLES] = removed_gases["water_vapor"][MOLES] removed_gases["water_vapor"][MOLES] = 0 diff --git a/code/modules/atmospherics/machinery/other/miner.dm b/code/modules/atmospherics/machinery/other/miner.dm index 20439e5c2b7..1db4c5edd3a 100644 --- a/code/modules/atmospherics/machinery/other/miner.dm +++ b/code/modules/atmospherics/machinery/other/miner.dm @@ -132,7 +132,7 @@ if(!isopenturf(O)) return FALSE var/datum/gas_mixture/merger = new - merger.assert_gas(spawn_id) + ASSERT_GAS(spawn_id, merger) merger.gases[spawn_id][MOLES] = (spawn_mol) merger.temperature = spawn_temp O.assume_air(merger) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 024330ed7e7..c08ef25b617 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -174,7 +174,7 @@ /obj/machinery/portable_atmospherics/canister/proc/create_gas() if(gas_type) - air_contents.add_gas(gas_type) + ADD_GAS(gas_type, air_contents.gases) if(starter_temp) air_contents.temperature = starter_temp air_contents.gases[gas_type][MOLES] = (maximum_pressure * filled) * air_contents.volume / (R_IDEAL_GAS_EQUATION * air_contents.temperature) diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 9a2ecb6fea7..96a5b8e4894 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -80,9 +80,8 @@ if(istype(W, /obj/item/tank)) if(!(stat & BROKEN)) var/obj/item/tank/T = W - if(holding || !user.drop_item()) + if(holding || !user.transferItemToLoc(T, src)) return - T.loc = src holding = T update_icon() else if(istype(W, /obj/item/wrench)) diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 93475a00a72..7a76405a900 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -45,7 +45,7 @@ filtered.temperature = filtering.temperature for(var/gas in filtering.gases & scrubbing) - filtered.add_gas(gas) + ADD_GAS(gas, filtered.gases) filtered.gases[gas][MOLES] = filtering.gases[gas][MOLES] // Shuffle the "bad" gasses to the filtered mixture. filtering.gases[gas][MOLES] = 0 filtering.garbage_collect() // Now that the gasses are set to 0, clean up the mixture. diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index e960e549f73..f519e567a64 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -174,7 +174,7 @@ /obj/item/dice/d20/fate/equipped(mob/user, slot) if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") - user.drop_item() + user.dropItemToGround(src) /obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user,roll) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 7699c9cd5f8..886477fa965 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -350,6 +350,8 @@ GLOBAL_LIST(external_rsc_urls) if (menuitem) menuitem.Load_checked(src) + Master.UpdateTickRate() + ////////////// //DISCONNECT// ////////////// @@ -386,6 +388,7 @@ GLOBAL_LIST(external_rsc_urls) if(movingmob != null) movingmob.client_mobs_in_contents -= mob UNSETEMPTY(movingmob.client_mobs_in_contents) + Master.UpdateTickRate() return ..() /client/Destroy() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 237714eb8ec..2f6b632ae82 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -144,15 +144,15 @@ if(pockets) var/list/how_cool_are_your_threads = list("") if(pockets.priority) - how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n" + how_cool_are_your_threads += "[src]'s storage opens when clicked.\n" else - how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n" - how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" - how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" + how_cool_are_your_threads += "[src]'s storage opens when dragged to yourself.\n" + how_cool_are_your_threads += "[src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n" + how_cool_are_your_threads += "[src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n" if(pockets.quickdraw) - how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n" + how_cool_are_your_threads += "You can quickly remove an item from [src] using Alt-Click.\n" if(pockets.silent) - how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n" + how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n" how_cool_are_your_threads += "" to_chat(user, how_cool_are_your_threads.Join()) @@ -592,7 +592,7 @@ BLIND // can't see anything to_chat(user, "[src] already has an accessory.") return else - if(user && !user.drop_item()) + if(user && !user.temporarilyRemoveItemFromInventory(I)) return if(!A.attach(src, user)) return diff --git a/code/modules/events/nightmare.dm b/code/modules/events/nightmare.dm new file mode 100644 index 00000000000..7be5db8e842 --- /dev/null +++ b/code/modules/events/nightmare.dm @@ -0,0 +1,43 @@ +/datum/round_event_control/nightmare + name = "Spawn Nightmare" + typepath = /datum/round_event/ghost_role/nightmare + max_occurrences = 1 + min_players = 20 + +/datum/round_event/ghost_role/nightmare + minimum_required = 1 + role_name = "nightmare" + +/datum/round_event/ghost_role/nightmare/spawn_role() + var/list/candidates = get_candidates("alien", null, ROLE_ALIEN) + if(!candidates.len) + return NOT_ENOUGH_PLAYERS + + var/mob/dead/selected = pick(candidates) + + var/datum/mind/player_mind = new /datum/mind(selected.key) + player_mind.active = TRUE + + var/list/spawn_locs = list() + for(var/obj/effect/landmark/xeno_spawn/L in GLOB.landmarks_list) + if(isturf(L.loc)) + var/turf/T = L.loc + var/light_amount = T.get_lumcount() + if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) + spawn_locs += T + + if(!spawn_locs.len) + message_admins("No valid spawn locations found, aborting...") + return MAP_ERROR + + var/mob/living/carbon/human/S = new ((pick(spawn_locs))) + player_mind.transfer_to(S) + player_mind.assigned_role = "Nightmare" + player_mind.special_role = "Nightmare" + SSticker.mode.traitors += player_mind + S.set_species(/datum/species/shadow/nightmare) + playsound(S, 'sound/magic/ethereal_exit.ogg', 50, 1, -1) + message_admins("[key_name_admin(S)] has been made into a Nightmare by an event.") + log_game("[key_name(S)] was spawned as a Nightmare by an event.") + spawned_mobs += S + return SUCCESSFUL_SPAWN diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 67fd0171530..63ff85ac17b 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -22,13 +22,10 @@ /obj/item/reagent_containers/food/drinks/bottle/proc/smash(mob/living/target, mob/living/user, ranged = 0) //Creates a shattering noise and replaces the bottle with a broken_bottle - var/new_location = get_turf(loc) + var/new_location = get_turf(src) var/obj/item/broken_bottle/B = new /obj/item/broken_bottle(new_location) - if(ranged) - B.loc = new_location - else - user.drop_item() - user.put_in_active_hand(B) + if(!ranged) + user.put_in_hands(B) B.icon_state = src.icon_state var/icon/I = new('icons/obj/drinks.dmi', src.icon_state) diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 0f27265b4b6..df323a99ff7 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -58,10 +58,9 @@ insert ascii eagle on american flag background here else if(is_type_in_typecache(I, deepfry_blacklisted_items)) . = ..() - else if(user.drop_item() && !frying) + else if(!frying && user.transferItemToLoc(I, src)) to_chat(user, "You put [I] into [src].") frying = I - frying.forceMove(src) icon_state = "fryer_on" /obj/machinery/deepfryer/process() diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index ee296900272..d6037af55b0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -68,8 +68,6 @@ if(istype(O, /obj/item/reagent_containers/food/drinks/drinkingglass)) var/obj/item/reagent_containers/food/drinks/drinkingglass/DG = O if(!DG.reagents.total_volume) //glass is empty - if(!user.drop_item()) - return qdel(DG) glasses++ to_chat(user, "The [src] accepts the drinking glass, sterilizing it.") @@ -78,9 +76,8 @@ to_chat(user, "The [src] is at full capacity.") else var/obj/item/reagent_containers/food/snacks/S = O - if(!user.drop_item()) + if(!user.transferItemToLoc(S, src)) return - S.loc = src if(stored_food[sanitize(S.name)]) stored_food[sanitize(S.name)]++ else diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index e25b29f7216..fd2471b96eb 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -142,11 +142,10 @@ to_chat(user, "[src] is full, you can't put anything in!") return 1 else - if(!user.drop_item()) + if(!user.transferItemToLoc(O, src)) to_chat(user, "\the [O] is stuck to your hand, you cannot put it in \the [src]!") return 0 - O.loc = src user.visible_message( \ "[user] has added \the [O] to \the [src].", \ "You add \the [O] to \the [src].") diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 6e245bd3865..fb871f2c3a4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -195,8 +195,7 @@ if(P) user.visible_message("[user] put [O] into [src].", \ "You put [O] into [src].") - user.drop_item() - O.loc = src + user.transferItemToLoc(O, src, TRUE) return 1 else if(user.a_intent != INTENT_HARM) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 82fcc8c5389..6788d1fc924 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -178,20 +178,18 @@ if(pizza) to_chat(user, "[src] already has \a [pizza.name]!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return pizza = I - I.loc = src to_chat(user, "You put [I] in [src].") update_icon() return else if(istype(I, /obj/item/bombcore/pizza)) if(open && !bomb) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return wires = new /datum/wires/explosive/pizza(src) bomb = I - I.loc = src to_chat(user, "You put [I] in [src]. Sneeki breeki...") update_icon() return diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 736a6732a00..1073f0d898e 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -104,7 +104,7 @@ /obj/structure/holohoop/attackby(obj/item/W as obj, mob/user as mob, params) if(get_dist(src,user)<2) - if(user.drop_item(src)) + if(user.transferItemToLoc(W, drop_location())) visible_message(" [user] dunks [W] into \the [src]!") /obj/structure/holohoop/attack_hand(mob/user) @@ -211,9 +211,7 @@ /obj/machinery/conveyor/holodeck /obj/machinery/conveyor/holodeck/attackby(obj/item/I, mob/user, params) - if(user.drop_item()) - I.loc = src.loc - else + if(!user.transferItemToLoc(I, drop_location())) return ..() /obj/item/paper/fluff/holodeck/trek_diploma diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 5c9b0dac5ed..1535173f8d4 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -95,9 +95,8 @@ if(beaker) to_chat(user, "A container is already loaded into the machine.") else - if(!user.drop_item()) + if(!user.transferItemToLoc(O, src)) return - O.loc = src beaker = O to_chat(user, "You add the container to the machine.") update_icon() diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 9439346bba4..de881a0611c 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -80,7 +80,7 @@ if(seed) to_chat(user, "A sample is already loaded into the machine!") else - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory()) return insert_seed(I) to_chat(user, "You add [I] to the machine.") @@ -90,10 +90,9 @@ if(disk) to_chat(user, "A data disk is already loaded into the machine!") else - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return disk = I - disk.loc = src to_chat(user, "You add [I] to the machine.") interact(user) else @@ -269,7 +268,7 @@ else var/obj/item/I = usr.get_active_held_item() if (istype(I, /obj/item/seeds)) - if(!usr.drop_item()) + if(!usr.temporarilyRemoveItemFromInventory(I)) return insert_seed(I) to_chat(usr, "You add [I] to the machine.") @@ -283,10 +282,9 @@ else var/obj/item/I = usr.get_active_held_item() if(istype(I, /obj/item/disk/plantgene)) - if(!usr.drop_item()) + if(!usr.transferItemToLoc(I, src)) return disk = I - disk.loc = src to_chat(usr, "You add [I] to the machine.") else if(href_list["op"] == "insert" && disk && disk.gene && seed) if(!operation) // Wait for confirmation diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index 5e327015268..7834ed15e82 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -87,8 +87,7 @@ /obj/item/reagent_containers/food/snacks/grown/meatwheat/attack_self(mob/living/user) user.visible_message("[user] crushes [src] into meat.", "You crush [src] into something that resembles meat.") playsound(user, 'sound/effects/blobattack.ogg', 50, 1) - var/obj/item/reagent_containers/food/snacks/meat/slab/meatwheat/M = new(get_turf(user)) - user.drop_item() + var/obj/item/reagent_containers/food/snacks/meat/slab/meatwheat/M = new qdel(src) user.put_in_hands(M) return 1 diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index b32fa12a133..485ab6bfd85 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -115,4 +115,4 @@ if(prob(20)) M.Unconscious(force / 0.3) M.Knockdown(force / 0.75) - M.drop_item() + M.drop_all_held_items() diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index cba3406a771..54805f3141b 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -13,7 +13,7 @@ if(istype(O, /obj/item/reagent_containers/food/snacks/grown/)) var/obj/item/reagent_containers/food/snacks/grown/F = O if(F.seed) - if(user && !user.drop_item()) //couldn't drop the item + if(user && !user.temporarilyRemoveItemFromInventory(O)) //couldn't drop the item return while(t_amount < t_max) var/obj/item/seeds/t_prod = F.seed.Copy() @@ -25,7 +25,7 @@ else if(istype(O, /obj/item/grown)) var/obj/item/grown/F = O if(F.seed) - if(user && !user.drop_item()) + if(user && !user.temporarilyRemoveItemFromInventory(O)) return while(t_amount < t_max) var/obj/item/seeds/t_prod = F.seed.Copy() @@ -181,13 +181,12 @@ if(ismob(O.loc)) var/mob/M = O.loc - if(!M.drop_item()) + if(!M.transferItemToLoc(O, src)) return 0 else if(istype(O.loc, /obj/item/storage)) var/obj/item/storage/S = O.loc S.remove_from_storage(O,src) - O.loc = src . = 1 for (var/datum/seed_pile/N in piles) if (O.plantname == N.name && O.lifespan == N.lifespan && O.endurance == N.endurance && O.maturation == N.maturation && O.production == N.production && O.yield == N.yield && O.potency == N.potency) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 33f02bc7593..711ac4f33af 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -84,9 +84,8 @@ if(2) if(is_type_in_list(I, allowed_books)) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.loc = src update_icon() else if(istype(I, /obj/item/storage/bag/books)) var/obj/item/storage/bag/books/B = I diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index dc48bbae2d5..081ecdcdaa5 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -507,9 +507,8 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums /obj/machinery/libraryscanner/attackby(obj/O, mob/user, params) if(istype(O, /obj/item/book)) - if(!user.drop_item()) + if(!user.transferItemToLoc(O, src)) return - O.loc = src else return ..() @@ -576,9 +575,8 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums if(busy) to_chat(user, "The book binder is busy. Please wait for completion of previous operation.") return - if(!user.drop_item()) + if(!user.transferItemToLoc(P, src)) return - P.loc = src user.visible_message("[user] loads some paper into [src].", "You load some paper into [src].") audible_message("[src] begins to hum as it warms up its printing drums.") busy = TRUE diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index d419ce7e38b..d76278a4104 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -67,8 +67,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) B.handle_item_insertion(src) uses_left-- if(uses_left <= 0) - user.drop_item(src) - loc = A + user.transferItemToLoc(src, A, TRUE) var/mutable_appearance/balloon var/mutable_appearance/balloon2 var/mutable_appearance/balloon3 diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 7c16f2f4203..12c9bfb30e5 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -24,9 +24,8 @@ /obj/machinery/mineral/labor_claim_console/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/card/id/prisoner)) if(!inserted_id) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.forceMove(src) inserted_id = I to_chat(user, "You insert [I].") return @@ -83,9 +82,8 @@ else var/obj/item/I = usr.get_active_held_item() if(istype(I, /obj/item/card/id/prisoner)) - if(!usr.drop_item()) + if(!usr.transferItemToLoc(I, src)) return - I.forceMove(src) inserted_id = I if("claim_points") inserted_id.points += stacking_machine.points diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 406d4444a81..5ab687cc665 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1005,7 +1005,7 @@ if(H == L) continue to_chat(H, "You have an overwhelming desire to kill [L]. [L.p_they(TRUE)] [L.p_have()] been marked red! Go kill [L.p_them()]!") - H.put_in_hands_or_del(new /obj/item/kitchen/knife/butcher(H)) + H.put_in_hands(new /obj/item/kitchen/knife/butcher(H), TRUE) qdel(src) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 38e02474f4b..437073a1fcd 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -166,9 +166,8 @@ if(istype(W, /obj/item/card/id)) var/obj/item/card/id/I = user.get_active_held_item() if(istype(I) && !istype(inserted_id)) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.forceMove(src) inserted_id = I interact(user) return diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 8ae3632d340..5a228973cee 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -116,9 +116,8 @@ else if(href_list["choice"] == "insert") var/obj/item/card/id/I = usr.get_active_held_item() if(istype(I)) - if(!usr.drop_item()) + if(!usr.transferItemToLoc(I, src)) return - I.loc = src inserted_id = I to_chat(usr, "You insert the ID into [src]'s card slot.") else @@ -155,9 +154,8 @@ if(istype(I, /obj/item/card/id)) var/obj/item/card/id/C = usr.get_active_held_item() if(istype(C) && !istype(inserted_id)) - if(!usr.drop_item()) + if(!usr.transferItemToLoc(C, src)) return - C.loc = src inserted_id = C to_chat(usr, "You insert the ID into [src]'s card slot.") interact(user) diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 2836bd67f83..17c89b3af99 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -11,9 +11,7 @@ /obj/structure/ore_box/attackby(obj/item/W, mob/user, params) if (istype(W, /obj/item/ore)) - if(!user.drop_item()) - return - W.forceMove(src) + user.transferItemToLoc(W, src) else if (istype(W, /obj/item/storage)) var/obj/item/storage/S = W for(var/obj/item/ore/O in S.contents) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 59e7db1286f..486a918c064 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -222,26 +222,10 @@ I.dropped(src) return FALSE - -/mob/proc/put_in_hands_or_del(obj/item/I) - return put_in_hands(I, TRUE) - - -/mob/proc/drop_item_v() //this is dumb. - if(stat == CONSCIOUS && isturf(loc)) - return drop_item() - return FALSE - - /mob/proc/drop_all_held_items() + . = FALSE for(var/obj/item/I in held_items) - dropItemToGround(I) - -//Drops the item in our active hand. -/mob/proc/drop_item() - var/obj/item/held = get_active_held_item() - return dropItemToGround(held) - + . |= dropItemToGround(I) //Here lie drop_from_inventory and before_item_take, already forgotten and not missed. diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index aa15e28e66d..6ac5ab1bada 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -115,9 +115,8 @@ //since these people will be dead M != usr if(!C.getorgan(/obj/item/organ/brain)) - if(!C.get_bodypart("head")) + if(!C.get_bodypart("head") || !C.temporarilyRemoveItemFromInventory(src)) return - user.drop_item() var/msg = "[C] has [src] inserted into [C.p_their()] head by [user]." if(C == user) msg = "[user] inserts [src] into [user.p_their()] head!" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm index a09734ff494..36ed5ec8840 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm @@ -51,7 +51,7 @@ "[M] has pushed down [src]!") else if (prob(50)) - drop_item() + dropItemToGround(get_active_held_item()) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("[M] has disarmed [src]!", \ "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7f7f9c1a8aa..323af207b59 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -204,7 +204,7 @@ return 0 if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stunned instead. - if(get_active_held_item() && drop_item()) + if(dropItemToGround(get_active_held_item())) playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) visible_message("[M] disarmed [src]!", \ "[M] disarmed [src]!") @@ -256,7 +256,7 @@ apply_damage(damage, BRUTE, affecting, armor_block) if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stun instead. - if(get_active_held_item() && drop_item()) + if(dropItemToGround(get_active_held_item())) playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) visible_message("[M] disarmed [src]!", \ "[M] disarmed [src]!") diff --git a/code/modules/mob/living/carbon/human/interactive.dm b/code/modules/mob/living/carbon/human/interactive.dm index 404610c73ec..afa167ced63 100644 --- a/code/modules/mob/living/carbon/human/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive.dm @@ -657,7 +657,7 @@ insert_into_backpack() //---------FASHION if(istype(TARGET, /obj/item/clothing)) - drop_item() + temporarilyRemoveItemFromInventory(TARGET, TRUE) dressup(TARGET) update_hands = 1 if(MYPDA in src.loc || MYID in src.loc) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index b3a3d93f7b7..16a70ea1345 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1198,7 +1198,7 @@ target.stop_pulling() else I = target.get_active_held_item() - if(target.drop_item()) + if(target.dropItemToGround(I)) target.visible_message("[user] has disarmed [target]!", \ "[user] has disarmed [target]!", null, COMBAT_MESSAGE_RANGE) else diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index 20054d16bcd..e51017d8992 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -69,11 +69,9 @@ add_logs(M, src, "pushed") visible_message("[M] has pushed down [src]!", \ "[M] has pushed down [src]!", null, COMBAT_MESSAGE_RANGE) - else - if(drop_item()) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - visible_message("[M] has disarmed [src]!", \ - "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE) + else if(dropItemToGround(get_active_held_item())) + playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + visible_message("[M] has disarmed [src]!", "[M] has disarmed [src]!", null, COMBAT_MESSAGE_RANGE) /mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M) if(..()) //if harm or disarm intent. @@ -113,12 +111,10 @@ "[M] has tackled down [name]!", null, COMBAT_MESSAGE_RANGE) else I = get_active_held_item() - if(drop_item()) - visible_message("[M] has disarmed [name]!", \ - "[M] has disarmed [name]!", null, COMBAT_MESSAGE_RANGE) + if(dropItemToGround(I)) + visible_message("[M] has disarmed [name]!", "[M] has disarmed [name]!", null, COMBAT_MESSAGE_RANGE) else - I = null//did not manage to actually disarm the item, gross but no time to refactor - + I = null add_logs(M, src, "disarmed", "[I ? " removing \the [I]" : ""]") updatehealth() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 381c9988654..3b7950df5e9 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -424,9 +424,8 @@ else if(cell) to_chat(user, "There is a power cell already installed!") else - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return - W.loc = src cell = W to_chat(user, "You insert the power cell.") update_icons() @@ -515,7 +514,7 @@ else if(U.locked) to_chat(user, "The upgrade is locked and cannot be used yet!") else - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(U)) return if(U.action(src)) to_chat(user, "You apply the upgrade to [src].") @@ -526,12 +525,13 @@ upgrades += U else to_chat(user, "Upgrade error.") + U.forceMove(drop_location()) else if(istype(W, /obj/item/device/toner)) if(toner >= tonermax) to_chat(user, "The toner level of [src] is at its highest level possible!") else - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(W)) return toner = tonermax qdel(W) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 3e053b80af7..46a62a1d509 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -142,9 +142,6 @@ for(var/key in alarm_types_clear) alarm_types_clear[key] = 0 -/mob/living/silicon/drop_item() - return - /mob/living/silicon/can_inject(mob/user, error_msg) if(error_msg) to_chat(user, "Their outer shell is too tough.") diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 1afcdaaed4b..98b1b46ed8c 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -846,9 +846,8 @@ Pass a positive integer as an argument to override a bot's default speed. else if(allow_pai && !key) if(!locked && !open) if(card.pai && card.pai.mind) - if(!user.drop_item()) + if(!user.transferItemToLoc(card, src)) return - card.forceMove(src) paicard = card user.visible_message("[user] inserts [card] into [src]!","You insert [card] into [src].") paicard.pai.mind.transfer_to(src) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index bbbe4e310c0..3a46e46bebb 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -223,10 +223,9 @@ if(!isnull(reagent_glass)) to_chat(user, "There is already a beaker loaded!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return - W.loc = src reagent_glass = W to_chat(user, "You insert [W].") show_controls(user) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 69d53594f20..c2cc13fb630 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -84,11 +84,9 @@ if(open) on = FALSE else if(istype(I, /obj/item/stock_parts/cell) && open && !cell) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - var/obj/item/stock_parts/cell/C = I - C.loc = src - cell = C + cell = I visible_message("[user] inserts a cell into [src].", "You insert the new cell into [src].") else if(istype(I, /obj/item/crowbar) && open && cell) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 9e595bc2095..2544167752a 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -174,7 +174,7 @@ usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.") return - if(!usr.drop_item()) + if(!usr.temporarilyRemoveItemFromInventory(item_to_add)) to_chat(usr, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!") return @@ -189,7 +189,7 @@ if(!allowed) to_chat(usr, "You set [item_to_add] on [src]'s back, but it falls off!") - item_to_add.loc = loc + item_to_add.forceMove(drop_location()) if(prob(25)) step_rand(item_to_add) for(var/i in list(1,2,4,8,4,8,4,dir)) @@ -197,8 +197,7 @@ sleep(1) return - usr.drop_item() - item_to_add.loc = src + item_to_add.forceMove(src) src.inventory_back = item_to_add update_corgi_fluff() regenerate_icons() @@ -226,7 +225,7 @@ user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.") return - if(user && !user.drop_item()) + if(user && !user.temporarilyRemoveItemFromInventory(item_to_add)) to_chat(user, "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!") return 0 @@ -243,13 +242,13 @@ user.visible_message("[user] puts [item_to_add] on [real_name]'s head. [src] looks at [user] and barks once.", "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags [p_their()] tail once and barks.", "You hear a friendly-sounding bark.") - item_to_add.loc = src + item_to_add.forceMove(src) src.inventory_head = item_to_add update_corgi_fluff() regenerate_icons() else to_chat(user, "You set [item_to_add] on [src]'s head, but it falls off!") - item_to_add.loc = loc + item_to_add.forceMove(drop_location()) if(prob(25)) step_rand(item_to_add) for(var/i in list(1,2,4,8,4,8,4,dir)) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 0f8689b8514..f92bee5b3e8 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -268,7 +268,6 @@ if(!stat && eggsleft < 8) var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]" user.visible_message(feedmsg) - user.drop_item() qdel(O) eggsleft += rand(1, 4) else diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index fc2cf729d7b..5f54710d8da 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -244,8 +244,8 @@ var/obj/item/device/radio/headset/headset_to_add = item_to_add - usr.drop_item() - headset_to_add.loc = src + if(!usr.transferItemToLoc(headset_to_add, src)) + return src.ears = headset_to_add to_chat(usr, "You fit the headset onto [src].") @@ -338,7 +338,6 @@ drop_held_item(0) else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Poly wants a cracker. qdel(O) - user.drop_item() if(health < maxHealth) adjustBruteLoss(-10) speak_chance *= 1.27 // 20 crackers to go from 1% to 100% diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 4da630bb31f..a66b45d4a21 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -53,10 +53,11 @@ /client/Northwest() - if(!usr.get_active_held_item()) + var/obj/item/I = usr.get_active_held_item() + if(!I) to_chat(usr, "You have nothing to drop in your hand!") return - usr.drop_item() + usr.dropItemToGround(I) //This gets called when you press the delete button. /client/verb/delete_key_pressed() @@ -85,8 +86,8 @@ /client/verb/drop_item() set hidden = 1 - if(!iscyborg(mob)) - mob.drop_item_v() + if(!iscyborg(mob) && mob.stat == CONSCIOUS) + mob.dropItemToGround(mob.get_active_held_item()) return diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index ead6a35eeaa..0562bf700df 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -175,9 +175,8 @@ else var/obj/item/I = usr.get_active_held_item() if (istype(I, /obj/item/card/id)) - if(!usr.drop_item()) + if(!usr.transferItemToLoc(I, computer)) return - I.forceMove(computer) card_slot.stored_card = I if("auth") if(auth_card) @@ -191,9 +190,8 @@ else var/obj/item/I = usr.get_active_held_item() if (istype(I, /obj/item/card/id)) - if(!usr.drop_item()) + if(!usr.transferItemToLoc(I, computer)) return - I.forceMove(computer) card_slot.stored_card2 = I if("PRG_terminate") if(computer && ((id_card.assignment in head_subordinates) || id_card.assignment == "Assistant")) diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm index adec1aa19d2..99eb6f1a238 100644 --- a/code/modules/modular_computers/laptop_vendor.dm +++ b/code/modules/modular_computers/laptop_vendor.dm @@ -244,7 +244,7 @@ if(istype(I, /obj/item/stack/spacecash)) var/obj/item/stack/spacecash/c = I - if(!user.drop_item(c)) + if(!user.temporarilyRemoveItemFromInventory(c)) return credits += c.value visible_message("[usr] inserts [c.value] credits into the [src].") diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 3eac093f1b3..22fe9a75a99 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -47,10 +47,9 @@ /obj/structure/filingcabinet/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/paper) || istype(P, /obj/item/folder) || istype(P, /obj/item/photo) || istype(P, /obj/item/documents)) - if(!user.drop_item()) + if(!user.transferItemToLoc(P, src)) return to_chat(user, "You put [P] in [src].") - P.loc = src icon_state = "[initial(icon_state)]-open" sleep(5) icon_state = initial(icon_state) diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index 2c704b8568b..4a85d03df76 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -44,16 +44,15 @@ /obj/item/papercutter/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/paper) && !storedpaper) - if(!user.drop_item()) + if(!user.transferItemToLoc(P, src)) return playsound(loc, "pageturn", 60, 1) to_chat(user, "You place [P] in [src].") - P.loc = src storedpaper = P update_icon() return if(istype(P, /obj/item/hatchet/cutterblade) && !storedcutter) - if(!user.drop_item()) + if(!user.transferItemToLoc(P, src)) return to_chat(user, "You replace [src]'s [P].") P.loc = src diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 0dcd5d09a0e..d4e78c4ef3c 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -240,7 +240,7 @@ updateUsrDialog() /obj/machinery/photocopier/proc/do_insertion(obj/item/O, mob/user) - O.loc = src + O.forceMove(src) to_chat(user, "You insert [O] into [src].") flick("photocopier1", src) updateUsrDialog() @@ -261,7 +261,7 @@ resistance_flags |= FLAMMABLE fire_act() else - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(O)) return copy = O do_insertion(O, user) @@ -270,7 +270,7 @@ else if(istype(O, /obj/item/photo)) if(copier_empty()) - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(O)) return photocopy = O do_insertion(O, user) @@ -279,7 +279,7 @@ else if(istype(O, /obj/item/documents)) if(copier_empty()) - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(O)) return doccopy = O do_insertion(O, user) @@ -288,7 +288,7 @@ else if(istype(O, /obj/item/device/toner)) if(toner <= 0) - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(O)) return qdel(O) toner = 40 diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 056be0d0e2b..89b409dfe40 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -449,9 +449,8 @@ if (stat & MAINT) to_chat(user, "There is no connector for your power cell!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(W, src)) return - W.forceMove(src) cell = W user.visible_message(\ "[user.name] has inserted the power cell to [src.name]!",\ diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 9943170f783..2b7fe06e05a 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -315,7 +315,7 @@ src.add_fingerprint(user) var/obj/item/light/L = W if(istype(L, light_type)) - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory()) return src.add_fingerprint(user) diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 8399f73e79d..9b5592af3b0 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -87,10 +87,9 @@ GLOBAL_LIST_EMPTY(rad_collectors) if(loaded_tank) to_chat(user, "There's already a plasma tank loaded!") return TRUE - if(!user.drop_item()) - return TRUE + if(!user.transferItemToLoc(W, src)) + return loaded_tank = W - W.forceMove(src) update_icons() else if(istype(W, /obj/item/crowbar)) if(loaded_tank) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index dcc8c0a2007..fb530f128fc 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -240,7 +240,7 @@ if(!tracker) if(istype(W, /obj/item/electronics/tracker)) - if(!user.drop_item()) + if(!user.temporarilyRemoveItemFromInventory(W)) return tracker = 1 qdel(W) diff --git a/code/modules/projectiles/box_magazine.dm b/code/modules/projectiles/box_magazine.dm index 29e27d18ba5..324470ede40 100644 --- a/code/modules/projectiles/box_magazine.dm +++ b/code/modules/projectiles/box_magazine.dm @@ -81,8 +81,7 @@ if(istype(A, /obj/item/ammo_casing)) var/obj/item/ammo_casing/AC = A if(give_round(AC, replace_spent)) - user.drop_item() - AC.forceMove(src) + user.transferItemToLoc(AC, src, TRUE) num_loaded++ if(num_loaded) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index e5767e48baf..564bcd04d81 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -164,7 +164,7 @@ to_chat(user, "You shoot yourself in the foot with [src]!") var/shot_leg = pick("l_leg", "r_leg") process_fire(user,user,0,params, zone_override = shot_leg) - user.drop_item() + user.dropItemToGround(src, TRUE) return if(weapon_weight == WEAPON_HEAVY && user.get_inactive_held_item()) diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 833c6cb7304..584445a5736 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -358,5 +358,5 @@ if(process_fire(user, user, 0, zone_override = "head")) user.visible_message("[user] somehow manages to shoot [user.p_them()]self in the face!", "You somehow shoot yourself in the face! How the hell?!") user.emote("scream") - user.drop_item() + user.drop_all_held_items() user.Knockdown(80) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 730c1969e82..105e1704290 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -172,11 +172,11 @@ if(guns_left) var/obj/item/gun/ballistic/shotgun/boltaction/enchanted/GUN = new gun_type GUN.guns_left = guns_left - 1 - user.drop_item() + user.dropItemToGround(src, TRUE) user.swap_hand() user.put_in_hands(GUN) else - user.drop_item() + user.dropItemToGround(src, TRUE) discard_gun(user) // Automatic Shotguns// diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index 5ee2ecec053..8772ae05c05 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -49,12 +49,11 @@ if(!T.tank_one || !T.tank_two) to_chat(user, "What good would an incomplete bomb do?") return FALSE - if(!user.drop_item(O)) + if(!user.transferItemToLoc(O, src)) to_chat(user, "The [O] seems to be stuck to your hand!") return FALSE user.visible_message("[user] attaches the [O] to the [src]!") bomb = O - O.forceMove(src) update_icon() return TRUE return ..() diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 21b5a2b07f8..60d1f647547 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -190,9 +190,7 @@ M.emote("laugh") if(prob(33)) M.visible_message("[M]'s hands flip out and flail everywhere!") - var/obj/item/I = M.get_active_held_item() - if(I) - M.drop_item() + M.drop_all_held_items() ..() M.adjustToxLoss(1, 0) M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1)) @@ -269,9 +267,7 @@ if(prob(20)) M.emote(pick("twitch","drool","moan")) if(prob(33)) - var/obj/item/I = M.get_active_held_item() - if(I) - M.drop_item() + M.drop_all_held_items() ..() /datum/reagent/drug/bath_salts/addiction_act_stage1(mob/living/M) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 72001d5ca9d..f1b076ca686 100755 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -256,7 +256,6 @@ victim.confused = max(M.confused, 3) victim.damageoverlaytemp = 60 victim.Knockdown(60) - victim.drop_item() return else if ( eyes_covered ) // Eye cover is better than mouth cover victim.blur_eyes(3) @@ -270,7 +269,6 @@ victim.confused = max(M.confused, 6) victim.damageoverlaytemp = 75 victim.Knockdown(100) - victim.drop_item() victim.update_damage_hud() /datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/M) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 38f3d68eff8..aa85a9dfaf8 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -626,27 +626,20 @@ /datum/reagent/medicine/morphine/overdose_process(mob/living/M) if(prob(33)) - var/obj/item/I = M.get_active_held_item() - if(I) - M.drop_item() + M.drop_all_held_items() M.Dizzy(2) M.Jitter(2) ..() /datum/reagent/medicine/morphine/addiction_act_stage1(mob/living/M) if(prob(33)) - var/obj/item/I = M.get_active_held_item() - if(I) - M.drop_item() - M.Dizzy(2) + M.drop_all_held_items() M.Jitter(2) ..() /datum/reagent/medicine/morphine/addiction_act_stage2(mob/living/M) if(prob(33)) - var/obj/item/I = M.get_active_held_item() - if(I) - M.drop_item() + M.drop_all_held_items() M.adjustToxLoss(1*REM, 0) . = 1 M.Dizzy(3) @@ -655,9 +648,7 @@ /datum/reagent/medicine/morphine/addiction_act_stage3(mob/living/M) if(prob(33)) - var/obj/item/I = M.get_active_held_item() - if(I) - M.drop_item() + M.drop_all_held_items() M.adjustToxLoss(2*REM, 0) . = 1 M.Dizzy(4) @@ -666,9 +657,7 @@ /datum/reagent/medicine/morphine/addiction_act_stage4(mob/living/M) if(prob(33)) - var/obj/item/I = M.get_active_held_item() - if(I) - M.drop_item() + M.drop_all_held_items() M.adjustToxLoss(3*REM, 0) . = 1 M.Dizzy(5) diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 49e375b7231..2a194ee95c4 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -141,8 +141,7 @@ to_chat(user, "You reverse [src]'s direction.") else if(user.a_intent != INTENT_HARM) - if(user.drop_item()) - I.loc = src.loc + user.transferItemToLoc(I, drop_location()) else return ..() diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm index 351e9a67613..b73ec3d009d 100644 --- a/code/modules/recycling/disposal-unit.dm +++ b/code/modules/recycling/disposal-unit.dm @@ -96,7 +96,7 @@ return if(user.a_intent != INTENT_HARM) - if(!user.drop_item() || (I.flags_1 & ABSTRACT_1)) + if((I.flags_1 & ABSTRACT_1) || !user.temporarilyRemoveItemFromInventory(I)) return place_item_in_disposal(I, user) update_icon() diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 5d3cde7aac9..790cba08896 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -43,12 +43,11 @@ Note: Must be placed within 3 tiles of the R&D Console if (temp_tech.len == 0) to_chat(user, "You cannot deconstruct this item!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(O, src)) to_chat(user, "\The [O] is stuck to your hand, you cannot put it in the [src.name]!") return busy = TRUE loaded_item = O - O.forceMove(src) to_chat(user, "You add the [O.name] to the [src.name]!") flick("d_analyzer_la", src) addtimer(CALLBACK(src, .proc/finish_loading), 10) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 4d8938b1b8a..3a2b1f6b7fa 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -122,10 +122,9 @@ if (temp_tech.len == 0) to_chat(user, "You cannot experiment on this item!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(O, src)) return loaded_item = O - O.loc = src to_chat(user, "You add the [O.name] to the machine.") flick("h_lathe_load", src) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index bfe7970e9f8..d912bc908e7 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -127,9 +127,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, else to_chat(user, "Machine cannot accept disks in that format.") return - if(!user.drop_item()) + if(!user.transferItemToLoc(D, src)) return - D.loc = src to_chat(user, "You add the disk to the machine!") else if(!(linked_destroy && linked_destroy.busy) && !(linked_lathe && linked_lathe.busy) && !(linked_imprinter && linked_imprinter.busy)) . = ..() diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 1be515f1774..02180b273fc 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -70,7 +70,6 @@ if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) monkeys++ to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.") - user.drop_item() qdel(O) return else if(istype(O, /obj/item/storage/bag)) diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm index e3856d3ff1d..422794fe05d 100644 --- a/code/modules/shuttle/white_ship.dm +++ b/code/modules/shuttle/white_ship.dm @@ -3,4 +3,17 @@ desc = "Used to control the White Ship." circuit = /obj/item/circuitboard/computer/white_ship shuttleId = "whiteship" - possible_destinations = "whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland" \ No newline at end of file + possible_destinations = "whiteship_away;whiteship_home;whiteship_z4;whiteship_lavaland;whiteship_custom" + +/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship + name = "White Ship Navigation Computer" + desc = "Used to designate a precise transit location for the White Ship." + shuttleId = "whiteship" + station_lock_override = TRUE + shuttlePortId = "whiteship_custom" + shuttlePortName = "Custom Location" + jumpto_ports = list("whiteship_away" = 1, "whiteship_home" = 1, "whiteship_z4" = 1) + view_range = 20 + x_offset = -6 + y_offset = -10 + diff --git a/code/modules/spells/spell_types/conjure.dm b/code/modules/spells/spell_types/conjure.dm index 08837c956dc..c73c5de58a2 100644 --- a/code/modules/spells/spell_types/conjure.dm +++ b/code/modules/spells/spell_types/conjure.dm @@ -75,9 +75,8 @@ item = null else for(var/mob/living/carbon/C in targets) - if(C.drop_item()) - item = make_item() - C.put_in_hands(item) + if(C.dropItemToGround(C.get_active_held_item())) + C.put_in_hands(make_item(), TRUE) /obj/effect/proc_holder/spell/targeted/conjure_item/Destroy() if(item) diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 9d1afdcebc6..b1867413a3c 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -49,7 +49,7 @@ for(var/mob/living/carbon/C in targets) if(C.mind && user.mind) if(C.stat == DEAD) - if(user.drop_item()) + if(user.dropItemToGround(user.get_active_held_item())) var/obj/item/paper/contract/infernal/revive/contract = new(user.loc, C.mind, user.mind) user.put_in_hands(contract) else diff --git a/code/modules/spells/spell_types/devil_boons.dm b/code/modules/spells/spell_types/devil_boons.dm index a0be169d85c..5d335745d2b 100644 --- a/code/modules/spells/spell_types/devil_boons.dm +++ b/code/modules/spells/spell_types/devil_boons.dm @@ -14,7 +14,7 @@ /obj/effect/proc_holder/spell/targeted/summon_wealth/cast(list/targets, mob/user = usr) for(var/mob/living/carbon/C in targets) - if(user.drop_item()) + if(user.dropItemToGround(user.get_active_held_item())) var/obj/item = pick( new /obj/item/coin/gold(user.loc), new /obj/item/coin/diamond(user.loc), diff --git a/code/modules/spells/spell_types/infinite_guns.dm b/code/modules/spells/spell_types/infinite_guns.dm index 6036d1a70bb..feb6eeddb6b 100644 --- a/code/modules/spells/spell_types/infinite_guns.dm +++ b/code/modules/spells/spell_types/infinite_guns.dm @@ -14,12 +14,9 @@ /obj/effect/proc_holder/spell/targeted/infinite_guns/cast(list/targets, mob/user = usr) for(var/mob/living/carbon/C in targets) - C.drop_item() - C.swap_hand() - C.drop_item() + C.drop_all_held_items() var/GUN = new summon_path C.put_in_hands(GUN) - C.swap_hand(C.get_held_index_of_item(GUN)) /obj/effect/proc_holder/spell/targeted/infinite_guns/gun diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index a37502a96ba..8bad429102a 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -29,9 +29,8 @@ return 0 else user.visible_message("[user] stuffs [tool] into [target]'s [target_zone]!", "You stuff [tool] into [target]'s [target_zone].") - user.drop_item() + user.transferItemToLoc(tool, target, TRUE) CH.cavity_item = tool - tool.loc = target return 1 else if(IC) diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index db3771ad215..0073c59f8d0 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -15,8 +15,7 @@ if(!istype(tool)) return 0 - user.drop_item() - tool.loc = target + user.transferItemToLoc(tool, target, TRUE) var/datum/action/item_action/hands_free/activate_pill/P = new(tool) P.button.name = "Activate [tool.name]" diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm index 2357ff134aa..2efd79539ae 100644 --- a/code/modules/surgery/limb_augmentation.dm +++ b/code/modules/surgery/limb_augmentation.dm @@ -53,7 +53,6 @@ L.change_bodypart_status(BODYPART_ROBOTIC, TRUE) L.icon = tool.icon L.max_damage = tool.max_damage - user.drop_item() qdel(tool) target.update_body_parts() target.updatehealth() diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 42bfd30893f..1fa7fee496e 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -121,7 +121,7 @@ tool = I else I = tool - user.drop_item() + user.temporarilyRemoveItemFromInventory(I, TRUE) I.Insert(target) user.visible_message("[user] inserts [tool] into [target]'s [parse_zone(target_zone)]!", "You insert [tool] into [target]'s [parse_zone(target_zone)].") diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm index caa6cc7a974..0de1683fbd2 100644 --- a/code/modules/surgery/organs/autosurgeon.dm +++ b/code/modules/surgery/organs/autosurgeon.dm @@ -49,9 +49,8 @@ else if(!uses) to_chat(user, "[src] has already been used up.") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return - I.forceMove(src) storedorgan = I to_chat(user, "You insert the [I] into [src].") else if(istype(I, /obj/item/screwdriver)) diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index d1699cb2576..9308154c486 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -89,7 +89,7 @@ /obj/item/organ/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target) if(H == user && istype(H)) playsound(user,'sound/effects/singlebeat.ogg',40,1) - user.drop_item() + user.temporarilyRemoveItemFromInventory(src, TRUE) Insert(user) else return ..() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 4fdda7a7bcc..681dcb21cf8 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -92,10 +92,9 @@ if(status == ORGAN_ORGANIC) var/obj/item/reagent_containers/food/snacks/S = prepare_eat() if(S) - H.drop_item() - H.put_in_active_hand(S) - S.attack(H, H) qdel(src) + if(H.put_in_active_hand(S)) + S.attack(H, H) else ..() diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index e817416d7e8..2dddb95872d 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -63,9 +63,8 @@ tool.desc = "A container for holding body parts." tool.cut_overlays() tool = tool.contents[1] - if(istype(tool, /obj/item/bodypart)) + if(istype(tool, /obj/item/bodypart) && user.temporarilyRemoveItemFromInventory(tool)) var/obj/item/bodypart/L = tool - user.drop_item() L.attach_limb(target) if(organ_rejection_dam) target.adjustToxLoss(organ_rejection_dam) diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 7be42b6e4df..0d97cb63c19 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -47,10 +47,9 @@ if(mybag) to_chat(user, "[src] already has a trashbag hooked!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return to_chat(user, "You hook the trashbag onto [src].") - I.loc = src mybag = I update_icon() else if(istype(I, /obj/item/janiupgrade)) diff --git a/config/config.txt b/config/config.txt index 1602cd4f48d..39ebc952b6b 100644 --- a/config/config.txt +++ b/config/config.txt @@ -232,9 +232,13 @@ ALLOW_HOLIDAYS ##This is currently a testing optimized setting. A good value for production would be 98. TICK_LIMIT_MC_INIT 500 -##Defines the ticklag for the world. 0.9 is the normal one, 0.5 is smoother. +##Defines the ticklag for the world. Ticklag is the amount of time between game ticks (aka byond ticks) (in 1/10ths of a second). +## This also controls the client network update rate, as well as the default client fps TICKLAG 0.5 +##Can also be set as per-second value, the following value is identical to the above. +#FPS 20 + ## Comment this out to disable automuting #AUTOMUTE_ON @@ -360,4 +364,24 @@ MINUTE_TOPIC_LIMIT 100 #IRC_ANNOUNCE_NEW_GAME ## Allow admin hrefs that don't use the new token system, will eventually be removed -DEBUG_ADMIN_HREFS \ No newline at end of file +DEBUG_ADMIN_HREFS + +###Master Controller High Pop Mode### + +##The Master Controller(MC) is the primary system controlling timed tasks and events in SS13 (lobby timer, game checks, lighting updates, atmos, etc) +##Default base MC tick rate (1 = process every "byond tick" (see: tick_lag/fps config settings), 2 = process every 2 byond ticks, etc) +## Setting this to 0 will prevent the Master Controller from ticking +BASE_MC_TICK_RATE 1 + +##High population MC tick rate +## Byond rounds timer values UP, but the tick rate is modified with heuristics during lag spites so setting this to something like 2 +## will make it run every 2 byond ticks, but will also double the effect of anti-lag heuristics. You can instead set it to something like +## 1.1 to make it run every 2 byond ticks, but only increase the effect of anti-lag heuristics by 10%. or 1.5 for 50%. +## (As an aside, you could in theory also reduce the effect of anti-lag heuristics in the base tick rate by setting it to something like 0.5) +HIGH_POP_MC_TICK_RATE 1.1 + +##Engage high pop mode if player count raises above this (Player in this context means any connected user. Lobby, ghost or in-game all count) +HIGH_POP_MC_MODE_AMOUNT 65 + +##Disengage high pop mode if player count drops below this +DISABLE_HIGH_POP_MC_MODE_AMOUNT 60 diff --git a/html/changelogs/AutoChangeLog-pr-31367.yml b/html/changelogs/AutoChangeLog-pr-31367.yml new file mode 100644 index 00000000000..edb15b8b85c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-31367.yml @@ -0,0 +1,4 @@ +author: "WJohnston" +delete-after: True +changes: + - rscadd: "Boxstation and Metastation's white ships now have navigation computers, letting you move them around in the station, deep space, and derelict z levels." diff --git a/html/changelogs/AutoChangeLog-pr-31374.yml b/html/changelogs/AutoChangeLog-pr-31374.yml new file mode 100644 index 00000000000..45d6c5241d4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-31374.yml @@ -0,0 +1,6 @@ +author: "MrStonedOne" +delete-after: True +changes: + - tweak: "The MC will now reduce tick rate during high populations to keep it from fighting with byond for processing time." + - config: "Added config options to control MC tick rate" + - admin: "Admins can no longer manually control the mc's tick rate by editing the MC's processing value, instead you will have to edit the config datum's values for high/low pop tick rates." diff --git a/html/changelogs/AutoChangeLog-pr-31376.yml b/html/changelogs/AutoChangeLog-pr-31376.yml new file mode 100644 index 00000000000..e4061e3cd6a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-31376.yml @@ -0,0 +1,4 @@ +author: "Kor" +delete-after: True +changes: + - rscadd: "Nightmares now have a chance to spawn via event." diff --git a/html/changelogs/AutoChangeLog-pr-31386.yml b/html/changelogs/AutoChangeLog-pr-31386.yml new file mode 100644 index 00000000000..e076a2a619f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-31386.yml @@ -0,0 +1,5 @@ +author: "Cyberboss" +delete-after: True +changes: + - bugfix: "Fixed a rare case where creating a one tank bomb would result in a broken object" + - bugfix: "Fixed many cases where forced item drops could be avoided by not having an item in your active hand" diff --git a/html/changelogs/AutoChangeLog-pr-31388.yml b/html/changelogs/AutoChangeLog-pr-31388.yml new file mode 100644 index 00000000000..b4865f12c70 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-31388.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - bugfix: "Tweaks to atmos performance" diff --git a/html/changelogs/AutoChangeLog-pr-31389.yml b/html/changelogs/AutoChangeLog-pr-31389.yml new file mode 100644 index 00000000000..491dd057e4c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-31389.yml @@ -0,0 +1,4 @@ +author: "Y0SH1_M4S73R" +delete-after: True +changes: + - balance: "Gygax overdrive consumes at least 100 power per step" diff --git a/tgstation.dme b/tgstation.dme index 3f39e29ea60..387d1afbf54 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1278,6 +1278,7 @@ #include "code\modules\events\meateor_wave.dm" #include "code\modules\events\meteor_wave.dm" #include "code\modules\events\mice_migration.dm" +#include "code\modules\events\nightmare.dm" #include "code\modules\events\operative.dm" #include "code\modules\events\portal_storm.dm" #include "code\modules\events\prison_break.dm"