diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 0718548b03..bdd34e8d23 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -140,7 +140,7 @@ if(open_panel && wires.is_all_cut()) if(payload) to_chat(user, "You carefully pry out [payload].") - payload.loc = user.loc + payload.forceMove(drop_location()) payload = null else to_chat(user, "There isn't anything in here to remove!") @@ -206,14 +206,14 @@ var/new_timer = input(user, "Please set the timer.", "Timer", "[timer_set]") as num if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station timer_set = Clamp(new_timer, minimum_timer, maximum_timer) - src.loc.visible_message("[icon2html(src, viewers(src))] timer set for [timer_set] seconds.") + loc.visible_message("[icon2html(src, viewers(src))] timer set for [timer_set] seconds.") if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user)) if(defused || active) if(defused) - src.loc.visible_message("[icon2html(src, viewers(src))] Device error: User intervention required.") + visible_message("[icon2html(src, viewers(src))] Device error: User intervention required.") return else - src.loc.visible_message("[icon2html(src, viewers(loc))] [timer_set] seconds until detonation, please clear the area.") + visible_message("[icon2html(src, viewers(loc))] [timer_set] seconds until detonation, please clear the area.") activate() update_icon() add_fingerprint(user) @@ -223,7 +223,7 @@ if(payload && !istype(payload, /obj/item/bombcore/training)) message_admins("[ADMIN_LOOKUPFLW(user)] has primed a [name] ([payload]) for detonation at [A.name] [ADMIN_JMP(bombturf)].") log_game("[key_name(user)] has primed a [name] ([payload]) for detonation at [A.name][COORD(bombturf)]") - payload.adminlog = "The [src.name] that [key_name(user)] had primed detonated!" + payload.adminlog = "The [name] that [key_name(user)] had primed detonated!" ///Bomb Subtypes/// @@ -359,7 +359,7 @@ var/amt_summon = 1 /obj/item/bombcore/badmin/summon/detonate() - var/obj/machinery/syndicatebomb/B = src.loc + var/obj/machinery/syndicatebomb/B = loc spawn_and_random_walk(summon_path, src, amt_summon, walk_chance=50, admin_spawn=TRUE) qdel(B) qdel(src) @@ -369,7 +369,7 @@ amt_summon = 100 /obj/item/bombcore/badmin/summon/clown/defuse() - playsound(src.loc, 'sound/misc/sadtrombone.ogg', 50) + playsound(src, 'sound/misc/sadtrombone.ogg', 50) ..() /obj/item/bombcore/large @@ -454,7 +454,7 @@ if(istype(I, /obj/item/crowbar) && beakers.len > 0) playsound(loc, I.usesound, 50, 1) for (var/obj/item/B in beakers) - B.loc = get_turf(src) + B.forceMove(drop_location()) beakers -= B return else if(istype(I, /obj/item/reagent_containers/glass/beaker) || istype(I, /obj/item/reagent_containers/glass/bottle)) @@ -485,9 +485,9 @@ for(var/obj/item/slime_extract/S in LG.beakers) // And slime cores. if(beakers.len < max_beakers) beakers += S - S.loc = src + S.forceMove(src) else - S.loc = get_turf(src) + S.forceMove(drop_location()) if(istype(G, /obj/item/grenade/chem_grenade/cryo)) spread_range -= 1 // Reduced range, but increased density. @@ -502,9 +502,9 @@ for(var/obj/item/reagent_containers/glass/B in G) if(beakers.len < max_beakers) beakers += B - B.loc = src + B.forceMove(src) else - B.loc = get_turf(src) + B.forceMove(drop_location()) qdel(G) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index bd93975f46..89fc1260f8 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -259,7 +259,7 @@ cut_overlays() if(panel_open) add_overlay("[initial(icon_state)]-panel") - playsound(src.loc, W.usesound, 50, 1) + playsound(src, W.usesound, 50, 1) updateUsrDialog() else to_chat(user, "You must first secure [src].") @@ -403,7 +403,7 @@ var/datum/browser/popup = new(user, "vending", (name)) popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() @@ -443,7 +443,7 @@ dish_quants[N] = max(dish_quants[N] - 1, 0) for(var/obj/O in contents) if(O.name == N) - O.loc = src.loc + O.forceMove(drop_location()) break vend_ready = 1 updateUsrDialog() @@ -510,7 +510,7 @@ if(icon_vend) //Show the vending animation if needed flick(icon_vend,src) new R.product_path(get_turf(src)) - SSblackbox.add_details("vending_machine_usage","[src.type]|[R.product_path]") + SSblackbox.add_details("vending_machine_usage","[type]|[R.product_path]") vend_ready = 1 return diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index f6e2023943..238c83725b 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -309,13 +309,13 @@ LINEN BINS else B = new /obj/item/bedsheet(loc) - B.loc = user.loc + B.forceMove(drop_location()) user.put_in_hands(B) to_chat(user, "You take [B] out of [src].") update_icon() if(hidden) - hidden.loc = user.loc + hidden.forceMove(drop_location()) to_chat(user, "[hidden] falls out of [B]!") hidden = null @@ -333,12 +333,12 @@ LINEN BINS else B = new /obj/item/bedsheet(loc) - B.loc = loc + B.forceMove(drop_location()) to_chat(user, "You telekinetically remove [B] from [src].") update_icon() if(hidden) - hidden.loc = loc + hidden.forceMove(drop_location()) hidden = null diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 61aab75efc..c6af589cb5 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -1,3 +1,8 @@ + +#define AIRLOCK_ASSEMBLY_NEEDS_WIRES 0 +#define AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS 1 +#define AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER 2 + /obj/structure/door_assembly name = "airlock assembly" icon = 'icons/obj/doors/airlocks/station/public.dmi' @@ -6,8 +11,7 @@ anchored = FALSE density = TRUE max_integrity = 200 - desc = "The mechanical framework for an airlock." - var/state = 0 + var/state = AIRLOCK_ASSEMBLY_NEEDS_WIRES var/mineral = null var/typetext = "" var/icontext = "" @@ -26,7 +30,7 @@ name = "airlock assembly" airlock_type = /obj/machinery/door/airlock anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_com name = "command airlock assembly" @@ -36,7 +40,7 @@ glass_type = /obj/machinery/door/airlock/glass_command airlock_type = /obj/machinery/door/airlock/command anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_com/glass mineral = "glass" @@ -50,7 +54,7 @@ glass_type = /obj/machinery/door/airlock/glass_security airlock_type = /obj/machinery/door/airlock/security anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_sec/glass mineral = "glass" @@ -64,7 +68,7 @@ glass_type = /obj/machinery/door/airlock/glass_engineering airlock_type = /obj/machinery/door/airlock/engineering anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_eng/glass mineral = "glass" @@ -78,7 +82,7 @@ glass_type = /obj/machinery/door/airlock/glass_mining airlock_type = /obj/machinery/door/airlock/mining anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_min/glass mineral = "glass" @@ -92,7 +96,7 @@ glass_type = /obj/machinery/door/airlock/glass_atmos airlock_type = /obj/machinery/door/airlock/atmos anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_atmo/glass mineral = "glass" @@ -106,7 +110,7 @@ glass_type = /obj/machinery/door/airlock/glass_research airlock_type = /obj/machinery/door/airlock/research anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_research/glass mineral = "glass" @@ -120,7 +124,7 @@ glass_type = /obj/machinery/door/airlock/glass_science airlock_type = /obj/machinery/door/airlock/science anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_science/glass mineral = "glass" @@ -134,7 +138,7 @@ glass_type = /obj/machinery/door/airlock/glass_medical airlock_type = /obj/machinery/door/airlock/medical anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_med/glass mineral = "glass" @@ -148,7 +152,7 @@ glass_type = /obj/machinery/door/airlock/glass_maintenance airlock_type = /obj/machinery/door/airlock/maintenance anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_mai/glass mineral = "glass" @@ -163,7 +167,7 @@ glass_type = /obj/machinery/door/airlock/glass_external airlock_type = /obj/machinery/door/airlock/external anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_ext/glass mineral = "glass" @@ -176,7 +180,7 @@ icontext = "fre" airlock_type = /obj/machinery/door/airlock/freezer anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_hatch name = "airtight hatch assembly" @@ -186,7 +190,7 @@ icontext = "hatch" airlock_type = /obj/machinery/door/airlock/hatch anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_mhatch name = "maintenance hatch assembly" @@ -196,7 +200,7 @@ icontext = "mhatch" airlock_type = /obj/machinery/door/airlock/maintenance_hatch anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_glass name = "glass airlock assembly" @@ -204,7 +208,7 @@ overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' airlock_type = /obj/machinery/door/airlock/glass anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "glass" material = "glass" @@ -213,7 +217,7 @@ icon = 'icons/obj/doors/airlocks/station/gold.dmi' airlock_type = /obj/machinery/door/airlock/gold anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "gold" /obj/structure/door_assembly/door_assembly_silver @@ -221,7 +225,7 @@ icon = 'icons/obj/doors/airlocks/station/silver.dmi' airlock_type = /obj/machinery/door/airlock/silver anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "silver" /obj/structure/door_assembly/door_assembly_diamond @@ -229,7 +233,7 @@ icon = 'icons/obj/doors/airlocks/station/diamond.dmi' airlock_type = /obj/machinery/door/airlock/diamond anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "diamond" /obj/structure/door_assembly/door_assembly_uranium @@ -237,7 +241,7 @@ icon = 'icons/obj/doors/airlocks/station/uranium.dmi' airlock_type = /obj/machinery/door/airlock/uranium anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "uranium" /obj/structure/door_assembly/door_assembly_plasma @@ -245,7 +249,7 @@ icon = 'icons/obj/doors/airlocks/station/plasma.dmi' airlock_type = /obj/machinery/door/airlock/plasma anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "plasma" /obj/structure/door_assembly/door_assembly_clown @@ -254,7 +258,7 @@ icon = 'icons/obj/doors/airlocks/station/bananium.dmi' airlock_type = /obj/machinery/door/airlock/clown anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "bananium" /obj/structure/door_assembly/door_assembly_sandstone @@ -262,7 +266,7 @@ icon = 'icons/obj/doors/airlocks/station/sandstone.dmi' airlock_type = /obj/machinery/door/airlock/sandstone anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "sandstone" /obj/structure/door_assembly/door_assembly_titanium @@ -274,7 +278,7 @@ glass_type = /obj/machinery/door/airlock/glass_titanium airlock_type = /obj/machinery/door/airlock/titanium anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "titanium" /obj/structure/door_assembly/door_assembly_titanium/glass @@ -289,7 +293,7 @@ icontext = "highsec" airlock_type = /obj/machinery/door/airlock/highsecurity anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_vault name = "vault door assembly" @@ -299,7 +303,7 @@ icontext = "vault" airlock_type = /obj/machinery/door/airlock/vault anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_shuttle name = "shuttle airlock assembly" @@ -309,7 +313,7 @@ icontext = "shuttle" airlock_type = /obj/machinery/door/airlock/shuttle anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_cult name = "cult airlock assembly" @@ -319,7 +323,7 @@ icontext = "cult" airlock_type = /obj/machinery/door/airlock/cult anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_cult/glass mineral = "glass" @@ -338,7 +342,7 @@ icon = 'icons/obj/doors/airlocks/station/wood.dmi' airlock_type = /obj/machinery/door/airlock/wood anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS mineral = "wood" /obj/structure/door_assembly/door_assembly_viro @@ -349,7 +353,7 @@ glass_type = /obj/machinery/door/airlock/glass_virology airlock_type = /obj/machinery/door/airlock/virology anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/door_assembly_viro/glass mineral = "glass" @@ -362,7 +366,7 @@ icontext = "ele" airlock_type = /obj/machinery/door/airlock/centcom anchored = TRUE - state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS /obj/structure/door_assembly/examine(mob/user) ..() @@ -383,10 +387,10 @@ /obj/structure/door_assembly/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) - var/t = stripped_input(user, "Enter the name for the door.", src.name, src.created_name,MAX_NAME_LEN) + var/t = stripped_input(user, "Enter the name for the door.", name, created_name,MAX_NAME_LEN) if(!t) return - if(!in_range(src, usr) && src.loc != usr) + if(!in_range(src, usr) && loc != usr) return created_name = t @@ -410,7 +414,7 @@ icontype = input(user, "Please select a paintjob for this airlock.") in optionlist - if((!in_range(src, usr) && src.loc != usr) || !WT.use(user)) + if((!in_range(src, usr) && loc != usr) || !WT.use(user)) return var/has_solid = FALSE var/has_glass = FALSE @@ -525,7 +529,7 @@ if(WT.remove_fuel(0,user)) user.visible_message("[user] disassembles the airlock assembly.", \ "You start to disassemble the airlock assembly...") - playsound(src.loc, 'sound/items/welder2.ogg', 50, 1) + playsound(src, 'sound/items/welder2.ogg', 50, 1) if(do_after(user, 40*W.toolspeed, target = src)) if( !WT.isOn() ) @@ -542,22 +546,22 @@ break if(door_check) - playsound(src.loc, W.usesound, 100, 1) + playsound(src, W.usesound, 100, 1) user.visible_message("[user] secures the airlock assembly to the floor.", \ "You start to secure the airlock assembly to the floor...", \ "You hear wrenching.") if(do_after(user, 40*W.toolspeed, target = src)) - if( src.anchored ) + if(anchored) return to_chat(user, "You secure the airlock assembly.") - src.name = "secured airlock assembly" - src.anchored = TRUE + name = "secured airlock assembly" + anchored = TRUE else to_chat(user, "There is another door here!") else - playsound(src.loc, W.usesound, 100, 1) + playsound(src, W.usesound, 100, 1) user.visible_message("[user] unsecures the airlock assembly from the floor.", \ "You start to unsecure the airlock assembly from the floor...", \ "You hear wrenching.") @@ -579,63 +583,63 @@ if(C.get_amount() < 1 || state != 0) return C.use(1) - src.state = 1 + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS to_chat(user, "You wire the airlock assembly.") - src.name = "wired airlock assembly" + name = "wired airlock assembly" else if(istype(W, /obj/item/wirecutters) && state == 1 ) - playsound(src.loc, W.usesound, 100, 1) + playsound(src, W.usesound, 100, 1) user.visible_message("[user] cuts the wires from the airlock assembly.", \ "You start to cut the wires from the airlock assembly...") if(do_after(user, 40*W.toolspeed, target = src)) - if( src.state != 1 ) + if(state != 1) return to_chat(user, "You cut the wires from the airlock assembly.") new/obj/item/stack/cable_coil(get_turf(user), 1) - src.state = 0 - src.name = "secured airlock assembly" + state = AIRLOCK_ASSEMBLY_NEEDS_WIRES + name = "secured airlock assembly" else if(istype(W, /obj/item/electronics/airlock) && state == 1 ) - playsound(src.loc, W.usesound, 100, 1) + playsound(src, W.usesound, 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", \ "You start to install electronics into the airlock assembly...") if(do_after(user, 40, target = src)) - if( src.state != 1 ) + if( state != 1 ) return if(!user.transferItemToLoc(W, src)) return to_chat(user, "You install the airlock electronics.") - src.state = 2 - src.name = "near finished airlock assembly" - src.electronics = W + state = AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER + name = "near finished airlock assembly" + electronics = W else if(istype(W, /obj/item/crowbar) && state == 2 ) - playsound(src.loc, W.usesound, 100, 1) + playsound(src, W.usesound, 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", \ "You start to remove electronics from the airlock assembly...") if(do_after(user, 40*W.toolspeed, target = src)) - if( src.state != 2 ) + if(state != 2) return to_chat(user, "You remove the airlock electronics.") - src.state = 1 - src.name = "wired airlock assembly" + state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS + name = "wired airlock assembly" var/obj/item/electronics/airlock/ae if (!electronics) - ae = new/obj/item/electronics/airlock( src.loc ) + ae = new/obj/item/electronics/airlock( loc ) else ae = electronics electronics = null - ae.loc = src.loc + ae.forceMove(src.loc) else if(istype(W, /obj/item/stack/sheet) && !mineral) var/obj/item/stack/sheet/G = W if(G) if(G.get_amount() >= 1) if(is_glass_sheet(G)) - playsound(src.loc, 'sound/items/crowbar.ogg', 100, 1) + playsound(src, 'sound/items/crowbar.ogg', 100, 1) user.visible_message("[user] adds [G.name] to the airlock assembly.", \ "You start to install [G.name] into the airlock assembly...") if(do_after(user, 40, target = src)) @@ -653,8 +657,8 @@ material = "glass" //This list contains the airlock paintjobs that have a glass version: if(icontext in list("eng", "atmo", "sec", "com", "med", "res", "min")) - src.airlock_type = text2path("/obj/machinery/door/airlock/[typetext]") - src.glass_type = text2path("/obj/machinery/door/airlock/glass_[typetext]") + airlock_type = text2path("/obj/machinery/door/airlock/[typetext]") + glass_type = text2path("/obj/machinery/door/airlock/glass_[typetext]") else //This airlock is default or does not have a glass version, so we revert to the default glass airlock. |- Ricotez airlock_type = /obj/machinery/door/airlock @@ -664,7 +668,7 @@ else if(istype(G, /obj/item/stack/sheet/mineral)) var/M = G.sheettype if(G.get_amount() >= 2) - playsound(src.loc, 'sound/items/crowbar.ogg', 100, 1) + playsound(src, 'sound/items/crowbar.ogg', 100, 1) user.visible_message("[user] adds [G.name] to the airlock assembly.", \ "You start to install [G.name] into the airlock assembly...") if(do_after(user, 40, target = src)) @@ -678,28 +682,28 @@ glass_type = /obj/machinery/door/airlock/glass else if(istype(W, /obj/item/screwdriver) && state == 2 ) - playsound(src.loc, W.usesound, 100, 1) + playsound(src, W.usesound, 100, 1) user.visible_message("[user] finishes the airlock.", \ "You start finishing the airlock...") if(do_after(user, 40*W.toolspeed, target = src)) - if(src.loc && state == 2) + if(loc && state == 2) to_chat(user, "You finish the airlock.") var/obj/machinery/door/airlock/door if(mineral == "glass") - door = new src.glass_type( src.loc ) + door = new glass_type( loc ) else - door = new src.airlock_type( src.loc ) - //door.req_access = src.req_access - door.electronics = src.electronics - door.heat_proof = src.heat_proof_finished - if(src.electronics.one_access) - door.req_one_access = src.electronics.accesses + door = new airlock_type( loc ) + //door.req_access = req_access + door.electronics = electronics + door.heat_proof = heat_proof_finished + if(electronics.one_access) + door.req_one_access = electronics.accesses else - door.req_access = src.electronics.accesses + door.req_access = electronics.accesses if(created_name) door.name = created_name - src.electronics.loc = door + electronics.forceMove(door) qdel(src) else return ..() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3e3e853ae7..48e2a52801 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -167,7 +167,7 @@ if(mmi && mind)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside. var/turf/T = get_turf(loc)//To hopefully prevent run time errors. if(T) - mmi.loc = T + mmi.forceMove(T) if(mmi.brainmob) if(mmi.brainmob.stat == DEAD) mmi.brainmob.stat = CONSCIOUS @@ -770,24 +770,24 @@ /mob/living/silicon/robot/proc/deconstruct() var/turf/T = get_turf(src) if (robot_suit) - robot_suit.loc = T - robot_suit.l_leg.loc = T + robot_suit.forceMove(T) + robot_suit.l_leg.forceMove(T) robot_suit.l_leg = null - robot_suit.r_leg.loc = T + robot_suit.r_leg.forceMove(T) robot_suit.r_leg = null new /obj/item/stack/cable_coil(T, robot_suit.chest.wired) - robot_suit.chest.loc = T + robot_suit.chest.forceMove(T) robot_suit.chest.wired = 0 robot_suit.chest = null - robot_suit.l_arm.loc = T + robot_suit.l_arm.forceMove(T) robot_suit.l_arm = null - robot_suit.r_arm.loc = T + robot_suit.r_arm.forceMove(T) robot_suit.r_arm = null - robot_suit.head.loc = T - robot_suit.head.flash1.loc = T + robot_suit.head.forceMove(T) + robot_suit.head.flash1.forceMove(T) robot_suit.head.flash1.burn_out() robot_suit.head.flash1 = null - robot_suit.head.flash2.loc = T + robot_suit.head.flash2.forceMove(T) robot_suit.head.flash2.burn_out() robot_suit.head.flash2 = null robot_suit.head = null @@ -806,7 +806,7 @@ var/obj/item/device/assembly/flash/handheld/F = new /obj/item/device/assembly/flash/handheld(T) F.burn_out() if (cell) //Sanity check. - cell.loc = T + cell.forceMove(T) cell = null qdel(src) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index d68777c84a..a67434ea5f 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -317,7 +317,7 @@ All ShuttleMove procs go here var/turf/T = loc if(level==1) hide(T.intact) - + /obj/structure/shuttle/beforeShuttleMove(turf/newT, rotation, move_mode) . = ..() if(. & MOVE_AREA) diff --git a/code/modules/spells/spell_types/area_teleport.dm b/code/modules/spells/spell_types/area_teleport.dm index 7381cdf48f..23fdc1ee54 100644 --- a/code/modules/spells/spell_types/area_teleport.dm +++ b/code/modules/spells/spell_types/area_teleport.dm @@ -66,7 +66,7 @@ tempL.Remove(attempt) if(!success) - target.loc = pick(L) + target.forceMove(L) playsound(get_turf(user), sound2, 50,1) return diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index b1867413a3..733d0a3270 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -142,31 +142,23 @@ /mob/living/proc/infernalphaseout() dust_animation() spawn_dust() - src.visible_message("[src] disappears in a flashfire!") + visible_message("[src] disappears in a flashfire!") playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1) var/obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(loc) - src.ExtinguishMob() - if(buckled) - buckled.unbuckle_mob(src,force=1) - if(has_buckled_mobs()) - unbuckle_all_mobs(force=1) - if(pulledby) - pulledby.stop_pulling() - if(pulling) - stop_pulling() - src.loc = holder - src.holder = holder - src.notransform = 0 + ExtinguishMob() + forceMove(holder) + holder = holder + notransform = 0 fakefireextinguish() /mob/living/proc/infernalphasein() - if(src.notransform) + if(notransform) to_chat(src, "You're too busy to jaunt in.") - return 0 + return FALSE fakefire() - src.loc = get_turf(src) - src.client.eye = src - src.visible_message("[src] appears in a fiery blaze!") + forceMove(drop_location()) + client.eye = src + visible_message("[src] appears in a fiery blaze!") playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) addtimer(CALLBACK(src, .proc/fakefireextinguish), 15, TIMER_UNIQUE) diff --git a/code/modules/spells/spell_types/dumbfire.dm b/code/modules/spells/spell_types/dumbfire.dm index a028ec36bd..bb6e4480f5 100644 --- a/code/modules/spells/spell_types/dumbfire.dm +++ b/code/modules/spells/spell_types/dumbfire.dm @@ -57,14 +57,14 @@ var/current_loc = user.loc - projectile.loc = current_loc + projectile.forceMove(current_loc) for(var/i = 0,i < proj_lifespan,i++) if(!projectile) break if(proj_insubstantial) - projectile.loc = get_step(projectile, projectile.dir) + projectile.forceMove(get_step(projectile, projectile.dir)) else step(projectile, projectile.dir) diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index 2b4974ec5e..0754ddb230 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -28,14 +28,7 @@ var/obj/effect/dummy/spell_jaunt/holder = new /obj/effect/dummy/spell_jaunt(mobloc) new jaunt_out_type(mobloc, target.dir) target.ExtinguishMob() - if(target.buckled) - target.buckled.unbuckle_mob(target,force=1) - if(target.pulledby) - target.pulledby.stop_pulling() - target.stop_pulling() - if(target.has_buckled_mobs()) - target.unbuckle_all_mobs(force=1) - target.loc = holder + target.forceMove(holder) target.reset_perspective(holder) target.notransform=0 //mob is safely inside holder now, no need for protection. jaunt_steam(mobloc) @@ -92,7 +85,7 @@ var/turf/newLoc = get_step(src,direction) setDir(direction) if(!(newLoc.flags_1 & NOJAUNT_1)) - loc = newLoc + forceMove(newLoc) else to_chat(user, "Some strange aura is blocking the way!") movedelay = world.time + movespeed diff --git a/code/modules/spells/spell_types/projectile.dm b/code/modules/spells/spell_types/projectile.dm index 1a682639eb..19e44ffa83 100644 --- a/code/modules/spells/spell_types/projectile.dm +++ b/code/modules/spells/spell_types/projectile.dm @@ -47,7 +47,7 @@ var/current_loc = user.loc - projectile.loc = current_loc + projectile.forceMove(current_loc) for(var/i = 0,i < proj_lifespan,i++) if(!projectile) @@ -56,12 +56,12 @@ if(proj_homing) if(proj_insubstantial) projectile.setDir(get_dir(projectile,target)) - projectile.loc = get_step_to(projectile,target) + projectile.forceMove(get_step_to(projectile,target)) else step_to(projectile,target) else if(proj_insubstantial) - projectile.loc = get_step(projectile,dir) + projectile.forceMove(get_step(projectile,dir)) else step(projectile,dir) diff --git a/code/modules/spells/spell_types/summonitem.dm b/code/modules/spells/spell_types/summonitem.dm index 0f956b3dc9..7f5fc337b1 100644 --- a/code/modules/spells/spell_types/summonitem.dm +++ b/code/modules/spells/spell_types/summonitem.dm @@ -66,7 +66,7 @@ if(issilicon(M)) //Items in silicons warp the whole silicon M.loc.visible_message("[M] suddenly disappears!") - M.loc = L.loc + M.forceMove(L.loc) M.loc.visible_message("[M] suddenly appears!") item_to_retrieve = null break @@ -101,7 +101,7 @@ if(item_to_retrieve.loc) item_to_retrieve.loc.visible_message("The [item_to_retrieve.name] suddenly disappears!") if(!L.put_in_hands(item_to_retrieve)) - item_to_retrieve.loc = L.loc + item_to_retrieve.forceMove(L.loc) item_to_retrieve.loc.visible_message("The [item_to_retrieve.name] suddenly appears!") playsound(get_turf(L), 'sound/magic/summonitems_generic.ogg', 50, 1) else diff --git a/code/modules/spells/spell_types/turf_teleport.dm b/code/modules/spells/spell_types/turf_teleport.dm index 0b378fbaaa..093285b74d 100644 --- a/code/modules/spells/spell_types/turf_teleport.dm +++ b/code/modules/spells/spell_types/turf_teleport.dm @@ -41,9 +41,5 @@ return if(!target.Move(picked)) - if(target.buckled) - target.buckled.unbuckle_mob(target,force=1) - if(target.has_buckled_mobs()) - target.unbuckle_all_mobs(force=1) - target.loc = picked + target.forceMove(picked) playsound(get_turf(user), sound2, 50,1) diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 4a1a8f98eb..b9881d0e37 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -1,56 +1,56 @@ -/datum/surgery/implant_removal - name = "implant removal" - steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/extract_implant, /datum/surgery_step/close) - species = list(/mob/living/carbon/human, /mob/living/carbon/monkey) - possible_locs = list("chest") - - -//extract implant -/datum/surgery_step/extract_implant - name = "extract implant" - implements = list(/obj/item/hemostat = 100, /obj/item/crowbar = 65) - time = 64 - var/obj/item/implant/I = null - -/datum/surgery_step/extract_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - for(var/obj/item/O in target.implants) - I = O - break - if(I) - user.visible_message("[user] begins to extract [I] from [target]'s [target_zone].", "You begin to extract [I] from [target]'s [target_zone]...") - else - user.visible_message("[user] looks for an implant in [target]'s [target_zone].", "You look for an implant in [target]'s [target_zone]...") - -/datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - if(I) - user.visible_message("[user] successfully removes [I] from [target]'s [target_zone]!", "You successfully remove [I] from [target]'s [target_zone].") - I.removed(target) - - var/obj/item/implantcase/case - for(var/obj/item/implantcase/ic in user.held_items) - case = ic - break - if(!case) - case = locate(/obj/item/implantcase) in get_turf(target) - if(case && !case.imp) - case.imp = I - I.loc = case - case.update_icon() - user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") - else - qdel(I) - - else - to_chat(user, "You can't find anything in [target]'s [target_zone]!") - return 1 - -/datum/surgery/implant_removal/mechanic - name = "implant removal" - requires_bodypart_type = BODYPART_ROBOTIC - steps = list( - /datum/surgery_step/mechanic_open, - /datum/surgery_step/open_hatch, - /datum/surgery_step/mechanic_unwrench, - /datum/surgery_step/extract_implant, - /datum/surgery_step/mechanic_wrench, - /datum/surgery_step/mechanic_close) +/datum/surgery/implant_removal + name = "implant removal" + steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/extract_implant, /datum/surgery_step/close) + species = list(/mob/living/carbon/human, /mob/living/carbon/monkey) + possible_locs = list("chest") + + +//extract implant +/datum/surgery_step/extract_implant + name = "extract implant" + implements = list(/obj/item/hemostat = 100, /obj/item/crowbar = 65) + time = 64 + var/obj/item/implant/I = null + +/datum/surgery_step/extract_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + for(var/obj/item/O in target.implants) + I = O + break + if(I) + user.visible_message("[user] begins to extract [I] from [target]'s [target_zone].", "You begin to extract [I] from [target]'s [target_zone]...") + else + user.visible_message("[user] looks for an implant in [target]'s [target_zone].", "You look for an implant in [target]'s [target_zone]...") + +/datum/surgery_step/extract_implant/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(I) + user.visible_message("[user] successfully removes [I] from [target]'s [target_zone]!", "You successfully remove [I] from [target]'s [target_zone].") + I.removed(target) + + var/obj/item/implantcase/case + for(var/obj/item/implantcase/ic in user.held_items) + case = ic + break + if(!case) + case = locate(/obj/item/implantcase) in get_turf(target) + if(case && !case.imp) + case.imp = I + I.loc = case + case.update_icon() + user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") + else + qdel(I) + + else + to_chat(user, "You can't find anything in [target]'s [target_zone]!") + return 1 + +/datum/surgery/implant_removal/mechanic + name = "implant removal" + requires_bodypart_type = BODYPART_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/extract_implant, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close) diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 816590610f..488f2e81b1 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -1,53 +1,53 @@ -/datum/surgery/lipoplasty - name = "lipoplasty" - steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/cut_fat, /datum/surgery_step/remove_fat, /datum/surgery_step/close) - possible_locs = list("chest") - -/datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target) - if(target.disabilities & FAT) - return 1 - return 0 - - -//cut fat -/datum/surgery_step/cut_fat - name = "cut excess fat" +/datum/surgery/lipoplasty + name = "lipoplasty" + steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/cut_fat, /datum/surgery_step/remove_fat, /datum/surgery_step/close) + possible_locs = list("chest") + +/datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target) + if(target.disabilities & FAT) + return 1 + return 0 + + +//cut fat +/datum/surgery_step/cut_fat + name = "cut excess fat" implements = list(/obj/item/circular_saw = 100, /obj/item/melee/transforming/energy/sword/cyborg/saw = 100, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25) - time = 64 - -/datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to cut away [target]'s excess fat.", "You begin to cut away [target]'s excess fat...") - -/datum/surgery_step/cut_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] cuts [target]'s excess fat loose!", "You cut [target]'s excess fat loose.") - return 1 - -//remove fat -/datum/surgery_step/remove_fat - name = "remove loose fat" - implements = list(/obj/item/retractor = 100, /obj/item/screwdriver = 45, /obj/item/wirecutters = 35) - time = 32 - -/datum/surgery_step/remove_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] begins to extract [target]'s loose fat!", "You begin to extract [target]'s loose fat...") - -/datum/surgery_step/remove_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - user.visible_message("[user] extracts [target]'s fat!", "You extract [target]'s fat.") - target.overeatduration = 0 //patient is unfatted - var/removednutriment = target.nutrition - target.nutrition = NUTRITION_LEVEL_WELL_FED - removednutriment -= 450 //whatever was removed goes into the meat - var/mob/living/carbon/human/H = target - var/typeofmeat = /obj/item/reagent_containers/food/snacks/meat/slab/human - - if(H.dna && H.dna.species) - typeofmeat = H.dna.species.meat - - var/obj/item/reagent_containers/food/snacks/meat/slab/human/newmeat = new typeofmeat - newmeat.name = "fatty meat" - newmeat.desc = "Extremely fatty tissue taken from a patient." - newmeat.subjectname = H.real_name - newmeat.subjectjob = H.job - newmeat.reagents.add_reagent ("nutriment", (removednutriment / 15)) //To balance with nutriment_factor of nutriment - newmeat.loc = target.loc - return 1 \ No newline at end of file + time = 64 + +/datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + user.visible_message("[user] begins to cut away [target]'s excess fat.", "You begin to cut away [target]'s excess fat...") + +/datum/surgery_step/cut_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + user.visible_message("[user] cuts [target]'s excess fat loose!", "You cut [target]'s excess fat loose.") + return 1 + +//remove fat +/datum/surgery_step/remove_fat + name = "remove loose fat" + implements = list(/obj/item/retractor = 100, /obj/item/screwdriver = 45, /obj/item/wirecutters = 35) + time = 32 + +/datum/surgery_step/remove_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + user.visible_message("[user] begins to extract [target]'s loose fat!", "You begin to extract [target]'s loose fat...") + +/datum/surgery_step/remove_fat/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + user.visible_message("[user] extracts [target]'s fat!", "You extract [target]'s fat.") + target.overeatduration = 0 //patient is unfatted + var/removednutriment = target.nutrition + target.nutrition = NUTRITION_LEVEL_WELL_FED + removednutriment -= 450 //whatever was removed goes into the meat + var/mob/living/carbon/human/H = target + var/typeofmeat = /obj/item/reagent_containers/food/snacks/meat/slab/human + + if(H.dna && H.dna.species) + typeofmeat = H.dna.species.meat + + var/obj/item/reagent_containers/food/snacks/meat/slab/human/newmeat = new typeofmeat + newmeat.name = "fatty meat" + newmeat.desc = "Extremely fatty tissue taken from a patient." + newmeat.subjectname = H.real_name + newmeat.subjectjob = H.job + newmeat.reagents.add_reagent ("nutriment", (removednutriment / 15)) //To balance with nutriment_factor of nutriment + newmeat.forceMove(target.loc) + return 1 diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 0d97cb63c1..f8f80819dd 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -77,7 +77,7 @@ if(..()) return 1 else if(mybag) - mybag.loc = get_turf(user) + mybag.forceMove(get_turf(user)) user.put_in_hands(mybag) mybag = null update_icon() diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm index b14dd28d70..9200a3d696 100644 --- a/code/modules/vehicles/speedbike.dm +++ b/code/modules/vehicles/speedbike.dm @@ -41,7 +41,7 @@ /obj/vehicle/space/speedbike/speedwagon/Collide(atom/movable/A) . = ..() if(A.density && has_buckled_mobs()) - var/atom/throw_target = get_edge_target_turf(A, src.dir) + var/atom/throw_target = get_edge_target_turf(A, dir) if(crash_all) A.throw_at(throw_target, 4, 3) visible_message("[src] crashes into [A]!") @@ -62,7 +62,7 @@ /obj/vehicle/space/speedbike/speedwagon/Moved() . = ..() - if(src.has_buckled_mobs()) + if(has_buckled_mobs()) for(var/atom/A in range(2, src)) - if(!(A in src.buckled_mobs)) + if(!(A in buckled_mobs)) Collide(A) diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 0debce8a5d..e538599754 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -42,7 +42,7 @@ if(A.density) if(A != src && A != M) return - M.loc = get_turf(src) + M.forceMove(get_turf(src)) ..() if(user.client) user.client.change_view(view_range)