From 362a817d7909bcb9e81eacd446d7de623cdc7d12 Mon Sep 17 00:00:00 2001 From: Markolie Date: Wed, 12 Aug 2015 18:20:53 +0200 Subject: [PATCH] Runtime and bug fixes --- code/game/gamemodes/heist/heist.dm | 2 +- code/game/objects/items.dm | 2 +- code/game/objects/items/weapons/cards_ids.dm | 14 +++++++++--- code/game/objects/objs.dm | 1 + .../admin/verbs/striketeam_syndicate.dm | 2 +- code/modules/admin/verbs/vox_raiders.dm | 4 +--- .../living/carbon/human/species/station.dm | 3 +++ .../mob/living/carbon/human/update_icons.dm | 1 + .../living/simple_animal/revenant/revenant.dm | 2 +- code/modules/nano/interaction/base.dm | 2 +- code/modules/nano/nanomanager.dm | 20 ++++++++++++++++++ .../modules/reagents/newchem/newchem_procs.dm | 2 ++ .../reagent_containers/food/snacks.dm | 2 +- icons/mob/human_races/r_slime.dmi | Bin 6689 -> 4768 bytes 14 files changed, 45 insertions(+), 12 deletions(-) diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 554721ff40e..164ff065758 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -134,7 +134,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' return 0 for(var/obj/stack in cortical_stacks) - if (get_area(stack) != locate(/area/shuttle/vox/station)) + if (get_area(stack.loc) != locate(/area/shuttle/vox/station)) return 0 return 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d5d1705dae5..6e8df50c0e7 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -342,7 +342,7 @@ if(istype(src, /obj/item/clothing/under) || istype(src, /obj/item/clothing/suit)) if(FAT in H.mutations) - testing("[M] TOO FAT TO WEAR [src]!") + //testing("[M] TOO FAT TO WEAR [src]!") if(!(flags & ONESIZEFITSALL)) if(!disable_warning) H << "\red You're too fat to wear the [name]." diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 892a5e3e9f8..6a1565f8b91 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -210,10 +210,18 @@ /obj/item/weapon/card/id/syndicate name = "agent card" - access = list(access_maint_tunnels, access_syndicate, access_external_airlocks) + var/list/initial_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks) origin_tech = "syndicate=3" var/registered_user = null - + +/obj/item/weapon/card/id/syndicate/New() + access = initial_access.Copy() + ..() + +/obj/item/weapon/card/id/syndicate/vox + name = "agent card" + initial_access = list(access_maint_tunnels, access_vox, access_external_airlocks) + /obj/item/weapon/card/id/syndicate/afterattack(var/obj/item/weapon/O as obj, mob/user as mob, proximity) if(!proximity) return @@ -408,7 +416,7 @@ blood_type = initial(blood_type) dna_hash = initial(dna_hash) fingerprint_hash = initial(fingerprint_hash) - access = initial(access) + access = initial_access.Copy() // Initial() doesn't work on lists registered_user = null user << "All information has been deleted from \the [src]." diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 595bd5cad2d..467bceac1b8 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -47,6 +47,7 @@ /obj/Destroy() machines -= src processing_objects -= src + nanomanager.close_uis(src) return ..() /obj/item/proc/is_used_on(obj/O, mob/user) diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index f9ea83e4ba9..3113e58c2be 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -172,7 +172,7 @@ var/global/sent_syndicate_strike_team = 0 W.icon_state = "syndie" W.access = get_all_accesses()//They get full station access because obviously the syndicate has HAAAX, and can make special IDs for their most elite members. W.assignment = "Syndicate Commando" - W.access = get_syndicate_access(W.assignment) + W.access += get_syndicate_access(W.assignment) W.registered_name = real_name equip_to_slot_or_del(W, slot_wear_id) diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm index fc6c410b770..33854109bc4 100644 --- a/code/modules/admin/verbs/vox_raiders.dm +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -52,10 +52,8 @@ var/global/vox_tick = 1 equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(src), slot_back) equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_r_store) - var/obj/item/weapon/card/id/syndicate/W = new(src) + var/obj/item/weapon/card/id/syndicate/vox/W = new(src) W.name = "[real_name]'s Legitimate Human ID Card" - W.icon_state = "id" - W.access = list(access_vox) W.assignment = "Trader" W.registered_name = real_name W.registered_user = src diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index cf8f0204d00..a5729c0f8ac 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -452,6 +452,9 @@ blood_color = "#1F181F" flesh_color = "#AAAAAA" reagent_tag = PROCESS_SYN + + has_organ = list( + ) /datum/species/machine/handle_death(var/mob/living/carbon/human/H) H.emote("deathgasp") diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e0b987a60ba..f7db0be92ab 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -213,6 +213,7 @@ var/global/list/damage_icon_parts = list() if(O.damage_state == "00") continue var/icon/DI var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]" + if(damage_icon_parts[cache_index] == null) DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels diff --git a/code/modules/mob/living/simple_animal/revenant/revenant.dm b/code/modules/mob/living/simple_animal/revenant/revenant.dm index 659a38fda51..bad520aa326 100644 --- a/code/modules/mob/living/simple_animal/revenant/revenant.dm +++ b/code/modules/mob/living/simple_animal/revenant/revenant.dm @@ -216,7 +216,7 @@ ..() /datum/objective/revenant/check_completion() - if(!istype(owner.current, /mob/living/simple_animal/revenant) || !owner.current) + if(!owner || !istype(owner.current, /mob/living/simple_animal/revenant)) return 0 var/mob/living/simple_animal/revenant/R = owner.current if(!R || R.stat == DEAD) diff --git a/code/modules/nano/interaction/base.dm b/code/modules/nano/interaction/base.dm index 401a82cb919..85ac56eeedc 100644 --- a/code/modules/nano/interaction/base.dm +++ b/code/modules/nano/interaction/base.dm @@ -27,7 +27,7 @@ /mob/living/silicon/robot/shared_nano_interaction() . = STATUS_INTERACTIVE - if(cell.charge <= 0) + if(!cell || cell.charge <= 0) return STATUS_CLOSE if(lockcharge) . = STATUS_DISABLED diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index bb73178e94a..fcd2152f561 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -104,6 +104,26 @@ update_count++ return update_count + /** + * Close all /nanoui uis attached to src_object + * + * @param src_object /obj|/mob The obj or mob which the uis are attached to + * + * @return int The number of uis close + */ +/datum/nanomanager/proc/close_uis(src_object) + var/src_object_key = "\ref[src_object]" + if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) + return 0 + + var/close_count = 0 + for (var/ui_key in open_uis[src_object_key]) + for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key]) + if(ui && ui.src_object && ui.user && ui.src_object.nano_host()) + ui.close() + close_count++ + return close_count + /** * Update /nanoui uis belonging to user * diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm index edeed358cf0..5c87c0f0044 100644 --- a/code/modules/reagents/newchem/newchem_procs.dm +++ b/code/modules/reagents/newchem/newchem_procs.dm @@ -17,6 +17,8 @@ datum/reagents/proc/metabolize(var/mob/M) handle_reactions() for(var/A in reagent_list) var/datum/reagent/R = A + if(!istype(R)) + continue if(ishuman(M)) var/mob/living/carbon/human/H = M //Check if this mob's species is set and can process this type of reagent diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 73dd13a1d58..d77edbb6903 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -37,7 +37,7 @@ return /obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone) - if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. + if(reagents && !reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it. user << "\red None of [src] left, oh no!" M.unEquip(src) //so icons update :[ qdel(src) diff --git a/icons/mob/human_races/r_slime.dmi b/icons/mob/human_races/r_slime.dmi index b79a50f7fda1f723edf3834f8e640b275f7b1261..5b30997c6a618d5091d978bc85a3c78d8c5c9a5f 100644 GIT binary patch literal 4768 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 literal 6689 zcmb_hXH-+$w%(yvA%avXM?8v1mm)QwAmR~F5CxjD2fzmdQ@5fL5OrBoe%=j zM5GxY^njFrlu!%^A>?h&xc9zy#=CF4@y2-hk-ams_F8kz{mpNGbME+C#s-{hLTms4 za2j6MGX($$cnSenn81Uz|Az(4V&u8Iw$wrs zuI`!M$4hsbp8k32Y$}f3+)TFkTRmxZ_S^TQ$6{hM3AL$>l%{7T#pEZaBh%Y-Le)KL z!``xRSj$;K4<3Kpjq5qbKyPW0YCu_87Rk-H+aJI{UwBt*l2t-LGU(9JTC)OuF$(=S zCKr9=>l1)`CsAW8Z}1Rd@3kiV#~raNC*?m@^Hf2fU+v6SeDfMr_Cnv~f-lDtxv?pN zuzy4SsXIpHSlNS)-!{79BLF~9*icXRPDu9pw2hCDWe(FOGS73(`O0~JR1h*86SP*F zVcwhR7o@Hwe?|F6R%6d=EFHD@)4k2k&-VfpPCA;O-7e8W-@g0X-H#hCU7>>fH*N}@ zd-`O8{YR=|Tm0ja{4d0PL%v%6~XwLnBfQnLT5sL{eVkM`_RvKd~|elUEKXu{hzm0AvX$NVw#!`P6C;I z=Kx7y^T$YOr?~n%Gn!n5J{xdaM1(38cRbB*Jt4}YxWt_v?qYe%+#Ds%PN7gr2#7&* zu{SQ`B@?~Ay&wM+{{f5mwb?DK>J2Q@Xv{#3l}xM-LsAXvY+wsNuy(D$fxgOXvJNtq zn3yQ{ygUQ5Fbo6iRkQl+N=qi(RI;#igElrcTASz=-2OyKNsvtMN15Iq>bisG=C!M? zUaH8u_sq>FKbBSSFiiVksdbSv%dPAi{e*`~0Dz%UbwyD_3WF3;2oPvfiH)Ys>=mdN z-}wOmHwsPLsOdKfPb8$^-_iv8`BCGZ2Q6%$7yWP4T4Cq` zau^luUVC7Jv8DA>!?Bb0mUodB(&rx8RIW66|7h~2s{$-K9k()bHRghXg8pr(nQf)9eGnGn}%YOT26&W*Qr6y^EEJAaR5eT$T z1Hi<@L=*LZ>~TlxwdSV7x?S;|?MgfB(rq}4&;?+3cXthkGxPNH)VxY!A7dJv85;`; z3JXiXV6^NEAkl~OV(9Sj@LlpM9@Wxf%LFHr$rOC0UH8mP&U$d<>{rz832Q`^g>=!A z%O^-L=u9sQYa<@l?SGQzpsY{UPi7V&EGyiEW?CZAUII+P40>Om?LpSo*T*w%F3~pU z{vZV9T+A$bq-+$3A_CB7Tha;=XC^Ipjs;1_>w2Ta-pPyhE zTUhuzBm5%@H8**^W96`N)1g6*4rr&rgpaW56Y)yxa>ms3oev;`#KTsfKQ3}( zj*5ksa!T?g_NMnwU#*xDm;~sCeBVLgMQ*<9Tlc^$!@jHE zmuI)HvzDc?>73RnvzCo6cgsZD=^5dU(4cX`ts9xm&8**zNoG4V@J;kif8iqx9&t&(4aK=WN(D$h2bHeFEBLR3dN|_yvTrv}>ne6Arx=7&!_UOR5Sz29tvJbw>kQmcCySNH2%EJ)}48oM`fU%4p4D9x-s zsSR#41=Oh$sPp{=^fKqgTEw!;h+{45Car=U%CuE{hHf1X_02FXa zr?N#7oSdAl21Zq?+fNmfD#|M=DiXx@;(&faXp5HSd!v%oP;n2!mieNJ&s1=u1rZu!5?a}-yY`w>y*ik`8Ms>uMke4`2%%a zt~b?~H=v*0;@47^k9&%!mKBK0+JQq=C*f_|Ef6tu07yR{tYs_XiBZGBljGyJv-{6i zG-WLrnNw=@!xK95iS-P^yM-r-j8n~_JOjC~?pYPA9YP$04UGB|XErphA2|d))Mm6C z4t}K5py9+#X1@B+bUxxSWs-8dpfASc7UDPAUFP(nMmB&DvC~Hw)DW7}AUd8#5w2$Q z@^bx%&31632Q;IPG(YX5@PdKeZ0M;z>#L9FblH?zWH=XK)d>@Tzh}$-lFEOfm`yJi;!tAU)aec=j>#S zvT9BZXt$gnPKke-JsbbnJ4K`3>>fxC!|J(a;S2ZCJgoCCfY`{n7*WWJk5j4+%OMUA z>Gkn?8W0#btAY`(e+n`jDzY2}*x+NN_Y57}+4Xy$X_N;ftiuL1dX~OMpEu_F;;cwI zY&tc4aWH5vKT>A=EY@MFF z7vyj&?HQ=#gUqGDooU3PLaqVco@1_ z@F6v%tUk9EXU?56z8v@(HPLDWB)q6bU^#*Gm0k5GkuJMa$^|g8Oovkt?CDa44QpA; z@@D=Hy^iLCs|aCg*kvX_KY7I4NxMkJwMoT$+Uj8fH%r2DAgo@))t1>DjWh4p^r@Au zvEmce{DnLGKbIE6S!UE~|xFC3QNopFeL>sv8Sm{)J7C-?Kxj8XOL< zNG%7U;a+pZAS5lctP*)`;}D>SpIKU1a3fPlSVD6&?T80x0KZ?6u(YTh(5@VJ;OHf% zjt$A?`f$F}NyQcuVfqNqo7)Wvi&v(_N~R~bHGu>U6zAdh{dpfuS!Xa!QDe4dM$F(C<1ttnD^h)ymNduVei=dZa^2B-G3}MIB8zVJE9L6Bp)ZGV#|m z_}~^YWtO-%stE+H_n_st=uO{8CegFPF2t9qoh4S?C^V>;m z^hhZWKJt04s;*LD+qgTnG1ee-Z*Y06;k)JmM#Y?X=W9to%6fgR7Z7)0`e?0rzKjY1 z?@XLJG9RbbDC6C|xP28FK=(+N?1a3uhW%L)CCz8xly|+r$w`*aAhSYTr6B zD+5`%EvCf_)STRDty4i@rNq^8B0s9obcOI7_FCfRIl`)$nE~mNIEX#+iN+a3Q!%b{g@pOlnTNncD=X;@91$QRL#WLiL^sX~SuGcEmznIiodEFlt2CvyyOI7WfU~Op0$%KKKT|2QpW4%)M%)36(7*8wJ)h7-t z`iJg0rT!+a9;KMEh7Iyb{?+qQT1kjgDa!~fy^e^e>gxG$B0pGx)R`3z>lO?x(Vmy=CQOeh7At-p#VK4W9!V;3L)f?{_lMWHO;F78abdB;d;#zcc{_gZ%+g`Mxo7e)aVF{rmUp?XXePSkAW=JmylbBW{J~;Z}Zn z?OB;uRr&9;f-{TeBeeZ$oC5DGmQm=2!toBPSz1!T@YJYN%{#)TfryA5D`)Q{K2hemU z*2qe+xHsZy3`FOwLO+MzS%u{Pn$iEvjDMy0|A&ExS*QFi`d;bCMyQs=MdbT!fYj zF4F3QTV^OuNp2lAm&o1ST@Y9z9l7@H1<)aQKeMQ96@4;3)ep~Fkhjrw_LFb6naKs~ zGcY=!8Ajb{7IN4))SWl7mu1djy?z$;M>VUCUcrA`^4}TskN5kJ$Qd2jasUZWKit$H z1#3*-D-3%K(RoK~5xTT?*dS!S*|bB?0kAc;QM8^Sirg4sS6llMFDeQGykVI|r}F*x z{Xi~ehTgTEhCc(ZTkK9%l>{@7`x%uFybL2b?JW&T(%XXN02uCKqX>h%Hnri$y&7p} zhFsdA|ALdi+Xh1Z)UDha=jdx18#7(^BL5k zgy%u~iASg%1G5Es9c#f;&V5$pL2_*8L%Ac37wF+}UEP2{OnQQ}bdiFPpAXa1^_{## zCty%-Y`-80A|Ly~I!lx{N_42RM;D~>fBNw6!u0oh_kSAk>`glP!i`G``{NJV|e)tt5j(`HCohpLY?lx8Me??HDB1gM1 z633Vq{PLMw=DW)(o&vGuZbD#94CsKjgEB3<=Xx9LqUh8lzcLHab7T-#7v!F~RHlbk zGP;^dEC>4!S3tBgm|v12F5o)#9x&KvK1kQVhH#WcI`)|;vHpdp>z;JnX|R6_4^hkij*7;JsthdT z_AVZH%-$`1Emo(=Qht}c{O-liFJ14HnwuP9Kn(wBT6_n9yVtVq6tzGWaQ-dn+5z{oCccDpMKW)eiA$Xuzr#eNYBXV zL5p?z!}g)_5+n?FaKZ1Hb>gE3M7R3MXL@HI2cfmf&t)rYxGHS3z*P(0SN&=iJCYv( z8=*`y{2hZ>tMaAk^NdMowbraBCk>@dH6ZORwBO=(L4Lu5$|nZqK=YK$K645HKvkg~ zuKQVuVWa|-G#uWsj0(a~8{;%~AP+zO>0=j<$AVjZ%)`@ZV3KY#(YMk&x>vakXOC{e zq$T7tIq1bd6+txv8|48_@dvUkYsxFzbD_s5WdWtyF^z8Jz?ICKDooIZv9(omak9cr7ATQFz%u-K*@! zA+z?gCUt)CGBPr!m^2QmT%s;l&OEtKv!`>1W9rRw>@fq#ap;uB?{a1`+xRgFxSP?} zkeN)`&&uLME(%-Pz~0$sBksz%y^9gk>=82)23@tL0$1cXyz;g}qt2v?1*AVu8-ob^ zOx8hVq!}aG9U5dB+%l={)l>Z3T22UN`M%KcX|R1{;?aj~Y7$BqfImFxlmtu#q~)sG zg>n~Zt>t#jM4yrKvjsAxW_SaeLKL|FhsV_4^81(pDA6^ae>a|{lqP}id;mjzW4($i H_D}u;0@uZL