From 73bf8131274237700cfc0b1eab1fcc0dd35981ca Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Wed, 19 Jun 2013 12:47:19 -0700 Subject: [PATCH 01/10] Sanity checking for zone disconnection. I am dumb some days. --- code/ZAS/Connection.dm | 87 +++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/code/ZAS/Connection.dm b/code/ZAS/Connection.dm index f63837a5ffc..ab479450cf1 100644 --- a/code/ZAS/Connection.dm +++ b/code/ZAS/Connection.dm @@ -158,51 +158,53 @@ connection if(!istype(zone_1) || !istype(zone_2)) return - //Handle disconnection of indirectly or directly connected zones. - if( (zone_1 in zone_2.connected_zones) || (zone_2 in zone_1.connected_zones) ) + if(indirect != CONNECTION_CLOSED) + //Handle disconnection of indirectly or directly connected zones. + if( (zone_1 in zone_2.connected_zones) || (zone_2 in zone_1.connected_zones) ) - //If there are more than one connection, decrement the number of connections - //Otherwise, remove all connections between the zones. - if(zone_2 in zone_1.connected_zones) - if(zone_1.connected_zones[zone_2] > 1) - zone_1.connected_zones[zone_2]-- - else - zone_1.connected_zones -= zone_2 - //remove the list if it is empty - if(!zone_1.connected_zones.len) - zone_1.connected_zones = null + //If there are more than one connection, decrement the number of connections + //Otherwise, remove all connections between the zones. + if(zone_2 in zone_1.connected_zones) + if(zone_1.connected_zones[zone_2] > 1) + zone_1.connected_zones[zone_2]-- + else + zone_1.connected_zones -= zone_2 + //remove the list if it is empty + if(!zone_1.connected_zones.len) + zone_1.connected_zones = null - //Then do the same for the other zone. - if(zone_1 in zone_2.connected_zones) - if(zone_2.connected_zones[zone_1] > 1) - zone_2.connected_zones[zone_1]-- - else - zone_2.connected_zones -= zone_1 - if(!zone_2.connected_zones.len) - zone_2.connected_zones = null + //Then do the same for the other zone. + if(zone_1 in zone_2.connected_zones) + if(zone_2.connected_zones[zone_1] > 1) + zone_2.connected_zones[zone_1]-- + else + zone_2.connected_zones -= zone_1 + if(!zone_2.connected_zones.len) + zone_2.connected_zones = null - //Handle disconnection of closed zones. - if( (zone_1 in zone_2.closed_connection_zones) || (zone_2 in zone_1.closed_connection_zones) ) + else + //Handle disconnection of closed zones. + if( (zone_1 in zone_2.closed_connection_zones) || (zone_2 in zone_1.closed_connection_zones) ) - //If there are more than one connection, decrement the number of connections - //Otherwise, remove all connections between the zones. - if(zone_2 in zone_1.connected_zones) - if(zone_1.closed_connection_zones[zone_2] > 1) - zone_1.closed_connection_zones[zone_2]-- - else - zone_1.closed_connection_zones -= zone_2 - //remove the list if it is empty - if(!zone_1.closed_connection_zones.len) - zone_1.closed_connection_zones = null + //If there are more than one connection, decrement the number of connections + //Otherwise, remove all connections between the zones. + if(zone_2 in zone_1.connected_zones) + if(zone_1.closed_connection_zones[zone_2] > 1) + zone_1.closed_connection_zones[zone_2]-- + else + zone_1.closed_connection_zones -= zone_2 + //remove the list if it is empty + if(!zone_1.closed_connection_zones.len) + zone_1.closed_connection_zones = null - //Then do the same for the other zone. - if(zone_1 in zone_2.connected_zones) - if(zone_2.closed_connection_zones[zone_1] > 1) - zone_2.closed_connection_zones[zone_1]-- - else - zone_2.closed_connection_zones -= zone_1 - if(!zone_2.closed_connection_zones.len) - zone_2.closed_connection_zones = null + //Then do the same for the other zone. + if(zone_1 in zone_2.connected_zones) + if(zone_2.closed_connection_zones[zone_1] > 1) + zone_2.closed_connection_zones[zone_1]-- + else + zone_2.closed_connection_zones -= zone_1 + if(!zone_2.closed_connection_zones.len) + zone_2.closed_connection_zones = null proc/Cleanup() @@ -259,9 +261,8 @@ connection //The door is instead closed. else if(indirect > CONNECTION_CLOSED) - indirect = CONNECTION_CLOSED - DisconnectZones(A.zone, B.zone) + indirect = CONNECTION_CLOSED ConnectZones(A.zone, B.zone) //If I can no longer pass air, better delete @@ -381,7 +382,7 @@ connection //Handle diconnection and reconnection of zones. if(zone_A && zone_B) DisconnectZones(zone_A, zone_B) - ConnectZones(A.zone, B.zone, indirect) + ConnectZones(A.zone, B.zone, indirect) #undef CONNECTION_DIRECT From 516c2697cde1e9c56fcd281ccc674d2ea9c1bfbd Mon Sep 17 00:00:00 2001 From: Kilakk Date: Wed, 19 Jun 2013 19:48:03 -0400 Subject: [PATCH 02/10] Adds auto OOC mute for crew transfer votes --- code/controllers/voting.dm | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index c8336d85f20..f467a879acf 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -10,6 +10,7 @@ datum/controller/vote var/list/voted = list() var/list/voting = list() var/list/current_votes = list() + var/auto_muted = 0 New() if(vote != src) @@ -53,6 +54,14 @@ datum/controller/vote voting.Cut() current_votes.Cut() + if(auto_muted && !ooc_allowed) + auto_muted = 0 + ooc_allowed = !( ooc_allowed ) + world << "The OOC channel has been automatically enabled due to vote cancellation." + log_admin("OOC was toggled automatically due to vote cancellation.") + message_admins("OOC has been toggled on automatically.") + + proc/get_result() //get the highest number of votes var/greatest_votes = 0 @@ -138,6 +147,12 @@ datum/controller/vote if("crew_transfer") if(. == "Initiate Crew Transfer") init_shift_change(null, 1) + if(auto_muted && !ooc_allowed) + auto_muted = 0 + ooc_allowed = !( ooc_allowed ) + world << "The OOC channel has been automatically enabled due to vote end." + log_admin("OOC was toggled automatically due to vote end.") + message_admins("OOC has been toggled on automatically.") if(restart) @@ -210,6 +225,13 @@ datum/controller/vote if(mode == "gamemode" && going) going = 0 world << "Round start has been delayed." + if(mode == "crew_transfer" && ooc_allowed) + auto_muted = 1 + ooc_allowed = !( ooc_allowed ) + world << "The OOC channel has been automatically disabled due to the crew transfer vote." + log_admin("OOC was toggled automatically due to crew_transfer vote.") + message_admins("OOC has been toggled off automatically.") + time_remaining = round(config.vote_period/10) return 1 From 654a83be9d9e6879cc4abe61cc0cb92f12721d46 Mon Sep 17 00:00:00 2001 From: Spamcat Date: Thu, 20 Jun 2013 18:13:18 +0400 Subject: [PATCH 03/10] Quickfix for INFINIMEAT. --- code/game/machinery/iv_drip.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index da6f8f90c89..40f5a3b9593 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -112,7 +112,8 @@ if (B) beaker.reagents.reagent_list |= B - beaker.reagents.update_total() + beaker.reagents.del_reagent("clonexadone") //Fix for infinite meat spawning when taking blood from human + beaker.reagents.update_total() //to an IV drip full of clonex beaker.on_reagent_change() beaker.reagents.handle_reactions() update_icon() From d0267a07d2d8cde85e906249b15f274a4e2816cc Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 21 Jun 2013 06:43:24 -0700 Subject: [PATCH 04/10] Fixes #3106 --- code/game/mecha/mecha_construction_paths.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index d5349ceae69..1063c910156 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -571,6 +571,7 @@ custom_action(step, atom/used_atom, mob/user) user.visible_message("[user] has connected [used_atom] to [holder].", "You connect [used_atom] to [holder]") holder.overlays += used_atom.icon_state+"+o" + user.drop_item() del used_atom return 1 From afece7e56edc271c12fda348a5d275e2753eede8 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 21 Jun 2013 15:07:31 -0700 Subject: [PATCH 05/10] Fixes #3118 --- code/game/objects/storage/coat.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/game/objects/storage/coat.dm b/code/game/objects/storage/coat.dm index c01a3087105..e5151ae5ded 100644 --- a/code/game/objects/storage/coat.dm +++ b/code/game/objects/storage/coat.dm @@ -211,8 +211,14 @@ orient2hud() return -/obj/item/weapon/storage/emp_act(severity) +/obj/item/clothing/suit/emp_act(severity) if(!istype(src.loc, /mob/living)) for(var/obj/O in contents) O.emp_act(severity) - ..() \ No newline at end of file + ..() + +/obj/item/clothing/suit/hear_talk(mob/M, var/msg) + for (var/atom/A in src) + if(istype(A,/obj/)) + var/obj/O = A + O.hear_talk(M, msg) \ No newline at end of file From d1e80194e3b3c639af5a02a51294a08024c4894c Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 21 Jun 2013 15:22:04 -0700 Subject: [PATCH 06/10] Fixes #2921 --- icons/mob/human_races/r_def_lizard.dmi | Bin 2318 -> 2315 bytes icons/mob/human_races/r_lizard.dmi | Bin 5673 -> 5665 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/human_races/r_def_lizard.dmi b/icons/mob/human_races/r_def_lizard.dmi index 6d7f8128ce368e9965b16f02040c039cf8d96798..ccb9736ddff9214b547fb864766ad2387ea9d763 100644 GIT binary patch delta 1947 zcmZXUdpy$%AIG;DLqrM_$B|c@0AUiTdZS)%$S%CeN9c8yYM8QV`RcO`PV(d0^VkzJ!}+`5`zxe&?s~>N~Ng#KyarM*_3Bl9^1ciernRD z=VLdH)SO6!^o=XhUb-7nRdkjMc<&9nF zaj(W!>clr!hL};HW~2*Ms_oga*?VU4G5ZH+GyQAp!?3^f9sCRPzl~B#o0wRB8Pnl7 zq_mUFa5mWiMDqggh=*8tiEW^sTzP+medbGF0ngCNr2O_()n5ljPuul>Vns%{9`N<* zr3QtzAo0M}b7Vx7mrIE#IV^_r(CKd!64cD{^h_wEDmYYXVc9Zcj0^UMHwbxe5{{N3 z8pffQXX9!S(;`jV{Zk46i&wCF{%v>=|4v=B;l84Ei+_!UPIHDJeVsqv_S~h=rfE#@ z?-J&(FPT@kbTs&ZV@MS5I{Ej0@6DuGaJ8*XT^043q4-6>gB7MH_er9IuCbft?mOT4EN#*MTMqkrbb4( zsj2JMpKtoD;`O^UAb-mR0`&}h%BrzOx&H2%fk|CbmVy*E(lGv}>jR!(w^36qbp`M@ zb^f@syYKfe1!EqN>!CJx&+-Yt(_tWufcxt^oG<9z(Wd1 ze~`E;M)widj>;Q5!Ek9#OXhYZnP>8zN1@-;)H(YGE)>wuZx%F%#hDlL!xEq=SL*dW zymt0-s{Pj9zm46ri`itJho(gBj1;A(!=j4z@XT7?!J{l33_6Qif=SW$+Tc-E>0{Y8 z)4E++gkJu1u|O*&aOYyIJ&^p*3cT&5Wz)cBZJL(2klBM`T!9}ym@`<+m=uM0AL(R| zPsGF=BK|6w@|NZ>QMP17?%Dz~Y+E2ezWVN~_o~-oi*mDPOeEVS|I_cJRd6n$gt3Q4 z8CcE{bSG*r&{SN2*67Uz`R#9RV5f;!wi{b4)5OaI|k5$Ya}LA#v-& z9n4*tB;&Ew#j)w*VvKjU(yDugv){Z%`0~8Q;63*b1+S9SA<%RkgT-P~EXTa9UvWNC%)!yAyfy~3WdiE z15dKiFg*lYcT>gk$UBBc<45x{*9#}W8R*infQ6I8*A(%W+OUe?i}iTA*C6LjfW06H zF00zi<`w~m!Kaqk-3y-0nkpvqfZANvDxA``>tY?Se}Q=?i~TG>fezDu^+YdqrS&So zKtvDJ>hXLB`~Poj(_N<^GEeoF&RsEZSRHpTM)N(J19#QPTzQR3%0;jRnu|Dtm~z)| zqsCu_E4s%~8_Inte6kc%i{=d2o#s|@8uh@+qSfyJfgX@9DAq`pF0Dw}TV?HS7mYWlHPAy%M0lTaJNbe}&Hk!*wL8Uk1 V@@i)E+y6MDxBCgV2G{WG{{{kfo=N}! delta 1950 zcmZXSc~sJg7RLcaa+xeGK}~VPeaj`AFAl*`rTW7!nY&1TUQ@y-{gR<(#l4D5Iqtj~ zrqE)%w#v428Y5FgFLA&+=6MM7Mo#5zk?8~kUUl6I)vum{xLLX=qdi5)6)bQbDeJNc~H z+FC+<$Lc!aiwd4enqaa>3R0mbh!!y#{K_sDW``!5MLHaBX`qy(*Dm!tO_a6%o&DPa z-wN=x+Ir3f-Y!2_AaOmHdO+4qQZV$ETw<9+kb4*8J#oSb#6CIr)^X2asp^FeOsaLJ;SE9^|3_^ax*AbG9r3)?u^jSWpZ|1-llA_0 zO`=#cgCoPyfB;?x05NE?=Q)3xxTroR2OJjDkf#x+yeoa-9Bx){ zQ0|hZ>tapNy53Q?k6p&jV+ZK0v!;c&KEC!w!?q``4PI`O8l%kjZIcWkzbT(jr4>?! zVkI=ZddF^G{E+2l(}6h?526;Qg(oQ!ha!`GH}bqmwz{aZRexpiutv3tK+X}HI{ScW zCCP_9x+s)thCG1C$LVgj945m4_g4FRa)LK|#}I1juQZ=Gck>*sQZo5H&AP?C?`uJ3 z;l;TFnV>!Ac-6`pZTQ9HPa5FUwA&sQ+$3~IKjIi_@}>?=&GP#8u%%Y9ucZE%!%EaT z(6#7NRq`#uo$4c8O?MOvy{Oh`8bYpDkY0Bk!7bajQh9KDb;ig@OQ+}A$f#@b{txm3 zx7bQSnPb>L^Q3M9jP`ax8C?)!mCksS8u4;&uHyL1oVc4mN9MMcs1&YhM;#?9#=wJ@ zKTuDZFV4(a1;0k@(ixcG=m$hY;N>)p&5cy3R=HrC5bXSu$V?IOvBud;uUE13fgNmK zUr&J@`P9#3MNsyp>+KTJTruo-0(cgSJ{O5pU4@@vVhF3JD<0b>4Y`u62Yz!dlEr{x zX%94l7G;>+mRb5FTypIQjTpKWEk|)2pMYv}eb-ql;;TIeLy~lz*#l<=} zxY;YoP`FkJ^r^|s2F&KgBDM~)1EYAJY!^j_lBWDgOD>lNRiKWFDnGTwLP_@};mi=B zlc2zN^;I(~0O*;8CyxWgTqKH&7)Lg&;tpxY zLrv%HXc;aeL{&ds50 zj_EnJr7|m};w|JsGiN$aVY;v)LA%n|X`3&W-&FZB9Co%bq@`^!uC0?|Ry|q_h=r~1 z?d?RMEAV}XcXz@BTAa1gO?dfD-=J>GU}${VZ|pnQxB~Q#ce(eGj0u{p2hO;^R{|g} zCE6_~@APjlmc;fSyj;Ik9c{V1u}gWvAntnKy>1XOv>@T!5rq{eZ-v=E(JU@2PSM|J zBuFY4x6SsJZF6cu$r0-}IzQ{x?RbFR73o;XtX+$%8i7{?1W19o&1)`N7uLe{?l|Zh z#*L2G&o<^`M6nRTL>n+#5RwSU>S&@6k~Xu@JF_2g7Y8k4JQ&Y_N zB}K9v&F^gceBV`m@Jx?vFDuNKXgFfr!*dyj&*$XMcE^Jy}1#C@-#LP9<7)w-ACev*2 z%q8{DPlUs7CbN0(c~}w^yEl63ZzrcT>j!@D9C znXLoVu^(s`;CPH!l(p&K;{7sw<(;kJUY~8MbX5W=J29w#E;<(Lh>^#fZ~QeK+bpvq XmfjTU4_+{Y@5guA9*?8h1*ZQSgO`gd diff --git a/icons/mob/human_races/r_lizard.dmi b/icons/mob/human_races/r_lizard.dmi index e8fb53fdac06d8237954c77737116b7dc1fece3e..8f8615d44e1c25b5bef94aa49e794f90eb1c8e00 100644 GIT binary patch delta 1704 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 Date: Fri, 21 Jun 2013 15:38:44 -0700 Subject: [PATCH 07/10] Fixes #2421 --- code/modules/mob/living/carbon/carbon.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a0d9749744c..8e92cf653d9 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -380,7 +380,7 @@ u_equip(item) update_icons() - if (istype(usr, /mob/living/carbon/monkey)) //Check if a monkey is throwing. Modify/remove this line as required. + if (istype(usr, /mob/living/carbon)) //Check if a carbon mob is throwing. Modify/remove this line as required. item.loc = src.loc if(src.client) src.client.screen -= item From b4c6fc306f01b4dc69815296b08172f1731ca0d4 Mon Sep 17 00:00:00 2001 From: cib Date: Fri, 21 Jun 2013 10:00:51 +0200 Subject: [PATCH 08/10] Lowered organ max damage across the board. As it was, the only way for organs to be detached was when you were dead. --- code/modules/organs/organ_external.dm | 32 +++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 5e1fba994c7..4f15d7a35de 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -590,8 +590,8 @@ name = "chest" icon_name = "torso" display_name = "chest" - max_damage = 150 - min_broken_damage = 75 + max_damage = 75 + min_broken_damage = 40 body_part = UPPER_TORSO @@ -599,24 +599,24 @@ name = "groin" icon_name = "groin" display_name = "groin" - max_damage = 115 - min_broken_damage = 70 + max_damage = 50 + min_broken_damage = 30 body_part = LOWER_TORSO /datum/organ/external/l_arm name = "l_arm" display_name = "left arm" icon_name = "l_arm" - max_damage = 75 - min_broken_damage = 30 + max_damage = 50 + min_broken_damage = 20 body_part = ARM_LEFT /datum/organ/external/l_leg name = "l_leg" display_name = "left leg" icon_name = "l_leg" - max_damage = 75 - min_broken_damage = 30 + max_damage = 50 + min_broken_damage = 20 body_part = LEG_LEFT icon_position = LEFT @@ -624,16 +624,16 @@ name = "r_arm" display_name = "right arm" icon_name = "r_arm" - max_damage = 75 - min_broken_damage = 30 + max_damage = 50 + min_broken_damage = 20 body_part = ARM_RIGHT /datum/organ/external/r_leg name = "r_leg" display_name = "right leg" icon_name = "r_leg" - max_damage = 75 - min_broken_damage = 30 + max_damage = 50 + min_broken_damage = 20 body_part = LEG_RIGHT icon_position = RIGHT @@ -641,7 +641,7 @@ name = "l_foot" display_name = "left foot" icon_name = "l_foot" - max_damage = 40 + max_damage = 30 min_broken_damage = 15 body_part = FOOT_LEFT icon_position = LEFT @@ -650,7 +650,7 @@ name = "r_foot" display_name = "right foot" icon_name = "r_foot" - max_damage = 40 + max_damage = 30 min_broken_damage = 15 body_part = FOOT_RIGHT icon_position = RIGHT @@ -659,7 +659,7 @@ name = "r_hand" display_name = "right hand" icon_name = "r_hand" - max_damage = 40 + max_damage = 30 min_broken_damage = 15 body_part = HAND_RIGHT @@ -667,7 +667,7 @@ name = "l_hand" display_name = "left hand" icon_name = "l_hand" - max_damage = 40 + max_damage = 30 min_broken_damage = 15 body_part = HAND_LEFT From f38865f0de2d6d3c7ade67ef2436380a53a1a5bf Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 21 Jun 2013 06:01:39 -0700 Subject: [PATCH 09/10] Added a dart gun and sprites. --- code/modules/reagents/syringe_gun.dm | 277 ++++++++++++++++++++++++++- icons/obj/ammo.dmi | Bin 4197 -> 4377 bytes icons/obj/gun.dmi | Bin 36800 -> 38954 bytes 3 files changed, 276 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm index eaa372bd45d..2bb818c3737 100644 --- a/code/modules/reagents/syringe_gun.dm +++ b/code/modules/reagents/syringe_gun.dm @@ -128,4 +128,279 @@ New() var/datum/reagents/R = new/datum/reagents(15) reagents = R - R.my_atom = src \ No newline at end of file + R.my_atom = src + +/obj/item/weapon/dart_cartridge + name = "dart cartridge" + desc = "A rack of hollow darts." + icon = 'icons/obj/ammo.dmi' + icon_state = "darts-5" + item_state = "rcdammo" + opacity = 0 + density = 0 + anchored = 0.0 + origin_tech = "materials=2" + var/darts = 5 + +/obj/item/weapon/dart_cartridge/update_icon() + if(!darts) + icon_state = "darts-0" + else if(darts > 5) + icon_state = "darts-5" + else + icon_state = "darts-[darts]" + return 1 + +/obj/item/weapon/gun/dartgun + name = "dart gun" + desc = "A small gas-powered dartgun, capable of delivering chemical cocktails swiftly across short distances." + icon_state = "dartgun-empty" + + var/list/beakers = list() //All containers inside the gun. + var/list/mixing = list() //Containers being used for mixing. + var/obj/item/weapon/dart_cartridge/cartridge = null //Container of darts. + var/max_beakers = 3 + +/obj/item/weapon/gun/dartgun/update_icon() + + if(!cartridge) + icon_state = "dartgun-empty" + return 1 + + if(!cartridge.darts) + icon_state = "dartgun-0" + else if(cartridge.darts > 5) + icon_state = "dartgun-5" + else + icon_state = "dartgun-[cartridge.darts]" + return 1 + +/obj/item/weapon/gun/dartgun/New() + + if(beakers.len) + return + + // The dartgun has one beaker by default. + var/obj/item/weapon/reagent_containers/glass/beaker/B = new(src) + beakers += B + + ..() + +/obj/item/weapon/gun/dartgun/examine() + set src in view() + update_icon() + ..() + if (!(usr in view(2)) && usr!=src.loc) + return + if (beakers.len) + usr << "\blue [src] contains:" + for(var/obj/item/weapon/reagent_containers/glass/beaker/B in beakers) + if(B.reagents && B.reagents.reagent_list.len) + for(var/datum/reagent/R in B.reagents.reagent_list) + usr << "\blue [R.volume] units of [R.name]" + +/obj/item/weapon/gun/dartgun/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/dart_cartridge)) + + var/obj/item/weapon/dart_cartridge/D = I + + if(!D.darts) + user << "\blue [D] is empty." + return 0 + + if(cartridge) + if(cartridge.darts <= 0) + src.remove_cartridge() + else + user << "\blue There's already a cartridge in [src]." + return 0 + + user.drop_item() + cartridge = D + D.loc = src + user << "\blue You slot [D] into [src]." + update_icon() + return + if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker)) + if(beakers.len >= max_beakers) + user << "\blue [src] already has [max_beakers] beakers in it - another one isn't going to fit!" + return + var/obj/item/weapon/reagent_containers/glass/beaker/B = I + user.drop_item() + B.loc = src + beakers += B + user << "\blue You slot [B] into [src]." + src.updateUsrDialog() + +/obj/item/weapon/gun/dartgun/can_fire() + if(!cartridge) + return 0 + else + return cartridge.darts + +/obj/item/weapon/gun/dartgun/proc/has_selected_beaker_reagents() + return 0 + +/obj/item/weapon/gun/dartgun/proc/remove_cartridge() + if(cartridge) + usr << "\blue You pop the cartridge out of [src]." + var/obj/item/weapon/dart_cartridge/C = cartridge + C.loc = get_turf(src) + C.update_icon() + cartridge = null + src.update_icon() + +/obj/item/weapon/gun/dartgun/proc/get_mixed_syringe() + if (!cartridge) + return 0 + if(!cartridge.darts) + return 0 + + var/obj/item/weapon/reagent_containers/syringe/dart = new(src) + + if(mixing.len) + var/mix_amount = 10/mixing.len + for(var/obj/item/weapon/reagent_containers/glass/beaker/B in mixing) + B.reagents.trans_to(dart,mix_amount) + + return dart + +/obj/item/weapon/gun/dartgun/proc/fire_dart(atom/target, mob/user) + if (locate (/obj/structure/table, src.loc)) + return + else + var/turf/trg = get_turf(target) + var/obj/effect/syringe_gun_dummy/D = new/obj/effect/syringe_gun_dummy(get_turf(src)) + var/obj/item/weapon/reagent_containers/syringe/S = get_mixed_syringe() + if(!S) + user << "\red There are no darts in [src]!" + return + if(!S.reagents) + user << "\red There are no reagents available!" + return + cartridge.darts-- + src.update_icon() + S.reagents.trans_to(D, S.reagents.total_volume) + del(S) + D.icon_state = "syringeproj" + D.name = "syringe" + playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) + + for(var/i=0, i<6, i++) + if(!D) break + if(D.loc == trg) break + step_towards(D,trg) + + if(D) + for(var/mob/living/carbon/M in D.loc) + if(!istype(M,/mob/living/carbon)) continue + if(M == user) continue + //Syringe gun attack logging by Yvarov + var/R + if(D.reagents) + for(var/datum/reagent/A in D.reagents.reagent_list) + R += A.id + " (" + R += num2text(A.volume) + ")," + if (istype(M, /mob)) + M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" + user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" + log_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") + + else + M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])" + log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])") + + if(D.reagents) + D.reagents.trans_to(M, 15) + M << "You feel a slight prick." + + del(D) + break + if(D) + for(var/atom/A in D.loc) + if(A == user) continue + if(A.density) del(D) + + sleep(1) + + if (D) spawn(10) del(D) + + return + +/obj/item/weapon/gun/dartgun/afterattack(obj/target, mob/user , flag) + if(!isturf(target.loc) || target == user) return + ..() + +/obj/item/weapon/gun/dartgun/can_hit(var/mob/living/target as mob, var/mob/living/user as mob) + return 1 + +/obj/item/weapon/gun/dartgun/attack_self(user as mob) + var/dat = "[src] mixing control:

