Merge pull request #4354 from Citadel-Station-13/upstream-merge-33465

[MIRROR] Replaces a bunch of loc assignments with forcemoves and moves to nullspace
This commit is contained in:
deathride58
2017-12-14 03:54:31 +00:00
committed by GitHub
76 changed files with 422 additions and 413 deletions
@@ -55,5 +55,5 @@
else if(I) // Put the implant in case.
var/obj/item/implantcase/case = new(get_turf(C))
case.imp = I
I.loc = case
I.forceMove(case)
case.update_icon()
+13 -13
View File
@@ -115,13 +115,16 @@
air_contents.assert_gases(/datum/gas/plasma, /datum/gas/oxygen)
var/fuel_moles = air_contents.gases[/datum/gas/plasma][MOLES] + air_contents.gases[/datum/gas/oxygen][MOLES]/6
air_contents.garbage_collect()
var/datum/gas_mixture/bomb_mixture = air_contents.copy()
var/strength = 1
var/turf/ground_zero = get_turf(loc)
loc = null
if(air_contents.temperature > (T0C + 400))
if(master)
qdel(master)
qdel(src)
if(bomb_mixture.temperature > (T0C + 400))
strength = (fuel_moles/15)
if(strength >=1)
@@ -131,10 +134,10 @@
else if(strength >=0.2)
explosion(ground_zero, -1, 0, 1, 2)
else
ground_zero.assume_air(air_contents)
ground_zero.assume_air(bomb_mixture)
ground_zero.hotspot_expose(1000, 125)
else if(air_contents.temperature > (T0C + 250))
else if(bomb_mixture.temperature > (T0C + 250))
strength = (fuel_moles/20)
if(strength >=1)
@@ -142,26 +145,23 @@
else if (strength >=0.5)
explosion(ground_zero, -1, 0, 1, 2)
else
ground_zero.assume_air(air_contents)
ground_zero.assume_air(bomb_mixture)
ground_zero.hotspot_expose(1000, 125)
else if(air_contents.temperature > (T0C + 100))
else if(bomb_mixture.temperature > (T0C + 100))
strength = (fuel_moles/25)
if (strength >=1)
explosion(ground_zero, -1, 0, round(strength,1), round(strength*3,1))
else
ground_zero.assume_air(air_contents)
ground_zero.assume_air(bomb_mixture)
ground_zero.hotspot_expose(1000, 125)
else
ground_zero.assume_air(air_contents)
ground_zero.assume_air(bomb_mixture)
ground_zero.hotspot_expose(1000, 125)
air_update_turf()
if(master)
qdel(master)
qdel(src)
ground_zero.air_update_turf()
/obj/item/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out.
var/datum/gas_mixture/removed = air_contents.remove(air_contents.total_moles())
+91 -91
View File
@@ -1,97 +1,97 @@
/obj/item/paper/fluff/jobs/cargo/manifest
var/order_cost = 0
var/order_id = 0
var/errors = 0
var/order_cost = 0
var/order_id = 0
var/errors = 0
/obj/item/paper/fluff/jobs/cargo/manifest/New(atom/A, id, cost)
..()
order_id = id
order_cost = cost
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_NAME
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_CONTENTS
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_ITEM
..()
order_id = id
order_cost = cost
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_NAME
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_CONTENTS
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_ITEM
/obj/item/paper/fluff/jobs/cargo/manifest/proc/is_approved()
return stamped && stamped.len && !is_denied()
return stamped && stamped.len && !is_denied()
/obj/item/paper/fluff/jobs/cargo/manifest/proc/is_denied()
return stamped && ("stamp-deny" in stamped)
/datum/supply_order
var/id
var/orderer
var/orderer_rank
var/orderer_ckey
var/reason
var/datum/supply_pack/pack
/datum/supply_order/New(datum/supply_pack/pack, orderer, orderer_rank, orderer_ckey, reason)
id = SSshuttle.ordernum++
src.pack = pack
src.orderer = orderer
src.orderer_rank = orderer_rank
src.orderer_ckey = orderer_ckey
src.reason = reason
/datum/supply_order/proc/generateRequisition(turf/T)
var/obj/item/paper/P = new(T)
P.name = "requisition form - #[id] ([pack.name])"
P.info += "<h2>[station_name()] Supply Requisition</h2>"
P.info += "<hr/>"
P.info += "Order #[id]<br/>"
P.info += "Item: [pack.name]<br/>"
P.info += "Access Restrictions: [get_access_desc(pack.access)]<br/>"
P.info += "Requested by: [orderer]<br/>"
P.info += "Rank: [orderer_rank]<br/>"
P.info += "Comment: [reason]<br/>"
P.update_icon()
return P
/datum/supply_order/proc/generateManifest(obj/structure/closet/crate/C)
return stamped && ("stamp-deny" in stamped)
/datum/supply_order
var/id
var/orderer
var/orderer_rank
var/orderer_ckey
var/reason
var/datum/supply_pack/pack
/datum/supply_order/New(datum/supply_pack/pack, orderer, orderer_rank, orderer_ckey, reason)
id = SSshuttle.ordernum++
src.pack = pack
src.orderer = orderer
src.orderer_rank = orderer_rank
src.orderer_ckey = orderer_ckey
src.reason = reason
/datum/supply_order/proc/generateRequisition(turf/T)
var/obj/item/paper/P = new(T)
P.name = "requisition form - #[id] ([pack.name])"
P.info += "<h2>[station_name()] Supply Requisition</h2>"
P.info += "<hr/>"
P.info += "Order #[id]<br/>"
P.info += "Item: [pack.name]<br/>"
P.info += "Access Restrictions: [get_access_desc(pack.access)]<br/>"
P.info += "Requested by: [orderer]<br/>"
P.info += "Rank: [orderer_rank]<br/>"
P.info += "Comment: [reason]<br/>"
P.update_icon()
return P
/datum/supply_order/proc/generateManifest(obj/structure/closet/crate/C)
var/obj/item/paper/fluff/jobs/cargo/manifest/P = new(C, id, pack.cost)
var/station_name = (P.errors & MANIFEST_ERROR_NAME) ? new_station_name() : station_name()
P.name = "shipping manifest - #[id] ([pack.name])"
P.info += "<h2>[command_name()] Shipping Manifest</h2>"
P.info += "<hr/>"
P.info += "Order #[id]<br/>"
P.info += "Destination: [station_name]<br/>"
P.info += "Item: [pack.name]<br/>"
P.info += "Contents: <br/>"
P.info += "<ul>"
for(var/atom/movable/AM in C.contents - P)
if((P.errors & MANIFEST_ERROR_CONTENTS))
if(prob(50))
P.info += "<li>[AM.name]</li>"
else
continue
P.info += "<li>[AM.name]</li>"
P.info += "</ul>"
P.info += "<h4>Stamp below to confirm receipt of goods:</h4>"
P.update_icon()
P.loc = C
C.manifest = P
C.update_icon()
return P
/datum/supply_order/proc/generate(turf/T)
var/obj/structure/closet/crate/C = pack.generate(T)
var/station_name = (P.errors & MANIFEST_ERROR_NAME) ? new_station_name() : station_name()
P.name = "shipping manifest - #[id] ([pack.name])"
P.info += "<h2>[command_name()] Shipping Manifest</h2>"
P.info += "<hr/>"
P.info += "Order #[id]<br/>"
P.info += "Destination: [station_name]<br/>"
P.info += "Item: [pack.name]<br/>"
P.info += "Contents: <br/>"
P.info += "<ul>"
for(var/atom/movable/AM in C.contents - P)
if((P.errors & MANIFEST_ERROR_CONTENTS))
if(prob(50))
P.info += "<li>[AM.name]</li>"
else
continue
P.info += "<li>[AM.name]</li>"
P.info += "</ul>"
P.info += "<h4>Stamp below to confirm receipt of goods:</h4>"
P.update_icon()
P.forceMove(C)
C.manifest = P
C.update_icon()
return P
/datum/supply_order/proc/generate(turf/T)
var/obj/structure/closet/crate/C = pack.generate(T)
var/obj/item/paper/fluff/jobs/cargo/manifest/M = generateManifest(C)
if(M.errors & MANIFEST_ERROR_ITEM)
if(istype(C, /obj/structure/closet/crate/secure) || istype(C, /obj/structure/closet/crate/large))
M.errors &= ~MANIFEST_ERROR_ITEM
else
var/lost = max(round(C.contents.len / 10), 1)
while(--lost >= 0)
qdel(pick(C.contents))
return C
if(M.errors & MANIFEST_ERROR_ITEM)
if(istype(C, /obj/structure/closet/crate/secure) || istype(C, /obj/structure/closet/crate/large))
M.errors &= ~MANIFEST_ERROR_ITEM
else
var/lost = max(round(C.contents.len / 10), 1)
while(--lost >= 0)
qdel(pick(C.contents))
return C
+22 -22
View File
@@ -271,29 +271,29 @@
target_ui = null
/obj/effect/chronos_cam/relaymove(var/mob/user, direction)
if(holder)
if(user == holder)
if(loc == user)
loc = get_turf(user)
if(user.client && user.client.eye != src)
src.loc = get_turf(user)
user.reset_perspective(src)
user.set_machine(src)
var/atom/step = get_step(src, direction)
if(step)
if((step.x <= TRANSITIONEDGE) || (step.x >= (world.maxx - TRANSITIONEDGE - 1)) || (step.y <= TRANSITIONEDGE) || (step.y >= (world.maxy - TRANSITIONEDGE - 1)))
if(!src.Move(step))
src.loc = step
else
src.loc = step
if((x == holder.x) && (y == holder.y) && (z == holder.z))
remove_target_ui()
loc = user
else if(!target_ui)
create_target_ui()
phase_time = world.time + phase_time_length
else
if(!holder)
qdel(src)
return
if(user == holder)
if(loc == user)
forceMove(get_turf(user))
if(user.client && user.client.eye != src)
src.loc = get_turf(user)
user.reset_perspective(src)
user.set_machine(src)
var/atom/step = get_step(src, direction)
if(step)
if((step.x <= TRANSITIONEDGE) || (step.x >= (world.maxx - TRANSITIONEDGE - 1)) || (step.y <= TRANSITIONEDGE) || (step.y >= (world.maxy - TRANSITIONEDGE - 1)))
if(!src.Move(step))
src.loc = step
else
src.loc = step
if((x == holder.x) && (y == holder.y) && (z == holder.z))
remove_target_ui()
loc = user
else if(!target_ui)
create_target_ui()
phase_time = world.time + phase_time_length
/obj/effect/chronos_cam/check_eye(mob/user)
if(user != holder)
+1 -1
View File
@@ -276,7 +276,7 @@
/obj/item/reagent_containers/food/snacks/Destroy()
if(contents)
for(var/atom/movable/something in contents)
something.loc = get_turf(src)
something.forceMove(drop_location())
return ..()
/obj/item/reagent_containers/food/snacks/attack_animal(mob/M)
@@ -119,7 +119,7 @@
else
for(var/obj/O in contents)
if(sanitize(O.name) == href_list["dispense"])
O.loc = src.loc
O.forceMove(drop_location())
break
if(href_list["portion"])
@@ -284,7 +284,7 @@
/obj/machinery/microwave/proc/dispose()
for (var/obj/O in contents)
O.loc = src.loc
O.forceMove(drop_location())
to_chat(usr, "<span class='notice'>You dispose of the microwave contents.</span>")
updateUsrDialog()
@@ -178,9 +178,9 @@
/obj/machinery/processor/proc/empty()
for (var/obj/O in src)
O.loc = src.loc
O.forceMove(drop_location())
for (var/mob/M in src)
M.loc = src.loc
M.forceMove(drop_location())
return
/obj/machinery/processor/slime
@@ -301,10 +301,10 @@
if(S.dried_type == S.type)//if the dried type is the same as the object's type, don't bother creating a whole new item...
S.add_atom_colour("#ad7257", FIXED_COLOUR_PRIORITY)
S.dry = TRUE
S.loc = get_turf(src)
S.forceMove(drop_location())
else
var/dried = S.dried_type
new dried(src.loc)
new dried(drop_location())
qdel(S)
return TRUE
for(var/obj/item/stack/sheet/wetleather/WL in contents)
+1 -1
View File
@@ -110,7 +110,7 @@
if(istype(inserted_id))
if(href_list["choice"] == "eject")
to_chat(usr, "<span class='notice'>You eject the ID from [src]'s card slot.</span>")
inserted_id.loc = loc
inserted_id.forceMove(loc)
inserted_id.verb_pickup()
inserted_id = null
else if(href_list["choice"] == "insert")
+3 -3
View File
@@ -132,11 +132,11 @@
/mob/living/simple_animal/hostile/mining_drone/proc/CollectOre()
var/obj/item/ore/O
for(O in src.loc)
O.loc = src
O.forceMove(src)
for(var/dir in GLOB.alldirs)
var/turf/T = get_step(src,dir)
for(O in T)
O.loc = src
O.forceMove(src)
return
/mob/living/simple_animal/hostile/mining_drone/proc/DropOre(message = 1)
@@ -148,7 +148,7 @@
to_chat(src, "<span class='notice'>You dump your stored ore.</span>")
for(var/obj/item/ore/O in contents)
contents -= O
O.loc = src.loc
O.forceMove(drop_location())
return
/mob/living/simple_animal/hostile/mining_drone/adjustHealth(amount)
+1 -1
View File
@@ -100,4 +100,4 @@
if(!M)
M = new /obj/item/storage/bag/money(src)
unload_mineral(M)
O.loc = M
O.forceMove(M)
+14 -1
View File
@@ -12,8 +12,8 @@
stored_dna.initialize_dna(random_blood_type())
if(isturf(loc)) //not spawned in an MMI or brain organ (most likely adminspawned)
var/obj/item/organ/brain/OB = new(loc) //we create a new brain organ for it.
loc = OB
OB.brainmob = src
forceMove(OB)
/mob/living/brain/proc/create_dna()
@@ -71,3 +71,16 @@
var/obj/mecha/M = MMI.mecha
if((src == MMI.brainmob) && istype(M))
return M.click_action(A,src,params)
/mob/living/brain/forceMove(atom/destination)
if(container)
return container.forceMove(destination)
else if (istype(loc, /obj/item/organ/brain))
var/obj/item/organ/brain/B = loc
B.forceMove(destination)
else if (istype(destination, /obj/item/organ/brain))
doMove(destination)
else if (istype(destination, /obj/item/device/mmi))
doMove(destination)
else
CRASH("Brainmob without a container [src] attempted to move to [destination].")
+1 -1
View File
@@ -27,7 +27,7 @@
if(C.mind && C.mind.has_antag_datum(/datum/antagonist/changeling) && !no_id_transfer) //congrats, you're trapped in a body you don't control
if(brainmob && !(C.stat == DEAD || (C.status_flags & FAKEDEATH)))
to_chat(brainmob, "<span class = danger>You can't feel your body! You're still just a brain!</span>")
loc = C
forceMove(C)
C.update_hair()
return
+12
View File
@@ -1028,3 +1028,15 @@
if(mind && mind.linglink)
return LINGHIVE_LINK
return LINGHIVE_NONE
/mob/living/forceMove(atom/destination)
stop_pulling()
if(buckled)
buckled.unbuckle_mob(src, force = TRUE)
if(has_buckled_mobs())
unbuckle_all_mobs(force = TRUE)
. = ..()
if(.)
if(client)
reset_perspective(destination)
update_canmove() //if the mob was asleep inside a container and then got forceMoved out we need to make them fall.
@@ -21,7 +21,10 @@
if(!isturf(ai.loc))
return
T = get_turf(T)
loc = T
if (T)
forceMove(T)
else
moveToNullspace() // ????
if(use_static)
GLOB.cameranet.visibility(src)
if(ai.client)
+1 -1
View File
@@ -99,7 +99,7 @@
var/newcardloc = P
P = new /obj/item/device/paicard(newcardloc)
P.setPersonality(src)
loc = P
forceMove(P)
card = P
sradio = new(src)
if(!radio)
@@ -91,7 +91,7 @@
"<span class='notice'>You insert the new cell into [src].</span>")
else if(istype(I, /obj/item/crowbar) && open && cell)
cell.add_fingerprint(usr)
cell.loc = loc
cell.forceMove(loc)
cell = null
visible_message("[user] crowbars out the power cell from [src].",
"<span class='notice'>You pry the powercell out of [src].</span>")
@@ -361,7 +361,7 @@
if(!load_mob(AM))
return
else
AM.loc = src
AM.forceMove(src)
load = AM
mode = BOT_IDLE
@@ -400,7 +400,7 @@
unbuckle_all_mobs()
if(load)
load.loc = loc
load.forceMove(loc)
load.pixel_y = initial(load.pixel_y)
load.layer = initial(load.layer)
load.plane = initial(load.plane)
@@ -58,7 +58,7 @@
I.pulledby.stop_pulling()
I.screen_loc = null // will get moved if inventory is visible
I.loc = src
I.forceMove(src)
I.layer = ABOVE_HUD_LAYER
I.plane = ABOVE_HUD_PLANE
@@ -257,7 +257,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
I.pulledby.stop_pulling()
I.screen_loc = null // will get moved if inventory is visible
I.loc = src
I.forceMove(src)
I.equipped(src, slot)
I.layer = ABOVE_HUD_LAYER
I.plane = ABOVE_HUD_PLANE
@@ -54,7 +54,7 @@
/obj/guardian_bomb/proc/disguise(obj/A)
A.loc = src
A.forceMove(src)
stored_obj = A
opacity = A.opacity
anchored = A.anchored
@@ -32,7 +32,7 @@
else if(mind) // Let's make this a feature
egg.origin = mind
for(var/obj/item/organ/I in src)
I.loc = egg
I.forceMove(egg)
visible_message("<span class='warning'>[src] plants something in [victim]'s flesh!</span>", \
"<span class='danger'>We inject our egg into [victim]'s body!</span>")
egg_lain = 1
@@ -43,7 +43,7 @@
. = ..()
if(mapload) //eat shit
for(var/obj/item/I in loc)
I.loc = src
I.forceMove(src)
/mob/living/simple_animal/hostile/mimic/crate/DestroyPathToTarget()
..()
@@ -89,7 +89,7 @@
var/obj/structure/closet/crate/C = new(get_turf(src))
// Put loot in crate
for(var/obj/O in src)
O.loc = C
O.forceMove(C)
..()
GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/cable, /obj/structure/window))
@@ -116,7 +116,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
/mob/living/simple_animal/hostile/mimic/copy/death()
for(var/atom/movable/M in src)
M.loc = get_turf(src)
M.forceMove(get_turf(src))
..()
/mob/living/simple_animal/hostile/mimic/copy/ListTargets()
@@ -136,7 +136,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/user, destroy_original = 0)
if(destroy_original || CheckObject(O))
O.loc = src
O.forceMove(src)
name = O.name
desc = O.desc
icon = O.icon
@@ -249,15 +249,15 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
..()
else
visible_message("<span class='danger'>The <b>[src]</b> clears a jam!</span>")
Pewgun.chambered.loc = loc //rip revolver immersions, blame shotgun snowflake procs
Pewgun.chambered.forceMove(loc) //rip revolver immersions, blame shotgun snowflake procs
Pewgun.chambered = null
if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len)
Pewgun.chambered = Pewgun.magazine.get_round(0)
Pewgun.chambered.loc = Pewgun
Pewgun.chambered.forceMove(Pewgun)
Pewgun.update_icon()
else if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len) //only true for pumpguns i think
Pewgun.chambered = Pewgun.magazine.get_round(0)
Pewgun.chambered.loc = Pewgun
Pewgun.chambered.forceMove(Pewgun)
visible_message("<span class='danger'>The <b>[src]</b> cocks itself!</span>")
else
ranged = 0 //BANZAIIII
@@ -213,7 +213,7 @@
src.say("[pick(available_channels)] BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
else
src.say("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
ears.loc = src.loc
ears.forceMove(src.loc)
ears = null
for(var/possible_phrase in speak)
if(copytext(possible_phrase,1,3) in GLOB.department_radio_keys)
@@ -504,7 +504,7 @@
else //This should ensure that we only grab the item we want, and make sure it's not already collected on our perch
if(!parrot_perch || parrot_interest.loc != parrot_perch.loc)
held_item = parrot_interest
parrot_interest.loc = src
parrot_interest.forceMove(src)
visible_message("[src] grabs [held_item]!", "<span class='notice'>You grab [held_item]!</span>", "<span class='italics'>You hear the sounds of wings flapping furiously.</span>")
parrot_interest = null
@@ -526,7 +526,7 @@
return
if(Adjacent(parrot_perch))
src.loc = parrot_perch.loc
forceMove(parrot_perch.loc)
drop_held_item()
parrot_state = PARROT_PERCH
icon_state = icon_sit
+2 -2
View File
@@ -302,11 +302,11 @@
if(istype(worn, /obj/item/device/pda))
var/obj/item/device/pda/PDA = worn
PDA.id = id
id.loc = worn
id.forceMove(worn)
else if(istype(worn, /obj/item/storage/wallet))
var/obj/item/storage/wallet/W = worn
W.front_id = id
id.loc = worn
id.forceMove(worn)
worn.update_icon()
var/datum/round_event/ion_storm/add_law_only/ion = new()
ion.announceEvent = -1
+4 -3
View File
@@ -36,7 +36,7 @@
if(mapload)
for(var/obj/item/I in loc)
if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo))
I.loc = src
I.forceMove(src)
/obj/structure/filingcabinet/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
@@ -90,7 +90,7 @@
if(contents.len)
if(prob(40 + contents.len * 5))
var/obj/item/I = pick(contents)
I.loc = loc
I.forceMove(loc)
if(prob(25))
step_rand(I)
to_chat(user, "<span class='notice'>You pull \a [I] out of [src] at random.</span>")
@@ -184,7 +184,8 @@ GLOBAL_LIST_EMPTY(employmentCabinets)
icon_state = "employmentcabinet"
var/virgin = 1
/obj/structure/filingcabinet/employment/New()
/obj/structure/filingcabinet/employment/Initialize()
. = ..()
GLOB.employmentCabinets += src
return ..()
+1 -1
View File
@@ -55,7 +55,7 @@
if(!user.transferItemToLoc(P, src))
return
to_chat(user, "<span class='notice'>You replace [src]'s [P].</span>")
P.loc = src
P.forceMove(src)
storedcutter = P
update_icon()
return
+4 -4
View File
@@ -22,7 +22,7 @@
return
var/obj/item/pen/P = locate(/obj/item/pen) in src.loc
if(P && !bin_pen)
P.loc = src
P.forceMove(src)
bin_pen = P
update_icon()
@@ -69,7 +69,7 @@
user.changeNext_move(CLICK_CD_MELEE)
if(bin_pen)
var/obj/item/pen/P = bin_pen
P.loc = user.loc
P.forceMove(user.loc)
user.put_in_hands(P)
to_chat(user, "<span class='notice'>You take [P] out of \the [src].</span>")
bin_pen = null
@@ -90,7 +90,7 @@
P.rigged = 1
P.updateinfolinks()
P.loc = user.loc
P.forceMove(user.loc)
user.put_in_hands(P)
to_chat(user, "<span class='notice'>You take [P] out of \the [src].</span>")
else
@@ -169,4 +169,4 @@
CHECK_TICK
qdel(src)
else
..()
..()
@@ -42,7 +42,7 @@
"<span class='danger'>You fire the grenade launcher!</span>")
var/obj/item/grenade/F = grenades[1] //Now with less copypasta!
grenades -= F
F.loc = user.loc
F.forceMove(user.loc)
F.throw_at(target, 30, 2, user)
message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
log_game("[key_name(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).")
+1 -1
View File
@@ -24,7 +24,7 @@
if(istype(target, /obj/item/gun))
var/obj/item/gun/G = target
if(G.pin && (force_replace || G.pin.pin_removeable))
G.pin.loc = get_turf(G)
G.pin.forceMove(get_turf(G))
G.pin.gun_remove(user)
to_chat(user, "<span class ='notice'>You remove [G]'s old pin.</span>")
+2 -2
View File
@@ -285,7 +285,7 @@
to_chat(new_mob, poly_msg)
M.transfer_observers_to(new_mob)
qdel(M)
return new_mob
@@ -319,7 +319,7 @@
L.mind.transfer_to(S)
if(owner)
to_chat(S, "<span class='userdanger'>You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [owner], your creator.</span>")
P.loc = S
P.forceMove(S)
return
else
var/obj/O = src
+1 -1
View File
@@ -61,7 +61,7 @@
if(!user || user.stat != CONSCIOUS || user.loc != O || O.loc != src )
return
to_chat(user, "<span class='notice'>You successfully removed [O]'s wrapping !</span>")
O.loc = loc
O.forceMove(loc)
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1)
qdel(src)
else
@@ -99,7 +99,7 @@
if(GLOB.cameranet.checkTurfVis(remote_eye.loc))
for(var/mob/living/simple_animal/slime/S in X.stored_slimes)
S.loc = remote_eye.loc
S.forceMove(remote_eye.loc)
S.visible_message("[S] warps in!")
X.stored_slimes -= S
else
@@ -125,7 +125,7 @@
if(S.buckled)
S.Feedstop(silent=1)
S.visible_message("[S] vanishes in a flash of light!")
S.loc = X
S.forceMove(X)
X.stored_slimes += S
else
to_chat(owner, "<span class='notice'>Target is not near a camera. Cannot proceed.</span>")
+1 -1
View File
@@ -473,7 +473,7 @@
turfs -= T
T = pick(turfs)
else
src.loc = T
forceMove(T)
break
//Pod suits/pickaxes
@@ -102,7 +102,7 @@
for(var/obj/item/I in embedded_objects)
embedded_objects -= I
I.loc = src
I.forceMove(src)
if(!C.has_embedded_objects())
C.clear_alert("embeddedobject")
@@ -151,7 +151,7 @@
if(brainmob)
LB.brainmob = brainmob
brainmob = null
LB.brainmob.loc = LB
LB.brainmob.forceMove(LB)
LB.brainmob.container = LB
LB.brainmob.stat = DEAD
@@ -167,7 +167,7 @@
..()
if(C && !special)
if(C.handcuffed)
C.handcuffed.loc = C.loc
C.handcuffed.forceMove(C.loc)
C.handcuffed.dropped(C)
C.handcuffed = null
C.update_handcuffed()
@@ -185,7 +185,7 @@
..()
if(C && !special)
if(C.handcuffed)
C.handcuffed.loc = C.loc
C.handcuffed.forceMove(C.loc)
C.handcuffed.dropped(C)
C.handcuffed = null
C.update_handcuffed()
@@ -201,7 +201,7 @@
/obj/item/bodypart/r_leg/drop_limb(special)
if(owner && !special)
if(owner.legcuffed)
owner.legcuffed.loc = owner.loc
owner.legcuffed.forceMove(owner.loc)
owner.legcuffed.dropped(owner)
owner.legcuffed = null
owner.update_inv_legcuffed()
@@ -212,7 +212,7 @@
/obj/item/bodypart/l_leg/drop_limb(special) //copypasta
if(owner && !special)
if(owner.legcuffed)
owner.legcuffed.loc = owner.loc
owner.legcuffed.forceMove(owner.loc)
owner.legcuffed.dropped(owner)
owner.legcuffed = null
owner.update_inv_legcuffed()
@@ -306,7 +306,7 @@
if(brain)
if(brainmob)
brainmob.container = null //Reset brainmob head var.
brainmob.loc = brain //Throw mob into brain.
brainmob.forceMove(brain) //Throw mob into brain.
brain.brainmob = brainmob //Set the brain to use the brainmob
brainmob = null //Set head brainmob var to null
brain.Insert(C) //Now insert the brain proper
+2 -2
View File
@@ -41,10 +41,10 @@
user.visible_message("<span class='warning'>[user] saws [src] open and pulls out a brain!</span>", "<span class='notice'>You saw [src] open and pull out a brain.</span>")
if(brainmob)
brainmob.container = null
brainmob.loc = brain
brainmob.forceMove(brain)
brain.brainmob = brainmob
brainmob = null
brain.loc = T
brain.forceMove(T)
brain = null
update_icon_dropped()
else
+1 -1
View File
@@ -118,7 +118,7 @@
var/obj/item/bodypart/L = X
for(var/obj/item/I in L.embedded_objects)
L.embedded_objects -= I
I.loc = T
I.forceMove(T)
clear_alert("embeddedobject")
+1 -1
View File
@@ -176,7 +176,7 @@
"<span class='notice'>You successfully extract [I] from [target]'s [parse_zone(target_zone)].</span>")
add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]")
I.Remove(target)
I.loc = get_turf(target)
I.forceMove(get_turf(target))
else
user.visible_message("[user] can't seem to extract anything from [target]'s [parse_zone(target_zone)]!",
"<span class='notice'>You can't extract anything from [target]'s [parse_zone(target_zone)]!</span>")
@@ -28,7 +28,7 @@
owner = M
M.internal_organs |= src
M.internal_organs_slot[slot] = src
loc = null
moveToNullspace()
for(var/X in actions)
var/datum/action/A = X
A.Grant(M)
@@ -26,7 +26,7 @@
var/objects = 0
for(var/obj/item/I in L.embedded_objects)
objects++
I.loc = get_turf(H)
I.forceMove(get_turf(H))
L.embedded_objects -= I
if(!H.has_embedded_objects())
H.clear_alert("embeddedobject")
@@ -39,4 +39,4 @@
else
to_chat(user, "<span class='warning'>You can't find [target]'s [parse_zone(user.zone_selected)], let alone any objects embedded in it!</span>")
return 1
return 1
+1 -1
View File
@@ -212,7 +212,7 @@
add_overlay(img)
add_overlay("evidence")
desc = "An organ storage container holding [I]."
I.loc = src
I.forceMove(src)
w_class = I.w_class
/obj/item/organ_storage/attack_self(mob/user)