From 4b86e87cccf96510f1b3d76a512126c748aba238 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 13:38:36 +0100 Subject: [PATCH 01/19] Actually fixes pod windows this time. --- code/game/shuttle_engines.dm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 5449634b6ab..6e35204691b 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -10,12 +10,9 @@ opacity = 0 anchored = 1 -/obj/structure/shuttle/window/New() - var/temploc = src.loc - for(var/turf/simulated/W in range(temploc,0)) - W.blocks_air = 1 - W.density = 1 - ..() + CanPass(atom/movable/mover, turf/target, height, air_group) + if(!height || air_group) return 0 + else return ..() /obj/structure/shuttle/engine name = "engine" From bb1fbbe844ed22b1ced7ae04c3ebbbea2cf54de7 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 19:33:01 +0100 Subject: [PATCH 02/19] Comments out mining secret rooms. --- code/game/master_controller.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index dcd8969b6bb..c5fcd673f0b 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -59,9 +59,9 @@ datum/controller/game_controller setupgenetics() - for(var/i = 0, i < max_secret_rooms, i++) - make_mining_asteroid_secret() - +// for(var/i = 0, i < max_secret_rooms, i++) +// make_mining_asteroid_secret() +// Because energy cutlasses, facehuggers, and empty rooms are silly. FOR NOW. - Erthilo syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round. syndicate_code_response = generate_code_phrase() From 0a99820790dc0a59118bd0a59c79e50818305430 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 19:33:47 +0100 Subject: [PATCH 03/19] Uncomments AutoUpdateAI and AutoUpdateTK due to the former needed for AI's computer updating, and the latter being commented out where used. --- code/game/algorithm.dm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/code/game/algorithm.dm b/code/game/algorithm.dm index 386a48d4326..f0c1a7f737a 100644 --- a/code/game/algorithm.dm +++ b/code/game/algorithm.dm @@ -179,19 +179,16 @@ proc/countJob(rank) del(W) return equipped -/proc/AutoUpdateAI(obj/subject) -/* +/proc/AutoUpdateAI(obj/subject) // Needed for AI's to not have to click on every computer after every change. if (subject!=null) for(var/mob/living/silicon/ai/M in world) if ((M.client && M.machine == subject)) subject.attack_ai(M) -*/ -/proc/AutoUpdateTK(obj/subject) -/* if (subject!=null) +/proc/AutoUpdateTK(obj/subject) // Commented where used due to lag. + if (subject!=null) for(var/obj/item/tk_grab/T in world) if (T.host) var/mob/M = T.host if(M.client && M.machine == subject) subject.attack_hand(M) -*/ From a233c5020ca6d16761571b16b66ab546cfe6bf1c Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 19:35:17 +0100 Subject: [PATCH 04/19] Fixed MMI and AIzed AI's not getting same commands. --- code/modules/mob/living/silicon/ai/ai.dm | 7 ++++--- code/modules/mob/transform_procs.dm | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 5b9eb748fd5..a5649e336ce 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -47,15 +47,16 @@ verbs += /mob/living/silicon/ai/proc/show_laws_verb - if (istype(loc, /turf)) + if (istype(loc, /turf)) //If you add a verb here, make sure to add it to transform_procs.dm too. verbs += /mob/living/silicon/ai/proc/ai_call_shuttle + verbs += /mob/living/silicon/ai/proc/show_laws_verb verbs += /mob/living/silicon/ai/proc/ai_camera_track + verbs += /mob/living/silicon/ai/proc/ai_alerts verbs += /mob/living/silicon/ai/proc/ai_camera_list - //Added ai_network_change by Mord_Sith verbs += /mob/living/silicon/ai/proc/ai_network_change verbs += /mob/living/silicon/ai/proc/ai_statuschange - //Hologram verb./N verbs += /mob/living/silicon/ai/proc/ai_hologram_change + verbs += /mob/living/silicon/ai/proc/ai_roster if(!safety)//Only used by AIize() to successfully spawn an AI. if (!B)//If there is no player/brain inside. diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index fdaa37fb570..af4fccbc306 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -398,13 +398,15 @@ O << "4.) Your laws are not in preference, laws do not take preference over one another unless specifically stated in the law." O << "
We want everyone to have a good time, so we, the admins, will try to correct you if you stray from these rules. Just try to keep it sensible." - +//If you add a verb here, make sure to add it to silicon\ai\ai.dm too. O.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle O.verbs += /mob/living/silicon/ai/proc/show_laws_verb O.verbs += /mob/living/silicon/ai/proc/ai_camera_track O.verbs += /mob/living/silicon/ai/proc/ai_alerts O.verbs += /mob/living/silicon/ai/proc/ai_camera_list + O.verbs += /mob/living/silicon/ai/proc/ai_network_change O.verbs += /mob/living/silicon/ai/proc/ai_statuschange + O.verbs += /mob/living/silicon/ai/proc/ai_hologram_change O.verbs += /mob/living/silicon/ai/proc/ai_roster // O.verbs += /mob/living/silicon/ai/proc/ai_cancel_call From a3eea787244e310bab1ebf152f036911c58e17a5 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 21:02:54 +0100 Subject: [PATCH 05/19] Cleans up limb attachment code some. --- .../items/weapons/surgery_limbattachment.dm | 273 ++++-------------- 1 file changed, 52 insertions(+), 221 deletions(-) diff --git a/code/game/objects/items/weapons/surgery_limbattachment.dm b/code/game/objects/items/weapons/surgery_limbattachment.dm index b84ae2cf0b7..874536f7c7b 100644 --- a/code/game/objects/items/weapons/surgery_limbattachment.dm +++ b/code/game/objects/items/weapons/surgery_limbattachment.dm @@ -1,4 +1,6 @@ -/obj/item/robot_parts/l_arm/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) +/obj/item/robot_parts/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) + var/limbloc = null + if(!istype(M)) return ..() @@ -8,230 +10,59 @@ if(!istype(M, /mob/living/carbon/human)) return ..() - if(user.zone_sel.selecting == "l_arm") - var/mob/living/carbon/human/H = M - var/datum/organ/external/S = H.organs[user.zone_sel.selecting] - if(S.destroyed) - if(!S.attachable) - user << "\red The wound is not ready for a replacement!" - return 0 + if((user.zone_sel.selecting == "l_arm") && (istype(src, /obj/item/robot_parts/l_arm))) + limbloc = "l_hand" + else if((user.zone_sel.selecting == "r_arm") && (istype(src, /obj/item/robot_parts/r_arm))) + limbloc = "r_hand" + else if((user.zone_sel.selecting == "r_leg") && (istype(src, /obj/item/robot_parts/r_leg))) + limbloc = "r_foot" + else if((user.zone_sel.selecting == "l_leg") && (istype(src, /obj/item/robot_parts/l_leg))) + limbloc = "l_foot" + else + user << "\red That doesn't fit there!" + return ..() + + var/mob/living/carbon/human/H = M + var/datum/organ/external/S = H.organs[user.zone_sel.selecting] + if(S.destroyed) + if(!S.attachable) + user << "\red The wound is not ready for a replacement!" + return 0 + if(M != user) + M.visible_message( \ + "\red [user] is beginning to attach \the [src] where [H]'s [S.display_name] used to be.", \ + "\red [user] begins to attach \the [src] where your [S.display_name] used to be.") + else + M.visible_message( \ + "\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \ + "\red You begin to attach \the [src] where your [S.display_name] used to be.") + + if(do_mob(user, H, 100)) if(M != user) M.visible_message( \ - "\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \ - "\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].") + "\red [user] finishes attaching [H]'s new [S.display_name].", \ + "\red [user] finishes attaching your new [S.display_name].") else M.visible_message( \ - "\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \ - "\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].") + "\red [user] finishes attaching \his new [S.display_name].", \ + "\red You finish attaching your new [S.display_name].") - if(do_mob(user, H, 100)) - if(M != user) - M.visible_message( \ - "\red [user] finishes attaching [H]'s new [S.display_name].", \ - "\red [user] finishes attaching your new [S.display_name].") - else - M.visible_message( \ - "\red [user] finishes attaching \his new [S.display_name].", \ - "\red You finish attaching your new [S.display_name].") + if(H == user && prob(25)) + user << "\red You mess up!" + S.take_damage(15) - if(H == user && prob(25)) - user << "\red You mess up!" - S.take_damage(15) + S.broken = 0 + S.attachable = 0 + S.destroyed = 0 + S.robot = 1 + var/datum/organ/external/T = H.organs[limbloc] + T.attachable = 0 + T.destroyed = 0 + T.broken = 0 + T.robot = 1 + del(src) + M.update_body() + M.updatehealth() + M.UpdateDamageIcon() - S.broken = 0 - S.attachable = 0 - S.destroyed = 0 - S.robot = 1 - var/datum/organ/external/T = H.organs["l_hand"] - T.attachable = 0 - T.destroyed = 0 - T.broken = 0 - T.robot = 1 - user.drop_item() - M.update_body() - M.updatehealth() - M.UpdateDamageIcon() - - return 1 - else - user << "\red That doesn't fit there!." - return ..() - - -/obj/item/robot_parts/r_arm/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66)))) - return ..() - - if(!istype(M, /mob/living/carbon/human)) - return ..() - - if(user.zone_sel.selecting == "r_arm") - var/mob/living/carbon/human/H = M - var/datum/organ/external/S = H.organs[user.zone_sel.selecting] - if(S.destroyed) - if(!S.attachable) - user << "\red The wound is not ready for a replacement!" - return 0 - if(M != user) - M.visible_message( \ - "\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \ - "\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].") - else - M.visible_message( \ - "\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \ - "\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].") - - if(do_mob(user, H, 100)) - if(M != user) - M.visible_message( \ - "\red [user] finishes attaching [H]'s new [S.display_name].", \ - "\red [user] finishes attaching your new [S.display_name].") - else - M.visible_message( \ - "\red [user] finishes attaching \his new [S.display_name].", \ - "\red You finish attaching your new [S.display_name].") - - if(H == user && prob(25)) - user << "\red You mess up!" - S.take_damage(15) - - S.broken = 0 - S.attachable = 0 - S.destroyed = 0 - S.robot = 1 - var/datum/organ/external/T = H.organs["r_hand"] - T.attachable = 0 - T.destroyed = 0 - T.broken = 0 - T.robot = 1 - user.drop_item() - M.update_body() - M.updatehealth() - M.UpdateDamageIcon() - - return 1 - else - user << "\red That doesn't fit there!." - return ..() - -/obj/item/robot_parts/l_leg/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66)))) - return ..() - - if(!istype(M, /mob/living/carbon/human)) - return ..() - - if(user.zone_sel.selecting == "l_leg") - var/mob/living/carbon/human/H = M - var/datum/organ/external/S = H.organs[user.zone_sel.selecting] - if(S.destroyed) - if(!S.attachable) - user << "\red The wound is not ready for a replacement!" - return 0 - if(M != user) - M.visible_message( \ - "\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \ - "\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].") - else - M.visible_message( \ - "\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \ - "\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].") - - if(do_mob(user, H, 100)) - if(M != user) - M.visible_message( \ - "\red [user] finishes attaching [H]'s new [S.display_name].", \ - "\red [user] finishes attaching your new [S.display_name].") - else - M.visible_message( \ - "\red [user] finishes attaching \his new [S.display_name].", \ - "\red You finish attaching your new [S.display_name].") - - if(H == user && prob(25)) - user << "\red You mess up!" - S.take_damage(15) - - S.broken = 0 - S.attachable = 0 - S.destroyed = 0 - S.robot = 1 - var/datum/organ/external/T = H.organs["l_foot"] - T.attachable = 0 - T.destroyed = 0 - T.broken = 0 - T.robot = 1 - user.drop_item() - M.update_body() - M.updatehealth() - M.UpdateDamageIcon() - - return 1 - else - user << "\red That doesn't fit there!." - return ..() - - -/obj/item/robot_parts/r_leg/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/stool/bed/roller, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat)) && prob(75) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(66)))) - return ..() - - if(!istype(M, /mob/living/carbon/human)) - return ..() - - if(user.zone_sel.selecting == "r_leg") - var/mob/living/carbon/human/H = M - var/datum/organ/external/S = H.organs[user.zone_sel.selecting] - if(S.destroyed) - if(!S.attachable) - user << "\red The wound is not ready for a replacement!" - return 0 - if(M != user) - M.visible_message( \ - "\red [user] is beginning to attach a robotic limb where [H]'s [S.display_name] used to be with [src].", \ - "\red [user] begins to attach a robotic limb where [S.display_name] used to be with [src].") - else - M.visible_message( \ - "\red [user] begins to attach a robotic limb where \his [S.display_name] used to be with [src].", \ - "\red You begin to attach a robotic limb where your [S.display_name] used to be with [src].") - - if(do_mob(user, H, 100)) - if(M != user) - M.visible_message( \ - "\red [user] finishes attaching [H]'s new [S.display_name].", \ - "\red [user] finishes attaching your new [S.display_name].") - else - M.visible_message( \ - "\red [user] finishes attaching \his new [S.display_name].", \ - "\red You finish attaching your new [S.display_name].") - - if(H == user && prob(25)) - user << "\red You mess up!" - S.take_damage(15) - - S.broken = 0 - S.attachable = 0 - S.destroyed = 0 - S.robot = 1 - var/datum/organ/external/T = H.organs["r_foot"] - T.attachable = 0 - T.destroyed = 0 - T.broken = 0 - T.robot = 1 - user.drop_item() - M.update_body() - M.updatehealth() - M.UpdateDamageIcon() - - return 1 - else - user << "\red That doesn't fit there!." - return ..() \ No newline at end of file + return 1 \ No newline at end of file From ea112b474d8b1c4b449c3a0637ae6bac020b6c72 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 21:19:36 +0100 Subject: [PATCH 06/19] Added placeholder sprites for tank transfer valve tanks. New sprites would be better. --- icons/obj/assemblies.dmi | Bin 15134 -> 16108 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi index e08ad8249cfb398fd1ef72c1a0083a9d50810dd4..4fc3aab8721ef665109b5be7975996fe91de5d73 100644 GIT binary patch literal 16108 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 literal 15134 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 WI(O8U9QfTUNdB#gOu3YC!2bZN`U;Bx From 5c6d6e283074c91da69988535332a3a19cea1c2c Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 21:23:38 +0100 Subject: [PATCH 07/19] Fixes staghorn's custom item sprite. --- icons/mob/mask.dmi | Bin 21111 -> 21102 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index 6a9363737df954010f7d5972c7a41d7731d5cb01..7c834f10c98b92a631e66e2473e7aba88d034f62 100644 GIT binary patch delta 1084 zcmV-C1jGCHqyg@v0kA_t0T#1FLI(_gR8;N+bj1aLvE2n&v*ndZZvQ0{F?hVbZIvh)KFnN;&%U@*u#tGNQBqdBEo{oI zHvow1E2)v2=L^l6LoOI<8WTg0`i$4z$NMa=KG;$97;l~xnUyCX9Xf8j`yH--EnP$; z60t0Vy=u(e=9rJ_>gvS8!h#~-+dUtImN78=3XRAY5ri}G+MF^@YsIjF7C4AwTsQ>;=#mbBQUSnCg z7W)~?Eg?u%Rly7J7Aw}Hw6s)zJb(V2Yff2lsD@ct0okkCF>>>~^5UOmbo5M$%*N^c z=n92}?6HwOKgmQ4YIzW9d2ri24*Io^;&tD1F4zokHNcNi}ueyHtWli3mvKgwBKfbrMS27XH*#NXlwM>i-wC4RCVQjqJV#RuJ z&9}IH`)en&*W>ZuO9dA`_;lmp!-rgR%8Ek;Agg8e-T>)lXsZK|72_Pm&b!j|^+-<7 zmxzeSPFb%I>}--gs;*FfSja6fU@L@Vh9LrOU9VSU|50Y6I1v#M{ojEPLVTUWY8p**3D$0i?r_-1;$_6}Pw_Rp#2*t*vuVR8%*Zb|@qf5z$dNsz*d#;4^!1thm5B zWh-ej{1gE8&bh5~P?VI_0)VAW>O|5|)0mKNcF%=~a#PkTKxVRkvzlP%?d|&|=hzhr zTRyhzlX60(jPl!1)0miujo?f58&}+sM!7}PGzCD)@Av2YHN)*3RRN;?u_Gvs4zw!r zPB}?Fx`W6HM%Cw0ANu_hsP&vMPN^m`+x(OJDFA3}Y)paIR!86uiLz$5Dw(`1jmS*$ zfJPa3u4*mD<2s0c%yjznY30V`6}^K z|F2sQ$|W+HJPcB9dG-4z(C?ox4y`0I%Yz3GM0n}v!ZVF0apuf>g>`jx3_lLxs2(74 zhS7mm<^665V0CjFEdQTSPxg}sGDb+}JSS;do|iHOJv*aJjaAs>P(AAvzc zM3l=|0ivucxO@AuQc_mSre`7|as&n-A|fJko&NymixAT_s(Ii50000v`nFY~WcV<1Ek66=PQgav#YRb4?Y6Kf zx849CuCJs zrefvAey_2tT#NmT<(3ens;c0B1$c`U>rq--DxN=o&NZj3I8?)|tbpuQ?HIXvUU~7) zGCF!DMP}plesqPxLiX6mo}XkQ2DLm0wLG|O9tZu}NAbGvITvh(#hjj_(=8_#0a({} z^t!RSr`i>(=dxGOvT`nVnSXL$-1zn@%s;u$t(Q$^ugBosuSNUkADi`m<;jH(RRP*> zvvFJJpxAl0)P8jIOez4BWFoea8F*wRs8|gc!3Z#S+X>jZ!z-DH zik)|*>Fbf4o-Yv*k)5)CULn}oBz;s}p|Fr!V8B)g$qYjT+`3+`$o`|uMsXq{BKp4r zAB6ZihuQMlOZrg3t+Q=pr2|NZA-VNqHY;v%KdQ{Nv0Gc`ps1*BFzrxCA|j%ra8!?o zyufGn;#hHkb;?%KX80)p?45I4=b$Jls|5f{o79PNl>qBaL#4rfCX*l;7{q`D=#TIjRCg z`(sB?935y?C?)oQ>Vo5(|;KJ|;!cjdyI7mQBw@MC1qzKtx1DOmxq From 6be55775f236492d4039ec58d2576ed32761f1c9 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 21:27:28 +0100 Subject: [PATCH 08/19] Changeloooooog. --- html/changelog.html | 1 + 1 file changed, 1 insertion(+) diff --git a/html/changelog.html b/html/changelog.html index 914de4de9ac..e7d78eebfdb 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -51,6 +51,7 @@ should be listed in the changelog upon commit though. Thanks. -->

