From 8d57b2d0a0dd96ce15a04f358aa76ac175081156 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 12 Sep 2015 14:39:10 +0200 Subject: [PATCH 1/3] Fixes observers being unable to see silicon antag status. target_list contains mob/living mobs while the previous loop only looped over living/carbon/human. To make things a bit of a headache hud_list is defined separately for living/carbon/human and living/silicon, instead of directly on /living. It is certainly possible to define hud_list at mob/living instead but adding an extra loop for silicons is the method that is least likely to break things, thus the most appropriate for a master fix. --- code/modules/mob/dead/observer/observer.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 675b017936..2b4a290e2b 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -141,6 +141,8 @@ Works together with spawning an observer, noted above. var/client/C = U.client for(var/mob/living/carbon/human/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] + for(var/mob/living/silicon/target in target_list) + C.images += target.hud_list[SPECIALROLE_HUD] return 1 /mob/proc/ghostize(var/can_reenter_corpse = 1) From 81861f4dd6b0e2699ae295f8b6fd043b4ecda88e Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 12 Sep 2015 15:02:09 +0200 Subject: [PATCH 2/3] Ensures the AI should always be able to state ion laws. Switched the first character selection to a number to avoid collision with custom language keys on dev. --- code/__HELPERS/unsorted.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 74012b07ed..8b58d5edde 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -342,7 +342,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //Picks a string of symbols to display as the law number for hacked or ion laws /proc/ionnum() - return "[pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]" + return "[pick("1","2","3","4","5","6","7","8","9","0")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]" //When an AI is activated, it can choose from a list of non-slaved borgs to have as a slave. /proc/freeborg() From 0c21ef741e28004d3922e9c700bed1c6a155421b Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 12 Sep 2015 20:42:50 +0200 Subject: [PATCH 3/3] Fixes #10988. Lights now update when objects are moved into crates and lockers. Partial port of https://github.com/ParadiseSS13/Paradise/pull/1926. --- .../structures/crates_lockers/closets.dm | 26 +++++++++---------- .../crates_lockers/closets/fireaxe.dm | 4 +-- .../crates_lockers/closets/secure/personal.dm | 4 +-- .../closets/secure/secure_closets.dm | 2 +- .../structures/crates_lockers/crates.dm | 18 ++++++------- .../structures/crates_lockers/largecrate.dm | 4 +-- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 63d4317274..40a8c9d38d 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -27,7 +27,7 @@ var/obj/item/I for(I in src.loc) if(I.density || I.anchored || I == src) continue - I.loc = src + I.forceMove(src) // adjust locker size to hold all items with 5 units of free store room var/content_size = 0 for(I in src.contents) @@ -76,13 +76,13 @@ /obj/structure/closet/proc/dump_contents() //Cham Projector Exception for(var/obj/effect/dummy/chameleon/AD in src) - AD.loc = src.loc + AD.forceMove(src.loc) for(var/obj/I in src) - I.loc = src.loc + I.forceMove(src.loc) for(var/mob/M in src) - M.loc = src.loc + M.forceMove(src.loc) if(M.client) M.client.eye = M.client.mob M.client.perspective = MOB_PERSPECTIVE @@ -130,7 +130,7 @@ for(var/obj/effect/dummy/chameleon/AD in src.loc) if((stored_units + added_units) > storage_capacity) break - AD.loc = src + AD.forceMove(src) added_units++ return added_units @@ -141,7 +141,7 @@ if(stored_units + added_units + item_size > storage_capacity) continue if(!I.anchored) - I.loc = src + I.forceMove(src) added_units += item_size return added_units @@ -156,7 +156,7 @@ if(M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src - M.loc = src + M.forceMove(src) added_units += current_mob_size return added_units @@ -171,19 +171,19 @@ switch(severity) if(1) for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion - A.loc = src.loc + A.forceMove(src.loc) A.ex_act(severity++) qdel(src) if(2) if(prob(50)) for (var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.forceMove(src.loc) A.ex_act(severity++) qdel(src) if(3) if(prob(5)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.forceMove(src.loc) A.ex_act(severity++) qdel(src) @@ -191,7 +191,7 @@ health -= damage if(health <= 0) for(var/atom/movable/A in src) - A.loc = src.loc + A.forceMove(src.loc) qdel(src) /obj/structure/closet/bullet_act(var/obj/item/projectile/Proj) @@ -207,7 +207,7 @@ /obj/structure/closet/blob_act() if(prob(75)) for(var/atom/movable/A as mob|obj in src) - A.loc = src.loc + A.forceMove(src.loc) qdel(src) /obj/structure/closet/meteorhit(obj/O as obj) @@ -244,7 +244,7 @@ return usr.drop_item() if(W) - W.loc = src.loc + W.forceMove(src.loc) else if(istype(W, /obj/item/weapon/packageWrap)) return else if(istype(W, /obj/item/weapon/weldingtool)) diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 481371b424..9c6e42587f 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -146,8 +146,8 @@ attack_tk(mob/user as mob) if(localopened && fireaxe) - fireaxe.loc = loc - user << "\blue You telekinetically remove the fire axe." + fireaxe.forceMove(loc) + user << "You telekinetically remove the fire axe." fireaxe = null update_icon() return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 2534c09caa..2aa3e57185 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -65,10 +65,10 @@ if (istype(W, /obj/item/weapon/grab)) src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet user.drop_item() - if (W) W.loc = src.loc + if (W) W.forceMove(src.loc) else if(istype(W, /obj/item/weapon/card/id)) if(src.broken) - user << "\red It appears to be broken." + user << "It appears to be broken." return var/obj/item/weapon/card/id/I = W if(!I || !I.registered_name) return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index df2985c42e..a802596cba 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -77,7 +77,7 @@ return user.drop_item() if(W) - W.loc = src.loc + W.forceMove(src.loc) else if((istype(W, /obj/item/weapon/card/emag)||istype(W, /obj/item/weapon/melee/energy/blade)) && !src.broken) broken = 1 locked = 0 diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index e2b0ff6c7e..0c4703fe9a 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -35,7 +35,7 @@ playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3) for(var/obj/O in src) - O.loc = get_turf(src) + O.forceMove(get_turf(src)) icon_state = icon_opened src.opened = 1 @@ -60,7 +60,7 @@ var/obj/structure/bed/B = O if(B.buckled_mob) continue - O.loc = src + O.forceMove(src) itemcount++ icon_state = icon_closed @@ -75,7 +75,7 @@ return user.drop_item() if(W) - W.loc = src.loc + W.forceMove(src.loc) else if(istype(W, /obj/item/weapon/packageWrap)) return else if(istype(W, /obj/item/stack/cable_coil)) @@ -91,7 +91,7 @@ if(rigged) user << "You attach [W] to [src]." user.drop_item() - W.loc = src + W.forceMove(src) return else if(istype(W, /obj/item/weapon/wirecutters)) if(rigged) @@ -160,7 +160,7 @@ /obj/structure/closet/crate/secure/proc/set_locked(var/newlocked, mob/user = null) if(locked == newlocked) return - + locked = newlocked if(user) for(var/mob/O in viewers(user, 3)) @@ -433,12 +433,12 @@ continue if(!S.anchored) found = 1 - S.loc = src + S.forceMove(src) break if(!found) for(var/obj/machinery/M in src.loc) if(!M.anchored) - M.loc = src + M.forceMove(src) break return @@ -461,12 +461,12 @@ continue if(!S.anchored) found = 1 - S.loc = src + S.forceMove(src) break if(!found) for(var/obj/machinery/M in src.loc) if(!M.anchored) - M.loc = src + M.forceMove(src) break return diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 281c6b9367..7c7fdf8ce6 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -14,7 +14,7 @@ new /obj/item/stack/material/wood(src) var/turf/T = get_turf(src) for(var/atom/movable/M in contents) - M.loc = T + M.forceMove(T) user.visible_message("[user] pries \the [src] open.", \ "You pry open \the [src].", \ "You hear splitting wood.") @@ -73,4 +73,4 @@ /obj/structure/largecrate/animal/chick name = "chicken crate" held_count = 5 - held_type = /mob/living/simple_animal/chick \ No newline at end of file + held_type = /mob/living/simple_animal/chick