" + + if (beakers.len) + var/i = 1 + for(var/obj/item/weapon/reagent_containers/glass/beaker/B in beakers) + dat += "Beaker [i] contains: " + if(B.reagents && B.reagents.reagent_list.len) + for(var/datum/reagent/R in B.reagents.reagent_list) + dat += "
[R.volume] units of [R.name], " + if (check_beaker_mixing(B)) + dat += text("
Mixing ") + else + dat += text("Not mixing ") + else + dat += "nothing." + dat += " \[Eject\]
" + i++ + else + dat += "There are no beakers inserted!

" + + if(cartridge) + if(cartridge.darts) + dat += "The dart cartridge has [cartridge.darts] shots remaining." + else + dat += "The dart cartridge is empty!" + dat += " \[Eject\]" + + user << browse("[dat]", "window=dartgun_mixing_window") + +/obj/item/weapon/gun/dartgun/proc/check_beaker_mixing(var/obj/item/B) + if(!mixing || !beakers) + return 0 + for(var/obj/item/M in mixing) + if(M == B) + return 1 + return 0 + +/obj/item/weapon/gun/dartgun/Topic(href, href_list) + src.add_fingerprint(usr) + if(href_list["stop_mix"]) + var/index = text2num(href_list["stop_mix"]) + if(index <= beakers.len) + for(var/obj/item/M in mixing) + if(M == beakers[index]) + mixing -= M + break + else if (href_list["mix"]) + var/index = text2num(href_list["mix"]) + if(index <= beakers.len) + mixing += beakers[index] + else if (href_list["eject"]) + var/index = text2num(href_list["eject"]) + if(index <= beakers.len) + if(beakers[index]) + var/obj/item/weapon/reagent_containers/glass/beaker/B = beakers[index] + usr << "You remove [B] from [src]." + mixing -= B + beakers -= B + B.loc = get_turf(src) + else if (href_list["eject_cart"]) + remove_cartridge() + src.updateUsrDialog() + return + +/obj/item/weapon/gun/dartgun/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0) + if(cartridge) + spawn(0) fire_dart(target,user) + else + usr << "\red [src] is empty." \ No newline at end of file diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 8ca8da77f7420d0682d911208c1168cef76d38be..86d6829d138918009a86b1aea4993a634fa05240 100644 GIT binary patch delta 4012 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 delta 3831 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 diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 5a0eab2d2a645f4dbb811a0694909fe7f26305a2..2ad4316d4a05e1d180622d5800197f333a20454f 100644 GIT binary patch delta 20517 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 QPvT+lboFyt=akR{0Lich`2YX_ From a16c8e059552de95666a7307fe2d9736d749edfb Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 21 Jun 2013 18:00:25 -0700 Subject: [PATCH 10/10] Fixes #3081 --- code/game/objects/items/robot/robot_parts.dm | 11 +++++++++++ .../mob/living/carbon/human/human_defense.dm | 11 +++++++++++ code/modules/organs/organ_external.dm | 13 +++++++------ code/modules/surgery/generic.dm | 15 ++++++++++++--- code/modules/surgery/robolimbs.dm | 5 +++++ 5 files changed, 46 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index b3911d7c9f5..d15e17033f7 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -8,6 +8,7 @@ var/construction_time = 100 var/list/construction_cost = list("metal"=20000,"glass"=5000) var/list/part = null + var/sabotaged = 0 //Emagging limbs can have repercussions when installed as prosthetics. /obj/item/robot_parts/l_arm name = "robot left arm" @@ -278,3 +279,13 @@ del(src) return return + +/obj/item/robot_parts/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/card/emag)) + if(sabotaged) + user << "\red [src] is already sabotaged!" + else + user << "\red You slide [W] into the dataport on [src] and short out the safeties." + sabotaged = 1 + return + ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7aa3103f174..e22bbf47467 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -161,6 +161,17 @@ emp_act if((user != src) && check_shields(I.force, "the [I.name]")) return 0 + if(istype(I,/obj/item/weapon/card/emag)) + if(!(affecting.status & ORGAN_ROBOT)) + user << "\red That limb isn't robotic." + return + if(affecting.sabotaged) + user << "\red [src]'s [affecting.display_name] is already sabotaged!" + else + user << "\red You sneakily slide [I] into the dataport on [src]'s [affecting.display_name] and short out the safeties." + affecting.sabotaged = 1 + return + if(I.attack_verb.len) visible_message("\red [src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!") else diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 5e1fba994c7..17f5ea05fb6 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -35,6 +35,7 @@ var/open = 0 var/stage = 0 var/cavity = 0 + var/sabotaged = 0 //If a prosthetic limb is emagged, it will detonate when it fails. var/obj/item/hidden = null var/list/implants = list() @@ -482,8 +483,8 @@ owner.u_equip(owner.shoes) if(organ) destspawn = 1 - //Robotic limbs explode until specified otherwise - if(status & ORGAN_ROBOT && !no_explode) + //Robotic limbs explode if sabotaged. + if(status & ORGAN_ROBOT && !no_explode && sabotaged) owner.visible_message("\red \The [owner]'s [display_name] explodes violently!",\ "\red Your [display_name] explodes!",\ "You hear an explosion followed by a scream!") @@ -494,10 +495,10 @@ spark_system.start() spawn(10) del(spark_system) - else - owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\ - "Your [display_name] goes flying off!",\ - "You hear a terrible sound of ripping tendons and flesh.") + + owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\ + "Your [display_name] goes flying off!",\ + "You hear a terrible sound of ripping tendons and flesh.") //Throw organs around var/lol = pick(cardinal) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 7d7de430bfd..e46bff882d4 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -190,7 +190,16 @@ max_duration = 160 can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - return ..() && target_zone != "chest" && target_zone != "groin" && target_zone != "head" + if (target_zone == "eyes") //there are specific steps for eye surgery + return 0 + if (!hasorgans(target)) + return 0 + var/datum/organ/external/affected = target.get_organ(target_zone) + if (affected == null) + return 0 + if (affected.status & ORGAN_DESTROYED) + return 0 + return target_zone != "chest" && target_zone != "groin" && target_zone != "head" begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/affected = target.get_organ(target_zone) @@ -203,11 +212,11 @@ var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] cuts off [target]'s [affected.display_name] with \the [tool].", \ "\blue You cut off [target]'s [affected.display_name] with \the [tool].") - affected.droplimb(1,1) + affected.droplimb(1,0) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, sawwing through the bone in [target]'s [affected.display_name] with \the [tool]!", \ "\red Your hand slips, sawwing through the bone in [target]'s [affected.display_name] with \the [tool]!") affected.createwound(CUT, 30) - affected.fracture() + affected.fracture() \ No newline at end of file diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm index 9b8f42e4d76..97db2846220 100644 --- a/code/modules/surgery/robolimbs.dm +++ b/code/modules/surgery/robolimbs.dm @@ -144,10 +144,15 @@ "You start attaching [tool] where [target]'s [affected.display_name] used to be.") end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/robot_parts/L = tool var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] has attached [tool] where [target]'s [affected.display_name] used to be.", \ "\blue You have attached [tool] where [target]'s [affected.display_name] used to be.") affected.robotize() + if(L.sabotaged) + affected.sabotaged = 1 + else + affected.sabotaged = 0 target.update_body() target.updatehealth() target.UpdateDamageIcon()