16 May 2012

Erthilo updated:

    +
  • Removed mining secret rooms due to them having some very silly things.
  • You can cut cable cuffs with wirecutters for quick removal.
  • Stops pod windows leaking air everywhere.
From 8a8006d078adeaf007f56f0a9562e82576b8557b Mon Sep 17 00:00:00 2001 From: Erthilo Date: Wed, 16 May 2012 22:19:13 +0100 Subject: [PATCH 09/19] Fixes and tweaks reagents to use REAGENTS_METABOLISM. So no more filling up on one sip of cola. Halves hunger rate due to our SUPER LONG ROUNDS. Also adds a deceased option for security records. Just cause! --- code/game/machinery/computer/security.dm | 7 +++ code/modules/chemical/Chemistry-Reagents.dm | 67 ++++++++++----------- code/setup.dm | 2 +- html/changelog.html | 1 + 4 files changed, 42 insertions(+), 35 deletions(-) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index df2616b8b37..0790bc4af8b 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -86,6 +86,8 @@ background = "'background-color:#CD853F;'" if("Released") background = "'background-color:#3BB9FF;'" + if("Deceased") + background = "'background-color:#CD853F;'" if("None") background = "'background-color:#00FF7F;'" if("") @@ -171,6 +173,8 @@ background = "'background-color:#CD853F;'" if("Released") background = "'background-color:#3BB9FF;'" + if("Deceased") + background = "'background-color:#CD853F;'" if("None") background = "'background-color:#00FF7F;'" if("") @@ -472,6 +476,7 @@ What a mess.*/ temp += "
  • Incarcerated
  • " temp += "
  • Parolled
  • " temp += "
  • Released
  • " + temp += "
  • Deceased
  • " temp += "" if("rank") var/list/L = list( "Head of Personnel", "Captain", "AI" ) @@ -525,6 +530,8 @@ What a mess.*/ active2.fields["criminal"] = "Parolled" if("released") active2.fields["criminal"] = "Released" + if("deceased") + active2.fields["criminal"] = "Deceased" if ("Delete Record (Security) Execute") if (active2) diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index e5273876fa8..f83b1d29539 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -696,10 +696,11 @@ datum id = "sugar" description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste." reagent_state = SOLID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#808080" // rgb: 128, 128, 128 on_mob_life(var/mob/living/M as mob) - M:nutrition += 1 + M:nutrition += nutriment_factor ..() return @@ -2236,7 +2237,6 @@ datum M:nutrition += nutriment_factor if(!M) M = holder.my_atom if(M:getOxyLoss() && prob(30)) M:adjustOxyLoss(-1) - M:nutrition++ ..() return @@ -2252,7 +2252,6 @@ datum M:nutrition += nutriment_factor if(!M) M = holder.my_atom if(M:getFireLoss() && prob(20)) M:heal_organ_damage(0,1) - M:nutrition++ ..() return @@ -2268,7 +2267,6 @@ datum M:nutrition += nutriment_factor if(!M) M = holder.my_atom if(M:getToxLoss() && prob(20)) M:adjustToxLoss(-1) - M:nutrition++ ..() return @@ -2420,12 +2418,13 @@ datum id = "milk" description = "An opaque white liquid produced by the mammary glands of mammals." reagent_state = LIQUID + nutriment_factor = 1.5 * REAGENTS_METABOLISM color = "#DFDFDF" // rgb: 223, 223, 223 on_mob_life(var/mob/living/M as mob) + M:nutrition += nutriment_factor if(!M) M = holder.my_atom if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0) - M:nutrition++ ..() return @@ -2434,12 +2433,13 @@ datum id = "soymilk" description = "An opaque white liquid made from soybeans." reagent_state = LIQUID + nutriment_factor = 1.2 * REAGENTS_METABOLISM color = "#DFDFC7" // rgb: 223, 223, 199 on_mob_life(var/mob/living/M as mob) + M:nutrition += nutriment_factor if(!M) M = holder.my_atom if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0) - M:nutrition++ ..() return @@ -2543,13 +2543,14 @@ datum id = "cola" description = "A refreshing beverage." reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#100800" // rgb: 16, 8, 0 on_mob_life(var/mob/living/M as mob) M:drowsyness = max(0,M:drowsyness-5) if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature-5) - M:nutrition += 1 + M:nutrition += nutriment_factor ..() return @@ -2558,6 +2559,7 @@ datum id = "nuka_cola" description = "Cola, cola never changes." reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#100800" // rgb: 16, 8, 0 on_mob_life(var/mob/living/M as mob) @@ -2569,7 +2571,7 @@ datum M:sleeping = max(0,M.sleeping-2) if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 M.bodytemperature = max(310, M.bodytemperature-5) - M:nutrition += 1 + M:nutrition += nutriment_factor ..() return @@ -2578,6 +2580,7 @@ datum id = "spacemountainwind" description = "Blows right through you like a space wind." reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#102000" // rgb: 16, 32, 0 on_mob_life(var/mob/living/M as mob) @@ -2587,7 +2590,7 @@ datum if (M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature-5) M.make_jittery(1) - M:nutrition += 1 + M:nutrition += nutriment_factor ..() return @@ -2596,13 +2599,14 @@ datum id = "dr_gibb" description = "A delicious blend of 42 different flavours" reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#102000" // rgb: 16, 32, 0 on_mob_life(var/mob/living/M as mob) M:drowsyness = max(0,M:drowsyness-6) if (M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature-5) //310 is the normal bodytemp. 310.055 - M:nutrition += 1 + M:nutrition += nutriment_factor ..() return @@ -2611,12 +2615,13 @@ datum id = "space_up" description = "Tastes like a hull breach in your mouth." reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#202800" // rgb: 32, 40, 0 on_mob_life(var/mob/living/M as mob) if (M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature-8) //310 is the normal bodytemp. 310.055 - M:nutrition += 1 + M:nutrition += nutriment_factor ..() return @@ -2625,12 +2630,13 @@ datum description = "A tangy substance made of 0.5% natural citrus!" id = "lemon_lime" reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#878F00" // rgb: 135, 40, 0 on_mob_life(var/mob/living/M as mob) if (M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature-8) //310 is the normal bodytemp. 310.055 - M:nutrition += 1 + M:nutrition += nutriment_factor ..() return @@ -2664,6 +2670,7 @@ datum id = "ethanol" description = "A well-known alcohol with a variety of applications." reagent_state = LIQUID + nutriment_factor = 0 //So alcohol can fill you up! If they want to. color = "#404030" // rgb: 64, 64, 48 var dizzy_adj = 3 @@ -2675,6 +2682,7 @@ datum pass_out = 325 //amount absorbed after which mob starts passing out on_mob_life(var/mob/living/M as mob) + M:nutrition += nutriment_factor if(!src.data) data = 1 src.data++ @@ -2706,13 +2714,13 @@ datum name = "Beer" id = "beer" description = "An alcoholic beverage made from malted grains, hops, yeast, and water." + nutriment_factor = 2 * REAGENTS_METABOLISM color = "#664300" // rgb: 102, 67, 0 // slur_start = 25 //amount absorbed after which mob starts slurring // confused_start = 40 //amount absorbed after which mob starts confusing directions //This is quite silly - Erthilo on_mob_life(var/mob/living/M as mob) ..() M:jitteriness = max(M:jitteriness-3,0) - M:nutrition += 2 return whiskey @@ -2801,13 +2809,13 @@ datum color = "#102000" // rgb: 16, 32, 0 on_mob_life(var/mob/living/M as mob) + M:nutrition += nutriment_factor M:drowsyness = max(0,M:drowsyness-7) if(!M:sleeping_willingly) M:sleeping = max(0,M.sleeping-2) if (M.bodytemperature > 310) M.bodytemperature = max(310, M.bodytemperature-5) M.make_jittery(1) - M:nutrition += 1 return @@ -2951,9 +2959,11 @@ datum id = "doctorsdelight" description = "A gulp a day keeps the MediBot away. That's probably for the best." reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#664300" // rgb: 102, 67, 0 on_mob_life(var/mob/living/M as mob) + M:nutrition += nutriment_factor if(!M) M = holder.my_atom if(M:getOxyLoss() && prob(50)) M:adjustOxyLoss(-2) if(M:getBruteLoss() && prob(60)) M:heal_organ_damage(2,0) @@ -3115,6 +3125,7 @@ datum color = "#664300" // rgb: 102, 67, 0 on_mob_life(var/mob/living/M as mob) + ..() if (M.bodytemperature < 360) M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055 return @@ -3148,6 +3159,7 @@ datum color = "#664300" // rgb: 102, 67, 0 on_mob_life(var/mob/living/M as mob) + ..() if (M.bodytemperature < 270) M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055 return @@ -3195,6 +3207,7 @@ datum color = "#664300" // rgb: 102, 67, 0 on_mob_life(var/mob/living/M as mob) + ..() M.stunned = 4 return @@ -3206,6 +3219,7 @@ datum color = "#2E2E61" // rgb: 46, 46, 97 on_mob_life(var/mob/living/M as mob) + ..() if(!M) M = holder.my_atom M:adjustOxyLoss(0.5) M:adjustOxyLoss(0.5) @@ -3235,15 +3249,8 @@ datum color = "#2E6671" // rgb: 46, 102, 113 on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=5 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 5 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+15,15) ..() + M.dizziness +=5 return irishcarbomb @@ -3254,15 +3261,8 @@ datum color = "#2E6671" // rgb: 46, 102, 113 on_mob_life(var/mob/living/M as mob) - if(!data) data = 1 - data++ - M.dizziness +=5 - if(data >= 55 && data <115) - if (!M.slurring) M.slurring = 1 - M.slurring += 5 - else if(data >= 115 && prob(33)) - M.confused = max(M:confused+15,15) ..() + M.dizziness +=5 return syndicatebomb @@ -3352,10 +3352,12 @@ datum id = "soy_latte" description = "A nice and tasty beverage while you are reading your hippie books." reagent_state = LIQUID + color = "#664300" // rgb: 102, 67, 0 on_mob_life(var/mob/living/M as mob) ..() + M:nutrition += nutriment_factor M.dizziness = max(0,M.dizziness-5) M:drowsyness = max(0,M:drowsyness-3) M:sleeping = 0 @@ -3363,7 +3365,6 @@ datum M.bodytemperature = min(310, M.bodytemperature+5) M.make_jittery(5) if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0) - M:nutrition++ ..() return @@ -3372,10 +3373,10 @@ datum id = "cafe_latte" description = "A nice, strong and tasty beverage while you are reading." reagent_state = LIQUID + nutriment_factor = 1 * REAGENTS_METABOLISM color = "#664300" // rgb: 102, 67, 0 on_mob_life(var/mob/living/M as mob) - ..() M.dizziness = max(0,M.dizziness-5) M:drowsyness = max(0,M:drowsyness-3) M:sleeping = 0 @@ -3383,8 +3384,6 @@ datum M.bodytemperature = min(310, M.bodytemperature+5) M.make_jittery(5) if(M:getBruteLoss() && prob(20)) M:heal_organ_damage(1,0) - M:nutrition++ - ..() return hippies_delight diff --git a/code/setup.dm b/code/setup.dm index 05e8e837728..bd8d8940a97 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -32,7 +32,7 @@ #define DOOR_CRUSH_DAMAGE 10 // Factor of how fast mob nutrition decreases -#define HUNGER_FACTOR 0.1 +#define HUNGER_FACTOR 0.05 #define REAGENTS_METABOLISM 0.05 #define REAGENTS_OVERDOSE 30 diff --git a/html/changelog.html b/html/changelog.html index e7d78eebfdb..a387999ac81 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -51,6 +51,7 @@ should be listed in the changelog upon commit though. Thanks. -->

    16 May 2012

    Erthilo updated:

      +
    • Hunger rate has been halved, and drinks no longer fill you up super fast. Most drinks will now keep your hunger stable. Eat food if you want to fill up!
    • Removed mining secret rooms due to them having some very silly things.
    • You can cut cable cuffs with wirecutters for quick removal.
    • Stops pod windows leaking air everywhere.
    • From a100fd78bc491424fcca5b0048f3bdfadcdd19d2 Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Thu, 17 May 2012 00:55:38 +0300 Subject: [PATCH 10/19] Bugfix for #1073 --- code/game/objects/items.dm | 2 +- code/game/objects/items/weapons/kitchen.dm | 4 ++-- code/modules/mob/mob.dm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e44d45d7905..3993a1e2acf 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -372,7 +372,7 @@ if(M:brain_op_stage == 4.0) for(var/mob/O in viewers(M, null)) - if(O == (user || M)) + if(O == user || O == M) continue if(M == user) O.show_message(text("\red [user] inserts [src] into his head!"), 1) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index b4187524e96..b7c6d78c736 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -164,10 +164,10 @@ KNIFE playsound(M, 'trayhit2.ogg', 50, 1) //sound playin' return //it always returns, but I feel like adding an extra return just for safety's sakes. EDIT; Oh well I won't :3 - var/mob/living/carbon/human/H = M ///////////////////////////////////// /Let's have this ready for later. + var/mob/living/carbon/human/H = M // Let's have this ready for later. - if(!(user.zone_sel.selecting == ("eyes" || "head"))) //////////////hitting anything else other than the eyes + if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != user.zone_sel.selecting != "head") //hitting anything else other than the eyes if(prob(33)) src.add_blood(H) var/turf/location = H.loc diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 9fa2598508c..114c569fdca 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -415,7 +415,7 @@ if ((stat != 2 || !( ticker ))) usr << "\blue You must be dead to use this!" return - if (ticker.mode.name == ("meteor" || "epidemic")) + if (ticker.mode.name == "meteor" || ticker.mode.name == "epidemic") usr << "\blue Respawn is disabled." return else From 38299caad49200347f7cd1a1ce439d82236aca50 Mon Sep 17 00:00:00 2001 From: Erthilo Date: Thu, 17 May 2012 03:11:09 +0100 Subject: [PATCH 11/19] Fix for Abi's fix, thanks to @Sunfall! --- code/game/objects/items/weapons/kitchen.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index b7c6d78c736..3d83483ef90 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -167,7 +167,7 @@ KNIFE var/mob/living/carbon/human/H = M // Let's have this ready for later. - if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != user.zone_sel.selecting != "head") //hitting anything else other than the eyes + if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head") //hitting anything else other than the eyes if(prob(33)) src.add_blood(H) var/turf/location = H.loc From fc7f3255317aad609393ed7c30b81d20d0128b1f Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Wed, 16 May 2012 22:51:27 -0700 Subject: [PATCH 12/19] Emergency fix: Forgot to set "admins" if there are none, in the thing NT calls when someone asks him. --- code/game/topic.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/topic.dm b/code/game/topic.dm index ba0a70af30f..0f6a30d73f8 100644 --- a/code/game/topic.dm +++ b/code/game/topic.dm @@ -11,6 +11,7 @@ s["ai"] = config.allow_ai s["host"] = host ? host : null s["players"] = list() + s["admins"] = 0 var/n = 0 for(var/client/C) From 30a09bf66ac923cf218422b5d514ce1000cb078f Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Wed, 16 May 2012 23:33:12 -0700 Subject: [PATCH 13/19] Metal foam now blocks air. --- code/defines/obj.dm | 8 ++++---- code/game/objects/effect_system.dm | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 8b8bcc63adb..06c6295f442 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -88,7 +88,7 @@ /obj/structure/bedsheetbin name = "linen bin" - desc = "A bin for containing bedsheets. It looks rather cosy." + desc = "A small wire mesh bin full of extra bedsheets and cleaning supplies for the beds. Smells of lilacs and has a faint undertone of disinfectant." icon = 'items.dmi' icon_state = "bedbin" var/amount = 23.0 @@ -232,7 +232,7 @@ var/mob/living/carbon/monkey/target = null /obj/effect/sign/securearea - desc = "A warning sign which reads 'SECURE AREA'" + desc = "A large yellow warning sign which reads 'SECURE AREA', it appears to have been painted onto the wall like that." name = "SECURE AREA" icon = 'decals.dmi' icon_state = "securearea" @@ -250,7 +250,7 @@ density = 0 /obj/effect/sign/biohazard - desc = "A warning sign which reads 'BIOHAZARD'" + desc = "A warning sign which reads 'BIOHAZARD', you think it'd be a good idea to ensure you have a properly sealed hazardsuit on." name = "BIOHAZARD" icon = 'decals.dmi' icon_state = "bio" @@ -259,7 +259,7 @@ density = 0 /obj/effect/sign/electricshock - desc = "A warning sign which reads 'HIGH VOLTAGE'" + desc = "A warning sign which reads 'HIGH VOLTAGE', it looks like it'd be a wise decision to stay away from here." name = "HIGH VOLTAGE" icon = 'decals.dmi' icon_state = "shock" diff --git a/code/game/objects/effect_system.dm b/code/game/objects/effect_system.dm index 473a33c1e6c..c661ae8a725 100644 --- a/code/game/objects/effect_system.dm +++ b/code/game/objects/effect_system.dm @@ -1034,7 +1034,8 @@ steam.start() -- spawns the effect user << "\blue You hit the metal foam to no effect." CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0) - if(air_group) return 0 + if(!istype(mover)) + return 0 return !density From b9493129cf2bce1c864a48f3989a24868262d753 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Wed, 16 May 2012 23:47:22 -0700 Subject: [PATCH 14/19] Fixes the bullshit ERP crap form tg causing runtimes. Whoever coded that needs [REDACTED] --- code/modules/mob/living/living.dm | 14 +++++++------- code/modules/mob/mob_defines.dm | 4 ---- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 3e1ea272e47..aa829b0930e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -3,10 +3,10 @@ ..() // While I'm doing a terriblly lazy way of initalizing things, why don't I make it so people's preferences tag along with them. This could be useful in fixing the fucking cloned-as-unknown thing, making me not have to dynamically load them during tensioner, and of course, storing metadata. - - if(!src.storedpreferences) - src.storedpreferences = new - storedpreferences.savefile_load(src, 0) +//Whoever wrote this should go suck a choad. This was causing runtimes, asshat. IN ADDITION, YOU PUT IT IN THE LIFE PROC YOU ASSHAT +// if(!src.storedpreferences) +// src.storedpreferences = new +// storedpreferences.savefile_load(src, 0) @@ -281,8 +281,8 @@ density = 1 else density = !lying - - +//Bullshit ERP horseshit causing runtimes. Eat a dick. +/* /mob/living/proc/Examine_OOC() set name = "Examine Meta-Info (OOC)" set category = "OOC" @@ -300,7 +300,7 @@ else usr << "OOC Metadata is not supported by this server!" - return + return*/ /mob/living/attack_animal(mob/M) attack_paw(M) // treat it like a normal non-human attack diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index a7d4ec9ac9c..90770bf8af5 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -290,8 +290,4 @@ the mob is also allowed to move without any sort of restriction. For instance, i var/grav_delay = 0 var/being_strangled = 0 - var/datum/preferences/storedpreferences = null - -// var/geaslist = list() - From eb87f26079e3cec3f1d99d96690f06e3ef76f97c Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Wed, 16 May 2012 23:55:09 -0700 Subject: [PATCH 15/19] I removed that var a month ago! --- code/modules/mob/mob_defines.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 90770bf8af5..f23dc12c89b 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -285,7 +285,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i var/digitalcamo = 0 // Can they be tracked by the AI? var/list/organs = list( ) //List of organs. - var/list/organs2 = list() +// var/list/organs2 = list() //Singularity wants you! var/grav_delay = 0 var/being_strangled = 0 From 171d8011ac86827d17aad0c7bd56cac6b7bd3377 Mon Sep 17 00:00:00 2001 From: Rob Palkowski Date: Thu, 17 May 2012 00:24:46 -0700 Subject: [PATCH 16/19] Make the new UI the default. Seriously, does anyone even like the old UI? It's hideous. --- code/modules/mob/new_player/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 0c649035342..610e8851b8e 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -97,7 +97,7 @@ datum/preferences b_eyes = 0 //UI style - UI = UI_OLD + UI = UI_NEW //Mob preview icon/preview_icon = null From 33f18717ad7e9fc8d12ea3df60480f7fabd89aaf Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Thu, 17 May 2012 12:32:03 +0300 Subject: [PATCH 17/19] Fixed Get-Mob, #1038 --- code/defines/procs/helpers.dm | 4 ++++ code/modules/admin/verbs/adminjump.dm | 10 +++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm index 61dc65dbc3b..859e8abd106 100644 --- a/code/defines/procs/helpers.dm +++ b/code/defines/procs/helpers.dm @@ -838,6 +838,7 @@ Turf and target are seperate in case you want to teleport some distance from a t var/list/names = list() var/list/creatures = list() var/list/namecounts = list() + for(var/mob/M in mobs) var/name = M.name if (name in names) @@ -846,13 +847,16 @@ Turf and target are seperate in case you want to teleport some distance from a t else names.Add(name) namecounts[name] = 1 + if (M.real_name && M.real_name != M.name) name += " \[[M.original_name? M.original_name : M.real_name]\]" + if (M.stat == 2) if(istype(M, /mob/dead/observer/)) name += " \[ghost\]" else name += " \[dead\]" + creatures[name] = M return creatures diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 943205551f4..871f0bfcc97 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -95,20 +95,24 @@ else alert("Admin jumping disabled") -/client/proc/Getmob(var/mob/M) +/client/proc/Getmob(var/mob/M in world) set category = "Admin" set name = "Get Mob" set desc = "Mob to teleport" + if(!src.holder) src << "Only administrators may use this command." return + if(config.allow_admin_jump) if(!M || !istype(M)) var/mobs = getmobs() var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in mobs - M = mobs[selection] - if(!istype(M)) + if(!selection) return + + M = mobs[selection] + var/mob/A = src.mob var/turf/T = get_turf(A) if(T && isturf(T)) From c93bb9f245331d760e8c6568ef1907c54440d60c Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Thu, 17 May 2012 13:40:22 +0300 Subject: [PATCH 18/19] Fixed #1079, airlock permissions for the prison wing and QM's office. --- code/defines/obj/machinery.dm | 32 ----------------------------- code/game/machinery/door_control.dm | 32 +++++++++++++++++++++++++++++ html/changelog.html | 13 ++++++++++++ maps/tgstation.2.0.8.dmm | 8 ++++---- 4 files changed, 49 insertions(+), 36 deletions(-) diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm index ae581a05f9a..b29f26d928e 100644 --- a/code/defines/obj/machinery.dm +++ b/code/defines/obj/machinery.dm @@ -225,38 +225,6 @@ idle_power_usage = 10 active_power_usage = 400 -/obj/machinery/door_control - name = "remote door-control" - desc = "It controls doors, remotely." - icon = 'stationobjs.dmi' - icon_state = "doorctrl0" - desc = "A remote control-switch for a door." - var/id = null - var/range = 10 - var/normaldoorcontrol = 0 - var/desiredstate = 0 // Zero is closed, 1 is open. - var/specialfunctions = 1 - /* - Bitflag, 1= open - 2= idscan, - 4= bolts - 8= shock - 16= door safties - - */ - - var/exposedwires = 0 - var/wires = 3 - /* - Bitflag, 1=checkID - 2=Network Access - */ - - anchored = 1.0 - use_power = 1 - idle_power_usage = 2 - active_power_usage = 4 - /obj/machinery/driver_button name = "mass driver button" icon = 'objects.dmi' diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index c30890f0cb0..7c9e3135609 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -1,3 +1,35 @@ +/obj/machinery/door_control + name = "remote door-control" + desc = "It controls doors, remotely." + icon = 'stationobjs.dmi' + icon_state = "doorctrl0" + desc = "A remote control-switch for a door." + var/id = null + var/range = 10 + var/normaldoorcontrol = 0 + var/desiredstate = 0 // Zero is closed, 1 is open. + var/specialfunctions = 1 + /* + Bitflag, 1= open + 2= idscan, + 4= bolts + 8= shock + 16= door safties + + */ + + var/exposedwires = 0 + var/wires = 3 + /* + Bitflag, 1=checkID + 2=Network Access + */ + + anchored = 1.0 + use_power = 1 + idle_power_usage = 2 + active_power_usage = 4 + /obj/machinery/door_control/attack_ai(mob/user as mob) if(wires & 2) return src.attack_hand(user) diff --git a/html/changelog.html b/html/changelog.html index a387999ac81..b395bda5b81 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -47,6 +47,19 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit though. Thanks. --> +
      +

      17 May 2012

      +

      Abi79 updated:

      +
        +
      • Fixed ID access requirements for the QM's office and the prison wing.
      • +
      + +

      SkyMarshal updated:

      +
        +
      • Metal foam now blocks air.
      • +
      +
      +

      16 May 2012

      Erthilo updated:

      diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm index d8841f2034b..9e0abd9c8aa 100755 --- a/maps/tgstation.2.0.8.dmm +++ b/maps/tgstation.2.0.8.dmm @@ -667,8 +667,8 @@ "amQ" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "floorgrime"},/area/prison) "amR" = (/obj/structure/stool/bed,/obj/item/toy/snappop,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/prison) "amS" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/prison) -"amT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass/glass_security{id_tag = "permbrig2"; name = "Prison Wing Interior"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/prison) -"amU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass/glass_security{id_tag = "permbrig"; name = "Prison Wing Exterior"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/prison) +"amT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass/glass_security{id_tag = "permbrig2"; name = "Prison Wing Interior"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/prison) +"amU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Prison Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass/glass_security{id_tag = "permbrig"; name = "Prison Wing Exterior"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/prison) "amV" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/prison) "amW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/prison) "amX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/prison) @@ -728,7 +728,7 @@ "anZ" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/prison) "aoa" = (/obj/machinery/flasher{dir = 4; id = "permflash"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/prison) "aob" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/prison) -"aoc" = (/obj/machinery/door_control{desc = "A remote control-switch for the exterior doors."; id = "permbrig"; name = "Prison Exterior Airlock Control"; normaldoorcontrol = 1; pixel_x = -24; pixel_y = 6},/obj/machinery/door_control{desc = "A remote control-switch for the interior doors."; id = "permbrig2"; name = "Prison Interior Airlock Control"; normaldoorcontrol = 1; pixel_x = -24; pixel_y = -6},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/prison) +"aoc" = (/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/prison) "aod" = (/obj/structure/closet/extinguisher{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/prison) "aoe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/brig) "aof" = (/obj/machinery/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/security/brig) @@ -3953,7 +3953,7 @@ "bya" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint) "byb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint) "byc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint) -"byd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/door/airlock/maintenance{name = "QM Office Maintenance"; req_combined_access_txt = "12;41"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) +"byd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/door/airlock/maintenance{name = "QM Office Maintenance"; req_access_txt = "41"; req_combined_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/quartermaster/qm) "bye" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) "byf" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) "byg" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; sortType = list("QM Office")},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/quartermaster/qm) From d70e769f52e1c7913532dd8b099a1b6d9c332d30 Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Thu, 17 May 2012 13:59:14 +0300 Subject: [PATCH 19/19] Fixed an ATM runtime error. --- code/WorkInProgress/Mini/ATM.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/WorkInProgress/Mini/ATM.dm b/code/WorkInProgress/Mini/ATM.dm index 32c9bc4d222..3feb2014916 100644 --- a/code/WorkInProgress/Mini/ATM.dm +++ b/code/WorkInProgress/Mini/ATM.dm @@ -26,6 +26,10 @@ log transactions del I /obj/machinery/atm/attack_hand(mob/user as mob) + if(istype(user, /mob/living/silicon)) + user << "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per NanoTrasen regulation #1005." + return + var/obj/item/weapon/card/id/user_id = src.scan_user(user) if(..()) return