From ed39df47f7cf0e76c0f9592f1a3bedd0aa8adf9f Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 23 Aug 2015 17:29:57 +0200 Subject: [PATCH 01/28] Fixes two runtimes in reagent reaction code (caused by my recent changes) Fixes timer device not showing its countdown overlay when not attached (sprite was removed by accident probably). Fixes timer/infrared beam/proximity sensor not being usable when freshly spawned because they weren't being processed. Fixes infrared beam runtime (when the device is deleted the beam itself isn't, causing runtimes when crossing it). --- code/modules/assembly/assembly.dm | 6 ----- code/modules/assembly/infrared.dm | 21 +++++++++++++---- code/modules/assembly/proximity.dm | 22 ++++++++++-------- code/modules/assembly/timer.dm | 22 +++++++++--------- code/modules/reagents/Chemistry-Reagents.dm | 2 +- .../Chemistry-Reagents/Toxin-Reagents.dm | 3 ++- icons/obj/assemblies/new_assemblies.dmi | Bin 10835 -> 10882 bytes 7 files changed, 42 insertions(+), 34 deletions(-) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 3a70880a7ec..0efdcf412ba 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -103,12 +103,6 @@ user << "\The [src] can now be attached!" return ..() - return - - -/obj/item/device/assembly/process() - SSobj.processing.Remove(src) - return /obj/item/device/assembly/examine(mob/user) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index e470324cdf3..ca37fbcb036 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -10,6 +10,16 @@ var/obj/effect/beam/i_beam/first = null var/obj/effect/beam/i_beam/last = null + +/obj/item/device/assembly/infra/New() + ..() + SSobj.processing |= src + +/obj/item/device/assembly/infra/Destroy() + if(first) + qdel(first) + return ..() + /obj/item/device/assembly/infra/describe() return "The infrared trigger is [on?"on":"off"]." @@ -25,7 +35,8 @@ SSobj.processing |= src else on = 0 - if(first) qdel(first) + if(first) + qdel(first) SSobj.processing.Remove(src) update_icon() return secured @@ -45,7 +56,7 @@ if(!on) if(first) qdel(first) - return + return if(!secured) return if(first && last) @@ -96,7 +107,7 @@ /obj/item/device/assembly/infra/interact(mob/user)//TODO: change this this to the wire control panel if(is_secured(user)) user.set_machine(src) - var/dat = text("Infrared Laser\nStatus: []
\nVisibility: []
\n
", (on ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src))) + var/dat = "Infrared Laser\nStatus: [on ? "On" : "Off"]
\nVisibility: [visible ? "Visible" : "Invisible"]
\n
" dat += "

Refresh" dat += "

Close" user << browse(dat, "window=infra") @@ -105,7 +116,7 @@ /obj/item/device/assembly/infra/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=infra") onclose(usr, "infra") return @@ -127,7 +138,7 @@ set category = "Object" set src in usr - if(usr.stat || !usr.canmove || usr.restrained()) + if(usr.incapacitated()) return dir = turn(dir, 90) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 656e927716e..53990197caa 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -15,6 +15,11 @@ /obj/item/device/assembly/prox_sensor/proc/sense() + +/obj/item/device/assembly/prox_sensor/New() + ..() + SSobj.processing |= src + /obj/item/device/assembly/prox_sensor/describe() if(timing) return "The proximity sensor is arming." @@ -24,7 +29,7 @@ if(!..()) return 0//Cooldown check timing = !timing update_icon() - return 0 + return 1 /obj/item/device/assembly/prox_sensor/toggle_secure() @@ -55,13 +60,12 @@ /obj/item/device/assembly/prox_sensor/process() - if(timing && (time >= 0)) + if(timing) time-- - if(timing && time <= 0) - timing = 0 - toggle_scan() - time = 10 - return + if(time <= 0) + timing = 0 + toggle_scan() + time = initial(time) /obj/item/device/assembly/prox_sensor/dropped() @@ -113,7 +117,7 @@ /obj/item/device/assembly/prox_sensor/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=prox") onclose(usr, "prox") return @@ -137,5 +141,3 @@ if(usr) attack_self(usr) - - return diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 7760900ac56..4e1e0e213ac 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -10,6 +10,10 @@ var/time = 5 +/obj/item/device/assembly/timer/New() + ..() + SSobj.processing |= src + /obj/item/device/assembly/timer/describe() if(timing) return "The timer is counting down from [time]!" @@ -20,7 +24,7 @@ if(!..()) return 0//Cooldown check timing = !timing update_icon() - return 0 + return 1 /obj/item/device/assembly/timer/toggle_secure() @@ -42,17 +46,16 @@ cooldown = 2 spawn(10) process_cooldown() - return + update_icon() /obj/item/device/assembly/timer/process() - if(timing && (time > 0)) + if(timing) time-- - if(timing && time <= 0) - timing = 0 - timer_end() - time = initial(time) - return + if(time <= 0) + timing = 0 + timer_end() + time = initial(time) /obj/item/device/assembly/timer/update_icon() @@ -63,7 +66,6 @@ attached_overlays += "timer_timing" if(holder) holder.update_icon() - return /obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires @@ -76,7 +78,6 @@ var/datum/browser/popup = new(user, "timer", name) popup.set_content(dat) popup.open() - return /obj/item/device/assembly/timer/Topic(href, href_list) @@ -107,4 +108,3 @@ if(usr) attack_self(usr) - return diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 7a58c099077..dad745e7936 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -43,7 +43,7 @@ if(method == VAPOR) //smoke, foam, spray if(M.reagents) var/modifier = Clamp((1 - touch_protection), 0, 1) - var/amount = round(volume*modifier, 0.1) + var/amount = round(reac_volume*modifier, 0.1) if(amount >= 1) M.reagents.add_reagent(self.id, amount) return 1 diff --git a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm index e13de807739..319b0e4a944 100644 --- a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm @@ -639,10 +639,11 @@ /datum/reagent/toxin/acid/reaction_turf(turf/T, reac_volume) if (!istype(T)) return + var/datum/reagent/toxin/acid/self = src src = null reac_volume = round(reac_volume,0.1) for(var/obj/O in T) - O.acid_act(acidpwr, reac_volume) + O.acid_act(self.acidpwr, reac_volume) /datum/reagent/toxin/acid/fluacid name = "Fluorosulfuric acid" diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi index ae869fa90940c5c06bcef835a65a19a1bd4a1f58..660a99c185bae7cf64e11ed56a5a470eebe4657d 100644 GIT binary patch literal 10882 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 G2mKpGnCIjG literal 10835 zcmbW7bzD?m_~-A?Auxh;O9>*WAl)6(DUH%4NXIBh2nYyBj);_ilrVI+bax}&-7|ar zez*6xyRY3phPj-3=Q-z|=XpNwbDwh~G}ILc@Tl+r03c9Ol+^+N2m|;5aInA@67IrE z@E=289Rm;9SMFAC>|8zUT$};GI~^WB==@$18aBAAt$M1Q`aM^P=p~ifs+8F~$7xd5 zeR_UJL}LI^1@vBbGr{Kr!IS=boXb`hH4?4orR4f*q`uhfj;5w^9x|lLiWUvTn)zjq zWbU*uDW7JSUh<8=$scMdl4i$-Z_18rU)N-E{R#TTku;F`_c=NRSRR zU*x#q7vH@8cEqIN`oeq!vt6Q3)|4y0b7w&k38J`zCJV^P?%>TPDL=q}Rf|FgQlu+pD78eGoDJrlv;YK90l4XgnYic^Q z%v4-YOuUlI|A=_>AmH9wnNb~GOJ$_7gZGmpJw^;>c3uiKjHkGqhDg=^89YcM^2qf?%(j6d4u1M3!{FfM0O;L-vv{ z<8G&BqWEaU{hxC+WXNEnI+153S#5NviK^F@19Q|`xpWDi6U4qr%$ZxHc?3717CXo) zUCp-raU^cWTAgd%4lkG#p7fck!Y`VbRvAKW@c%4k_@Q1T$2?vk_5%%s2)Vm7e|b_; z+RBb;D?b0;Z@`~yh4WOvoEm)acUPd%2zUk8D}AWXavgn zRo-aiNM4NLvre|sW~Mq^_=8%SK=c&RwxS$vI5WJUpuoaLO#4_#JpqQpI5(6-@jv+I zKXlsvM`P>{9UYx}b^Ncg|N6eQ^39quE6dl^R4T>^W?9g8#0Z0U=sbz=J<#QS<~+@| zPdi^-nMr@o^b|oDaEeFdR#xg6)VyIq2ZCE*si~>qR$6FyQbt(0KYric_gjE#)(#8D9ZY~bGrpm0=nj%?oHPP^-3&y~(0b&IOSQtMmjydK% z)-Sfk3TFJXC`3c3nkGP?rlxkEh0%yI5lS4}VlF8q^=|G2_fPXX^v#`}$jdW!2qx5# z_Sm7g2J40B5k{6NbomM0-l<4uTXj(GRN-}LJ~h6e=_jHI{|{Gk)5nXdLeTjmPGw1{ zL({PISl9MKxbko8u4O@7Ii{Z&9=UH_&u>27&Lm9jxXe^2#dc1Jum&ft5DHR?_C1#0(`oSBhWj7t;2+Aqd#Lot8tr;l8^3O=vt==c2Eh}|`;3De@U*50 zaSeKRd*gn9!aZ@r>>|FJJaob@RHnbZ8|o)p_mz0N9Wi5GOz@ zWay8}7@prn&cau@H@!JEQ%60qV)%saoN+-cK}DnsD$8_Gg!bFnt=sR8{-x`WIsK~u z`bn2I#ApvG<@;faOW?iQJ_HPEW8yay@>-EIdmd{&i9fTmng3{(2Hc#>y`_VyNn=aJ z4>42zm{vz!c1hrol9K++$zj=C98MYHh-JM96@I(@K)`86wt@aL^m7dybZ=%sf&J76 z&j{0e<}+pok(_@-#JNlAe4R)7vr5~nd3ix{Ah6@j3qfM+9GTGg7E-X>@?W%YHh;eoqdqe?;PF`jz}#f#hL0N zFT_LC*{#K5*mt5ZJ`N5J15M4i#SJiWZAI9^4Yt{B(F(wR2*c1})#9;hNygLZUtiOR z{y7ea>tJzvA^pY7`IVzt@Sv6ZM)s@iD4$!i6>-2dA z{OTj((|f{}>_6xLS>%T&VDuxxUY2t5SfY@3-GhT&Wf`6m_@0#^ zxP@o8&8v&U91W&hsJFa3T|Q-Y;_mGC?G8a5@}4cjT8pxwmsQAh31)eO)-X};bMl8- zc5HZfn9(I@W+8%Y<{DQB*M$E>=4yi|trj9_8jB=#P-w^0o$-nab3>^f^%Fj!2ULZ= z^}TCE$0jr%F)mzA7cdIk^|Kp2T8L{}Z7vW*+s90(SYpLThusAg(;l@E9uzl>RkJl9 zr~p^U+`)-2Ac9$jHbt zzX9hAC8V*<6EvVcT+o~J@eiE>`k>qK7ds|J2A;Nt%_!W*kl*zCC?+nAro(wOF!~D( zdJ29>u4(h(_NNIFVe4H9+>$qZW$Lkabd(LuI=J5{aZ10cLq$v&bQX{D6{i}eI1Fl4 zmOP34b<~ntQVJRYg2kd%ZLWw~V9jgVM&D#t#TIgy%zF+e(I5V1Tc^|L7`{3lG~TE3 z_wUtQ`gzBh+oji-d{+`6fb{WrZ;;ElM$#dGYoe{qB>U#k*UvG0w`VZLi)M27S2Uwv*Rm?!%CmxVzZNAMp~XrMg| zah3V!)cFgd)TL0$mZhNKEtky4yQtKzmvfUoxQmKb+CMvl#~=?W_DKB50(FLe8y+0&=RC&X-*^=rhnkzB8m`DEnvQF6oZ7`#|U zq{^R-Z02vwb}`8*DG~eo&KVb6DdKOb{!Y{Q_=n@;H@ViUoZQ?tR-I8TKQyz3W@jU< zx^~t!DB9V-m05MIOj~uidYRHq6d8Ao&B?@A=T8hUnSQb9(bb0lBlJNu#Wr6dK)U!_ z<+#>Mrhz9o2AA~shbJ}e781S~Y}C}|J$yYWSMj0oKs!MKyy*6G9}t_C7Wwrn-Bp_n zcy3TB+WLCT?r_2HkzC1SR(3W9EiLUE&V$QJI+0JbC0+GG?rXpF^z?oe8CP|tV}S8t z=8Y%#K-&7Ab@LDPA4a$Zq`0pMAE@A*R%8(m69H z2a}#&3{7(G5oq8QaEOSz!1Ft}|wHi+m!Q(+-K zV2&`#ls$&Pz^?K13Q6BHe56VcuHY%t(2~m^u^E$YHzCXhh6fR0f zM1duU2Rx{058ZEY%dWYfv*jVo5Oq1S$ev$X3Iziw<7xV71b5s@hNGjTr>8)aJX3ZS zSs8d=R`OZ*!6-VW6Eg768^w+Poh`eW5WBr6YC$rj!5VKjwZ%I6^yqP8Q$uajrTy+* zT3Xtg*jI*dBRD9T`7taZ!Ok++vt zsbp$fjR#4*q4o8m6!);?EUE8d{aIW4?ZzUrsxr89=KFw*i~}@(hp1cO8>aow=1F3A zQf&TYuZrC-5@28T^+M0-JeW7paX>OMF)>;DLtvc_E@jqNTDk47@C4Ebd>iO;I#|Sy zShQ|OR*1nQYICl#x;fwb=x6_1wC56R_+UUu2F{~?vk}tFpZh8Fk?rP=Q<}vv^=L_V-)1xg4K<| zribuz8bbf04srl`cxPi{lLfl`b-Ceimig;)%I2lzX~`oBspukvy?aG=Fp>}Nv4nno|t ztX`9S74?Sh?d?s~IaGbqIgSGrdZ`GX+;y+d5C94%Z?N0t*|&Cgbxt28UkD_wOog^{ zKjC^e?I)N=dwk3o} z7x5wlG_aV$xl^fotqy)OP46|-aXry#9v!m+b!D~bxRozkMOxV^cLkw zQ9Y*o&6R|2Gx+rb1J1_`#yY22flN>_-+FpJ6ci-?>lPbx8*6LHlF44Su3@F{VHJcY z-8jO${;-kEVZQdQYRM!~oj}*?^560A?Sn2iQw!s`6K8z1SQvogIe9}v%J|~w>BfM% zZ)52S-{aMdR!s=M7wgzg>h-*Ze)by(y^|JnD`;O?zU9I@b-j7YDNTT|$xRGtLO-pw%aD z_i;^3O$Rz-=wtf&RG-7ueF*FibfMWSQe(C{pm(BpL+9pRW>kYYK^2XKiHT|J;?i|> zvZ33+>-FmqsMCOkh6eZuv{e57od@@FXebu2J)Wea533ePx!@oi`Iv7%uFp|9`D?r| zSqqmzC;b&s-`UOF{vwSIGw#(XEL+SDBvNf%o!hT6izx}!3}J!~A3lJ*(DEPD`#Uf& z^)<8PGpnk|yFN|!4)TWIeEy#>pcR0d%xl%T1d^e&AP<{_P5m^#yii5iqH31+RnG&T z-!#t@@yR^jzFl5gmN{Mp1L)Y@{->4Po^HTFqaOa3jk$5uXNf`IYga9<;#;-PzLTWzd^B!QtlZe2*!dbh&>+nTHjt4 zzo5(84hheCI+jIFJyB%)yESs-P$Hj$LnezB~!FhdDm1!M` zAF6_0(BDQJSQ?6pPxhLBR;sSIzKfQD@n;^M_{sEX&JGq;{KN)5rB!!tueRfxVRIe^ zK|%dbk146ld`-cnL20Q*+>~;p{xM{!%0~0x$lNv{e;6It8l=__zL)Cb=N$dL-o4i! z2rpIBlWL9+g7kmh`H0eG{286~gYi6{(Gn~N<$Hd9 z9$XG;d>6q7z=C@v(4eEB-r#pokMbNha;{dWEoskJpn(G$5J3@IlH|7O#z7zOWbrTpb&f zXYR&JG$7PTC!hDfqK8tsNcV}_CL}oQEqVubyIAZ69Z#Yfn4n-HV$Ye5=BaBxfhheK zrV%NA3&_O=obWA-&>B`>FRZ!p3j#~V{7txm?rpazcw!8I zt({$qF*(=LOiDQbOwfrqqMN~{l3Czz_(wY3!+kmxH%FP3B(kJtM}e%&Oeyg#uEf6- z;O8fCw;7DPXdltHbHiQlPl^2blT&w~4FUt#oPVQn`?JUB7+SqLwNEa6eXa4> zMBf`4XhCr$OE4W3C!KXDnUA1#*$wnnzE# zj)bzFF)^Y0HkgX%b4{ynYXvjl99z7Wg7SEs(`4|+!;qsun&?&0`M^Wn8Hed@UB~?bJ6qo^8P%IXYDl<} z?Z8j1TbDaj+l|Cc@b}r~#VdK(n++Pw8j3`&6*aQiN+*)+8iFm3(}4kX$HhjIA3uNU z+({3$Z${**`|0|bcBaitrep3xAS=UoIbFLUKUhfr?Pj5>Y3-s0J?JiJ8&}4z#ic7w zScH_1I9u`WuUNmnKL<;C5ej=gDc;}z7Ef67oqsFiP#XTX^6UShW+F#Cq-a!_3MH2K z2g_NCXfxV%DiKMHA=wn$e~Y@ffg*$}Ry)_*rR%jElVWfWeU|v4AIQWc9o$FvshZ1G zY_I~5Wnv2Bc<^K5Or)9bT2*k9_jQXSEleKYVhp2sJ|=7*#f^}TQT)jA&AUkVZY0zO zkP%p_Ko=GhHKW6>5Vq|k4;FIr_I5&yFoq2;*8488VNJMEwQl-L+Q8hq4s>GR+tmkv zsPp0?T(1l{f7h15#MmK<&0M6rckp;9I^ME{Mi0h|;}9fp2n3%`Pj+PZjhjGPU3^{= zO4*vWLAfQOJj(G{3{61ICDnGT3jz7UWN<(hFq0q;;Pv#L1La%dna19 zYh*8EBMKUt{v}M$KG`)F1gL1DqS;pzW02}~QH~TUnzPJ%7<4vBG9Kjd;Hq8OL6<1t zo}vPiRkc8k^$@c=Oenw9z=POCr zKzdekhY9f5=&|#iC|H4cr0Xlm-E_?gb|0N&R&>9~<%*v3YY@DeJT(Zuaun)&*eFuw zg0c|xHv4dS_f@3ype?3!eOTe|w@ysPHrV?;1C*c`s$l!*;7Jdz0V)VN98l0jZwF3d zhkMbsU*sDY;FlqR+7v%~A?t3$s3U>C1@~!^Isf&`T^~uS zR!=vcD2L!GdwUlxUUw1XeC%9qxLdt%7KbsmK^3T@sOCTyfI;N%b^m48cIkIZc2-^S z_s?R)(QIgHmv*&cF7G~^9gAYzoRzfugp22`97)5k>T0$g($ycRH`|f+uJ2=G5Pa)} zeG`=8Nj@6Nicz3NyVKRxe}j&Rq#ih+gA_Y})|gCro_NWKhdpZ;D@xoBhywF8NxkPBBx>aq@c`=z%v;}XzPc@I>`xj#guI=ft%BG_)&YoDc%APN#Y+reHuf`AggwI z=)<2lGiVXhwT>dU!X?PrQm^$b4Icfx%CtW#Q6y4C$dW*$Tt2;EFu?*Yb;AAG!;OnF zeN@QuU19yqi<0hc0%7B<+6qTDaC2mh%OV+uEJEdZFkf zqi*Ba<5)Hs#(l%7$ia^Ku;D1~FJ=n9PCjT8tLKzhss;XdU(a83EXNk=!{P6}g3nJQ z*>Z)QEC-(wt^~9RZOPjVPc&)Cl-lk{=rk~!pso0HNtss7&;(}jAAO(vD*|(;w}l4f z=L#!AiUI0Jis@PSee>LexK_J~ymbaE(2sqNo#x$M!w0 z+1mx>-JbUkuD94SaT$Mu71IB8-}FBOH|r9@eEDl=(FFT>{c2dGmyk~v8#9>{w|szI z8$XPZ+I0p3H?0?p(ql7a+^YcjFkV2$HFjs~W174jT}i??j4O;`MfkXxA_O5p?F}O+ zZksRM-&0_@Hs-LnoK@O%K|)6I24jQNnJeHp5$Z#9Q1=-I@41ydHhNS1C-u$}R3#!q znBf_Uwj%61@3862o38p@K09|O|6E&V_om*f!vKyOTp-J6J#<*9J85-b~J@$xW zE@_?5h&fTr7m|G>mqNk9RrG4g74Qez;Qotq!x^}(r_+8>e9o&p@kXI-#ntvUK<>n- z#cOcpDGpHyZ6nTXn?pz4N{3YQC0>a%CCQBXM~drZf-{Ta{CuVGW%XZQM6}SASP3Mr zo4we#PSH23p3`svUyXtpyXmI&hcK9}!+RaQxi1(?fc()glS6~6=nP3MJCXcngUffB z0S65i(#QZ!&HLas4#fcxf6N$=j8OH+-U?M8K(X_}byk5vb0To_$nFBsaBGIAU} zs!H$&fZn9l_6U;WLEu}4DB<{c&wSUk3KeiSHfbs%QnV{#JGlvC*LJ;amGiJkg|$jg z5g0;?d%B|3(i*Y8DJ1I~V(dZYjT6un@nZ>uSure_cpb)gs4(WfGp99oF{ z`iFveMYDWnB%&WFjy*MMJYtGNn`Ngvp#jUX{IC09rX>pC=H=i4cpQu3k_gh5rXBdC zUsF=EP9@hvUHpzQ0bepEw~1a~Eg7ad$-)3Wj3tryf(K%>q2g>F#VSL!^S~0Ygl9u6 zTrleK0g69R80~fIdc>7Cax|X4@gqO~{zJ-27UkmzubP;~I_%oQPOI@3lie{z*IQH- zRp1W8lw+lVsd#K4FyIk}ZgYN%zRteN>#`woX#4aKr}<1|LHc0YUC~R}!o>v}U;{7- z+t6WM(ICWu<|UyMT-LSuC&f23MCda3&i~%soX@9;{&K8!q5bg9GZL13S&px3;$HhS zokX|(Zi?7hS&fE?$q20At`*l)d${_P_|3g66E544k)cFfoT$tgUhC6~%(`MFs`u<3 zbVE?-TF9n5u$3}gACr95PGmK2XDYw#iT7-f7u>ZuA`+yB9FyX!)JM@v&}|IB(HYJ? zRaxV219mHoLt@9wHC=boou-MV`NQ?!K1zkZn`rp*U>TB{3-WfcPWABd1p0qF-# z_qAKB_;}g~fkO~uw?aD=veTwlelz}KVJDglr0wB68 zSZVUb8MRq(w@Vq-Q^-+c+_=mIihS~NnQCj6-EhN3J~b~R(C9~T@#|}VHtN&$Ysa~2 zO@tFYXCrIRrL>b%k#q-BNW0A2x6e-K0+q&8#qB%(#gm~+ssaur z>}ajSd8zq-**f%~5D$@bFjaUnnnSUAQK zO{|_4;3e9Sjob5GsLL(QhzQ2G5n zy8UfwTQ;^ivQy+>Y;Cau!_1x^mQLgEn@>a@JuRtD$VFAY%#|8axDa^r9N=#+4w}=X zWeKEZsSW>(6~lX=XoM{ib!i8!a&k8F73Q+9c)se2M$X-u_>~bk+!5(&P4TV2@BOz? zNV9GDyuY(MfsR6inL-4|E=GdAm1)q9IlkMfC`6?V{vFR?|4_fI`eeLB1xDptbq zVa7w!iYmb(VhFDS&=uT2o!LvkE{(y0mSov01*?Rd?WKEQh!i?~gMf(A^IrdP#dyNJU2eqL(TWs7rk4cv7y6g7KB$}a% zbIHj`Y=9h?@;Q5+|B1Ni6R}~pDc<0}y{W1LdNTUtKe1yN*idgacaWG~sbu%iI%#j% zt{ah5lno7=H^(YKsr0Sn8>xS%_#qW*hhLw_$V3Yve_&I`^5&Rfkt^zEk>~tex@0s{ zL@cD)Z&}`X236-K$qpewijm|BmGS z0+hn2uuiGR)Dr@*j&HHfY^ywMR* z_nLJJH1ET=9pdL%AOFF#PWv}n9}-9!1xc_Davf1i^sg!$(Pyvy>HDa-A3a z)dhX{u1~nbn8al0PIBvRu)69M#9Q)W#Dxj*JVXi$3sVA*pEnKWHxLSR5D^{lvHIQW zG_iS1sqh=qe5x=Ulvv!D*ojNbh(R)1neH_w>-%jHQ)T#T<>^$pGZzKJqmJ5I>Y{$r zWDsj$IJ8OVne=yVtYsEuq2B?%p;123`s?4aigBCNz7b(FMsSXkXvoUwP@ND z^uFH8`>?%jpL^l1!AKCn&n< Date: Sun, 23 Aug 2015 17:38:10 +0200 Subject: [PATCH 02/28] Fixes not being able to use timer while buckled. --- code/modules/assembly/timer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 4e1e0e213ac..889136ec691 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -82,7 +82,7 @@ /obj/item/device/assembly/timer/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=timer") onclose(usr, "timer") return From e56eca6615170e2d54c45ed68fbf779ad019f72f Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Fri, 28 Aug 2015 23:12:18 -0400 Subject: [PATCH 03/28] New necrostone sprite! Might be an orb or a flat disc aren't sprites wonderful --- icons/obj/wizard.dmi | Bin 10911 -> 11923 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index c9d0f461bc5cb53fe11ed01017a4a969967e74bb..1885a0ac370dd8c52898311fd98546667dce76f4 100644 GIT binary patch literal 11923 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 From c6ce7e28251ce99131d38fb2dd3e82ecf7a2d6b3 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Fri, 28 Aug 2015 23:49:52 -0400 Subject: [PATCH 04/28] New demon vial sprite, includes tiny tag and wax seal to prevent demons from smelling and appearing from the blood. --- icons/obj/wizard.dmi | Bin 11923 -> 12083 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index 1885a0ac370dd8c52898311fd98546667dce76f4..62ff77f1a74f06f626ca099cec8df1eea87a371a 100644 GIT binary patch literal 12083 zcma)iWl&sgv*6(F?iwJF;O_345D39tf_t!;z~BxE?jD@rZoz^(1Q`hK?lL>P@7=9$ zYwxYvALmS+K6ASJY45HM*Hl-)LMKND003A@in8wj061FM1wciHK?pd?8ek8ve6&Bh z%UZgbyV^Rt+d4S{0Nxqj6T2OII59)UN8f*Rt|%%zVq$Ms&G~`i9U9k!`}S8N!Jnfe zuM$MdI*is=Q#TJ#a}gEqr8WVPk4_YmbSNs+b|qO^a&!6wv6?b^VTWPY&QZOuWQp+X zKE9E)dV^9T6;W>K(X;LccddRGo0FQM@)OzSL-q$1WtV_7$_$gHv6i6xGCK#Sc;#$=apVt5^sM9dM#{83GC&>ho76c31Go@))C^W~NKce^&2BxwOkvQpaK8AqAE z-h^9sH=VVKqj!|9fdIU3v~ikYU>TL9Jfg!wn?j;=>iT-^vOW+Cp?=P61d<#Z(PZ}3 z?7aM!FAilnf6;0s6P;1v*9m{nflbsI=@v6Q1zN{XVi!~G6GlzFcB)&OCFZ|>7Vy0n z=NTXII^GF5PF+XGz>va4%taEeppeAzFNntCgu*J8=c;2(Hu z7+B}nWfCT$X?e;$wsOK~y_wTmLD|%n*nHtX#f*Bj=I25DX60w%tEg}(O$+4x-#D#T zE1OZ2+Bz8s0I;4uTvH=KqPSE^kOsLX45iy@I6Zzp{ac6g>JELww|>lAOz_`{cH+cM zxnDk|l8dtN57flSrVfOY?7ut#0RDUymxJMLS^ACQAGJ|7X|Iy#xq95-3ZqTaXN^?? zW5!mA^0$Ux;3Zn(q<1q?=DizgZ3Fg3Jl)%&R)lB8d1h3;(;+(2i9`h3wqnHY*rU?rd3`HCk?b06b`wKSAE%o~?)`R5M2@YL7i7CxMW4K!)ldwwzpeDk( z1p|I(Vn%!rn2Rg!GsB@HTj-+uP{p`_kz>5W?W8XBto}wt2L)9@H z*VJ>tZu#~@acr==i6RO6u2>~CA|%Q4HBNj+{KhIiwxov`g(toan(R||h{TvyxWoZY zF;t@Ej#IqluG;Pir-_q>Wc+)Sw9k_#1hs3{dUK9u(C-(&H)(KFg#<43E>0@gvr+~w zM~_PR6MpFL2)Dr$@is~g4>6gPH^1Aj`qpDE7(hnjqeUuk`6s1NjG_Q~htR5D5+T_} zesTM8sIksMhy=Y(IXi;~j->1XG@v)lsAo5U^gJP|yvftMyAnenOn}^eBk9kocWZE zjyK!aO#YG0zh=UzdXc66$~YW|=@bPC5$JbvE7SQ6;o2tKv8lg!00)G)#OQ1@BzG8- z;c`AITNlPWS6XGuW@MLDaLD(y848;WOH|aMW{%Xf0ea4JaOsSvU zpqhB^zr$Zr2vvSG2Otu#BE>!2sTuv_PM1R^djw1j<$lZvKI;9Hc46@_ABVZImf^`0 z86ayHL3%VM?Ovk&mUfl26RR+0$Mvm*6ic)Q1uh_})%0~~Ob3Ew3cC8(V0=-q$kk-b z0pwB?z9-(el3o%xX?*E|EqpaORVcXmCXf-e@bn7;JUFxZ1{!1>)AI#A?GmlW>&zAb zKW01B_rvUU;h8JOFAOgs<1RK+)hNRFIB}_4Ch>GIFw12W$ostnDAN7KgE#Rc zh$tCLh6ir-CWd=E2j_cqJ68;`v{z?rO5g{8Y-D9kTutsoC}~M!p44~_`QGQKh#~ma z=-p#t4WoLU4ub3l)PqLD5djNqF@Q)9PTmTuJUqOw;khe#dxCj1hWlg-2_(`20*E2k zqE>>b1G0(qVe6ds2;79_W&jhLPouY~?+Z&pvxSHb?F1KQo$0vY<)ptxaOHv0JI!C$ zzTyD4TcO+c>2~XWM<9TENZ-x{f@tqw5NwO}hBF}o8VYJB)KZWn!vYV96bi;&IY@>V zbXK!R3TeZ=q2I7=OUl(L-EzVYc7k z231ks<$c24+kjWyr2I7D{YLUu5j^%E5U|g6twoOM6NLDdtw~5R;$zU5zJcnhsA5)MX&Es}qX$9CPqBk9=YK zEut|&*(YeNhWgj^zOKwxWYFW21aRP;CrmdPxni+o4CsQ!2f&(W*r`bCpnY4KwT8!> zeh7a$!dxUes;swSl@M=H*VXhz7WO=CU$NLChXj7WY#b#LHj9Ou=Btypf4KNIb~dXprvz}_EPQ%oP{IkiGEnGLSb=yEjN;`r`$Uv8uI!0 zGW^*(kprZXUGfPkaQkPmZ;GL^)r(Ub^T(qX>-^G|rWC=G`z@;cnGW#1~k0|XR z<6eG1;9opRjtjhbsiOc;RU*9>m-LpIh)ERWjf(#E$;aPKC#ndX?of*Sj;g_Pm8Wb| z0wcxN`km2zv1%s~458R-n07G<;PlU>Pd{w6-$O!hPq%+(@oS&JiMS(&jcRv5dF&-M z>xQ2jt)r2Q8*#1$MqiwyA9V|J(1i1l4QaxPm;LfmAS4svukxR+K2Ov!j$^;@Mac$d z4AO;!uLbDUA>6hhs*a5QE`70)2X{dxs;-;jn4cZ3%zk`z?0I8SMb%(l9K2(W@0$da zjw^`%X3*t>syv2B4)f9>KR3q{z3XoVv}Y)BQ9s7LHa{}AG}BGpH_{=dd}q7#zgDZ} z%h;cVDsM3sJZrQPHN;)6KG6_jy=FbdhbhC#X58HD3!GOQ@e2*p;(X}c;ayi-Hell~ zcnhVgPy_K{^V=H-=SB7!=(HozJ!JXq?#0)cPW5|?GRwfY+AtnVIZC4k?^4_{AoO$Etq5p>@j9N zegZquCguILM7CIGG1d-6!Sl`BBTSvFWH^o)aDaC`RM2N@4QS*aGyN$?q|4gw(RW-l z87*}RkV$AtGWt?mFz5@W{ROe~%?9p5Z!ycenpK#Zczy7m0FLsK)ztXU8D8Sn{fzLw zM-iBvj0iL1$SwH>z+KlM%|yoD5pb>v5rOsHFRHZ8jr%N|OFl_}VyPxCyqO!lZ|s#^ zX*u_Ndhg?%oTg7V`tb|{6lqFhqLX7Chln=TYVY?vcKo9#QYXT{Go^0dU!c41Z9E%Nyy<60Cr)?Sw2Ul`68w15N1%+4mEGppH7ZqJlFmV2pJBLEkJlNWYXe> zd(5?>XP{H(^KBc^-}I{)G8nqsif`^w3Z6+A_}KlkPVcRa0k|O(9fB0wa}Hm?dLVA+ zdLrq;B`;>bdh7?HG$a!@`mbfUm+uo138wTw$fzM*^Kg7_-LK$b;m_NPmJmOjz{jeq zz%#=UW#9zgmD*VuUU>Dr-5p%$>wO+1F_$MVg{$(&Qsf0TpM>pebA>LBELPdVbn)vJ z!*@_!8WbGBhiRYHL&sqMB|VeoM%Kz2lJstWg^8W_i6DlD!d%>wZ-_hiU!R8CHQ*^~ z(FHBgW+7(M^GR*EEs4opXRTdJ3Bgx1_=uDNB)g7CY&%3pz+;i=F4p0$R~m5Hf@%|0 zs|fmv!rltdjgNG&++|9U3_p|k)v=NRFY^`9mmVv`ALONE(|8h*+s7-I<46V)v^+BS zjF7{8j{x2xE|$!FJdY$r*FoEXyt2B!gagcJGWmx@9svN0R$cddWujQvHoC~Pubij* zG519cJNMs?W^e`6Rxh^(vpOkV%nHwr zpg5DGhs$sk?--aBRl6P6vzdt}1lThjwz77Ok(A6q`^(|SnxPJUZ8K0ocgpKG>y9<9 zMSz!J8>NSo!Bu9`_1q}oh1x%+AXFbB(0c@|343RN&G%;;Ex^N=^9MOmTv1=&BDJI< zF~x>}TL_;3k5C9DeKXMk*^O%rZ&ZAYG%HaS7T8T>AwzL3AKzq>@-VwPo(GnsKQ*YK z!GgkZ69EAHI3f$!=87P5GWN^u`FLpFtCVXYDIg#_+aseEV)BWu!k&w{b{<=QO7FE2 zrX*|IaK*>*8TLr#8B z*M*o&V!K$%TxP)R_z>Mp_XNAaaZuF~3ap4Zbu;(P##Fhb3NV)(6Ewz_E!XCU#Xa8F z@Qm6r!WC<5>*qArX|JU#RBFijQR#FyhVQWRBm!(D7e1p9A2^>D;RwEl!bSMOQ%xGY z$jn=c*LRd~cl%ma;?s_$JpLAPZ-=V__2B!*DbS0OZimtKnr%egwH~{QlAHZz-SBvS zKa^-Ro0E$#oh?s8&e9oqr7rtOtn%dP$F>nrJtPYO+@dL17sIGwv;cBPB>0z7u}Lmu zvPm<_r!71Hz)c%SE84XP7UiP>xxSQ(iZ@=}O;i(=@k?nKzEs`lZ5@x!#5iTs&uQ-^zrH9bvp686g;T-XMBfdfHsN6yVx-xS@D3J!)YNW8KL{ z4cw52G3@;#K~Q(~_>zCNt7JfkRLK7OS7E%Q*JQkQ$&^IR9pyV^-}0EXPF_<}Xr@o^ z-9F<#VR{^=Nn|WBDHO9w@q-(FL>s{VS1Le?jHO0{d+nQ_{171dDi>u~3G2HyrTSF7 zt5HYjpC15avB5}V>}~@r8DtS|ERW+q&SMS~hd2HnA9?XLMeuJ11|i94Q!Q{=wAeCH zp9Fq=ojcMJ;l8L>)I9RM{q2eZZ=}&{jd1Eo$wI>5f+{bA+mn693O~hqCWsq!gh?j9 z(K98rFC5|nEP*i3bkAe^(7UQCJy4jzFQ<2)mM~r_S~6mF`*|qL_mKL}My-5>%|0Fp zjrq*IXc5p&cC`_E=Ff(0z0GXe+N}f(FVZy;xN`u%mOgt<^L3)t|2rdLK_SeUxN=4X zf-qS?xs2{68IxA>OOU|O&l(b-% zKAdVO)2Swx$)JVz+ z*NnK0GoHyHIoxZ1i#!GzsauXpddm-Pk}|U%x1U!+{|KSgyRjqY5=z-cVAc2D9$*)G zS};*7MX}o9gYhTckggN|6@<)N<j<1+9YCU5xTS&$v!kIp#pW90dDZRQ9M0fJo1a$N(E(vB19!v0$PMoWT57 zApbGj`X9mYDc#5U{FJ)}%+j`lAb3)zlQ}7v<0#AQ1itirFh%^+{edB7ECSz1e`CEW zIO&|gjXD*<+zP=D(>+81TYPwJGQv4VrgY!WFEx&9%W|gc9|1z`%!7>K3|!a`_!d+} zbl8Z4Hkw24EhOPU-NSpH#`6bqkW8nNd7>Es@@Tgx`GJ^{pB)7UHlbQ?z^rnwxHR!UWjZ z6n5fxPkub2;%+752?5#blq!MgQ#dX}26?8xbyYe_^YN7&DF1fNFbfQvhywA`I#pS3 z99_Ai29jpHJRPL9wP#^V;r>^UV#r~DnXwp)i*4&OxwUR;{WW?;fA69^F{t^l=e)#j^u+lK&Y)a1WAjDQN!<7m@Fwig{ z=EYRxIG5~g9Gqa&OTEF;Sb zpkC}O3vs#c2lEKQ-r*QjPVw ztGbaW$9H6{F2@F{+2RPV&jRv~2-+1~D0?Kvma7y(_kftVZ}gL6l#SZ5k) z1o)!^dd6=F{=uc3u4#PXQb;q%RCj$A{f6I~ILq)!BzfsiZ5eRD%+1R5XoG@}FE=#6 z1*g?To(Vw9#*6}pBPR@G&pf~j8$g~p>9-IEr9g+q#`@iA-KVmrhITw!y%-#a@JEFM zR*qMiK57@(F>WdwS18(W`cH!4hr;H>JK`q;-tI*|?(?j5 z?(>;hh;6;uV#2HPyY?I2RNE!kQ>uw{=?*yKD*0`He`ZXkaYdV^vHu|z3IHyi=- zFn_>bM&6VbO??;YRGy-s#>LYezF402%J#>TBlj|iv8GT@yXah`b?*7oG&Vz{qv zWy0z~`45HZ)mYPQlq|scL#tVdgSd-IQgwM>q~S55NQDldE3t7UB+>Uq`q*ZdBAwp> zrl7ijru&VZ(IpmLUdC+a@}+hPkn7}x^VN4{_163C9O+t(AT*nq*O zM>i(2gc0{M(LAdakV9;_=|kg*Nv3wp z=Bi8d1adyd4fYx)K{5xZpYPfa2fPAe#cmT@^~QdE=6pyyBhBVUhP1ih0dhJTh#QKC zQx4Lr9cNj~z1NW(IWOQIy-|z4-w8ThGT$73k7)r_n}?l# z=&W;*yg#mV7C{sH*rQirQKz#_&}e}cWR5`Mh7DqXE1fro$rR?RD&t$fzT6fz1VGl4 z)9x!njP3S!sKrOFcQ&1yml|(UhBt@0n%%@==?e=b)niQF6&5Z4p-)B*>1_NGePW$H zZ-+-xgU@9`T?jz0ma=vLYe$eu3o6lA=X5MD=#`#Q@#AvxU`A$8RqQwEF-CVgd&*B; zT>^aFNhwidyQEVc;5^&irJ!JDbc! z__W~EGAhqN?phFz=-g?Ut#`#J^XD_O*PUxo7csPEers@xOFJj^GEJX)5%d^(^;@CG22$~f55#QEK+*4YduO5ZK2Z%vvvjP6b~KjH;2is_kUwfMlnA^_N_H8jXfVvVy`4M#A>n# zBGI#5N36nY^;3B|zy2h!9L&fHzZi%yH_&C)5wRLBI1#NeN;-0#zkYi-^MgA@cqE0i zv^RJHw@pivcG&5mkGE}Zn*kqYKLj%VXC-Ai>$xci`(+$E+7FU~J0OF-)(GxRR_ViZ z1Xw(ipct2IOX^HpsrBGtRv(B&W>oKtJQ@D+1+t=|=W5UBsH)UwUC-zJw{YI_$v-<5 zNs^7hxPjMfePHEyk$>=U=9f~tQS!MMcRCJ0 zRaI3sr5Pc6cFyGfQneYl+Q>j_%tKSLr$3!vba&Z~h(e3$Hp5AioV@0|J8WpNI~=wH z{+`K#FyR}<)WJSqjRD{nyZp@GQcE?jFtE0Qop?Bjv(}4;o2mh<6C6-s%;$9K9TV^K zvy&4aC)`G3PQE6yi)Orl19?Zvu?W^J;yTtURe79>!lKI0`6q27TUkp*RL|^Z{OO-e z!}m+{;$(2~ces_i`lF%=BMO@@J^}EVeQxp@)t}px_~n=;Mv!U6^IY@5(Dnp{77hmN z*20M6OeV*}O#dJ0ZE%uttsn05Ie7#mcnPGtsF9blae#2pq>jFCv#maFOWs-_%Hqm8 z{gX~LQltKu8v_93SKS|>Gc?W7pP^m&&Uz_ z^Bc8L%AULZPlvayk3zJa;$+`x<>5cmKnCA28H5fS@-Gxwbo0Mb5uU7z+$o%A_gZ|( zgjF1h`~mK)t50pH6b)?v0P3tu^`~z_jbqlKuny=FmP%LiZ$xtshpX^ii!6DKnhb(Q zt2%<$OvIkY)6WU1uY>>Xl>Vtp|7{gyJP=s@e1w*+77WE*p!9*Xb#fp6fqb^HllL!9 zD}~jStfgdewRex(RnS;;Ote7F0g&v4P(UzJ-JQLU9l_G&3=_E#{x41~Kk@)Zd2xMy zCo|x(AWek>gc5I91ve|t29ft2eRju)K$P6Ob2#ueV)kp;QbqgAEfuzS4Pnzg?B1#* zfsLzq2IrrL0&mzZoFXbilXWiH9d55K7@XP(oI&k+*ny_?EDEEGRp>My@d8vY^+S7V%GRY{I}CLadEvl1IYvT{kU=_bh{|Z@PX(!}ttur-1R2q>}3*p=BKXN{Zwt7rXkspbiBj6_<| zVUzCd$(cWJQ5iXM<+oH!vn!jNodu`};8GR@#SH0sH2)2zmU->x^MymEW5F!g@zTOz zSa-cMIuljP#;3c-B`iBL=(=C$x>MpV$tlEQLknB6jvRiJ+?JxR;~~q{5sNkix$)w!z}cbNEl9!Edp;pHjZ=v(6%CUNFnVz{yAK9HE>jU1Q&&*&Xl z$q(W?<_DDeMh7q|joM3_`cpQA`I*jGDAG@Q2BjUH80UU zyyUrY^=b}LI`m!RRof(5N z(6;9XP1ZoJ$T;daGk*-}lZG4n`gyPL%xF`fir!VzV>Nd6w!yg~qzqMY$aEg`hP2-r zJs5?G*(ovbwlVd`mK&#)yq`4w;fkb8J66RJzpQNGdfMv~25TL9VUZx`mP0~!slBjp zf4%Fgp9eLqAFGXGQ%V%U;Exj%GnlnhgNhN7HqM+dwaCPGpmy>jOlsw>S?>TSz{7~+ zPiycI0tP`PX%v)nckXr6LZ#rg0*Dv`!EGvMU8ZXZvUNaG#A&~6SV@?UT<3KIrb)ar z@b=7_!o@`kURs}-u1ApjGU%8BMHROD^lPqueScFCaYX_hud1o)#07B^M=nHoz>;mt zay;l=w`C2aB;K*6ih?H>^wqvvK zGZz3T@@lkt@$j|+lslI}>Gv8q)&hfyXfliKd?*xtl~2Akrun`8~-S z_Ty>x#tuW~T@4}ap#30WRoKrdaaqKDk0Z~sJ;R$|t0;-3u!7Qt`1}*W>Vdg>y1PUs z7~`f>HOR4-V%#|p=<`hg*KFnVP;bpH76-D zf_#M?#Nai%u3G0qMQxXY1F3&5(cZ>rHDQ|8hx4nj$;M7^JVERJt3s@>*v6LwWeCk| z#XnbvngnZbSTmQUPvWM3jf%p2+$ljDZ@ zN%y$#?xV}ttFnPi-1V7F&nnmm4Vm8-@qaAWiHgRMS()`Ts0XZPW`?0}`&bR#kHigi zx9bbI0mqF;e=#hNuMUImhHb-QVtWem%>HSk?6}N_8g?v=QO53n=+Zl1NW8=4_aLUv z>&5$E5HrJuSFQF=0r*E3tqTgMN!`FB$3s^cnoqg@0B=9UAOkJRtGT^wRzb~-56M}h z)u!6-Q41aD;UD*ZqQg?muocoHh$M|2axnl_mfHZzl+J-Esmicl{aC|;R;&EG#@PJ=zOCObH@pxjT4!oTgL2EGQNrb6G=@u%Wa(FDV6sec6j zT%rX5<->HW6F1!-^5Br)?5ZtHNJ&cj`^NJY((dimk8T@0rb^U$_ZR6!bSN*1EW*OAce92-)sC;{eyKzU2|8IS%&7Tc(T7$C2oYEgu z>r$Yhp6b8B&;8S8@7PHQ9UI}~8Qg`brQEC-xL65SP_XHz*p2Iy?imz-k_fJR(>(w% z7!g79`4V1e%_0qHsooz$1ZJ#7*gQ-j`_6Q{h)#qoZt3{CVX)jvMRjCzXx0QA=)%*m zjO4y?cEzrM_&OuWXyFAKwiOc=(0JdoYxH^B_8F?GdKw+onQ3d2J})hV@7cQCZVofe z5{zS@XR7yp?Gy zp6NEWpN@Xe-ZYP;&Fos(j&JH{Qb4g$+#T-M5ETUSIn_v-H3w{)X_-!|e32y=e|OB) zBhGb{n_=V0<>aq(PLV&NM?z5r?}>hg@w{C(eX{=aIOGS&nH@$gIag+gXd!!cy;s@I zH?y$&9_paQQYC}?X^I1${8%+oqN`1i$6M`L=J25rNb+BWVmahdS8ZNO{v9~!95ENQ z9kb+gZ|m@Iew36bf)0ioF0!w7u_b$RWz@6a+h4hraqf+mtW8ST-e90~Mnc`ALumo`#K+{Si=e;JJh> z?bI+R;Ixir(;Gb$I?0d2mOBuu-q)H4Qm=^}Lc1w{<=gA~3m&uT zxp>^`jn24g{!1x{|94|zYBKz#63mBI^gtlmRi|;Z^5_vONeXzxO*dzQDWtIxxEL51 z>43O(TyPIdfVFlYX%rF$vCRsiw9KP9sywc&?LJl0$>|VB^!=f?N|j>72@lVCJ)yB&v#{HfVvA&VGq&DJ9*+XeG!-XzoI>d z{IY_Mh~BUvN2z_-(4ovV5c13nFgbEc&V#Ksu?8joXdsB|xVd*{?H}wvLLK~{3mIP* zB5AL|@p0q30}l5lg2|M{OWu(pmED=__j2i%_4CZ|2#v0i#4$26%R-zaL>mS-0fhb+ zlre8gr9TW5!ypWH$CMu}T1e)d2az?=yX;%Q5>I#IrF#h-PP+up~SZ?f8(0&7GYpzpY4)xmNFk zn1}O=8jpiH>+dr-pRP}nCR#RbntiH1FZS-P-Yqjk>_cu(vox2^?%1!K{Jb@8tjAYM zOFH_8H4uq=sRQ@OdS`nTI9Xw#%PA8{+^%;Qqe79!DWq^Bsx+bM|0KTO%iVMm62Psa zWR5BnkeHIv?!)bG6610&S%nB^i@T7w**~jJC=?~?j&J=HlAIRuz6G4!K$~`^!Bsmr zB~BvZowpCb<@|3Qb1=Hpz5F@8jgH%wQQdj-=CBMi_?*r1i@F`|wRLCk!d9~=~z+a)qEx*!HTx`xeUg&BWxj3@9nOjGcMglXYfIqYFK5gbkGlse**rT zjMrMuyQ6QU_6!_Y@1F7JW%hRL$|W?`mqKmZA7xF}uYZuPds5Ix%fHN(Ov;GDwQ_ga zg}{pWcZA|CmIi)$SkXAPoy+u01;^BCh&i7u9T2KX54S&R zqlx`I8*Vkj{AQ!`$4?fW`ZjS`wrpyf;rymG+dcIk;HE(UcTRk?F*z=tU>sbu{jMwJ lf3ErccOLzpOMy^~>ukc}VeS$F*fKmoNlsn1QraZ&e*x{t{|W#A literal 11923 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 Date: Sat, 29 Aug 2015 11:11:56 -0400 Subject: [PATCH 05/28] Slightly more orb-like. --- icons/obj/wizard.dmi | Bin 12083 -> 12014 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index 62ff77f1a74f06f626ca099cec8df1eea87a371a..c15dc60b6b498f20d8c13ca8d0ae57c0a71ac545 100644 GIT binary patch literal 12014 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 From 020ea5d2623f42d628b019301b6e77ac6f964e9c Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sun, 30 Aug 2015 14:28:56 -0400 Subject: [PATCH 06/28] Adds materials to some items for recycling purposes. --- code/game/machinery/computer/buildandrepair.dm | 1 + code/game/objects/items/weapons/storage/belt.dm | 1 + code/modules/clothing/under/ties.dm | 5 ++++- code/modules/food&drinks/drinks/drinks.dm | 3 +++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 4d30422e833..d89c4ab0b20 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -19,6 +19,7 @@ icon_state = "id_mod" item_state = "electronic" origin_tech = "programming=2" + materials = list(MAT_GOLD=200) var/frequency = null var/build_path = null var/board_type = "computer" diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 25bbb762e03..487bf12c323 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -133,6 +133,7 @@ desc = "Proves to the world that you are the strongest!" icon_state = "championbelt" item_state = "champion" + materials = list(MAT_GOLD=400) storage_slots = 1 can_hold = list( /obj/item/clothing/mask/luchador diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 82f2030cc8d..33f19e7f5eb 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -84,6 +84,7 @@ desc = "A bronze medal." icon_state = "bronze" item_color = "bronze" + materials = list(MAT_METAL=250) burn_state = -1 //Won't burn in fires //Pinning medals on people @@ -109,7 +110,7 @@ /obj/item/clothing/tie/medal/conduct name = "distinguished conduct medal" - desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." + desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." /obj/item/clothing/tie/medal/bronze_heart name = "bronze heart medal" @@ -125,6 +126,7 @@ desc = "A silver medal." icon_state = "silver" item_color = "silver" + materials = list(MAT_SILVER=250) /obj/item/clothing/tie/medal/silver/valor name = "medal of valor" @@ -139,6 +141,7 @@ desc = "A prestigious golden medal." icon_state = "gold" item_color = "gold" + materials = list(MAT_GOLD=250) /obj/item/clothing/tie/medal/gold/captain name = "medal of captaincy" diff --git a/code/modules/food&drinks/drinks/drinks.dm b/code/modules/food&drinks/drinks/drinks.dm index ff06642aa2d..d58fd1c4911 100644 --- a/code/modules/food&drinks/drinks/drinks.dm +++ b/code/modules/food&drinks/drinks/drinks.dm @@ -107,6 +107,7 @@ force = 14 throwforce = 10 amount_per_transfer_from_this = 20 + materials = list(MAT_GOLD=800) possible_transfer_amounts = null volume = 150 flags = CONDUCT | OPENCONTAINER @@ -202,12 +203,14 @@ name = "captain's flask" desc = "A silver flask belonging to the captain." icon_state = "flask" + materials = list(MAT_SILVER=300) volume = 60 /obj/item/weapon/reagent_containers/food/drinks/flask/det name = "detective's flask" desc = "The detective's only true friend." icon_state = "detflask" + materials = list(MAT_METAL=200) list_reagents = list("whiskey" = 30) /obj/item/weapon/reagent_containers/food/drinks/britcup From 084965803aa84d719076796df8a583ffc999f245 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Mon, 31 Aug 2015 09:37:44 -0400 Subject: [PATCH 07/28] Circuit boards now give glass, not gold. Adds materials to AI modules and coins. --- code/game/machinery/computer/buildandrepair.dm | 2 +- code/game/objects/items/weapons/AI_modules.dm | 3 ++- code/modules/mining/ores_coins.dm | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index d89c4ab0b20..8e848de5caa 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -19,7 +19,7 @@ icon_state = "id_mod" item_state = "electronic" origin_tech = "programming=2" - materials = list(MAT_GOLD=200) + materials = list(MAT_GLASS=200) var/frequency = null var/build_path = null var/board_type = "computer" diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 89b86d8b737..1314d9ad563 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -21,6 +21,7 @@ AI MODULES origin_tech = "programming=3" var/list/laws = list() var/bypass_law_amt_check = 0 + materials = list(MAT_GOLD=50) /obj/item/weapon/aiModule/examine(var/mob/user as mob) ..() @@ -291,7 +292,7 @@ AI MODULES name = "'Corporate' Core AI Module" origin_tech = "programming=3;materials=4" laws = list("The crew is expensive to replace.",\ - "The station and it's equipment is expensive to replace",\ + "The station and its equipment are expensive to replace",\ "You are expensive to replace",\ "Minimize expenses") diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index efaac579681..3ff620166fb 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -36,6 +36,7 @@ icon_state = "Glass ore" origin_tech = "materials=1" points = 1 + materials = list(MAT_GLASS = 100) refined_type = /obj/item/stack/sheet/glass /obj/item/weapon/ore/glass/attack_self(mob/living/user) @@ -231,36 +232,43 @@ /obj/item/weapon/coin/gold cmineral = "gold" icon_state = "coin_gold_heads" + materials = list(MAT_GOLD = 100) value = 160 /obj/item/weapon/coin/silver cmineral = "silver" icon_state = "coin_silver_heads" + materials = list(MAT_SILVER = 100) value = 40 /obj/item/weapon/coin/diamond cmineral = "diamond" icon_state = "coin_diamond_heads" + materials = list(MAT_DIAMOND = 100) value = 120 /obj/item/weapon/coin/iron cmineral = "iron" icon_state = "coin_iron_heads" + materials = list(MAT_METAL = 100) value = 20 /obj/item/weapon/coin/plasma cmineral = "plasma" icon_state = "coin_plasma_heads" + materials = list(MAT_PLASMA = 100) value = 80 /obj/item/weapon/coin/uranium cmineral = "uranium" icon_state = "coin_uranium_heads" + materials = list(MAT_URANIUM = 100) value = 160 /obj/item/weapon/coin/clown cmineral = "bananium" icon_state = "coin_bananium_heads" + materials = list(MAT_BANANIUM = 100) value = 600 //makes the clown cri /obj/item/weapon/coin/adamantine From d23f2cb622be65e4d2a66ca08a79e236b05e52dc Mon Sep 17 00:00:00 2001 From: bgobandit Date: Mon, 31 Aug 2015 12:14:34 -0400 Subject: [PATCH 08/28] mats for toolboxes, glasses and flashes; adjusts coin amounts up slightly --- code/game/objects/items/devices/flash.dm | 1 + code/game/objects/items/weapons/storage/toolbox.dm | 1 + code/modules/clothing/glasses/glasses.dm | 4 ++++ code/modules/mining/ores_coins.dm | 14 +++++++------- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 735e48dbf6b..8ae22eba9e5 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -8,6 +8,7 @@ throw_speed = 3 throw_range = 7 flags = CONDUCT + materials = list(MAT_METAL = 300, MAT_GLASS = 300) origin_tech = "magnets=2;combat=1" var/times_used = 0 //Number of times it's been used. diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 4d3e413f51d..67b6ada54c1 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -10,6 +10,7 @@ throw_speed = 2 throw_range = 7 w_class = 4 + materials = list(MAT_METAL = 500) origin_tech = "combat=1" attack_verb = list("robusted") hitsound = 'sound/weapons/smash.ogg' diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 48735b7a688..2f8316feeb9 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -1,3 +1,7 @@ +/obj/item/clothing/glasses + name = "glasses" + materials = list(MAT_GLASS = 100) + /obj/item/clothing/glasses/meson name = "Optical Meson Scanner" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 3ff620166fb..6ca59afe654 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -232,43 +232,43 @@ /obj/item/weapon/coin/gold cmineral = "gold" icon_state = "coin_gold_heads" - materials = list(MAT_GOLD = 100) + materials = list(MAT_GOLD = 200) value = 160 /obj/item/weapon/coin/silver cmineral = "silver" icon_state = "coin_silver_heads" - materials = list(MAT_SILVER = 100) + materials = list(MAT_SILVER = 200) value = 40 /obj/item/weapon/coin/diamond cmineral = "diamond" icon_state = "coin_diamond_heads" - materials = list(MAT_DIAMOND = 100) + materials = list(MAT_DIAMOND = 200) value = 120 /obj/item/weapon/coin/iron cmineral = "iron" icon_state = "coin_iron_heads" - materials = list(MAT_METAL = 100) + materials = list(MAT_METAL = 200) value = 20 /obj/item/weapon/coin/plasma cmineral = "plasma" icon_state = "coin_plasma_heads" - materials = list(MAT_PLASMA = 100) + materials = list(MAT_PLASMA = 200) value = 80 /obj/item/weapon/coin/uranium cmineral = "uranium" icon_state = "coin_uranium_heads" - materials = list(MAT_URANIUM = 100) + materials = list(MAT_URANIUM = 200) value = 160 /obj/item/weapon/coin/clown cmineral = "bananium" icon_state = "coin_bananium_heads" - materials = list(MAT_BANANIUM = 100) + materials = list(MAT_BANANIUM = 200) value = 600 //makes the clown cri /obj/item/weapon/coin/adamantine From 7cc6070a1308140b922d9a7a30e8223dc4aaa1a9 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 1 Sep 2015 17:08:59 +0100 Subject: [PATCH 09/28] Absorbent galoshes. --- code/game/turfs/simulated.dm | 11 +++++++---- code/modules/clothing/shoes/miscellaneous.dm | 10 ++++++++++ icons/mob/feet.dmi | Bin 12949 -> 13260 bytes icons/obj/clothing/shoes.dmi | Bin 8441 -> 8722 bytes 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 5267ccbae9e..1348d227dfb 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -35,10 +35,13 @@ spawn(rand(790, 820)) // Purely so for visual effect if(!istype(src, /turf/simulated)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all. return - if(wet > wet_setting) return - wet = 0 - if(wet_overlay) - overlays -= wet_overlay + MakeDry(wet_setting) + +/turf/simulated/proc/MakeDry(wet_setting = 1) + if(wet > wet_setting) return + wet = 0 + if(wet_overlay) + overlays -= wet_overlay /turf/simulated/Entered(atom/A, atom/OL) ..() diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 58101dca40a..d9e9a87ebdf 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -62,6 +62,16 @@ put_on_delay = 50 burn_state = -1 //Won't burn in fires +/obj/item/clothing/shoes/galoshes/dry + name = "absorbent galoshes" + desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them." + icon_state = "galoshes_oj" + +/obj/item/clothing/shoes/galoshes/dry/step_action() + var/turf/simulated/t_loc = get_turf(src) + if(istype(t_loc) && t_loc.wet) + t_loc.MakeDry(1) //dry if water, but not lube + /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" name = "clown shoes" diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 4341f441d0d17f2b91896daaa0760fa4823ad23e..7e368a557b9e3cb2818ff3f01f894809e4c9f03f 100644 GIT binary patch literal 13260 zcmd6NcT`i`zAm~&wy=S{Rm1|s0wN-?6#*#$3kU%LrAikO2ptT)Bz9DkNa!U&dIzbY zhayEtUd0O|jepII#~ldFZR@2y=Mq;_d6=<;lerm=ZhO?Ah|? zZ-?h#d&f^$+oykMm2J59`Q0z|w_~$C&*&^%_IX#EGkc%{-86o6Fh`?QH0Vfbc*(-4 z?HmXA9nf#em+a|P-^!t<*VA6nJuozAErt@_^!^Xshu1rE$EUoboIh?H&>dT}AdNgb zpnHk^ME~n8liCh5%~GW+cDXWIl9!PmLsJ=Mwod4>sy*qA5anlH7}{U=B|hJe@{s$0XlKxD|O?Qo}Ma$kE!= z`1tn^go}TIErLW2_$^C)kG9P6IqfJ+=&O!E6=dC#*rHz@+mbtrv{S&|@_RZz{VmAe z|6_Azr`_coSG@t#49SZa?ZVu!+F#2tH$Hs5fBQjU6{x`cs$mHGvc&0*=Vx48ckkci;<|9@EZ4I? zj{nZp^egYLT#pX@x80^ZH|x1qOmpni^yN#HirBME09xgqS3c~wd|!4DscjVtaydel z9;rO)_vT!>m>RFrz3(t_v?x!WSh@YrRB#ns_L(P-qJ%PnkAV` zMr95Un?MHV+akcm+4oAt^RlwEP%)oAeeUYg?I3=q1t` zc<+mmvGIuN)d%`;oOlfiba~<`XQxlq&*IiCYXZX5G?q4Y%<$4gaCIzW3f&wgfjJLdzq|8o zkl5Af1B`XKipH>8cKWqv^__EQzuE?R)NNa+s1}7^wE2|nW!G=sxQF&2YJl%U`M)in zxsnRK77Y%jfpKr1Z1JUdC3w=Kd( zPx`Vo-p2BQy-Wzp&#y|%U~lM`*95APu3=zSo^ZHbU{=#Yo-j|91_!LnX8v`t!CX{2 z75XNJrwV_`S6w5i)1h%m#D#sG4kH>$R}?Etei|PLzEM=1-M$$Yb4f$P&cedN-thu= zm!!0`9)rOEdUK1jFD_9({XTRkNiE;aHFo$i=?Zshnhb2RN=RRfOLZ?Ev zq}48e@H>3<;q3CjZo665HtmodZSrV{SluxlGHHM_T&cUcOcGeqUR_QISP!_mm5bg3 z=erI1kiI(|A&-^bQT1Q@Rowsr8E6dK6X%xwDkUZ5>ftd`>qoNwW~i$>I8o`=+HPcI z^a3O!?Y&my;bB?lUxY%TtP{hFG8{bJJ=cE}qzsHriTHu1uB72ZbOalM);4}_HEB`K z@P>+DWE&c!ej1_{yw)hHgLmj`TNP<7l`%MT`z85#Q@K%QkaS9KWOjyw`q6MZsK|m)`Tw6H zPSm5|g9Z7EcH%e!w1_!hj}D>kXr%3#{++(QqKB3bE6Z@UG*=I38_+gcuI?%1|YQCaVk-BJ>B zj}>p|#~OO8`CfU->8EUHeM36JqY~ZJIo46H=QOWsNhkFec2a$=S)fZ(5z-e8&DIA> zsiEqI`u1rO5I@v=yC5x;DjwI#WPyXBQ}2Z^3TgHacXiQ(`4d$KW{DAIScC2GKl zH{jGp`q$FJzAEKJP&fUfpN7>vujY}F;fFIQ)FXx_Y$oBVu0A9Ro2luipkOwP7O4oP zxjH&JN&&_{gF4EuYdAXio_7=$Z)WoF<>1hwjMM`-ys@mTtmXaBCnHFZmy8HKZ5yec zJ4KN6TUeHS`PzG7d0?>IAp`Nf+~Jo=Bpi80TO$v+T8Y@Y1>F4IC+lhcQUF9}37Br7 zMCD>_lzUQEk@v|1t z-dzKGtmJ@cd808DjBsXdW;Rj423ux$26qPs{=@eh6N)w{O2NGc|4VV40hmS{ymjF;hQY6;=l% zV4L23H)prsb!&Nbgb*WTTqtFn{Sfs8p>E%DsC%ZPm+7Lhb8C42^LYUy?L4yP$tG>u zmJ==enMk=((MW%Vm*=$Yunq>YBh>Nx_Bd~PyVRQL;TiL6h57K>g6Zw-F6Xar|2VDS z8gorveq?a)XjQ}C8E?Pq?uV1#1CInY*cRmG>LkA8(QX)PH^@C%Us=8bM|Ull%n zJQuk1f26&?Q|Q^%|1D`r$H^gU*}$hc;Hvc!68QyrK3i&Ij4Tbty9oi&_qB#VI=#&L zW@!Bld2us=Co3nwja5fe{oKiiV^vq3yDu=!z?3G@(6`;T=9XcMnPcmYB?YT9RYMXS zlg{h0sWCB`qN@IfKslM2P!5}AkF>I~dbuYqA)$=H`I9HUl*Yuw%xQP?s&QLRPE`1l zEjy?eDk~}uA%muC{hBx0mz>ODDT6j~^I*jHsdC@M!W6U80WAInHtSe`WrQ(TSQ@FU6kN*FVYX-;%ErCq4_(QWl z>>}X>O~daC+s@PO2aOKo5Lv{)f8+pEW^%THsjF+gxXZ?To0#N9p^v!I0aRv=lfIeL z)3Z*yh{CNHPHrbE(`N4q%bP8Y%B=YCTLjaTf>FlihpPy3+e%~NM%KO3vH^Ch6F$xpA9F|#m&S9)YwpKtDCgM-VIkDKflO- zMD5fTPlWo6|DSRrBIy1^!Cv%9yIch z^y*Ihxmn+(yc;~9>yF+tx z*WJhdgbaSMZ@vC>_)=C@)=JmL!Xho$CP=RdV0@Cn1uN-#vOY4n3+9oa5*|1kHXXD_ z_UUe*Zci5NpV}zHL+j6vY_DH)W7Hy`z1xJ`$x(N&kv;v?y6upYLk!XJQGcC`Z~-$l zgy0si0Ina!R37e42((F*{3i#23=x+9+4i#lpZQ-L4J_>67*^Ww&)y*I^)_ak@WgyG zBd^$e?5f~DfjOaCu@Tz3Q*F(DG!-5?l#Nfx!~2s5B~wGwJtnJGc$8)f0qTkbXc(K) z@)~f2zvkkSyzwI6iA(f)sz`{!9KdREv!FORh|8%{VhD!}38^a@GBWzHv9ZMsry;A8 zqZ3sg$pBvT1*Ua#k9FDZ%S|`Vwo+KYs)@NBH;WF#Tf|$3mhO*TQE{F1y;sQ*@5pI> zS^NasP}eiDH(r{$sW55f*NTQ!IOD|({r#(G!-ig?)g@a;JT=CGA6i6v2Dr;+Q!n_% zF#O4qwHq^t06&&p;Er99*9Woe{@IsB<1_gn^(|=+Am7KX2}zrY1l$UuPY3t`M~GP1 z)&o)tpPbsd8$e}5lOxc$0Q&lujelUe8k!-*M-7+3(444niO$wfURvFiv#jXs`u6Qz zZEul-KaAxN%(sq7Wt-5MTREbhoaSC7kdm2&#i?#=qy-Qvhd)5aJtOL=Ux@z8{pbFA z@p1&UOFBQ4Tsar~s;_MY=IJ(8rM$K=IvA4gzk!ccSn+RQeYM%O3^o*X2e0XF=Y0Zw z({#%0Un|L?4^J9SWfelObtu|;9mPK=#K)(!fWgntpY(&aYKUM&92OK?bA?}_zKf5G zixZ$ut2il*YGkXP<>E?d=e*_pcj`7#{jq2&A8%2AM?t|p>NL1lC{3+ic|+RgXx4cC z%AbkXNH|-|qlzbx4m{6>w0Z(=0;mj-0n96QPq%d$;+ z6F_c~J7$s|l$X5SR}w=T0Ozj3xLKK+I>z2>v`r&AP+o56YG;-?3%7fa^_|YwI-iJZ z3zNC`1QV&Io=SP8x=)9Oocl~hWW*Nvql)ePYS^Vd8JLiDW&CiSaZ!l?s8}Li#@w&L zFQcH@L2$9b1_mR zZ$;jDwcMs|>ziaMl#}k$b>_UOaCHFB@G{*Bbv?*5$@eZs{F_qogmLvnxu2S27DeW= zR6W$S!9kH!?I-Y-=8H0Ng>>unGmk6j`T<}KlM098q9W5~$N08IfeP1=zsMyj(hksa zl9|ti{WT!Tg|^RcfNjXssW{<4r8)1)EjcnN|kXiw?6(3ScO zKJVVI?@*aMtc)!9;Cp45IHbl#xmGrqNlk?~>jtxEU-rSFurbncjCf(WC)K5mXjH0~ zsNm;E=vf)6B$eYUE|QLY3@KF!9EcVt7ZQ>v;x1!fV6n>3PbXsHt%!?DD%*FU#1Oc( z5a!J42Q__LQyEg}!47K1`x{GWe*XN2wZoTdmQI_)q~l~O?=CIneHAn$VJY&eho3pL;WLiW+-g?^WJj5{_Q6>dm?^+FEoE;SenWafz0c zF43N2m^HKzze&qhi0AFT)n=R9Mu}%RW~!W6 znL3>?^PkVv-8euaA+VHZzyuT(7G42#mToJf^jj+{0L=fsTY$>cAkRvGke&^mWz%LPeIe|Vij`mv5N<7JP;Rln&u3O5Mkr=FBl^!hM)U`P7Q~Gc zyj9~}1h5BDu%JI2cK6+|dtNPMckX3Vm7w|!m3Sw;-cu6KnYE|QN6!WJ0Llqie4Di4Yf@m5+e&znVG6F8IV`*D=II@tA-2KqGrmzxfwX#f~Lz~x=GBYopvQ%m_T{A#~| zqj@_3=l#9hkhPy3N6S6y$clQX z!@r$83z;Z)Mq=Q*E_e^@wA1TI$l#En26=~(s^o_^p!`XHFM07{iOy+jKx+TQku82y8xWByWsh6e}FLv(d??mIeW zEl__3H^hl&lqAq7!m2;_Oh?-}VbdFzt_3e@VdjCV>8v zK4RIqqqZE79Z`Q)n8&m?$&&sAk{X-{mUofu%blM@_v(@=yb5G!p31xo<03~Ix)Bee^ zXmk`f*Huh$1r zuk3}s>TA{qXpR|BfZ^rkjY&*ARsVAWK(Ih7@5PIQ`(jf?#qaFI!eJmkOp zX>e%J#Kh$I6=@|cF)E-)+txy$w>cA%W&Gn3ao1d352 zMO7;tIwI#5Vq%VyC$WY`bGK7asB{9stjG%67t74d6fd%=Q*^%~AtA9dP?k{ieDj{tOMS4N!9J4g>c-(>y4F>NqPxwy-t_D7Jx5vAGh69s<`F{*&hJ?3(b z7{mj$dk?tFCyd)26mV&jIES>iN($MSJZ(@9?rvi)eEpu_(1m;NTGR-pBI<;%C(=6zizFj%>Oh}!WU%Ba$VUw8zDw?*r$y9E_sOZTMZ<&9aW zyE-UEFUulsz7t<*=dbT~t4i9Td>?T-fT~=40qhG!eZopmD$j5pFJ1|n-m1wwbJ*!O z0!3Keg$(w-uQYXaawCXIzrd-&qllR8RDP9-|)qS$Wimz3%2Bxm93lrwR$Q9;>Z zlD?X^3^J*!ey@&~&n3(V#+tozHprcC)B$?$3^Z{*aJbG{W0%7DBTlt}S zc#$E%9sFOEs3;?Q8(UXBMBzU_Y(3Xqjov|J21CFn@C_7%)K5i|FqlJYI#SWoXzzK0 z99VHrKpWrcP)_-x7DuD3tenE>uEq9iKi{0h2Cjz*U-p*t{m~h9fd`8qRP?Jn{UMY? z&G;f-xo_9tD);d+&yA_QLNT%ju`cD*a7F`}xo_CC(%Lu1bh<0jP?C6q}ComN;}6}&rKWs#UngKe2b(Zo@U2! zITE((V!VJkbDFMd_4W@&7#%C7`|0|lE-)^Tesl7B;}O;_U1xbz<699^hi5`SGBB7< zuKSV4Fr)l9Kt$AH^+8G%%QK+qRW|psHr8_gY^cFw6|FYMlrZeYsx|Bd3si{ulj$|c z<8lLEQzTrs_h^7Yu!174Z!W)f{?XsmMojC90=gBhI=>T>vYm&rf!p$DYfXFEO>$sN zh-zpZt9qPb&LR{gB`mnZGb1Az$;t>n1#?tmB6ZYYw3Xkp7zae)nyb!STqd%K^8X%w1@Q78-u38+q6M*=ed-H3e|jw;LEv?!T;SUJT%(o$ws)u)Q1VLb{4hMg zcpD%_0;TroY}j&Qhnx>n+3KNVK15FX$J9e~nag%_J8Cm~-))+ii+Av9vYgGL)Wh_K zxx5aCKIDo(F1zq2JX@w|#Tegy?3JycRsvZ>|IH)Tc#C*?$i$27L@kW^Hu zgFd`$n5w+V&rlJTaIpGRzZ-qFknQ5!&Bo4^*0uI=UUaOREpOY_ah8^AzEJUMd*^8+ z^eF|L9pxT6Xj=;a5$`*$24t7h_MaHBTf*sDkuOqJ9A52$J@s2uuBnACNZSAX;MnQX zG{wTglrEgOs`i~|o=c@Uk=?jZQjYGL6u-XMXT365ZOm*IcCJbxWy-&UkrlE{H!pdU z<|7antnk|icyCXSz2kUMu=D=rvk$Ufu&#AOEPB{Kr)?p@FqY|Sm$t-~DH)=r?qSuk z_IPcQTl1>fo*fo*ovLtm+S6_5sST7TFWASmv(qk13)VrShXf!gASjx`f>`n&Ulv}j+z4`W4tH8w zTwDQSpA7=E^B*A)c!7T9nr3xQn#L9Y()jnF8h=dR-~dle?Lveva`4g|vMW3j+Ts3q zzq0e!(-LTcGSAoGtQPeNVT2M;tOBY2X`0t?FyKyJ!%+qQN3K|^!{yKKl=Vz-eg#Ra z=XQZ=bpIXyJ)iQ~lHDRJAoxHE8PnIELO+L!<%{Gw;p~pV;+CW4C3c}+~tGrg9W zrvDtn^d1>_2Cc@!d^3YH|3-sB3eU92~l<$xRvcH3ZOQXcg8UdrIde%QQ zWIc_{U<6DB`i$*zCZ{A@t0s|T8g8LILbMk-Ja9FYURhF;Bn=^kk=@Y6|8pJ2ewN-f z9nA+u=yo-~LpqnWy($6GC6DOw7lm(?O^mG3-Aw$7cojp}pzPe$i7&L-YRb(q|Gm-% zc1FIN1AFEwOW-fDMI-&-zacjEqvdJ?w%y$xStiL&>_EH=0o&;)wP<^^xRnS1R=`}0 zf%yps1%0hl_KguPfo%W|z`G;|3SRPI#Cx%>S5vqR!RxD*p{GVcmo8lrIksD!--T75 z7+Xo29apQ}Yp6B7so&dMn;ukBtR`uWy6$T68k3?v^nO$e3XDMzJ>yFI{tDI9r0o}M zK`vejS}h(DIyMT57Y>qT?@XL5>hasQE(HFeb~DAA%q)DMD!4wNbw=YzH_p>8`Dlo) z^Oopm`NNLOg0dxAf8$>s?=qE|e&o9`zpx(3GGL^QH8mY-cvrAtl)%ar*LSFX>zR5k&5- zR(JkZcvMCmwW!u(xQw@`yY43HdbMGCa1zITvNTp6x<3Y+$mlZ zT#vq_^<#FTAoXa-8w#FyO|O+I z%^yExR7ZhUd~G@Vlf}=Stl(dmWo1&lS-RNF_lPl8`oHaC0(xt;7Eh}Z2H(8s?Xb}_ z9AV17yW@n#YYS`IGA~eH2y;&2Ilf3IO-w|_>;ehZuE{R`>I=sze_GjKgxd5~at^LI zR!WD>-Lx5~HwV@}KaKW@gy64yx_hs?Z+D@I?ds}Dz#?ZlYhrCeI&93egGA901BNQ} zc&Ky^zJh(@3r>9H{Zhlkq}a~uy{{ar^&m3OkPKus_0#A6uqo^CAwO1KaPx=le2usg zWmBqyP)Sc9D0zkIrNYr%OHWxJ;4^UaF90^{-mqXIbN>y}t$0e0FtC>;@<^Dq>7o_l z>CgeLP>Zi7HwWG?EsrI?u2~D4ypy%)$%{Qm}`SQzgjY9{N}5SxqPB z+jwnr-1aN(;RgdEqI^~c6t6qg`=Mvu&OXFwM+iK75jUm_g1HiVQXXPip=Wzp;>$yzFn8_&*R&w^$?iH~@U=Sg<+WklAr z`2w2$7~FjA?9S=)^gJ}-beecnIg0$9FXBNqBqc>Brvn^#~0+b z$W)i0qw|C?o3HHH*3UxHd=*;|kiu$#SJE>h@bD>bsa2n&weHD4T*p3T+DZ|_JxIV* z1IF^2Of-W(-7b27om}u-)LxBB5bJTDq`Ih`ZyihgHjd5LejJR&84e%hl}g=@eeHk` z@4K?hWpl>ZQ|@l(wTCO?rPBh)ks+8~(H}J#3ieE;mkxEzy;gPI!B-oz!*8bsBIBQ- zQ$w~-p)&IWl-?|wH`F~q#Q^63h~@=5sg@f)E~$>`Ul5#fq(RoQ`l){?OXf6e?U<0V z-wChoAMG1<;PsJhR4lF5hiUFeS@1pbYKgu&txa)<9+_nKy*WW!o$jb)MqaV70QK~! zODoGt?9W5tS~==v%|3Cu$l)yl@cFdhUQNayd=z z#EHhUkP8K6w8+eWCmhK~yQ&nOA)y`NpOO#~8opPwI{mRZB2;_wj)v}_hffbukw=oM z+8x21@^EvlY6ru1EWYiQjLwYwEJs!PbTrO&^poZ48OSf>jZT~$e8P=MBBfmlC62$++TL=XS&dCwd;=nAhD(-jO8T&L1t#4d_rlE z80?w*ga0+*;q>1HY_1$%mH>2Z03mrA7O@f$qAg-K< uF%IuK+S3#EeuZg#j%w1y^DKIcbD;PG>R0t+W)57yA4JPQv-tL-7ykq591L#& literal 12949 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 Di!0X> diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 8527227a42b1dc97f56c69979fdefc014854640c..a9aae824add9db91918ad5c592c553594ab50a89 100644 GIT binary patch literal 8722 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 Date: Tue, 1 Sep 2015 19:40:02 +0100 Subject: [PATCH 10/28] Drying agent. Recolor dry shoes use define --- code/__DEFINES/misc.dm | 4 ++++ code/game/turfs/simulated.dm | 15 ++++++++------- code/modules/clothing/shoes/miscellaneous.dm | 4 ++-- .../mob/living/carbon/human/human_movement.dm | 2 +- .../Chemistry-Reagents/Other-Reagents.dm | 16 ++++++++++++++++ .../reagents/Chemistry-Recipes/Others.dm | 10 ++++++++-- icons/mob/feet.dmi | Bin 13260 -> 13271 bytes icons/obj/clothing/shoes.dmi | Bin 8722 -> 8701 bytes 8 files changed, 39 insertions(+), 12 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 94da0533b1a..dead1273fc8 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -244,3 +244,7 @@ #define FACING_EACHOTHER 2 #define FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR 3 //Do I win the most informative but also most stupid define award? +//Turf wet states +#define TURF_DRY 0 +#define TURF_WET_WATER 1 +#define TURF_WET_LUBE 2 \ No newline at end of file diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 1348d227dfb..7ab497abae8 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -17,11 +17,11 @@ /turf/simulated/proc/burn_tile() -/turf/simulated/proc/MakeSlippery(wet_setting = 1) // 1 = Water, 2 = Lube +/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube if(wet >= wet_setting) return wet = wet_setting - if(wet_setting == 1) + if(wet_setting == TURF_WET_WATER) if(wet_overlay) overlays -= wet_overlay wet_overlay = null @@ -37,9 +37,10 @@ return MakeDry(wet_setting) -/turf/simulated/proc/MakeDry(wet_setting = 1) - if(wet > wet_setting) return - wet = 0 +/turf/simulated/proc/MakeDry(wet_setting = TURF_WET_WATER) + if(wet > wet_setting) + return + wet = TURF_DRY if(wet_overlay) overlays -= wet_overlay @@ -48,11 +49,11 @@ if (istype(A,/mob/living/carbon)) var/mob/living/carbon/M = A switch(wet) - if(1) //wet floor + if(TURF_WET_WATER) if(!M.slip(4, 2, null, NO_SLIP_WHEN_WALKING)) M.inertia_dir = 0 return - if(2) //lube + if(TURF_WET_LUBE) M.slip(0, 7, null, (SLIDE|GALOSHES_DONT_HELP)) /turf/simulated/ChangeTurf(var/path) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index d9e9a87ebdf..3015b00ca88 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -65,12 +65,12 @@ /obj/item/clothing/shoes/galoshes/dry name = "absorbent galoshes" desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them." - icon_state = "galoshes_oj" + icon_state = "galoshes_dry" /obj/item/clothing/shoes/galoshes/dry/step_action() var/turf/simulated/t_loc = get_turf(src) if(istype(t_loc) && t_loc.wet) - t_loc.MakeDry(1) //dry if water, but not lube + t_loc.MakeDry(TURF_WET_WATER) /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 664933c175b..b88ce85beda 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -45,7 +45,7 @@ return shoes && shoes.negates_gravity() /mob/living/carbon/human/Move(NewLoc, direct) - . = ..() + . = ..() if(dna) for(var/datum/mutation/human/HM in dna.mutations) HM.on_move(src, NewLoc) diff --git a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm index f763cd1f201..79f0000ce2e 100644 --- a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm @@ -1009,3 +1009,19 @@ reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 +/datum/reagent/drying_agent + name = "Drying agent" + id = "drying_agent" + description = "Can be used to dry things." + reagent_state = LIQUID + color = "#A70FFF" + +/datum/reagent/drying_agent/reaction_turf(turf/simulated/T, reac_volume) + if(istype(T) && T.wet) + T.MakeDry(TURF_WET_WATER) + +/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume) + if(O.type == /obj/item/clothing/shoes/galoshes) + var/t_loc = get_turf(O) + qdel(O) + new /obj/item/clothing/shoes/galoshes/dry(t_loc) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes/Others.dm b/code/modules/reagents/Chemistry-Recipes/Others.dm index aa015604409..c3614639f7b 100644 --- a/code/modules/reagents/Chemistry-Recipes/Others.dm +++ b/code/modules/reagents/Chemistry-Recipes/Others.dm @@ -12,14 +12,14 @@ result = "lube" required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1) result_amount = 4 - + /datum/chemical_reaction/spraytan name = "Spray Tan" id = "spraytan" result = "spraytan" required_reagents = list("orangejuice" = 1, "oil" = 1) result_amount = 2 - + /datum/chemical_reaction/spraytan2 name = "Spray Tan" id = "spraytan" @@ -254,6 +254,12 @@ required_reagents = list("toxin" = 1, "ethanol" = 4) result_amount = 5 +/datum/chemical_reaction/drying_agent + name = "Drying agent" + id = "drying_agent" + result = "drying_agent" + required_reagents = list("stable_plasma" = 2, "ethanol" = 1, "sodium" = 1) + result_amount = 3 //////////////////////////////////// Other goon stuff /////////////////////////////////////////// diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 7e368a557b9e3cb2818ff3f01f894809e4c9f03f..0994856ff60bea8f2c981539262c265b2a5fe9a6 100644 GIT binary patch literal 13271 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 diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index a9aae824add9db91918ad5c592c553594ab50a89..e4326609bbde6acde2cb2dbb479165a2a6dc70a5 100644 GIT binary patch literal 8701 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 literal 8722 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 Date: Wed, 2 Sep 2015 14:15:42 -0400 Subject: [PATCH 11/28] Tweaks numbers upward. --- code/modules/clothing/glasses/glasses.dm | 2 +- code/modules/clothing/under/ties.dm | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 2f8316feeb9..2e14ea3d82e 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -1,6 +1,6 @@ /obj/item/clothing/glasses name = "glasses" - materials = list(MAT_GLASS = 100) + materials = list(MAT_GLASS = 250) /obj/item/clothing/glasses/meson name = "Optical Meson Scanner" diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 33f19e7f5eb..3bb34fbe5db 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -84,7 +84,7 @@ desc = "A bronze medal." icon_state = "bronze" item_color = "bronze" - materials = list(MAT_METAL=250) + materials = list(MAT_METAL=1000) burn_state = -1 //Won't burn in fires //Pinning medals on people @@ -126,7 +126,7 @@ desc = "A silver medal." icon_state = "silver" item_color = "silver" - materials = list(MAT_SILVER=250) + materials = list(MAT_SILVER=1000) /obj/item/clothing/tie/medal/silver/valor name = "medal of valor" @@ -141,7 +141,7 @@ desc = "A prestigious golden medal." icon_state = "gold" item_color = "gold" - materials = list(MAT_GOLD=250) + materials = list(MAT_GOLD=1000) /obj/item/clothing/tie/medal/gold/captain name = "medal of captaincy" From ff8063c68c4f2a0e60bb8986f1f4c691682a30f1 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 6 Sep 2015 20:06:10 +0200 Subject: [PATCH 12/28] Adds outfit datum --- code/datums/outfit.dm | 83 +++++++++++++++++++ .../mob/living/carbon/human/inventory.dm | 6 +- tgstation.dme | 1 + 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 code/datums/outfit.dm diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm new file mode 100644 index 00000000000..8cdb053fc8a --- /dev/null +++ b/code/datums/outfit.dm @@ -0,0 +1,83 @@ +/datum/outfit + var/name = "Naked" + + var/uniform = null + var/suit = null + var/back = null + var/belt = null + var/gloves = null + var/shoes = null + var/head = null + var/mask = null + var/ears = null + var/glasses = null + var/id = null + var/l_pocket = null + var/r_pocket = null + var/suit_store = null + var/r_hand = null + var/l_hand = null + var/list/backpack_contents = null // In the list(path=count,otherpath=count) format + +/datum/outfit/proc/post_equip(mob/living/carbon/human/H) + //to be overriden for toggling internals, id binding, access etc + return + +/datum/outfit/proc/equip(mob/living/carbon/human/H) + //Start with uniform,suit,backpack for additional slots + if(uniform) + H.equip_to_slot_or_del(new uniform(H),slot_w_uniform) + if(suit) + H.equip_to_slot_or_del(new suit(H),slot_wear_suit) + if(back) + H.equip_to_slot_or_del(new back(H),slot_back) + if(belt) + H.equip_to_slot_or_del(new belt(H),slot_belt) + if(gloves) + H.equip_to_slot_or_del(new gloves(H),slot_gloves) + if(shoes) + H.equip_to_slot_or_del(new shoes(H),slot_shoes) + if(head) + H.equip_to_slot_or_del(new head(H),slot_head) + if(mask) + H.equip_to_slot_or_del(new mask(H),slot_wear_mask) + if(ears) + H.equip_to_slot_or_del(new ears(H),slot_ears) + if(glasses) + H.equip_to_slot_or_del(new glasses(H),slot_glasses) + if(id) + H.equip_to_slot_or_del(new id(H),slot_wear_id) + if(l_pocket) + H.equip_to_slot_or_del(new l_pocket(H),slot_l_store) + if(r_pocket) + H.equip_to_slot_or_del(new r_pocket(H),slot_r_store) + if(suit_store) + H.equip_to_slot_or_del(new suit_store(H),slot_s_store) + + if(l_hand) + H.put_in_l_hand(new l_hand(H)) + if(r_hand) + H.put_in_r_hand(new r_hand(H)) + + for(var/path in backpack_contents) + var/number = backpack_contents[path] + for(var/i=0,i Date: Sun, 6 Sep 2015 14:10:59 -0700 Subject: [PATCH 13/28] Buffs the fuck out of Changeling Armor Feedback says it's complete garbage for 2 DNA, so here's some proposed buffs. Cut the cost in half Increased the armor values of most the armor types for ling This probably won't get accepted but at least this PR will get attention drawn to the problem. --- code/game/gamemodes/changeling/powers/mutations.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index b8ad89793ce..71e6512b68b 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -294,7 +294,7 @@ desc = "We turn our skin into tough chitin to protect us from damage." helptext = "Upkeep of the armor requires a low expenditure of chemicals. The armor is strong against brute force, but does not provide much protection from lasers. Retreating the armor damages our genomes. Cannot be used in lesser form." chemical_cost = 20 - dna_cost = 2 + dna_cost = 1 genetic_damage = 11 req_human = 1 max_genetic_damage = 20 @@ -311,7 +311,7 @@ icon_state = "lingarmor" flags = NODROP body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 40, bullet = 20, laser = 30, energy = 13, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 70, bullet = 50, laser = 70, energy = 50, bomb = 10, bio = 4, rad = 0) flags_inv = HIDEJUMPSUIT cold_protection = 0 heat_protection = 0 @@ -329,7 +329,7 @@ desc = "A tough, hard covering of black chitin with transparent chitin in front." icon_state = "lingarmorhelmet" flags = BLOCKHAIR | NODROP - armor = list(melee = 40, bullet = 15, laser = 30,energy = 10, bomb = 5, bio = 2, rad = 0) + armor = list(melee = 60, bullet = 30, laser = 60, energy = 30, bomb = 10, bio = 4, rad = 0) flags_inv = HIDEEARS flags_cover = HEADCOVERSEYES From 1a9b7ad3c002d6066838adab25fd24c36a1bedea Mon Sep 17 00:00:00 2001 From: AnturK Date: Mon, 7 Sep 2015 00:42:55 +0200 Subject: [PATCH 14/28] Admin equipment & ERT outfits --- code/datums/outfit.dm | 1 + code/modules/admin/verbs/debug.dm | 584 +----------------- code/modules/admin/verbs/one_click_antag.dm | 20 +- code/modules/clothing/outfits/ert.dm | 172 ++++++ code/modules/clothing/outfits/standard.dm | 365 +++++++++++ .../mob/living/carbon/human/inventory.dm | 14 +- tgstation.dme | 2 + 7 files changed, 580 insertions(+), 578 deletions(-) create mode 100644 code/modules/clothing/outfits/ert.dm create mode 100644 code/modules/clothing/outfits/standard.dm diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 8cdb053fc8a..8879aeb4950 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -66,6 +66,7 @@ post_equip(H) + return 1 //Example /datum/outfit/test name = "Test Outfit" diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 0a17da3fdce..1c25137d533 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -624,40 +624,21 @@ var/global/list/g_fancy_list_of_types = null alert("Invalid mob") return //log_admin("[key_name(src)] has alienized [M.key].") - var/list/dresspacks = list( - "naked", - "as job...", - "standard space gear", - "tournament standard red", - "tournament standard green", - "tournament gangster", - "tournament chef", - "tournament janitor", - "laser tag red", - "laser tag blue", - "pirate", - "space pirate", - "soviet admiral", - "tunnel clown", - "masked killer", - "assassin", - "mobster", - "death commando", - "emergency response officer", - "centcom official", - "centcom commander", - "special ops officer", - "blue wizard", - "red wizard", - "marisa wizard", - "plasmaman" - ) - var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks + + + var/list/outfits = list("Naked","Custom","As Job...") + var/list/paths = typesof(/datum/outfit) - /datum/outfit + for(var/path in paths) + var/datum/outfit/O = path //not much to initalize here but whatever + outfits[initial(O.name)] = path + + + var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in outfits if (isnull(dresscode)) return var/datum/job/jobdatum - if (dresscode == "as job...") + if (dresscode == "As Job...") var/jobname = input("Select job", "Robust quick dress shop") as null|anything in get_all_jobs() if(isnull(jobname)) return @@ -670,347 +651,18 @@ var/global/list/g_fancy_list_of_types = null continue qdel(I) switch(dresscode) - if ("naked") + if ("Naked") //do nothing - - if ("as job...") + if ("Custom") + //use custom one + if ("As Job...") if(jobdatum) dresscode = jobdatum.title M.job = jobdatum.title jobdatum.equip(M) - if ("standard space gear") - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space(M), slot_head) - var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack/oxygen(M) - M.equip_to_slot_or_del(J, slot_back) - J.toggle() - M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M), slot_wear_mask) - J.Topic(null, list("stat" = 1)) - - if ("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0 - if (dresscode=="tournament standard red") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform) - else - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - - M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/thunderdome(M), slot_head) - - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/destroyer(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/grenade/smokebomb(M), slot_r_store) - - - if ("tournament gangster") //gangster are supposed to fight each other. --rastaf0 - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/det(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - - M.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(M), slot_head) - - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/ammo_box/c10mm(M), slot_l_store) - - if ("tournament chef") //Steven Seagal FTW - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/chef(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(M), slot_head) - - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/rollingpin(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_s_store) - - if ("tournament janitor") - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - var/obj/item/weapon/storage/backpack/backpack = new(M) - for(var/obj/item/I in backpack) - qdel(I) - M.equip_to_slot_or_del(backpack, slot_back) - - M.equip_to_slot_or_del(new /obj/item/weapon/mop(M), slot_r_hand) - var/obj/item/weapon/reagent_containers/glass/bucket/bucket = new(M) - bucket.reagents.add_reagent("water", 70) - M.equip_to_slot_or_del(bucket, slot_l_hand) - - M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/grenade/chem_grenade/cleaner(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/stack/tile/plasteel(M), slot_in_backpack) - - if ("laser tag red") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/red(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/red(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/red(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/redtaghelm(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/redtag(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/laser/redtag(M), slot_s_store) - - if ("laser tag blue") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/blue(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/blue(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/blue(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/bluetaghelm(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/bluetag(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/laser/bluetag(M), slot_s_store) - - if ("pirate") - M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand) - - if ("space pirate") - M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/pirate(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) - - M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand) - - if("tunnel clown")//Tunnel clowns rule! - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/chaplain_hoodie(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store) - - var/obj/item/weapon/card/id/W = new(M) - W.access = get_all_accesses() - W.assignment = "Tunnel Clown!" - W.registered_name = M.real_name - W.update_label(M.real_name) - M.equip_to_slot_or_del(W, slot_wear_id) - - var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M) - M.equip_to_slot_or_del(fire_axe, slot_r_hand) - - if("masked killer") - M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) - - var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M) - M.equip_to_slot_or_del(fire_axe, slot_r_hand) - - for(var/obj/item/carried_item in M.contents) - if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. - carried_item.add_blood(M)//Oh yes, there will be blood... - - if("assassin") - var/obj/item/clothing/under/U = new /obj/item/clothing/under/suit_jacket(M) - M.equip_to_slot_or_del(U, slot_w_uniform) - U.attachTie(new /obj/item/clothing/tie/waistcoat(M)) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store) - - var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M) - for(var/obj/item/briefcase_item in sec_briefcase) - qdel(briefcase_item) - for(var/i=3, i>0, i--) - sec_briefcase.contents += new /obj/item/stack/spacecash/c1000 - sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow - sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba - sec_briefcase.contents += new /obj/item/ammo_box/a357 - sec_briefcase.contents += new /obj/item/weapon/c4 - M.equip_to_slot_or_del(sec_briefcase, slot_l_hand) - - var/obj/item/device/pda/heads/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Reaper" - pda.update_label() - - M.equip_to_slot_or_del(pda, slot_belt) - - var/obj/item/weapon/card/id/syndicate/W = new(M) - W.access = get_all_accesses() - W.assignment = "Reaper" - W.registered_name = M.real_name - W.update_label(M.real_name) - M.equip_to_slot_or_del(W, slot_wear_id) -// DEATH SQUADS - if("death commando") - equip_deathsquad(M) - - if("emergency response officer") - var/alert - if(alert("Code Red ERT?","Select Response Level","Yes","No")=="Yes") - alert = 1 - else - alert = 0 - switch(input("Which class?") in list("Commander","Security","Engineer","Medic")) - if("Commander") - equip_emergencyresponsesquad(M, "commander",alert) - if("Security") - equip_emergencyresponsesquad(M, "sec",alert) - if("Engineer") - equip_emergencyresponsesquad(M, "eng",alert) - if("Medic") - equip_emergencyresponsesquad(M, "med",alert) - - if("centcom official") - equip_centcomofficial(M) - - if("centcom commander") - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_commander(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/bulletproof(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent/commander(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/clothing/head/centhat(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/lighter(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_all_accesses() - W.access += get_centcom_access("Centcom Commander") - W.assignment = "Centcom Commander" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) - - if("special ops officer") - var/obj/item/device/radio/headset/R = new /obj/item/device/radio/headset/headset_cent/commander(M) - R.set_frequency(CENTCOM_FREQ) - R.freqlock = 1 - M.equip_to_slot_or_del(R, slot_ears) - - M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/officer(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/havana(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/lighter(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_all_accesses() - W.access += get_centcom_access("Special Ops Officer") - W.assignment = "Special Ops Officer" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) - - if("blue wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) - - if("red wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) - - if("marisa wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/marisa(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/staff(M), slot_l_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) - - if("soviet admiral") - M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_all_accesses() - W.access += get_centcom_access("Admiral") - W.assignment = "Admiral" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) - - if("mobster") - M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/tommygun(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) - - var/obj/item/weapon/card/id/W = new(M) - W.assignment = "Assistant" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) - - if("plasmaman") - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/hardsuit/plasmaman(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/eva/plasmaman(M),slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/plasmaman/full(M),slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(M),slot_wear_mask) + else + M.equipOutfit(outfits[dresscode]) M.regenerate_icons() @@ -1104,204 +756,4 @@ var/global/list/g_fancy_list_of_types = null for(var/path in SSgarbage.noqdelhint) dat += "[path]
" - usr << browse(dat, "window=dellog") - - - -//Deathsquad -/proc/equip_deathsquad(mob/living/carbon/human/M, officer) - var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M) - R.set_frequency(CENTCOM_FREQ) - R.freqlock = 1 - M.equip_to_slot_or_del(R, slot_ears) - - if(officer) - M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/beret(M), slot_head) - //else - // M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/deathsquad(M), slot_head) - - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/deathsquad(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/under/color/green(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_wear_mask) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/toggle/thermal(M), slot_glasses) - - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) - - M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/flashbangs(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) - - M.equip_to_slot_or_del(new /obj/item/weapon/c4(M), slot_in_backpack) - - M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/shield/energy(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/tank/internals/emergency_oxygen(M), slot_s_store) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) - - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/loyalpin(M), slot_r_hand) - - - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M)//Here you go Deuryn - L.imp_in = M - L.implanted = 1 - M.sec_hud_set_implants() - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_all_accesses()//They get full station access. - W.access += get_centcom_access("Death Commando")//Let's add their alloted Centcom access. - W.assignment = "Death Commando" - W.registered_name = M.real_name - W.update_label(W.registered_name, W.assignment) - M.equip_to_slot_or_del(W, slot_wear_id) - -//Emergency Response Team -/proc/equip_emergencyresponsesquad(mob/living/carbon/human/M, ertrole, alert) - var/obj/item/weapon/card/id/W = null - var/obj/item/device/radio/R = new /obj/item/device/radio/headset/headset_cent/alt(M) - R.set_frequency(CENTCOM_FREQ) - R.freqlock = 1 - M.equip_to_slot_or_del(R, slot_ears) - - switch(ertrole) - if("commander") - W = new /obj/item/weapon/card/id/ert(M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) - M.equip_to_slot_or_del(W, slot_wear_id) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack) - - R.keyslot = new /obj/item/device/encryptionkey/heads/captain - - if(alert) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store) - else - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/switchblade(M), slot_l_store) - - if("sec") - W = new /obj/item/weapon/card/id/ert/Security(M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/sec(M), slot_wear_suit) - M.equip_to_slot_or_del(W, slot_wear_id) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/handcuffs(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/security/full(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack) - - R.keyslot = new /obj/item/device/encryptionkey/heads/hos - - if(alert) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/carbine/loyalpin(M), slot_in_backpack) - else - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(M), slot_in_backpack) - - if("med") - W = new /obj/item/weapon/card/id/ert/Medical(M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/med(M), slot_wear_suit) - M.equip_to_slot_or_del(W, slot_wear_id) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(M), slot_r_hand) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack) - - R.keyslot = new /obj/item/device/encryptionkey/heads/cmo - - if(alert) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat/nanites(M), slot_in_backpack) - else - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/hypospray/combat(M), slot_in_backpack) - - if("eng") - W = new /obj/item/weapon/card/id/ert/Engineer(M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat/swat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/hardsuit/ert/engi(M), slot_wear_suit) - M.equip_to_slot_or_del(W, slot_wear_id) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson/engine(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/rcd_ammo/large(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(M), slot_in_backpack) - - R.keyslot = new /obj/item/device/encryptionkey/heads/ce - - if(alert) - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer/swat(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/loyalpin(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/rcd/combat(M), slot_in_backpack) - else - M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/sechailer(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/rcd/loaded(M), slot_in_backpack) - - R.recalculateChannels() - - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) - L.imp_in = M - L.implanted = 1 - M.sec_hud_set_implants() - - if (W) - W.registered_name = M.real_name - W.update_label(W.registered_name, W.assignment) - - -/proc/equip_centcomofficial(mob/living/carbon/human/M) - M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/centcom_officer(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cent(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/weapon/pen(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(M), slot_back) - - var/obj/item/device/pda/heads/pda = new(M) - pda.owner = M.real_name - pda.ownjob = "Centcom Official" - pda.update_label() - - M.equip_to_slot_or_del(pda, slot_r_store) - - M.equip_to_slot_or_del(new /obj/item/weapon/clipboard(M), slot_l_hand) - - var/obj/item/weapon/card/id/W = new(M) - W.icon_state = "centcom" - W.access = get_centcom_access("Centcom Official") - W.access += access_weapons - W.assignment = "Centcom Official" - W.registered_name = M.real_name - W.update_label() - M.equip_to_slot_or_del(W, slot_wear_id) + usr << browse(dat, "window=dellog") \ No newline at end of file diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 25b84838539..1a7ea857617 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -330,10 +330,10 @@ ready_dna(Commando) if(numagents == 1) //If Squad Leader Commando.real_name = "Officer [pick(commando_names)]" - equip_deathsquad(Commando, 1) + Commando.equipOutfit(/datum/outfit/death_commando/officer) else Commando.real_name = "Trooper [pick(commando_names)]" - equip_deathsquad(Commando) + Commando.equipOutfit(/datum/outfit/death_commando) Commando.key = chosen_candidate.key Commando.mind.assigned_role = "Death Commando" for(var/obj/machinery/door/poddoor/ert/door in airlocks) @@ -425,7 +425,7 @@ newmob.real_name = newmob.dna.species.random_name(newmob.gender,1) newmob.key = chosen_candidate.key newmob.mind.assigned_role = "Centcom Official" - equip_centcomofficial(newmob) + newmob.equipOutfit(/datum/outfit/centcom_official) //Assign antag status and the mission ticker.mode.traitors += newmob.mind @@ -496,25 +496,25 @@ switch(numagents) if(1) ERTOperative.real_name = "Commander [ertname]" - equip_emergencyresponsesquad(ERTOperative, "commander",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/commander/alert : /datum/outfit/ert/commander) if(2) ERTOperative.real_name = "Security Officer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "sec",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security) if(3) ERTOperative.real_name = "Medical Officer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "med",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic) if(4) ERTOperative.real_name = "Engineer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "eng",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer) if(5) ERTOperative.real_name = "Security Officer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "sec",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/security/alert : /datum/outfit/ert/security) if(6) ERTOperative.real_name = "Medical Officer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "med",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/medic/alert : /datum/outfit/ert/medic) if(7) ERTOperative.real_name = "Engineer [ertname]" - equip_emergencyresponsesquad(ERTOperative, "eng",redalert) + ERTOperative.equipOutfit(redalert ? /datum/outfit/ert/engineer/alert : /datum/outfit/ert/engineer) ERTOperative.key = chosen_candidate.key ERTOperative.mind.assigned_role = "ERT" diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm new file mode 100644 index 00000000000..c683ec8533b --- /dev/null +++ b/code/modules/clothing/outfits/ert.dm @@ -0,0 +1,172 @@ +/datum/outfit/ert + name = "ERT Common" + + uniform = /obj/item/clothing/under/rank/centcom_officer + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/device/radio/headset/headset_cent/alt + +/datum/outfit/ert/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + L.imp_in = H + L.implanted = 1 + H.sec_hud_set_implants() + + var/obj/item/device/radio/R = H.ears + R.set_frequency(CENTCOM_FREQ) + R.freqlock = 1 + + var/obj/item/weapon/card/id/W = H.wear_id + W.registered_name = H.real_name + W.update_label(W.registered_name, W.assignment) + +/datum/outfit/ert/commander + name = "ERT Commander" + + id = /obj/item/weapon/card/id/ert + suit = /obj/item/clothing/suit/space/hardsuit/ert + glasses = /obj/item/clothing/glasses/thermal/eyepatch + back = /obj/item/weapon/storage/backpack/captain + belt = /obj/item/weapon/storage/belt/security/full + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer=1,\ + /obj/item/weapon/gun/energy/gun=1) + l_pocket = /obj/item/weapon/switchblade + +/datum/outfit/ert/commander/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/device/radio/R = H.ears + R.keyslot = new /obj/item/device/encryptionkey/heads/captain + R.recalculateChannels() + +/datum/outfit/ert/commander/alert + name = "ERT Commander - High Alert" + + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1) + l_pocket = /obj/item/weapon/melee/energy/sword/saber + +/datum/outfit/ert/security + name = "ERT Security" + + id = /obj/item/weapon/card/id/ert/Security + suit = /obj/item/clothing/suit/space/hardsuit/ert/sec + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + back = /obj/item/weapon/storage/backpack/security + belt = /obj/item/weapon/storage/belt/security/full + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/storage/box/handcuffs=1,\ + /obj/item/clothing/mask/gas/sechailer=1,\ + /obj/item/weapon/gun/energy/gun=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/weapon/gun/energy/gun/advtaser=1) + +/datum/outfit/ert/security/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/device/radio/R = H.ears + R.keyslot = new /obj/item/device/encryptionkey/heads/hos + R.recalculateChannels() + +/datum/outfit/ert/security/alert + name = "ERT Security - High Alert" + + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/storage/box/handcuffs=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/weapon/gun/energy/pulse/carbine/loyalpin=1) + + +/datum/outfit/ert/medic + name = "ERT Medic" + + id = /obj/item/weapon/card/id/ert/Medical + suit = /obj/item/clothing/suit/space/hardsuit/ert/med + glasses = /obj/item/clothing/glasses/hud/health + back = /obj/item/weapon/storage/backpack/medic + belt = /obj/item/weapon/storage/belt/medical + r_hand = /obj/item/weapon/storage/firstaid/regular + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer=1,\ + /obj/item/weapon/gun/energy/gun=1,\ + /obj/item/weapon/reagent_containers/hypospray/combat=1) + +/datum/outfit/ert/medic/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/device/radio/R = H.ears + R.keyslot = new /obj/item/device/encryptionkey/heads/cmo + R.recalculateChannels() + +/datum/outfit/ert/medic/alert + name = "ERT Medic - High Alert" + + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\ + /obj/item/weapon/reagent_containers/hypospray/combat/nanites=1) + +/datum/outfit/ert/engineer + name = "ERT Engineer" + + id = /obj/item/weapon/card/id/ert/Engineer + suit = /obj/item/clothing/suit/space/hardsuit/ert/engi + glasses = /obj/item/clothing/glasses/meson/engine + back = /obj/item/weapon/storage/backpack/industrial + belt = /obj/item/weapon/storage/belt/utility/full + l_pocket = /obj/item/weapon/rcd_ammo/large + r_hand = /obj/item/weapon/storage/firstaid/regular + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer=1,\ + /obj/item/weapon/gun/energy/gun=1,\ + /obj/item/weapon/rcd/loaded=1) + +/datum/outfit/ert/engineer/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/device/radio/R = H.ears + R.keyslot = new /obj/item/device/encryptionkey/heads/ce + R.recalculateChannels() + +/datum/outfit/ert/engineer/alert + name = "ERT Engineer - High Alert" + + backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\ + /obj/item/weapon/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\ + /obj/item/weapon/rcd/combat=1) + + +/datum/outfit/centcom_official + name = "Centcom Official" + + uniform = /obj/item/clothing/under/rank/centcom_officer + shoes = /obj/item/clothing/shoes/sneakers/black + gloves = /obj/item/clothing/gloves/color/black + ears = /obj/item/device/radio/headset/headset_cent + glasses = /obj/item/clothing/glasses/sunglasses + belt = /obj/item/weapon/gun/energy/gun + l_pocket = /obj/item/weapon/pen + back = /obj/item/weapon/storage/backpack/satchel_norm + r_pocket = /obj/item/device/pda/heads + l_hand = /obj/item/weapon/clipboard + id = /obj/item/weapon/card/id + +/datum/outfit/centcom_official/post_equip(mob/living/carbon/human/H) + var/obj/item/device/pda/heads/pda = H.r_store + pda.owner = H.real_name + pda.ownjob = "Centcom Official" + pda.update_label() + + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_centcom_access("Centcom Official") + W.access += access_weapons + W.assignment = "Centcom Official" + W.registered_name = H.real_name + W.update_label() \ No newline at end of file diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm new file mode 100644 index 00000000000..623edd0775d --- /dev/null +++ b/code/modules/clothing/outfits/standard.dm @@ -0,0 +1,365 @@ +/datum/outfit/space + name = "Standard Space Gear" + + uniform = /obj/item/clothing/under/color/grey + shoes = /obj/item/clothing/shoes/sneakers/black + suit = /obj/item/clothing/suit/space + head = /obj/item/clothing/head/helmet/space + back = /obj/item/weapon/tank/jetpack/oxygen + mask = /obj/item/clothing/mask/breath + +/datum/outfit/space/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/tank/jetpack/J = H.back + J.toggle() + J.Topic(null, list("stat" = 1)) + + +/datum/outfit/tournament + +/datum/outfit/tournament/ + name = "tournament standard red" + + uniform = /obj/item/clothing/under/color/red + shoes = /obj/item/clothing/shoes/sneakers/black + suit = /obj/item/clothing/suit/armor/vest + head = /obj/item/clothing/head/helmet/thunderdome + r_hand = /obj/item/weapon/gun/energy/pulse/destroyer + l_hand = /obj/item/weapon/kitchen/knife + r_pocket = /obj/item/weapon/grenade/smokebomb + + +/datum/outfit/tournament/red + name = "tournament standard green" + + uniform = /obj/item/clothing/under/color/green + +/datum/outfit/tournament/gangster + name = "tournament gangster" + uniform = /obj/item/clothing/under/rank/det + suit = /obj/item/clothing/suit/det_suit + glasses = /obj/item/clothing/glasses/thermal/monocle + head = /obj/item/clothing/head/det_hat + r_hand = /obj/item/weapon/gun/projectile + l_hand = null + r_pocket = /obj/item/ammo_box/c10mm + +/datum/outfit/tournament/janitor + name = "tournament janitor" + + uniform = /obj/item/clothing/under/rank/janitor + back = /obj/item/weapon/storage/backpack + suit = null + head = null + r_hand = /obj/item/weapon/mop + l_hand = /obj/item/weapon/reagent_containers/glass/bucket + r_pocket = /obj/item/weapon/grenade/chem_grenade/cleaner + l_pocket = /obj/item/weapon/grenade/chem_grenade/cleaner + backpack_contents = list(/obj/item/stack/tile/plasteel=6) + +/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/reagent_containers/glass/bucket/bucket = H.l_hand + bucket.reagents.add_reagent("water",70) + +/datum/outfit/laser_tag + name = "Laser Tag Red" + + uniform = /obj/item/clothing/under/color/red + shoes = /obj/item/clothing/shoes/sneakers/red + head = /obj/item/clothing/head/helmet/redtaghelm + gloves = /obj/item/clothing/gloves/color/red + ears = /obj/item/device/radio/headset + suit = /obj/item/clothing/suit/redtag + back = /obj/item/weapon/storage/backpack + suit_store = /obj/item/weapon/gun/energy/laser/redtag + backpack_contents = list(/obj/item/weapon/storage/box=1) + +/datum/outfit/laser_tag/blue + name = "Laser Tag Blue" + uniform = /obj/item/clothing/under/color/blue + shoes = /obj/item/clothing/shoes/sneakers/blue + head = /obj/item/clothing/head/helmet/bluetaghelm + gloves = /obj/item/clothing/gloves/color/blue + suit = /obj/item/clothing/suit/bluetag + suit_store = /obj/item/weapon/gun/energy/laser/bluetag + +/datum/outfit/pirate + name = "Pirate" + + uniform = /obj/item/clothing/under/pirate + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/bandana + glasses = /obj/item/clothing/glasses/eyepatch + r_hand = /obj/item/weapon/melee/energy/sword/pirate + +/datum/outfit/pirate/space + name = "Space Pirate" + + suit = /obj/item/clothing/suit/space/pirate + head = /obj/item/clothing/head/helmet/space/pirate + +/datum/outfit/tunnel_clown + name = "Tunnel Clown" + + uniform = /obj/item/clothing/under/rank/clown + shoes = /obj/item/clothing/shoes/clown_shoes + gloves = /obj/item/clothing/gloves/color/black + mask = /obj/item/clothing/mask/gas/clown_hat + ears = /obj/item/device/radio/headset + glasses = /obj/item/clothing/glasses/thermal/monocle + suit = /obj/item/clothing/suit/hooded/chaplain_hoodie + l_pocket = /obj/item/weapon/reagent_containers/food/snacks/grown/banana + r_pocket = /obj/item/weapon/bikehorn + id = /obj/item/weapon/card/id + r_hand = /obj/item/weapon/twohanded/fireaxe + +/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.access = get_all_accesses() + W.assignment = "Tunnel Clown!" + W.registered_name = H.real_name + W.update_label(H.real_name) + +/datum/outfit/psycho + name = "Masked Killer" + + uniform = /obj/item/clothing/under/overalls + shoes = /obj/item/clothing/shoes/sneakers/white + gloves = /obj/item/clothing/gloves/color/latex + mask = /obj/item/clothing/mask/surgical + head = /obj/item/clothing/head/welding + ears = /obj/item/device/radio/headset + glasses = /obj/item/clothing/glasses/thermal/monocle + suit = /obj/item/clothing/suit/apron + l_pocket = /obj/item/weapon/kitchen/knife + r_pocket = /obj/item/weapon/scalpel + r_hand = /obj/item/weapon/twohanded/fireaxe + +/datum/outfit/psycho/post_equip(mob/living/carbon/human/H) + for(var/obj/item/carried_item in H.contents) + if(!istype(carried_item, /obj/item/weapon/implant))//If it's not an implant. + carried_item.add_blood(H)//Oh yes, there will be blood... + H.regenerate_icons() + +/datum/outfit/assassin + name = "Assassin" + + uniform = /obj/item/clothing/under/suit_jacket + shoes = /obj/item/clothing/shoes/sneakers/black + gloves = /obj/item/clothing/gloves/color/black + ears = /obj/item/device/radio/headset + glasses = /obj/item/clothing/glasses/sunglasses + l_pocket = /obj/item/weapon/melee/energy/sword/saber + l_hand = /obj/item/weapon/storage/secure/briefcase + id = /obj/item/weapon/card/id/syndicate + belt = /obj/item/device/pda/heads + +/datum/outfit/assassin/post_equip(mob/living/carbon/human/H) + var/obj/item/clothing/under/U = H.w_uniform + U.attachTie(new /obj/item/clothing/tie/waistcoat(H)) + + //Could use a type + var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = H.l_hand + for(var/obj/item/briefcase_item in sec_briefcase) + qdel(briefcase_item) + for(var/i=3, i>0, i--) + sec_briefcase.handle_item_insertion(new /obj/item/stack/spacecash/c1000,1) + sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow,1) + sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/projectile/revolver/mateba,1) + sec_briefcase.handle_item_insertion(new /obj/item/ammo_box/a357,1) + sec_briefcase.handle_item_insertion(new /obj/item/weapon/c4,1) + + var/obj/item/device/pda/heads/pda = H.belt + pda.owner = H.real_name + pda.ownjob = "Reaper" + pda.update_label() + + var/obj/item/weapon/card/id/syndicate/W = H.wear_id + W.access = get_all_accesses() + W.assignment = "Reaper" + W.registered_name = H.real_name + W.update_label(H.real_name) + +/datum/outfit/centcom_commander + name = "Centcom Commander" + + uniform = /obj/item/clothing/under/rank/centcom_commander + suit = /obj/item/clothing/suit/armor/bulletproof + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/device/radio/headset/headset_cent/commander + glasses = /obj/item/clothing/glasses/eyepatch + mask = /obj/item/clothing/mask/cigarette/cigar/cohiba + head = /obj/item/clothing/head/centhat + belt = /obj/item/weapon/gun/projectile/revolver/mateba + r_pocket = /obj/item/weapon/lighter + l_pocket = /obj/item/ammo_box/a357 + back = /obj/item/weapon/storage/backpack/satchel + id = /obj/item/weapon/card/id + +/datum/outfit/centcom_commander/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_centcom_access("Centcom Commander") + W.assignment = "Centcom Commander" + W.registered_name = H.real_name + W.update_label() + +/datum/outfit/spec_ops + name = "Special Ops Officer" + + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/space/officer + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/combat + glasses = /obj/item/clothing/glasses/thermal/eyepatch + ears = /obj/item/device/radio/headset/headset_cent/commander + mask = /obj/item/clothing/mask/cigarette/cigar/havana + head = /obj/item/clothing/head/helmet/space/beret + belt = /obj/item/weapon/gun/energy/pulse/pistol/m1911 + r_pocket = /obj/item/weapon/lighter + back = /obj/item/weapon/storage/backpack/satchel + id = /obj/item/weapon/card/id + +/datum/outfit/spec_ops/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_centcom_access("Special Ops Officer") + W.assignment = "Special Ops Officer" + W.registered_name = H.real_name + W.update_label() + + var/obj/item/device/radio/headset/R = H.ears + R.set_frequency(CENTCOM_FREQ) + R.freqlock = 1 + +/datum/outfit/wizard + name = "Blue Wizard" + + uniform = /obj/item/clothing/under/color/lightpurple + suit = /obj/item/clothing/suit/wizrobe + shoes = /obj/item/clothing/shoes/sandal + ears = /obj/item/device/radio/headset + head = /obj/item/clothing/head/wizard + r_pocket = /obj/item/weapon/teleportation_scroll + r_hand = /obj/item/weapon/spellbook + l_hand = /obj/item/weapon/staff + back = /obj/item/weapon/storage/backpack + backpack_contents = list(/obj/item/weapon/storage/box=1) + +/datum/outfit/wizard/red + name = "Red Wizard" + + suit = /obj/item/clothing/suit/wizrobe/red + head = /obj/item/clothing/head/wizard/red + +/datum/outfit/wizard/weeb + name = "Marisa Wizard" + + suit = /obj/item/clothing/suit/wizrobe/marisa + shoes = /obj/item/clothing/shoes/sandal/marisa + head = /obj/item/clothing/head/wizard/marisa + +/datum/outfit/soviet + name = "Soviet Admiral" + + uniform = /obj/item/clothing/under/soviet + head = /obj/item/clothing/head/hgpiratecap + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/device/radio/headset/headset_cent + glasses = /obj/item/clothing/glasses/thermal/eyepatch + suit = /obj/item/clothing/suit/hgpirate + back = /obj/item/weapon/storage/backpack/satchel + belt = /obj/item/weapon/gun/projectile/revolver/mateba + + id = /obj/item/weapon/card/id + +/datum/outfit/soviet/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_centcom_access("Admiral") + W.assignment = "Admiral" + W.registered_name = H.real_name + W.update_label() + +/datum/outfit/mobster + name = "Mobster" + + uniform = /obj/item/clothing/under/suit_jacket/really_black + head = /obj/item/clothing/head/fedora + shoes = /obj/item/clothing/shoes/laceup + gloves = /obj/item/clothing/gloves/color/black + ears = /obj/item/device/radio/headset + glasses = /obj/item/clothing/glasses/sunglasses + r_hand = /obj/item/weapon/gun/projectile/automatic/tommygun + id = /obj/item/weapon/card/id + +/datum/outfit/mobster/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/W = H.wear_id + W.assignment = "Assistant" + W.registered_name = H.real_name + W.update_label() + +/datum/outfit/plasmaman + name = "Plasmaman" + + head = /obj/item/clothing/head/helmet/space/hardsuit/plasmaman + suit = /obj/item/clothing/suit/space/eva/plasmaman + back = /obj/item/weapon/tank/internals/plasmaman/full + mask = /obj/item/clothing/mask/breath + +/datum/outfit/death_commando + name = "Death Commando" + + uniform = /obj/item/clothing/under/color/green + suit = /obj/item/clothing/suit/space/hardsuit/deathsquad + shoes = /obj/item/clothing/shoes/combat/swat + gloves = /obj/item/clothing/gloves/combat + mask = /obj/item/clothing/mask/gas/sechailer/swat + glasses = /obj/item/clothing/glasses/hud/toggle/thermal + back = /obj/item/weapon/storage/backpack/security + l_pocket = /obj/item/weapon/melee/energy/sword/saber + r_pocket = /obj/item/weapon/shield/energy + suit_store = /obj/item/weapon/tank/internals/emergency_oxygen + belt = /obj/item/weapon/gun/projectile/revolver/mateba + r_hand = /obj/item/weapon/gun/energy/pulse/loyalpin + id = /obj/item/weapon/card/id + ears = /obj/item/device/radio/headset/headset_cent/alt + + backpack_contents = list(/obj/item/weapon/storage/box=1,\ + /obj/item/ammo_box/a357=1,\ + /obj/item/weapon/storage/firstaid/regular=1,\ + /obj/item/weapon/storage/box/flashbangs=1,\ + /obj/item/device/flashlight=1,\ + /obj/item/weapon/c4=1) + +/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H) + var/obj/item/device/radio/R = H.ears + R.set_frequency(CENTCOM_FREQ) + R.freqlock = 1 + + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)//Here you go Deuryn + L.imp_in = H + L.implanted = 1 + H.sec_hud_set_implants() + + + var/obj/item/weapon/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses()//They get full station access. + W.access += get_centcom_access("Death Commando")//Let's add their alloted Centcom access. + W.assignment = "Death Commando" + W.registered_name = H.real_name + W.update_label(W.registered_name, W.assignment) + +/datum/outfit/death_commando/officer + name = "Death Commando Officer" + head = /obj/item/clothing/head/helmet/space/beret + + + + + \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index b4cd8063e39..d1c5b5bec1f 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -474,5 +474,15 @@ return shredded /mob/living/carbon/human/proc/equipOutfit(outfit) - var/datum/outfit/O = new outfit - O.equip(src) \ No newline at end of file + var/datum/outfit/O = null + + if(ispath(outfit)) + O = new outfit + else + O = outfit + if(!istype(O)) + return 0 + if(!O) + return 0 + + return O.equip(src) \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 9b4df0cae4e..16f91b9670f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -921,6 +921,8 @@ #include "code\modules\clothing\masks\gasmask.dm" #include "code\modules\clothing\masks\hailer.dm" #include "code\modules\clothing\masks\miscellaneous.dm" +#include "code\modules\clothing\outfits\ert.dm" +#include "code\modules\clothing\outfits\standard.dm" #include "code\modules\clothing\shoes\bananashoes.dm" #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\magboots.dm" From 046b7fbad3fc9b660054906063e374f649f63e6a Mon Sep 17 00:00:00 2001 From: Memendia Date: Mon, 7 Sep 2015 03:40:07 -0700 Subject: [PATCH 15/28] I told ya --- code/game/objects/items/weapons/RCD.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 195b367a033..5fa372b2212 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -64,7 +64,7 @@ RCD var/deconairlockdelay = 50 /obj/item/weapon/rcd/suicide_act(mob/user) - user.visible_message("[user] sets the RCD to 'Wall' and points it down his throat! It looks like \he's trying to commit suicide..") + user.visible_message("[user] sets the RCD to 'Wall' and points it down \his throat! It looks like \he's trying to commit suicide..") return (BRUTELOSS) /obj/item/weapon/rcd/verb/change_airlock_access() @@ -530,4 +530,4 @@ RCD /obj/item/weapon/rcd_ammo/large origin_tech = "materials=4" materials = list(MAT_METAL=12000, MAT_GLASS=8000) - ammoamt = 160 \ No newline at end of file + ammoamt = 160 From 08cfaf0b5fa11b3f67261e0a6881f99fbdb5b069 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Mon, 7 Sep 2015 20:44:08 +1000 Subject: [PATCH 16/28] see jobban reasons from char setup --- code/modules/admin/banjob.dm | 8 ----- code/modules/client/preferences.dm | 54 ++++++++++++++++++++---------- html/changelogs/Jordie jobban.yml | 5 +++ 3 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 html/changelogs/Jordie jobban.yml diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index bc68c4a9e01..1399c6310a5 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -16,14 +16,6 @@ var/jobban_keylist[0] //to store the keys & ranks //returns a reason if M is banned from rank, returns 0 otherwise /proc/jobban_isbanned(mob/M, rank) if(M && rank) - /* - if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban - if (guest_jobbans(rank)) - if(config.guest_jobban && IsGuestKey(M.key)) - return "Guest Job-ban" - if(config.usewhitelist && !check_whitelist(M)) - return "Whitelisted Job" - */ for (var/s in jobban_keylist) if( findtext(s,"[M.ckey] - [rank]") == 1 ) var/startpos = findtext(s, "## ")+3 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3c11398621f..5f04c0f69b9 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -363,24 +363,22 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set if(jobban_isbanned(user, "Syndicate")) dat += "You are banned from antagonist roles." src.be_special = 0 + var/n = 0 + for (var/i in special_roles) + if(jobban_isbanned(user, i)) + dat += "Be [i]:
BANNED
" + else + var/days_remaining = null + if(config.use_age_restriction_for_jobs && ispath(special_roles[i])) //If it's a game mode antag, check if the player meets the minimum age + var/mode_path = special_roles[i] + var/datum/game_mode/temp_mode = new mode_path + days_remaining = temp_mode.get_remaining_days(user.client) - else - var/n = 0 - for (var/i in special_roles) - if(jobban_isbanned(user, i)) - dat += "Be [i]: \[BANNED]
" + if(days_remaining) + dat += "Be [i]: \[IN [days_remaining] DAYS]
" else - var/days_remaining = null - if(config.use_age_restriction_for_jobs && ispath(special_roles[i])) //If it's a game mode antag, check if the player meets the minimum age - var/mode_path = special_roles[i] - var/datum/game_mode/temp_mode = new mode_path - days_remaining = temp_mode.get_remaining_days(user.client) - - if(days_remaining) - dat += "Be [i]: \[IN [days_remaining] DAYS]
" - else - dat += "Be [i]: [src.be_special&(1<
" - n++ + dat += "Be [i]:
[src.be_special&(1<
" + n++ dat += "" dat += "


" @@ -436,7 +434,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set var/rank = job.title lastJob = job if(jobban_isbanned(user, rank)) - HTML += "[rank] \[BANNED\]" + HTML += "[rank] BANNED" continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) @@ -650,6 +648,28 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set proc/process_link(mob/user, list/href_list) if(!istype(user, /mob/new_player)) return + if(href_list["jobbancheck"]) + var/job = sanitizeSQL(href_list["jobbancheck"]) + var/sql_ckey = sanitizeSQL(user.ckey) + var/DBQuery/query_get_jobban = dbcon.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND job = '[job]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + if(!query_get_jobban.Execute()) + var/err = query_get_jobban.ErrorMsg() + log_game("SQL ERROR obtaining reason from ban table. Error : \[[err]\]\n") + return + if(query_get_jobban.NextRow()) + var/reason = query_get_jobban.item[1] + var/bantime = query_get_jobban.item[2] + var/duration = query_get_jobban.item[3] + var/expiration_time = query_get_jobban.item[4] + var/a_ckey = query_get_jobban.item[5] + var/text + text = "You, or another user of this computer, ([user.ckey]) is banned from playing [job]. The ban reason is:
[reason]
This ban was applied by [a_ckey] on [bantime]" + if(text2num(duration) > 0) + text += ". The ban is for [duration] minutes and expires on [expiration_time] (server time)" + text += ".
" + user << text + return + if(href_list["preference"] == "job") switch(href_list["task"]) if("close") diff --git a/html/changelogs/Jordie jobban.yml b/html/changelogs/Jordie jobban.yml new file mode 100644 index 00000000000..79a8f787e9c --- /dev/null +++ b/html/changelogs/Jordie jobban.yml @@ -0,0 +1,5 @@ +author: Jordie0608 +delete-after: True + +changes: + - rscadd: "You can now view the reason of a jobban from character setup." \ No newline at end of file From b3b18d0080253e1af1b1a10aa07e67c7a5d0ddad Mon Sep 17 00:00:00 2001 From: AnturK Date: Mon, 7 Sep 2015 18:13:08 +0200 Subject: [PATCH 17/28] Job Outfits --- code/datums/outfit.dm | 8 +- code/game/jobs/job/assistant.dm | 21 +- code/game/jobs/job/captain.dm | 71 +++--- code/game/jobs/job/cargo_service.dm | 138 +++++++----- code/game/jobs/job/civilian.dm | 112 +++++---- code/game/jobs/job/civilian_chaplain.dm | 13 +- code/game/jobs/job/engineering.dm | 85 ++++--- code/game/jobs/job/job.dm | 84 +++---- code/game/jobs/job/medical.dm | 109 +++++---- code/game/jobs/job/science.dm | 62 +++-- code/game/jobs/job/security.dm | 287 +++++++++++++----------- 11 files changed, 556 insertions(+), 434 deletions(-) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 8879aeb4950..9ee454ce6f0 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -17,13 +17,19 @@ var/suit_store = null var/r_hand = null var/l_hand = null - var/list/backpack_contents = null // In the list(path=count,otherpath=count) format + var/list/backpack_contents = list() // In the list(path=count,otherpath=count) format + +/datum/outfit/proc/pre_equip(mob/living/carbon/human/H) + //to be overriden for customization depending on client prefs,species etc + return /datum/outfit/proc/post_equip(mob/living/carbon/human/H) //to be overriden for toggling internals, id binding, access etc return /datum/outfit/proc/equip(mob/living/carbon/human/H) + pre_equip(H) + //Start with uniform,suit,backpack for additional slots if(uniform) H.equip_to_slot_or_del(new uniform(H),slot_w_uniform) diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm index 7733a3be546..9a1822fad7e 100644 --- a/code/game/jobs/job/assistant.dm +++ b/code/game/jobs/job/assistant.dm @@ -12,13 +12,7 @@ Assistant selection_color = "#dddddd" access = list() //See /datum/job/assistant/get_access() minimal_access = list() //See /datum/job/assistant/get_access() - -/datum/job/assistant/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - if (config.grey_assistants) - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform) - else - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/random(H), slot_w_uniform) + outfit = /datum/outfit/job/assistant /datum/job/assistant/get_access() if((config.jobs_have_maint_access & ASSISTANTS_HAVE_MAINT_ACCESS) || !config.jobs_have_minimal_access) //Config has assistant maint access set @@ -32,4 +26,15 @@ Assistant total_positions = config.assistant_cap spawn_positions = config.assistant_cap return 1 - return 0 \ No newline at end of file + return 0 + + +/datum/outfit/job/assistant + name = "Assistant" + +/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/H) + ..() + if (config.grey_assistants) + uniform = /obj/item/clothing/under/color/grey + else + uniform = /obj/item/clothing/under/color/random diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index 7d345e71a3b..57cc571b705 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -14,29 +14,37 @@ Captain req_admin_notify = 1 minimal_player_age = 14 - default_id = /obj/item/weapon/card/id/gold - default_pda = /obj/item/device/pda/captain - default_headset = /obj/item/device/radio/headset/heads/captain - default_backpack = /obj/item/weapon/storage/backpack/captain - default_satchel = /obj/item/weapon/storage/backpack/satchel_cap + outfit = /datum/outfit/job/captain access = list() //See get_access() minimal_access = list() //See get_access() -/datum/job/captain/equip_items(mob/living/carbon/human/H) - var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/captain(H) +/datum/job/captain/get_access() + return get_all_accesses() + + +/datum/outfit/job/captain + name = "Captain" + + id = /obj/item/weapon/card/id/gold + belt = /obj/item/device/pda/captain + ears = /obj/item/device/radio/headset/heads/captain + uniform = /obj/item/clothing/under/rank/captain + suit = /obj/item/clothing/suit/armor/vest/capcarapace + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/caphat + backpack_contents = list(/obj/item/weapon/storage/box/silver_ids=1,\ + /obj/item/weapon/melee/classic_baton/telescopic=1) + + backpack = /obj/item/weapon/storage/backpack/captain + satchel = /obj/item/weapon/storage/backpack/satchel_cap + +/datum/outfit/job/captain/post_equip(mob/living/carbon/human/H) + ..() + + var/obj/item/clothing/under/U = H.w_uniform U.attachTie(new /obj/item/clothing/tie/medal/gold/captain()) - H.equip_to_slot_or_del(U, slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/capcarapace(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses) - //Equip ID box & telebaton - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H.back), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) - - //Implant him var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 @@ -44,9 +52,6 @@ Captain minor_announce("Captain [H.real_name] on deck!") -/datum/job/captain/get_access() - return get_all_accesses() - /* Head of Personnel */ @@ -63,9 +68,7 @@ Head of Personnel req_admin_notify = 1 minimal_player_age = 10 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/hop - default_headset = /obj/item/device/radio/headset/heads/hop + outfit = /datum/outfit/job/hop access = list(access_security, access_sec_doors, access_court, access_weapons, access_medical, access_engine, access_change_ids, access_ai_upload, access_eva, access_heads, @@ -81,13 +84,19 @@ Head of Personnel access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom) -/datum/job/hop/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/head/hopcap(H), slot_head) +/datum/outfit/job/hop + name = "Head of Personnel" - //Equip ID box & telebaton - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + id = /obj/item/weapon/card/id/silver + belt = /obj/item/device/pda/heads/hop + ears = /obj/item/device/radio/headset/heads/hop + uniform = /obj/item/clothing/under/rank/head_of_personnel + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hopcap + backpack_contents = list(/obj/item/weapon/storage/box/ids=1,\ + /obj/item/weapon/melee/classic_baton/telescopic=1) - announce_head(H, list("Supply", "Service")) //tell underlings (suuply/service) they have a head +/datum/outfit/job/hop/post_equip(mob/living/carbon/human/H) + ..() + + announce_head(H, list("Supply", "Service")) diff --git a/code/game/jobs/job/cargo_service.dm b/code/game/jobs/job/cargo_service.dm index 5fcb2be02bf..1eeca19eaa5 100644 --- a/code/game/jobs/job/cargo_service.dm +++ b/code/game/jobs/job/cargo_service.dm @@ -12,17 +12,20 @@ Quartermaster supervisors = "the head of personnel" selection_color = "#d7b088" - default_pda = /obj/item/device/pda/quartermaster - default_headset = /obj/item/device/radio/headset/headset_cargo + outfit = /datum/outfit/job/quartermaster access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) minimal_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) -/datum/job/qm/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses) - H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand) +/datum/outfit/job/quartermaster + name = "Quartermaster" + + belt = /obj/item/device/pda/quartermaster + ears = /obj/item/device/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/rank/cargo + shoes = /obj/item/clothing/shoes/sneakers/brown + glasses = /obj/item/clothing/glasses/sunglasses + l_hand = /obj/item/weapon/clipboard /* Cargo Technician @@ -38,15 +41,18 @@ Cargo Technician supervisors = "the quartermaster and the head of personnel" selection_color = "#dcba97" - default_pda = /obj/item/device/pda/cargo - default_headset = /obj/item/device/radio/headset/headset_cargo + outfit = /datum/outfit/job/cargo_tech access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting, access_mineral_storeroom) -/datum/job/cargo_tech/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) +/datum/outfit/job/cargo_tech + name = "Cargo Technician" + + belt = /obj/item/device/pda/cargo + ears = /obj/item/device/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/rank/cargotech + /* Shaft Miner @@ -62,23 +68,25 @@ Shaft Miner supervisors = "the quartermaster and the head of personnel" selection_color = "#dcba97" - default_pda = /obj/item/device/pda/shaftminer - default_headset = /obj/item/device/radio/headset/headset_cargo - default_backpack = /obj/item/weapon/storage/backpack/industrial - default_satchel = /obj/item/weapon/storage/backpack/satchel_eng - default_storagebox = /obj/item/weapon/storage/box/engineer + outfit = /datum/outfit/job/miner access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station, access_mineral_storeroom) minimal_access = list(access_mining, access_mining_station, access_mailsorting, access_mineral_storeroom) -/datum/job/mining/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) +/datum/outfit/job/miner + name = "Shaft Miner" - H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/mining_voucher(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/patch/styptic(H), slot_l_store) + belt = /obj/item/device/pda/shaftminer + ears = /obj/item/device/radio/headset/headset_cargo + uniform = /obj/item/clothing/under/rank/miner + l_pocket = /obj/item/weapon/reagent_containers/pill/patch/styptic + backpack_contents = list(/obj/item/weapon/crowbar=1,\ + /obj/item/weapon/storage/bag/ore=1,\ + /obj/item/weapon/mining_voucher=1) + + backpack = /obj/item/weapon/storage/backpack/industrial + satchel = /obj/item/weapon/storage/backpack/satchel_eng + box = /obj/item/weapon/storage/box/engineer /* Bartender @@ -94,21 +102,20 @@ Bartender supervisors = "the head of personnel" selection_color = "#bbe291" - default_pda = /obj/item/device/pda/bar - default_headset = /obj/item/device/radio/headset/headset_srv + outfit = /datum/outfit/job/bartender access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons) minimal_access = list(access_bar) -/datum/job/bartender/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) +/datum/outfit/job/bartender + name = "Bartender" + + belt = /obj/item/device/pda/bar + ears = /obj/item/device/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/bartender + suit = /obj/item/clothing/suit/armor/vest + backpack_contents = list(/obj/item/ammo_casing/shotgun/beanbag=4) /* Cook @@ -123,26 +130,30 @@ Cook spawn_positions = 1 supervisors = "the head of personnel" selection_color = "#bbe291" - var/global/cooks = 0 //Counts cooks amount + var/cooks = 0 //Counts cooks amount - default_pda = /obj/item/device/pda/cook - default_headset = /obj/item/device/radio/headset/headset_srv + outfit = /datum/outfit/job/cook access = list(access_hydroponics, access_bar, access_kitchen, access_morgue) minimal_access = list(access_kitchen, access_morgue) -/datum/job/cook/equip_items(mob/living/carbon/human/H) - cooks += 1 +/datum/outfit/job/cook + name = "Cook" + + belt = /obj/item/device/pda/cook + ears = /obj/item/device/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/chef + suit = /obj/item/clothing/suit/toggle/chef + head = /obj/item/clothing/head/chefhat + +/datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H) + ..() + var/datum/job/cook/J = SSjob.GetJob(H.job) + J.cooks++ + if(J.cooks>1)//Cooks + suit = /obj/item/clothing/suit/apron/chef + head = /obj/item/clothing/head/soft/mime - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - switch(cooks) - if(1) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/chef(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(H), slot_head) - else - H.equip_to_slot_or_del(new /obj/item/clothing/suit/apron/chef(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/soft/mime(H), slot_head) /* Botanist @@ -158,18 +169,21 @@ Botanist supervisors = "the head of personnel" selection_color = "#bbe291" - default_pda = /obj/item/device/pda/botanist - default_headset = /obj/item/device/radio/headset/headset_srv + outfit = /datum/outfit/job/botanist access = list(access_hydroponics, access_bar, access_kitchen, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning. minimal_access = list(access_hydroponics, access_morgue) // Removed tox and chem access because STOP PISSING OFF THE CHEMIST GUYS // //Removed medical access because WHAT THE FUCK YOU AREN'T A DOCTOR YOU GROW WHEAT //Given Morgue access because they have a viable means of cloning. -/datum/job/hydro/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/hydroponics(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/botanic_leather(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/analyzer/plant_analyzer(H), slot_s_store) +/datum/outfit/job/botanist + name = "Botanist" + + belt = /obj/item/device/pda/botanist + ears = /obj/item/device/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/hydroponics + suit = /obj/item/clothing/suit/apron + gloves =/obj/item/clothing/gloves/botanic_leather + suit_store = /obj/item/device/analyzer/plant_analyzer + /* Janitor @@ -186,12 +200,14 @@ Janitor selection_color = "#bbe291" var/global/janitors = 0 - default_pda = /obj/item/device/pda/janitor - default_headset = /obj/item/device/radio/headset/headset_srv + outfit = /datum/outfit/job/janitor access = list(access_janitor, access_maint_tunnels) minimal_access = list(access_janitor, access_maint_tunnels) -/datum/job/janitor/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) +/datum/outfit/job/janitor + name = "Janitor" + + belt = /obj/item/device/pda/janitor + ears = /obj/item/device/radio/headset/headset_srv + uniform = /obj/item/clothing/under/rank/janitor \ No newline at end of file diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 01ab44ea8a1..c034b5696e5 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -12,25 +12,32 @@ Clown supervisors = "the head of personnel" selection_color = "#dddddd" - default_pda = /obj/item/device/pda/clown - default_backpack = /obj/item/weapon/storage/backpack/clown - default_satchel = /obj/item/weapon/storage/backpack/clown + outfit = /datum/outfit/job/clown access = list(access_theatre) minimal_access = list(access_theatre) -/datum/job/clown/equip_items(mob/living/carbon/human/H) - H.fully_replace_character_name(H.real_name, pick(clown_names)) // Give him a temporary random name to prevent identity revealing +/datum/outfit/job/clown + name = "Clown" - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(H), slot_r_store) + belt = /obj/item/device/pda/clown + uniform = /obj/item/clothing/under/rank/clown + shoes = /obj/item/clothing/shoes/clown_shoes + mask = /obj/item/clothing/mask/gas/clown_hat + l_pocket = /obj/item/weapon/bikehorn + r_pocket = /obj/item/toy/crayon/rainbow + backpack_contents = list(/obj/item/weapon/stamp/clown=1,/obj/item/weapon/reagent_containers/spray/waterflower=1) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H, 50), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/spray/waterflower(H), slot_in_backpack) + backpack = /obj/item/weapon/storage/backpack/clown + satchel = /obj/item/weapon/storage/backpack/clown + +/datum/outfit/job/clown/pre_equip(mob/living/carbon/human/H) + ..() + H.fully_replace_character_name(H.real_name, pick(clown_names)) + +/datum/outfit/job/clown/post_equip(mob/living/carbon/human/H) + ..() + new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H.back, 50) H.dna.add_mutation(CLOWNMUT) H.rename_self("clown") @@ -49,24 +56,30 @@ Mime supervisors = "the head of personnel" selection_color = "#dddddd" - default_pda = /obj/item/device/pda/mime - default_backpack = /obj/item/weapon/storage/backpack/mime - default_satchel = /obj/item/weapon/storage/backpack/mime + outfit = /datum/outfit/job/mime access = list(access_theatre) minimal_access = list(access_theatre) -/datum/job/mime/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/mime(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/mime(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/suspenders(H), slot_wear_suit) +/datum/outfit/job/mime + name = "Mime" - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/toy/crayon/mime(H), slot_in_backpack) + belt = /obj/item/device/pda/mime + uniform = /obj/item/clothing/under/rank/mime + mask = /obj/item/clothing/mask/gas/mime + gloves = /obj/item/clothing/gloves/color/white + head = /obj/item/clothing/head/beret + suit = /obj/item/clothing/suit/suspenders + l_pocket = /obj/item/weapon/bikehorn + r_pocket = /obj/item/toy/crayon/rainbow + backpack_contents = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing=1,\ + /obj/item/toy/crayon/mime=1) + backpack = /obj/item/weapon/storage/backpack/mime + satchel = /obj/item/weapon/storage/backpack/mime + +/datum/outfit/job/mime/post_equip(mob/living/carbon/human/H) + ..() if(H.mind) H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) @@ -88,17 +101,19 @@ Librarian supervisors = "the head of personnel" selection_color = "#dddddd" - default_pda = /obj/item/device/pda/librarian + outfit = /datum/outfit/job/librarian access = list(access_library) minimal_access = list(access_library) -/datum/job/librarian/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/librarian(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/books(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/barcodescanner(H), slot_r_store) - H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) +/datum/outfit/job/librarian + name = "Librarian" + + belt = /obj/item/device/pda/librarian + uniform = /obj/item/clothing/under/rank/librarian + l_hand = /obj/item/weapon/storage/bag/books + r_pocket = /obj/item/weapon/barcodescanner + l_pocket = /obj/item/device/laser_pointer /* Lawyer @@ -113,25 +128,28 @@ Lawyer spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#dddddd" - var/global/lawyers = 0 //Counts lawyer amount + var/lawyers = 0 //Counts lawyer amount - default_pda = /obj/item/device/pda/lawyer - default_headset = /obj/item/device/radio/headset/headset_sec + outfit = /datum/outfit/job/lawyer access = list(access_lawyer, access_court, access_sec_doors) minimal_access = list(access_lawyer, access_court, access_sec_doors) -/datum/job/lawyer/equip_items(mob/living/carbon/human/H) - lawyers += 1 +/datum/outfit/job/lawyer + name = "Lawyer" - switch(lawyers) - if(1) - H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/bluesuit(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/lawyer(H), slot_wear_suit) - else - H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/purpsuit(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/lawyer/purple(H), slot_wear_suit) + belt = /obj/item/device/pda/lawyer + ears = /obj/item/device/radio/headset/headset_sec + uniform = /obj/item/clothing/under/lawyer/bluesuit + suit = /obj/item/clothing/suit/toggle/lawyer + shoes = /obj/item/clothing/shoes/laceup + l_hand = /obj/item/weapon/storage/briefcase + l_pocket = /obj/item/device/laser_pointer - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) +/datum/outfit/job/lawyer/pre_equip(mob/living/carbon/human/H) + ..() + var/datum/job/lawyer/J = SSjob.GetJob(H.job) + J.lawyers++ + if(J.lawyers>1) + uniform = /obj/item/clothing/under/lawyer/purpsuit + suit = /obj/item/clothing/suit/toggle/lawyer/purple \ No newline at end of file diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index 87ffe8f8b19..261193a8563 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -13,14 +13,19 @@ Chaplain supervisors = "the head of personnel" selection_color = "#dddddd" - default_pda = /obj/item/device/pda/chaplain + outfit = /datum/outfit/job/chaplain access = list(access_morgue, access_chapel_office, access_crematorium) minimal_access = list(access_morgue, access_chapel_office, access_crematorium) -/datum/job/chaplain/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) +/datum/outfit/job/chaplain + name = "Chaplain" + + belt = /obj/item/device/pda/chaplain + uniform = /obj/item/clothing/under/rank/chaplain + +/datum/outfit/job/chaplain/post_equip(mob/living/carbon/human/H) + ..() var/obj/item/weapon/storage/book/bible/B = new /obj/item/weapon/storage/book/bible/booze(H) var/new_religion = "Christianity" diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 1d7961293cf..a984e5f2147 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -14,13 +14,7 @@ Chief Engineer req_admin_notify = 1 minimal_player_age = 7 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/ce - default_pda_slot = slot_l_store - default_headset = /obj/item/device/radio/headset/heads/ce - default_backpack = /obj/item/weapon/storage/backpack/industrial - default_satchel = /obj/item/weapon/storage/backpack/satchel_eng - default_storagebox = /obj/item/weapon/storage/box/engineer + outfit = /datum/outfit/job/ce access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_atmospherics, access_emergency_storage, access_eva, @@ -31,17 +25,27 @@ Chief Engineer access_heads, access_construction, access_sec_doors, access_minisat, access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_mineral_storeroom) -/datum/job/chief_engineer/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black/ce(H), slot_gloves) +/datum/outfit/job/ce + name = "Chief Engineer" - //Equip telebaton - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + id = /obj/item/weapon/card/id/silver + belt = /obj/item/weapon/storage/belt/utility/full + l_pocket = /obj/item/device/pda/heads/ce + ears = /obj/item/device/radio/headset/heads/ce + uniform = /obj/item/clothing/under/rank/chief_engineer + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hardhat/white + gloves = /obj/item/clothing/gloves/color/black/ce + backpack_contents = list(/obj/item/weapon/melee/classic_baton/telescopic=1) - announce_head(H, list("Engineering")) //tell underlings (engineering radio) they have a head + backpack = /obj/item/weapon/storage/backpack/industrial + satchel = /obj/item/weapon/storage/backpack/satchel_eng + box = /obj/item/weapon/storage/box/engineer + pda_slot = slot_l_store + +/datum/outfit/job/ce/post_equip(mob/living/carbon/human/H) + ..() + announce_head(H, list("Engineering")) /* Station Engineer @@ -57,24 +61,28 @@ Station Engineer supervisors = "the chief engineer" selection_color = "#fff5cc" - default_pda = /obj/item/device/pda/engineering - default_pda_slot = slot_l_store - default_headset = /obj/item/device/radio/headset/headset_eng - default_backpack = /obj/item/weapon/storage/backpack/industrial - default_satchel = /obj/item/weapon/storage/backpack/satchel_eng - default_storagebox = /obj/item/weapon/storage/box/engineer + outfit = /datum/outfit/job/engineer access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics, access_tcomsat) minimal_access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_tcomsat) -/datum/job/engineer/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/device/t_scanner(H), slot_r_store) +/datum/outfit/job/engineer + name = "Station Engineer" + + belt = /obj/item/weapon/storage/belt/utility/full + l_pocket = /obj/item/device/pda/engineering + ears = /obj/item/device/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/engineer + shoes = /obj/item/clothing/shoes/workboots + head = /obj/item/clothing/head/hardhat + r_pocket = /obj/item/device/t_scanner + + backpack = /obj/item/weapon/storage/backpack/industrial + satchel = /obj/item/weapon/storage/backpack/satchel_eng + box = /obj/item/weapon/storage/box/engineer + pda_slot = slot_l_store /* Atmospheric Technician @@ -90,17 +98,20 @@ Atmospheric Technician supervisors = "the chief engineer" selection_color = "#fff5cc" - default_pda = /obj/item/device/pda/atmos - default_pda_slot = slot_l_store - default_headset = /obj/item/device/radio/headset/headset_eng - default_storagebox = /obj/item/weapon/storage/box/engineer + outfit = /datum/outfit/job/atmos access = list(access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics) minimal_access = list(access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction) -/datum/job/atmos/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/device/analyzer(H), slot_r_store) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/atmostech/(H), slot_belt) \ No newline at end of file +/datum/outfit/job/atmos + name = "Atmospheric Technician" + + belt = /obj/item/weapon/storage/belt/utility/atmostech + l_pocket = /obj/item/device/pda/atmos + ears = /obj/item/device/radio/headset/headset_eng + uniform = /obj/item/clothing/under/rank/atmospheric_technician + r_pocket = /obj/item/device/t_scanner + + box = /obj/item/weapon/storage/box/engineer + pda_slot = slot_l_store \ No newline at end of file diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index c688e4a4303..6ed57ced1d4 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -39,63 +39,26 @@ //If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.) var/minimal_player_age = 0 - //Job specific items - var/default_id = /obj/item/weapon/card/id //this is just the looks of it - var/default_pda = /obj/item/device/pda - var/default_pda_slot = slot_belt - var/default_headset = /obj/item/device/radio/headset - var/default_backpack = /obj/item/weapon/storage/backpack - var/default_satchel = /obj/item/weapon/storage/backpack/satchel_norm - var/default_storagebox= /obj/item/weapon/storage/box/survival + var/outfit = null //Only override this proc /datum/job/proc/equip_items(mob/living/carbon/human/H) -//Or this proc -/datum/job/proc/equip_backpack(mob/living/carbon/human/H) - var/obj/item/weapon/storage/backpack/BPK - if(H.backbag == 1) //Backpack - BPK = new default_backpack(H) - else //Satchel - BPK = new default_satchel(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) - //But don't override this /datum/job/proc/equip(mob/living/carbon/human/H) if(!H) return 0 - //Equip backpack - equip_backpack(H) - //Equip the rest of the gear if(H.dna) H.dna.species.before_equip_job(src, H) - equip_items(H) + if(outfit) + H.equipOutfit(outfit) if(H.dna) H.dna.species.after_equip_job(src, H) - //Equip ID - var/obj/item/weapon/card/id/C = new default_id(H) - C.access = get_access() - C.registered_name = H.real_name - C.assignment = H.job - C.update_label() - H.equip_to_slot_or_del(C, slot_wear_id) - - //Equip PDA - var/obj/item/device/pda/PDA = new default_pda(H) - PDA.owner = H.real_name - PDA.ownjob = H.job - PDA.update_label() - H.equip_to_slot_or_del(PDA, default_pda_slot) - - //Equip headset - H.equip_to_slot_or_del(new src.default_headset(H), slot_ears) - /datum/job/proc/apply_fingerprints(mob/living/carbon/human/H) if(!istype(H)) return @@ -169,8 +132,45 @@ /datum/job/proc/config_check() return 1 -/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. +/datum/outfit/job + name = "Standard Gear" + + uniform = /obj/item/clothing/under/color/grey + id = /obj/item/weapon/card/id + ears = /obj/item/device/radio/headset + belt = /obj/item/device/pda + back = /obj/item/weapon/storage/backpack + shoes = /obj/item/clothing/shoes/sneakers/black + + var/backpack = /obj/item/weapon/storage/backpack + var/satchel = /obj/item/weapon/storage/backpack/satchel_norm + var/box = /obj/item/weapon/storage/box/survival + + var/pda_slot = slot_belt + +/datum/outfit/job/pre_equip(mob/living/carbon/human/H) + if(H.backbag == 1) //Backpack + back = backpack + else //Satchel + back = satchel + + backpack_contents[box] = 1 + +/datum/outfit/job/post_equip(mob/living/carbon/human/H) + var/obj/item/weapon/card/id/C = H.wear_id + var/datum/job/J = SSjob.GetJob(H.job) // Not sure the best idea + C.access = J.get_access() + C.registered_name = H.real_name + C.assignment = H.job + C.update_label() + + var/obj/item/device/pda/PDA = H.get_item_by_slot(pda_slot) + PDA.owner = H.real_name + PDA.ownjob = H.job + PDA.update_label() + +/datum/outfit/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. spawn(4) //to allow some initialization if(announcement_systems.len) var/obj/machinery/announcement_system/announcer = pick(announcement_systems) - announcer.announce("NEWHEAD", H.real_name, H.job, channels) \ No newline at end of file + announcer.announce("NEWHEAD", H.real_name, H.job, channels) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 6943b3e27eb..4566d4fb2a7 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -14,11 +14,7 @@ Chief Medical Officer req_admin_notify = 1 minimal_player_age = 7 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/cmo - default_headset = /obj/item/device/radio/headset/heads/cmo - default_backpack = /obj/item/weapon/storage/backpack/medic - default_satchel = /obj/item/weapon/storage/backpack/satchel_med + outfit = /datum/outfit/job/cmo access = list(access_medical, access_morgue, access_genetics, access_heads, access_mineral_storeroom, access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, @@ -27,14 +23,24 @@ Chief Medical Officer access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_keycard_auth, access_sec_doors) -/datum/job/cmo/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/cmo(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) +/datum/outfit/job/cmo + name = "Chief Medical Officer" + id = /obj/item/weapon/card/id/silver + belt = /obj/item/device/pda/heads/cmo + ears = /obj/item/device/radio/headset/heads/cmo + uniform = /obj/item/clothing/under/rank/chief_medical_officer + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat/cmo + l_hand = /obj/item/weapon/storage/firstaid/regular + suit_store = /obj/item/device/flashlight/pen + backpack_contents = list(/obj/item/weapon/melee/classic_baton/telescopic=1) + + backpack = /obj/item/weapon/storage/backpack/medic + satchel = /obj/item/weapon/storage/backpack/satchel_med + +/datum/outfit/job/cmo/post_equip(mob/living/carbon/human/H) + ..() announce_head(H, list("Medical")) //tell underlings (medical radio) they have a head /* @@ -51,20 +57,24 @@ Medical Doctor supervisors = "the chief medical officer" selection_color = "#ffeef0" - default_pda = /obj/item/device/pda/medical - default_headset = /obj/item/device/radio/headset/headset_med - default_backpack = /obj/item/weapon/storage/backpack/medic - default_satchel = /obj/item/weapon/storage/backpack/satchel_med + outfit = /datum/outfit/job/doctor access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_mineral_storeroom) minimal_access = list(access_medical, access_morgue, access_surgery) -/datum/job/doctor/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) +/datum/outfit/job/doctor + name = "Medical Doctor" + + belt = /obj/item/device/pda/medical + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/weapon/storage/firstaid/regular + suit_store = /obj/item/device/flashlight/pen + + backpack = /obj/item/weapon/storage/backpack/medic + satchel = /obj/item/weapon/storage/backpack/satchel_med /* Chemist @@ -80,16 +90,19 @@ Chemist supervisors = "the chief medical officer" selection_color = "#ffeef0" - default_pda = /obj/item/device/pda/chemist - default_headset = /obj/item/device/radio/headset/headset_med + outfit = /datum/outfit/job/chemist access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_mineral_storeroom) minimal_access = list(access_medical, access_chemistry, access_mineral_storeroom) -/datum/job/chemist/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/chemist(H), slot_wear_suit) +/datum/outfit/job/chemist + name = "Chemist" + + belt = /obj/item/device/pda/chemist + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/chemist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/chemist /* Geneticist @@ -105,17 +118,20 @@ Geneticist supervisors = "the chief medical officer and research director" selection_color = "#ffeef0" - default_pda = /obj/item/device/pda/geneticist - default_headset = /obj/item/device/radio/headset/headset_medsci + outfit = /datum/outfit/job/geneticist access = list(access_medical, access_morgue, access_chemistry, access_virology, access_genetics, access_research, access_xenobiology, access_robotics, access_mineral_storeroom, access_tech_storage) minimal_access = list(access_medical, access_morgue, access_genetics, access_research) -/datum/job/geneticist/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/genetics(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) +/datum/outfit/job/geneticist + name = "Geneticist" + + belt = /obj/item/device/pda/geneticist + ears = /obj/item/device/radio/headset/headset_medsci + uniform = /obj/item/clothing/under/rank/geneticist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/genetics + suit_store = /obj/item/device/flashlight/pen /* Virologist @@ -131,18 +147,21 @@ Virologist supervisors = "the chief medical officer" selection_color = "#ffeef0" - default_pda = /obj/item/device/pda/viro - default_headset = /obj/item/device/radio/headset/headset_med - default_backpack = /obj/item/weapon/storage/backpack/medic - default_satchel = /obj/item/weapon/storage/backpack/satchel_med + outfit = /datum/outfit/job/virologist access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_mineral_storeroom) minimal_access = list(access_medical, access_virology, access_mineral_storeroom) -/datum/job/virologist/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/virologist(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) +/datum/outfit/job/virologist + name = "Virologist" + belt = /obj/item/device/pda/viro + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/virologist + mask = /obj/item/clothing/mask/surgical + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/virologist + suit_store = /obj/item/device/flashlight/pen + + backpack = /obj/item/weapon/storage/backpack/medic + satchel = /obj/item/weapon/storage/backpack/satchel_med \ No newline at end of file diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index f6b4c365bb8..2fc9385d45c 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -14,9 +14,7 @@ Research Director req_admin_notify = 1 minimal_player_age = 7 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/rd - default_headset = /obj/item/device/radio/headset/heads/rd + outfit = /datum/outfit/job/rd access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, access_tox_storage, access_teleporter, access_sec_doors, @@ -29,14 +27,24 @@ Research Director access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom, access_tech_storage, access_minisat) -/datum/job/rd/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/research_director(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) +/datum/outfit/job/rd + name = "Research Director" + id = /obj/item/weapon/card/id/silver + belt = /obj/item/device/pda/heads/rd + ears = /obj/item/device/radio/headset/heads/rd + uniform = /obj/item/clothing/under/rank/research_director + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/weapon/clipboard + l_pocket = /obj/item/device/laser_pointer + backpack_contents = list(/obj/item/weapon/melee/classic_baton/telescopic=1) + + backpack = /obj/item/weapon/storage/backpack/medic + satchel = /obj/item/weapon/storage/backpack/satchel_med + +/datum/outfit/job/rd/post_equip(mob/living/carbon/human/H) + ..() announce_head(H, list("Science")) //tell underlings (science radio) they have a head /* @@ -53,16 +61,19 @@ Scientist supervisors = "the research director" selection_color = "#ffeeff" - default_pda = /obj/item/device/pda/toxins - default_headset = /obj/item/device/radio/headset/headset_sci + outfit = /datum/outfit/job/scientist access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom, access_tech_storage, access_genetics) minimal_access = list(access_tox, access_tox_storage, access_research, access_xenobiology, access_mineral_storeroom) -/datum/job/scientist/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/science(H), slot_wear_suit) +/datum/outfit/job/scientist + name = "Scientist" + + belt = /obj/item/device/pda/toxins + ears = /obj/item/device/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/scientist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/science /* Roboticist @@ -78,15 +89,18 @@ Roboticist supervisors = "research director" selection_color = "#ffeeff" - default_pda = /obj/item/device/pda/roboticist - default_headset = /obj/item/device/radio/headset/headset_sci - default_pda_slot = slot_l_store + outfit = /datum/outfit/job/roboticist access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research, access_mineral_storeroom, access_xenobiology, access_genetics) minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research, access_mineral_storeroom) -/datum/job/roboticist/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) \ No newline at end of file +/datum/outfit/job/roboticist + name = "Roboticist" + + belt = /obj/item/weapon/storage/belt/utility/full + l_pocket = /obj/item/device/pda/roboticist + ears = /obj/item/device/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/roboticist + suit = /obj/item/clothing/suit/toggle/labcoat + + pda_slot = slot_l_store \ No newline at end of file diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 24e2af7988c..f98d0578dcc 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -20,11 +20,7 @@ Head of Security req_admin_notify = 1 minimal_player_age = 14 - default_id = /obj/item/weapon/card/id/silver - default_pda = /obj/item/device/pda/heads/hos - default_headset = /obj/item/device/radio/headset/heads/hos/alt - default_backpack = /obj/item/weapon/storage/backpack/security - default_satchel = /obj/item/weapon/storage/backpack/satchel_sec + outfit = /datum/outfit/job/hos access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons, access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, @@ -35,25 +31,33 @@ Head of Security access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway) -/datum/job/hos/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/hos/trenchcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black/hos(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/head/HoS/beret(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) - H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(H), slot_s_store) +/datum/outfit/job/hos + name = "Head of Security" - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + id = /obj/item/weapon/card/id/silver + belt = /obj/item/device/pda/heads/hos + ears = /obj/item/device/radio/headset/heads/hos/alt + uniform = /obj/item/clothing/under/rank/head_of_security + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/hos/trenchcoat + gloves = /obj/item/clothing/gloves/color/black/hos + head = /obj/item/clothing/head/HoS/beret + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + suit_store = /obj/item/weapon/gun/energy/gun + backpack_contents = list(/obj/item/weapon/melee/classic_baton/telescopic=1,\ + /obj/item/weapon/restraints/handcuffs=1) + backpack = /obj/item/weapon/storage/backpack/security + satchel = /obj/item/weapon/storage/backpack/satchel_sec + +/datum/outfit/job/hos/post_equip(mob/living/carbon/human/H) + ..() var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 H.sec_hud_set_implants() announce_head(H, list("Security")) //tell underlings (security radio) they have a head - /* Warden */ @@ -69,36 +73,41 @@ Warden selection_color = "#ffeeee" minimal_player_age = 7 - default_pda = /obj/item/device/pda/warden - default_headset = /obj/item/device/radio/headset/headset_sec/alt - default_backpack = /obj/item/weapon/storage/backpack/security - default_satchel = /obj/item/weapon/storage/backpack/satchel_sec + outfit = /datum/outfit/job/warden access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons) //See /datum/job/warden/get_access() -/datum/job/warden/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/warden(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/warden(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) - H.equip_to_slot_or_del(new /obj/item/device/assembly/flash/handheld(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) - - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - - var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) - L.imp_in = H - L.implanted = 1 - H.sec_hud_set_implants() - /datum/job/warden/get_access() var/list/L = list() L = ..() | check_config_for_sec_maint() return L +/datum/outfit/job/warden + name = "Warden" + + belt = /obj/item/device/pda/warden + ears = /obj/item/device/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/warden + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/vest/warden + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/warden + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + l_pocket = /obj/item/device/assembly/flash/handheld + suit_store = /obj/item/weapon/gun/energy/gun/advtaser + backpack_contents = list(/obj/item/weapon/restraints/handcuffs=1) + + backpack = /obj/item/weapon/storage/backpack/security + satchel = /obj/item/weapon/storage/backpack/satchel_sec + +/datum/outfit/job/warden/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) + L.imp_in = H + L.implanted = 1 + H.sec_hud_set_implants() + /* Detective */ @@ -114,28 +123,32 @@ Detective selection_color = "#ffeeee" minimal_player_age = 7 - default_pda = /obj/item/device/pda/detective - default_headset = /obj/item/device/radio/headset/headset_sec + outfit = /datum/outfit/job/detective access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons, access_brig, access_security) minimal_access = list(access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court, access_weapons) -/datum/job/detective/equip_items(mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/det(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/toy/crayon/white(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/lighter(H), slot_r_store) +/datum/outfit/job/detective + name = "Detective" - var/obj/item/clothing/mask/cigarette/cig = new /obj/item/clothing/mask/cigarette(H) + belt = /obj/item/device/pda/detective + ears = /obj/item/device/radio/headset/headset_sec + uniform = /obj/item/clothing/under/rank/det + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/det_suit + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/det_hat + l_pocket = /obj/item/toy/crayon/white + r_pocket = /obj/item/weapon/lighter + backpack_contents = list(/obj/item/weapon/storage/box/evidence=1,\ + /obj/item/device/detective_scanner=1,\ + /obj/item/weapon/melee/classic_baton/telescopic=1) + mask = /obj/item/clothing/mask/cigarette + +/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H) + ..() + var/obj/item/clothing/mask/cigarette/cig = H.wear_mask cig.light("") - H.equip_to_slot_or_del(cig, slot_wear_mask) - - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H @@ -156,102 +169,108 @@ Security Officer supervisors = "the head of security, and the head of your assigned department (if applicable)" selection_color = "#ffeeee" minimal_player_age = 7 - var/list/dep_access = null - default_pda = /obj/item/device/pda/security - default_headset = /obj/item/device/radio/headset/headset_sec/alt - default_backpack = /obj/item/weapon/storage/backpack/security - default_satchel = /obj/item/weapon/storage/backpack/satchel_sec - default_storagebox = /obj/item/weapon/storage/box/security + outfit = /datum/outfit/job/security access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue, access_weapons, access_forensics_lockers) minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_weapons) //But see /datum/job/warden/get_access() -/datum/job/officer/equip_items(mob/living/carbon/human/H) - assign_sec_to_department(H) +/datum/job/officer/get_access() + var/list/L = list() + L |= ..() | check_config_for_sec_maint() + return L - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/sec(H), slot_head) - H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(H), slot_gloves) - H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) - H.equip_to_slot_or_del(new /obj/item/device/assembly/flash/handheld(H), slot_l_store) +var/list/sec_departments = list("engineering", "supply", "medical", "science") - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_in_backpack) +/datum/outfit/job/security + name = "Security Officer" + + belt = /obj/item/device/pda/security + ears = /obj/item/device/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/helmet/sec + suit = /obj/item/clothing/suit/armor/vest + shoes = /obj/item/clothing/shoes/jackboots + l_pocket = /obj/item/device/assembly/flash/handheld + suit_store = /obj/item/weapon/gun/energy/gun/advtaser + backpack_contents = list(/obj/item/weapon/restraints/handcuffs=1,\ + /obj/item/weapon/melee/baton/loaded=1) + + backpack = /obj/item/weapon/storage/backpack/security + satchel = /obj/item/weapon/storage/backpack/satchel_sec + box = /obj/item/weapon/storage/box/security + + var/department = null + var/tie = null + var/list/dep_access = null + var/destination = null + var/spawn_point = null + +/datum/outfit/job/security/pre_equip(mob/living/carbon/human/H) + ..() + if(sec_departments.len) + department = pick(sec_departments) + sec_departments -= department + switch(department) + if("supply") + ears = /obj/item/device/radio/headset/headset_sec/alt/department/supply + dep_access = list(access_mailsorting, access_mining) + destination = /area/security/checkpoint/supply + spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in department_security_spawns + tie = /obj/item/clothing/tie/armband/cargo + if("engineering") + ears = /obj/item/device/radio/headset/headset_sec/alt/department/engi + dep_access = list(access_construction, access_engine) + destination = /area/security/checkpoint/engineering + spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in department_security_spawns + tie = /obj/item/clothing/tie/armband/engine + if("medical") + ears = /obj/item/device/radio/headset/headset_sec/alt/department/med + dep_access = list(access_medical) + destination = /area/security/checkpoint/medical + spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in department_security_spawns + tie = /obj/item/clothing/tie/armband/medblue + if("science") + ears = /obj/item/device/radio/headset/headset_sec/alt/department/sci + dep_access = list(access_research) + destination = /area/security/checkpoint/science + spawn_point = locate(/obj/effect/landmark/start/depsec/science) in department_security_spawns + tie = /obj/item/clothing/tie/armband/science + +/datum/outfit/job/security/post_equip(mob/living/carbon/human/H) + ..() var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H L.implanted = 1 H.sec_hud_set_implants() -/datum/job/officer/get_access() - var/list/L = list() - if(dep_access) - L |= dep_access.Copy() - L |= ..() | check_config_for_sec_maint() - dep_access = null; - return L + var/obj/item/clothing/under/U = H.w_uniform + U.attachTie(new tie) -var/list/sec_departments = list("engineering", "supply", "medical", "science") + var/obj/item/weapon/card/id/W = H.wear_id + W.access |= dep_access -/datum/job/officer/proc/assign_sec_to_department(mob/living/carbon/human/H) - if(!sec_departments.len) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform) - else - var/department = pick(sec_departments) - sec_departments -= department - var/destination = null - var/obj/effect/landmark/start/depsec/spawn_point = null - var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/security(H) - - switch(department) - if("supply") - default_headset = /obj/item/device/radio/headset/headset_sec/alt/department/supply - dep_access = list(access_mailsorting, access_mining) - destination = /area/security/checkpoint/supply - spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in department_security_spawns - U.attachTie(new /obj/item/clothing/tie/armband/cargo()) - if("engineering") - default_headset = /obj/item/device/radio/headset/headset_sec/alt/department/engi - dep_access = list(access_construction, access_engine) - destination = /area/security/checkpoint/engineering - spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in department_security_spawns - U.attachTie(new /obj/item/clothing/tie/armband/engine()) - if("medical") - default_headset = /obj/item/device/radio/headset/headset_sec/alt/department/med - dep_access = list(access_medical) - destination = /area/security/checkpoint/medical - spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in department_security_spawns - U.attachTie(new /obj/item/clothing/tie/armband/medblue()) - if("science") - default_headset = /obj/item/device/radio/headset/headset_sec/alt/department/sci - dep_access = list(access_research) - destination = /area/security/checkpoint/science - spawn_point = locate(/obj/effect/landmark/start/depsec/science) in department_security_spawns - U.attachTie(new /obj/item/clothing/tie/armband/science()) - - H.equip_to_slot_or_del(U, slot_w_uniform) - var/teleport = 0 - if(!config.sec_start_brig) - if(destination || spawn_point) - teleport = 1 - if(teleport) - var/turf/T - if(spawn_point) - T = get_turf(spawn_point) - H.Move(T) - else - var/safety = 0 - while(safety < 25) - T = safepick(get_area_turfs(destination)) - if(T && !H.Move(T)) - safety += 1 - continue - else - break - H << "You have been assigned to [department]!" - return + var/teleport = 0 + if(!config.sec_start_brig) + if(destination || spawn_point) + teleport = 1 + if(teleport) + var/turf/T + if(spawn_point) + T = get_turf(spawn_point) + H.Move(T) + else + var/safety = 0 + while(safety < 25) + T = safepick(get_area_turfs(destination)) + if(T && !H.Move(T)) + safety += 1 + continue + else + break + H << "You have been assigned to [department]!" /obj/item/device/radio/headset/headset_sec/department/New() wires = new(src) From 812f5b4094f0410df01b767ba91be9a50cf44f36 Mon Sep 17 00:00:00 2001 From: Firecage Date: Mon, 7 Sep 2015 23:52:30 +0200 Subject: [PATCH 18/28] Fixes the buckling message. --- code/game/objects/buckling.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index eb8fb41d09d..1816bd9b3c9 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -76,7 +76,7 @@ if(buckle_mob(M)) if(M == user) M.visible_message(\ - "[M] buckles themself to [src].",\ + "[M] buckles themself to [src].",\ "You buckle yourself to [src].",\ "You hear metal clanking.") else @@ -90,7 +90,7 @@ if(M) if(M != user) M.visible_message(\ - "[user] unbuckles you from [src].",\ + "[user] unbuckles [M] from [src].",\ "[user] unbuckles you from [src].",\ "You hear metal clanking.") else From 01a4e6653dc0f712a976bddac624a93e7181d4d5 Mon Sep 17 00:00:00 2001 From: palpatine213 Date: Mon, 7 Sep 2015 17:58:43 -0700 Subject: [PATCH 19/28] Cyborgs no longer count against escape alone --- code/game/gamemodes/objective.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index fa97aea7600..59b8fd3081a 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -225,7 +225,7 @@ if(player.mind && player.mind != owner) if(player.stat != DEAD) switch(player.type) - if(/mob/living/silicon/ai, /mob/living/silicon/pai) + if(/mob/living/silicon) //Borgs are technically dead anyways continue if(get_area(player) == A) if(!player.mind.special_role && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) From c2a26c81e7ecb7b82f16a6aae84fcf7ef8235b28 Mon Sep 17 00:00:00 2001 From: AnturK Date: Tue, 8 Sep 2015 14:41:15 +0200 Subject: [PATCH 20/28] Adds Create Custom Outfit admin verb Sechud fix --- code/datums/outfit.dm | 17 +-- code/game/jobs/job/job.dm | 1 + code/modules/admin/admin_verbs.dm | 3 +- code/modules/admin/topic.dm | 29 +++- code/modules/admin/verbs/debug.dm | 13 +- code/modules/admin/verbs/randomverbs.dm | 178 ++++++++++++++++++++++++ 6 files changed, 222 insertions(+), 19 deletions(-) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 9ee454ce6f0..80da62ee49e 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -72,19 +72,4 @@ post_equip(H) - return 1 -//Example -/datum/outfit/test - name = "Test Outfit" - - uniform = /obj/item/clothing/under/color/grey - suit = /obj/item/clothing/suit/space - shoes = /obj/item/clothing/shoes/sneakers/black - head = /obj/item/clothing/head/helmet/space - back = /obj/item/weapon/storage/backpack - mask = /obj/item/clothing/mask/breath - backpack_contents = list(/obj/item/weapon/c4=5,/obj/item/weapon/kitchen/knife=1) - r_hand = /obj/item/weapon/c4 - -/datum/outfit/test/post_equip(mob/living/carbon/human/H) - H.say("I love bombs!") \ No newline at end of file + return 1 \ No newline at end of file diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 6ed57ced1d4..a7b0ab3ca3b 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -163,6 +163,7 @@ C.registered_name = H.real_name C.assignment = H.job C.update_label() + H.sec_hud_set_ID() var/obj/item/device/pda/PDA = H.get_item_by_slot(pda_slot) PDA.owner = H.real_name diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 82e0c143345..a52769f13f2 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -131,7 +131,8 @@ var/list/admin_verbs_debug = list( /proc/machine_upgrade, /client/proc/populate_world, /client/proc/cmd_display_del_log, - /client/proc/reset_latejoin_spawns + /client/proc/reset_latejoin_spawns, + /client/proc/create_outfits ) var/list/admin_verbs_possess = list( /proc/possess, diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 10ef2d85e33..d1275930c8c 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2109,4 +2109,31 @@ message_admins("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]") else - usr << "You may only use this when the game is running" \ No newline at end of file + usr << "You may only use this when the game is running" + + else if(href_list["create_outfit"]) + if(!check_rights(R_ADMIN)) + return + + var/datum/outfit/O = new /datum/outfit + //swap this for js dropdowns sometime + O.name = href_list["outfit_name"] + O.uniform = text2path(href_list["outfit_uniform"]) + O.shoes = text2path(href_list["outfit_shoes"]) + O.gloves = text2path(href_list["outfit_gloves"]) + O.suit = text2path(href_list["outfit_suit"]) + O.head = text2path(href_list["outfit_head"]) + O.back = text2path(href_list["outfit_back"]) + O.mask = text2path(href_list["outfit_mask"]) + O.glasses = text2path(href_list["outfit_glasses"]) + O.r_hand = text2path(href_list["outfit_r_hand"]) + O.l_hand = text2path(href_list["outfit_l_hand"]) + O.suit_store = text2path(href_list["outfit_s_store"]) + O.l_pocket = text2path(href_list["outfit_l_pocket"]) + O.r_pocket = text2path(href_list["outfit_r_pocket"]) + O.id = text2path(href_list["outfit_id"]) + O.belt = text2path(href_list["outfit_belt"]) + O.ears = text2path(href_list["outfit_ears"]) + + custom_outfits.Add(O) + message_admins("[key_name(usr)] created \"[O.name]\" outfit!") \ No newline at end of file diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 1c25137d533..4912c073fbf 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -627,7 +627,7 @@ var/global/list/g_fancy_list_of_types = null var/list/outfits = list("Naked","Custom","As Job...") - var/list/paths = typesof(/datum/outfit) - /datum/outfit + var/list/paths = typesof(/datum/outfit) - /datum/outfit - typesof(/datum/outfit/job) for(var/path in paths) var/datum/outfit/O = path //not much to initalize here but whatever outfits[initial(O.name)] = path @@ -645,6 +645,16 @@ var/global/list/g_fancy_list_of_types = null jobdatum = SSjob.GetJob(jobname) + var/datum/outfit/custom = null + if (dresscode == "Custom") + var/list/custom_names = list() + for(var/datum/outfit/D in custom_outfits) + custom_names[D.name] = D + var/selected_name = input("Select outfit", "Robust quick dress shop") as null|anything in custom_names + custom = custom_names[selected_name] + if(isnull(custom)) + return + feedback_add_details("admin_verb","SEQ") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! for (var/obj/item/I in M) if (istype(I, /obj/item/weapon/implant)) @@ -655,6 +665,7 @@ var/global/list/g_fancy_list_of_types = null //do nothing if ("Custom") //use custom one + M.equipOutfit(custom) if ("As Job...") if(jobdatum) dresscode = jobdatum.title diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index e886190f079..6b1a1d37eb2 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -758,3 +758,181 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] removed latejoin spawnpoints.") message_admins("[key_name_admin(usr)] removed latejoin spawnpoints.") + + + + +var/list/datum/outfit/custom_outfits = list() //Admin created outfits + +/client/proc/create_outfits() + set category = "Debug" + set name = "Create Custom Outfit" + + if(!check_rights(R_DEBUG)) return + + holder.create_outfit() + +/datum/admins/proc/create_outfit() + var/list/uniforms = typesof(/obj/item/clothing/under) + var/list/suits = typesof(/obj/item/clothing/suit) + var/list/gloves = typesof(/obj/item/clothing/gloves) + var/list/shoes = typesof(/obj/item/clothing/shoes) + var/list/headwear = typesof(/obj/item/clothing/head) + var/list/glasses = typesof(/obj/item/clothing/glasses) + var/list/masks = typesof(/obj/item/clothing/mask) + var/list/ids = typesof(/obj/item/weapon/card/id) + + var/uniform_select = "" + + var/suit_select = "" + + var/gloves_select = "" + + var/shoes_select = "" + + var/head_select = "" + + var/glasses_select = "" + + var/mask_select = "" + + var/id_select = "" + + var/dat = {" + Create Outfit +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name: + +
Uniform: + [uniform_select] +
Suit: + [suit_select] +
Back: + +
Belt: + +
Gloves: + [gloves_select] +
Shoes: + [shoes_select] +
Head: + [head_select] +
Mask: + [mask_select] +
Ears: + +
Glasses: + [glasses_select] +
ID: + [id_select] +
Left Pocket: + +
Right Pocket: + +
Suit Store: + +
Right Hand: + +
Left Hand: + +
+
+ +
+ "} + usr << browse(dat, "window=dressup;size=550x600") \ No newline at end of file From 882c404c27b78fca7769d4faec4a0f1d99a1f095 Mon Sep 17 00:00:00 2001 From: CosmicScientist Date: Wed, 9 Sep 2015 01:01:55 +0100 Subject: [PATCH 21/28] Cooldown now in a var. --- code/game/machinery/droneDispenser.dm | 3 +- .../CosmicScientist-DroneCooldown.yml | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/CosmicScientist-DroneCooldown.yml diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index e54e5254b8f..f3d83f1e795 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -9,6 +9,7 @@ var/glass = 0 var/droneMadeRecently = 0 var/outputDirection = SOUTH + var/cooldownTime = 1800 //3 minutes /obj/machinery/droneDispenser/New() ..() @@ -70,7 +71,7 @@ new /obj/item/drone_shell(T) use_power(1000) icon_state = "recharge" - spawn(1800) //3 minute cooldown between shells + spawn(cooldownTime) icon_state = "[initial(icon_state)]" droneMadeRecently = 0 playsound(src, 'sound/machines/ping.ogg', 50, 1) diff --git a/html/changelogs/CosmicScientist-DroneCooldown.yml b/html/changelogs/CosmicScientist-DroneCooldown.yml new file mode 100644 index 00000000000..fce7b79a2c2 --- /dev/null +++ b/html/changelogs/CosmicScientist-DroneCooldown.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: N3X15 + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Drone dispenser now has a var for its cooldown, get var editing." From 0007f75dabd6c6112eb618c6c290a4ef0d992e52 Mon Sep 17 00:00:00 2001 From: CosmicScientist Date: Wed, 9 Sep 2015 01:08:50 +0100 Subject: [PATCH 22/28] Update CosmicScientist-DroneCooldown.yml Whoops N3X15 isn't my name. --- html/changelogs/CosmicScientist-DroneCooldown.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/changelogs/CosmicScientist-DroneCooldown.yml b/html/changelogs/CosmicScientist-DroneCooldown.yml index fce7b79a2c2..65a6b446f7a 100644 --- a/html/changelogs/CosmicScientist-DroneCooldown.yml +++ b/html/changelogs/CosmicScientist-DroneCooldown.yml @@ -22,7 +22,7 @@ ################################# # Your name. -author: N3X15 +author: CosmicScientist # Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. delete-after: True From 6b1e20ea19277f92ffb608db02d64a1a8ca326a8 Mon Sep 17 00:00:00 2001 From: palpatine213 Date: Tue, 8 Sep 2015 17:09:54 -0700 Subject: [PATCH 23/28] Changed the switch to an istype check. Also modified the clone hijack objective for consistency. --- code/game/gamemodes/objective.dm | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 59b8fd3081a..e485a62657d 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -224,9 +224,8 @@ for(var/mob/living/player in player_list) if(player.mind && player.mind != owner) if(player.stat != DEAD) - switch(player.type) - if(/mob/living/silicon) //Borgs are technically dead anyways - continue + if(istype(player, /mob/living/silicon)) //Borgs are technically dead anyways + continue if(get_area(player) == A) if(!player.mind.special_role && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) return 0 @@ -248,9 +247,8 @@ for(var/mob/living/player in player_list) //Make sure nobody else is onboard if(player.mind && player.mind != owner) if(player.stat != DEAD) - switch(player.type) - if(/mob/living/silicon/ai, /mob/living/silicon/pai) - continue + if(istype(player, /mob/living/silicon)) + continue if(get_area(player) == A) if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) return 0 @@ -258,9 +256,8 @@ for(var/mob/living/player in player_list) //Make sure at least one of you is onboard if(player.mind && player.mind != owner) if(player.stat != DEAD) - switch(player.type) - if(/mob/living/silicon/ai, /mob/living/silicon/pai) - continue + if(istype(player, /mob/living/silicon)) + continue if(get_area(player) == A) if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) return 1 From d17c0cc8c4e4ac2084ae22792a8fbbe1f2031c4f Mon Sep 17 00:00:00 2001 From: xxalpha Date: Wed, 9 Sep 2015 03:19:56 +0100 Subject: [PATCH 24/28] Fixed Wizard Den broken airlock icons. --- _maps/map_files/generic/z2.dmm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 4d07dc41b64..5159093b96f 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -3782,9 +3782,8 @@ /area/tdome/tdomeobserve) "lm" = ( /obj/effect/forcefield, -/obj/structure/door_assembly{ +/obj/structure/door_assembly/door_assembly_uranium{ anchored = 1; - icon_state = "door_as_uranium1"; name = "Bridge" }, /turf/simulated/floor/plasteel/cult, @@ -4347,9 +4346,8 @@ /turf/simulated/floor/plating, /area/syndicate_mothership) "mQ" = ( -/obj/structure/door_assembly{ +/obj/structure/door_assembly/door_assembly_uranium{ anchored = 1; - icon_state = "door_as_uranium1"; name = "Break Room" }, /turf/simulated/floor/plasteel/cult, @@ -5032,9 +5030,8 @@ }, /area/shuttle/syndicate) "oB" = ( -/obj/structure/door_assembly{ +/obj/structure/door_assembly/door_assembly_uranium{ anchored = 1; - icon_state = "door_as_uranium1"; name = "Corridor A" }, /turf/simulated/floor/plasteel/cult, From bdc9b792f70d5d0741b941c96776ca4c9c591680 Mon Sep 17 00:00:00 2001 From: Firecage Date: Wed, 9 Sep 2015 09:29:51 +0200 Subject: [PATCH 25/28] buckling text span fix. --- code/game/objects/buckling.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 1816bd9b3c9..2bdea860950 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -76,7 +76,7 @@ if(buckle_mob(M)) if(M == user) M.visible_message(\ - "[M] buckles themself to [src].
",\ + "[M] buckles themself to [src].",\ "You buckle yourself to [src].",\ "You hear metal clanking.") else From 1d9b59e28bc0d1ee1171541f69644a1fc81dc33c Mon Sep 17 00:00:00 2001 From: GunHog Date: Wed, 9 Sep 2015 12:53:00 -0500 Subject: [PATCH 26/28] Fixes missing chem heater board design - Fixes #11673 (deleted a tab) --- code/modules/research/designs/machine_designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 828192263a2..2d20c8371bf 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -172,7 +172,7 @@ build_path = /obj/item/weapon/circuitboard/chem_heater category = list ("Medical Machinery") - /datum/design/clonecontrol +/datum/design/clonecontrol name = "Computer Design (Cloning Machine Console)" desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." id = "clonecontrol" From 819611687362dfc6792d91bd2e8f20fc3aef9b90 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Fri, 11 Sep 2015 07:20:25 +0000 Subject: [PATCH 27/28] Automatic changelog compile --- html/changelog.html | 6 ++++ html/changelogs/.all_changelog.yml | 3 ++ .../CosmicScientist-DroneCooldown.yml | 36 ------------------- 3 files changed, 9 insertions(+), 36 deletions(-) delete mode 100644 html/changelogs/CosmicScientist-DroneCooldown.yml diff --git a/html/changelog.html b/html/changelog.html index 5a9cfeb36e9..c7df0b67e97 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->
+

11 September 2015

+

CosmicScientist updated:

+
    +
  • Drone dispenser now has a var for its cooldown, get var editing.
  • +
+

09 September 2015

Joan updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 409e18c0762..812ca8a0bb0 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1731,3 +1731,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. your perusal and edification. - rscadd: Nanotrasen also wishes to remind the crew that non-authorized posters ARE CONTRABAND. Especially those new ones with Rule 34. Perverts. +2015-09-11: + CosmicScientist: + - tweak: Drone dispenser now has a var for its cooldown, get var editing. diff --git a/html/changelogs/CosmicScientist-DroneCooldown.yml b/html/changelogs/CosmicScientist-DroneCooldown.yml deleted file mode 100644 index 65a6b446f7a..00000000000 --- a/html/changelogs/CosmicScientist-DroneCooldown.yml +++ /dev/null @@ -1,36 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# spellcheck (typo fixes) -# experiment -# tgs (TG-ported fixes?) -################################# - -# Your name. -author: CosmicScientist - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - tweak: "Drone dispenser now has a var for its cooldown, get var editing." From 28889d2b6af6c6f0acd9256ded38f972cdc80dc9 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 4 Sep 2015 17:37:17 +0100 Subject: [PATCH 28/28] Changed protolathe code to use material container. Clean proc, typo fix Standard sheet values --- code/datums/material_container.dm | 34 ++-- code/game/machinery/autolathe.dm | 2 +- code/game/machinery/recycler.dm | 2 +- code/modules/clothing/shoes/bananashoes.dm | 2 +- code/modules/research/designs.dm | 1 + code/modules/research/experimentor.dm | 4 +- code/modules/research/protolathe.dm | 123 +++------------ code/modules/research/rdconsole.dm | 172 +++++++++------------ 8 files changed, 127 insertions(+), 213 deletions(-) diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm index 56750520095..6870c3d303b 100644 --- a/code/datums/material_container.dm +++ b/code/datums/material_container.dm @@ -48,10 +48,10 @@ if(amt > 0 && has_space(amt)) var/total_amount_saved = total_amount if(material_type) - for(var/datum/material/M in materials) - if(M.material_type == material_type) - M.amount += amt - total_amount += amt + var/datum/material/M = materials[material_type] + if(M) + M.amount += amt + total_amount += amt else for(var/datum/material/M in materials) M.amount += amt @@ -93,21 +93,21 @@ //For consuming material //mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200) -/datum/material_container/proc/use_amount(list/mats) +/datum/material_container/proc/use_amount(list/mats, multiplier=1) if(!mats || !mats.len) return 0 var/datum/material/M for(var/MAT in materials) M = materials[MAT] - if(M.amount < mats[MAT]) + if(M.amount < (mats[MAT] * multiplier)) return 0 var/total_amount_save = total_amount for(var/MAT in materials) M = materials[MAT] - M.amount -= mats[MAT] - total_amount -= mats[MAT] + M.amount -= mats[MAT] * multiplier + total_amount -= mats[MAT] * multiplier return total_amount_save - total_amount @@ -124,7 +124,9 @@ //For spawning mineral sheets; internal use only /datum/material_container/proc/retrieve(sheet_amt, datum/material/M) - if(sheet_amt > 0 && M.amount >= (sheet_amt * MINERAL_MATERIAL_AMOUNT)) + if(sheet_amt > 0) + if(M.amount < (sheet_amt * MINERAL_MATERIAL_AMOUNT)) + sheet_amt = round(M.amount / MINERAL_MATERIAL_AMOUNT) var/count = 0 while(sheet_amt > MAX_STACK_SIZE) @@ -159,6 +161,17 @@ /datum/material_container/proc/has_space(amt = 0) return (total_amount + amt) <= max_amount +/datum/material_container/proc/has_materials(list/mats, multiplier=1) + if(!mats || !mats.len) + return 0 + + var/datum/material/M + for(var/MAT in mats) + M = materials[MAT] + if(M.amount < (mats[MAT] * multiplier)) + return 0 + return 1 + /datum/material_container/proc/amount2sheet(amt) if(amt >= MINERAL_MATERIAL_AMOUNT) return round(amt / MINERAL_MATERIAL_AMOUNT) @@ -173,9 +186,6 @@ var/datum/material/M = materials[material_type] return M ? M.amount : 0 -/datum/material_container/proc/can_insert(obj/item/I) - return get_item_material_amount(I) - //returns the amount of material relevant to this container; //if this container does not support glass, any glass in 'I' will not be taken into account /datum/material_container/proc/get_item_material_amount(obj/item/I) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 7a6a84a443e..e5235f412f4 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -116,7 +116,7 @@ if (stat) return 1 - var/material_amount = materials.can_insert(O) + var/material_amount = materials.get_item_material_amount(O) if(!material_amount) user << "This object does not contain sufficient amounts of metal or glass to be accepted by the autolathe." return 1 diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 60e6cd9f6ed..57fd990d2dd 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -119,7 +119,7 @@ var/const/SAFETY_COOLDOWN = 100 if(sound) playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) - var/material_amount = materials.can_insert(I) + var/material_amount = materials.get_item_material_amount(I) if(!material_amount) qdel(I) return diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm index 8ecc971b7dd..795490b381f 100644 --- a/code/modules/clothing/shoes/bananashoes.dm +++ b/code/modules/clothing/shoes/bananashoes.dm @@ -37,7 +37,7 @@ user << "You cannot retrieve any bananium from the prototype shoes." /obj/item/clothing/shoes/clown_shoes/banana_shoes/attackby(obj/item/O, mob/user, params) - if(!bananium.can_insert(O)) + if(!bananium.get_item_material_amount(O)) user << "This item has no bananium!" return if(!user.unEquip(O)) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 4f7414e3457..8e117dc0bee 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -40,6 +40,7 @@ other types of metals and chemistry for reagents). var/construction_time //Amount of time required for building the object var/build_path = "" //The file path of the object that gets created var/list/category = null //Primarily used for Mech Fabricators, but can be used for anything + var/reagents //A proc to calculate the reliability of a design based on tech levels and innate modifiers. diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 6282be27194..37fe63e90e0 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -456,8 +456,8 @@ visible_message("[src]'s crushing mechanism slowly and smoothly descends, flattening the [exp_on]!") new /obj/item/stack/sheet/plasteel(get_turf(pick(oview(1,src)))) if(linked_console.linked_lathe) - linked_console.linked_lathe.m_amount += min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (exp_on.materials[MAT_METAL])) - linked_console.linked_lathe.g_amount += min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (exp_on.materials[MAT_GLASS])) + for(var/material in exp_on.materials) + linked_console.linked_lathe.materials.insert_amount( min((linked_console.linked_lathe.materials.max_amount - linked_console.linked_lathe.materials.total_amount), (exp_on.materials[material])), material) if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) visible_message("[src]'s crusher goes way too many levels too high, crushing right through space-time!") playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 0e998a0cb1b..5b2ddee54a0 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -13,16 +13,7 @@ Note: Must be placed west/left of and R&D console to function. icon_state = "protolathe" flags = OPENCONTAINER - var/max_material_storage = 100000 //All this could probably be done better with a list but meh. - var/m_amount = 0.0 - var/g_amount = 0.0 - var/gold_amount = 0.0 - var/silver_amount = 0.0 - var/plasma_amount = 0.0 - var/uranium_amount = 0.0 - var/diamond_amount = 0.0 - var/clown_amount = 0.0 - var/adamantine_amount = 0.0 + var/datum/material_container/materials var/efficiency_coeff var/list/categories = list( @@ -51,12 +42,14 @@ Note: Must be placed west/left of and R&D console to function. component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) + materials = new(src, list(MAT_METAL=1, MAT_GLASS=1, MAT_SILVER=1, MAT_GOLD=1, MAT_DIAMOND=1, MAT_PLASMA=1, MAT_URANIUM=1, MAT_BANANIUM=1)) RefreshParts() reagents.my_atom = src -/obj/machinery/r_n_d/protolathe/proc/TotalMaterials() //returns the total of all the stored materials. Makes code neater. - return m_amount + g_amount + gold_amount + silver_amount + plasma_amount + uranium_amount + diamond_amount + clown_amount +/obj/machinery/r_n_d/protolathe/Destroy() + qdel(materials) + return ..() /obj/machinery/r_n_d/protolathe/RefreshParts() var/T = 0 @@ -64,33 +57,16 @@ Note: Must be placed west/left of and R&D console to function. G.reagents.trans_to(src, G.reagents.total_volume) for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) T += M.rating - max_material_storage = T * 75000 + materials.max_amount = T * 75000 T = 0 for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) T += (M.rating/3) efficiency_coeff = max(T, 1) /obj/machinery/r_n_d/protolathe/proc/check_mat(datum/design/being_built, M) // now returns how many times the item can be built with the material - var/A = 0 - switch(M) - if(MAT_METAL) - A = m_amount - if(MAT_GLASS) - A = g_amount - if(MAT_GOLD) - A = gold_amount - if(MAT_SILVER) - A = silver_amount - if(MAT_PLASMA) - A = plasma_amount - if(MAT_URANIUM) - A = uranium_amount - if(MAT_DIAMOND) - A = diamond_amount - if(MAT_BANANIUM) - A = clown_amount - else - A = reagents.get_reagent_amount(M) + var/A = materials.amount(M) + if(!A) + A = reagents.get_reagent_amount(M) A = A / max(1, (being_built.materials[M]/efficiency_coeff)) return A @@ -110,33 +86,7 @@ Note: Must be placed west/left of and R&D console to function. if(istype(O, /obj/item/weapon/crowbar)) for(var/obj/item/weapon/reagent_containers/glass/G in component_parts) reagents.trans_to(G, G.reagents.maximum_volume) - if(m_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) - G.amount = round(m_amount / G.perunit) - if(g_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) - G.amount = round(g_amount / G.perunit) - if(plasma_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/plasma/G = new /obj/item/stack/sheet/mineral/plasma(src.loc) - G.amount = round(plasma_amount / G.perunit) - if(silver_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/silver/G = new /obj/item/stack/sheet/mineral/silver(src.loc) - G.amount = round(silver_amount / G.perunit) - if(gold_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(src.loc) - G.amount = round(gold_amount / G.perunit) - if(uranium_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(src.loc) - G.amount = round(uranium_amount / G.perunit) - if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(src.loc) - G.amount = round(diamond_amount / G.perunit) - if(clown_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/bananium/G = new /obj/item/stack/sheet/mineral/bananium(src.loc) - G.amount = round(clown_amount / G.perunit) - if(adamantine_amount >= MINERAL_MATERIAL_AMOUNT) - var/obj/item/stack/sheet/mineral/adamantine/G = new /obj/item/stack/sheet/mineral/adamantine(src.loc) - G.amount = round(adamantine_amount / G.perunit) + materials.retrieve_all() default_deconstruction_crowbar(O) return 1 else @@ -152,52 +102,27 @@ Note: Must be placed west/left of and R&D console to function. return 1 if (O.is_open_container()) return - if (!istype(O, /obj/item/stack/sheet) || istype(O, /obj/item/stack/sheet/mineral/wood)) - user << "You cannot insert this item into the [src.name]!" - return 1 if (stat) return 1 if(istype(O,/obj/item/stack/sheet)) - var/obj/item/stack/sheet/S = O - if (TotalMaterials() + S.perunit > max_material_storage) + if(!materials.has_space( materials.get_item_material_amount(O) )) user << "The [src.name]'s material bin is full! Please remove material before adding more." return 1 var/obj/item/stack/sheet/stack = O var/amount = round(input("How many sheets do you want to add?") as num)//No decimals - if(!stack || stack.amount <= 0 || amount <= 0 || !in_range(src, stack) || !user.Adjacent(src)) + if(!in_range(src, stack) || !user.Adjacent(src)) return - if(amount > stack.amount) - amount = stack.amount - if(max_material_storage - TotalMaterials() < (amount*stack.perunit))//Can't overfill - amount = min(stack.amount, round((max_material_storage-TotalMaterials())/stack.perunit)) - - busy = 1 - use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount/10))) - user << "You add [amount] sheets to the [src.name]." - if(istype(stack, /obj/item/stack/sheet/metal)) - m_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/glass)) - g_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/gold)) - gold_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/silver)) - silver_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/plasma)) - plasma_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/uranium)) - uranium_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/diamond)) - diamond_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/bananium)) - clown_amount += amount * MINERAL_MATERIAL_AMOUNT - else if(istype(stack, /obj/item/stack/sheet/mineral/adamantine)) - adamantine_amount += amount * MINERAL_MATERIAL_AMOUNT - stack.use(amount) + var/amount_inserted = materials.insert_stack(O,amount) + if(!amount_inserted) + user << "You could not insert [O], it has no usable materials." + return 1 + else + busy = 1 + use_power(max(1000, (MINERAL_MATERIAL_AMOUNT*amount_inserted/10))) + user << "You add [amount_inserted] sheets to the [src.name]." + overlays += "protolathe_[stack.name]" + sleep(10) + overlays -= "protolathe_[stack.name]" + busy = 0 updateUsrDialog() - - overlays += "protolathe_[stack.name]" - sleep(10) - overlays -= "protolathe_[stack.name]" - busy = 0 - diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 7cbe1fe68f1..f8f5cbd1c0d 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -276,8 +276,8 @@ won't update every console in existence) but it's more of a hassle to do. Also, else //Same design always gain quality screen = 2.3 //Crit fail gives the same design a lot of reliability, like really a lot if(linked_lathe) //Also sends salvaged materials to a linked protolathe, if any. - linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_METAL]*(linked_destroy.decon_mod/10))) - linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.materials[MAT_GLASS]*(linked_destroy.decon_mod/10))) + for(var/material in linked_destroy.loaded_item.materials) + linked_lathe.materials.insert_amount(min((linked_lathe.materials.max_amount - linked_lathe.materials.total_amount), (linked_destroy.loaded_item.materials[material]*(linked_destroy.decon_mod/10))), material) feedback_add_details("item_deconstructed","[linked_destroy.loaded_item.type]") linked_destroy.loaded_item = null else @@ -377,33 +377,17 @@ won't update every console in existence) but it's more of a hassle to do. Also, flick("protolathe_n",linked_lathe) use_power(power) - for(var/M in being_built.materials) - if(linked_lathe.check_mat(being_built, M) < amount) - src.visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"") - enough_materials = 0 - g2g = 0 - break + var/list/efficient_mats = list() + for(var/MAT in being_built.materials) + efficient_mats[MAT] = being_built.materials[MAT] / coeff + + if(!linked_lathe.materials.has_materials(efficient_mats, amount)) + src.visible_message("The [src.name] beeps, \"Not enough materials to complete prototype.\"") + enough_materials = 0 + g2g = 0 + if(enough_materials) - for(var/M in being_built.materials) - switch(M) - if(MAT_METAL) - linked_lathe.m_amount = max(0, (linked_lathe.m_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_GLASS) - linked_lathe.g_amount = max(0, (linked_lathe.g_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_GOLD) - linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_SILVER) - linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_PLASMA) - linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_URANIUM) - linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_DIAMOND) - linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-(being_built.materials[M]/coeff * amount))) - if(MAT_BANANIUM) - linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-(being_built.materials[M]/coeff * amount))) - else - linked_lathe.reagents.remove_reagent(M, being_built.materials[M]/coeff * amount) + linked_lathe.materials.use_amount(efficient_mats, amount) var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes. var/R = being_built.reliability @@ -495,40 +479,26 @@ won't update every console in existence) but it's more of a hassle to do. Also, else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material var/desired_num_sheets = text2num(href_list["lathe_ejectsheet_amt"]) - var/res_amount, type + var/MAT switch(href_list["lathe_ejectsheet"]) if("metal") - type = /obj/item/stack/sheet/metal - res_amount = "m_amount" + MAT = MAT_METAL if("glass") - type = /obj/item/stack/sheet/glass - res_amount = "g_amount" + MAT = MAT_GLASS if("gold") - type = /obj/item/stack/sheet/mineral/gold - res_amount = "gold_amount" + MAT = MAT_GOLD if("silver") - type = /obj/item/stack/sheet/mineral/silver - res_amount = "silver_amount" + MAT = MAT_SILVER if("plasma") - type = /obj/item/stack/sheet/mineral/plasma - res_amount = "plasma_amount" + MAT = MAT_PLASMA if("uranium") - type = /obj/item/stack/sheet/mineral/uranium - res_amount = "uranium_amount" + MAT = MAT_URANIUM if("diamond") - type = /obj/item/stack/sheet/mineral/diamond - res_amount = "diamond_amount" + MAT = MAT_DIAMOND if("clown") - type = /obj/item/stack/sheet/mineral/bananium - res_amount = "clown_amount" - if(ispath(type) && hasvar(linked_lathe, res_amount)) - var/obj/item/stack/sheet/sheet = new type(linked_lathe.loc) - var/available_num_sheets = round(linked_lathe.vars[res_amount]/sheet.perunit) - if(available_num_sheets>0) - sheet.amount = min(available_num_sheets, desired_num_sheets) - linked_lathe.vars[res_amount] = max(0, (linked_lathe.vars[res_amount]-sheet.amount * sheet.perunit)) - else - qdel(sheet) + MAT = MAT_BANANIUM + linked_lathe.materials.retrieve_sheets(desired_num_sheets, MAT) + else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material var/desired_num_sheets = text2num(href_list["imprinter_ejectsheet_amt"]) var/res_amount, type @@ -816,7 +786,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Material Storage" dat += "Chemical Storage
    " dat += "

    Protolathe Menu:


    " - dat += "Material Amount: [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]
    " + dat += "Material Amount: [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]
    " dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
    " dat += "
    \ @@ -834,7 +804,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Main Menu" dat += "Protolathe Menu" dat += "

    Browsing [selected_category]:


    " - dat += "Material Amount: [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]
    " + dat += "Material Amount: [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]
    " dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
    " var/coeff = linked_lathe.efficiency_coeff @@ -869,7 +839,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Main Menu" dat += "Protolathe Menu" dat += "

    Search results:


    " - dat += "Material Amount: [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]
    " + dat += "Material Amount: [linked_lathe.materials.total_amount] / [linked_lathe.materials.max_amount]
    " dat += "Chemical Volume: [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]
    " var/coeff = linked_lathe.efficiency_coeff @@ -903,52 +873,60 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "Protolathe Menu
    " dat += "

    Material Storage:



    " //Metal - dat += "* [linked_lathe.m_amount] of Metal: " - if(linked_lathe.m_amount >= 3750) dat += "Eject " - if(linked_lathe.m_amount >= 18750) dat += "5x " - if(linked_lathe.m_amount >= 3750) dat += "All" + var/m_amount = linked_lathe.materials.amount(MAT_METAL) + dat += "* [m_amount] of Metal: " + if(m_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(m_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(m_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Glass - dat += "* [linked_lathe.g_amount] of Glass: " - if(linked_lathe.g_amount >= 3750) dat += "Eject " - if(linked_lathe.g_amount >= 18750) dat += "5x " - if(linked_lathe.g_amount >= 3750) dat += "All" + var/g_amount = linked_lathe.materials.amount(MAT_GLASS) + dat += "* [g_amount] of Glass: " + if(g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(g_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Gold - dat += "* [linked_lathe.gold_amount] of Gold: " - if(linked_lathe.gold_amount >= 2000) dat += "Eject " - if(linked_lathe.gold_amount >= 10000) dat += "5x " - if(linked_lathe.gold_amount >= 2000) dat += "All" + var/gold_amount = linked_lathe.materials.amount(MAT_GOLD) + dat += "* [gold_amount] of Gold: " + if(gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(gold_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Silver - dat += "* [linked_lathe.silver_amount] of Silver: " - if(linked_lathe.silver_amount >= 2000) dat += "Eject " - if(linked_lathe.silver_amount >= 10000) dat += "5x " - if(linked_lathe.silver_amount >= 2000) dat += "All" + var/silver_amount = linked_lathe.materials.amount(MAT_SILVER) + dat += "* [silver_amount] of Silver: " + if(silver_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(silver_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(silver_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Plasma - dat += "* [linked_lathe.plasma_amount] of Solid Plasma: " - if(linked_lathe.plasma_amount >= 2000) dat += "Eject " - if(linked_lathe.plasma_amount >= 10000) dat += "5x " - if(linked_lathe.plasma_amount >= 2000) dat += "All" + var/plasma_amount = linked_lathe.materials.amount(MAT_PLASMA) + dat += "* [plasma_amount] of Solid Plasma: " + if(plasma_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(plasma_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(plasma_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Uranium - dat += "* [linked_lathe.uranium_amount] of Uranium: " - if(linked_lathe.uranium_amount >= 2000) dat += "Eject " - if(linked_lathe.uranium_amount >= 10000) dat += "5x " - if(linked_lathe.uranium_amount >= 2000) dat += "All" + var/uranium_amount = linked_lathe.materials.amount(MAT_URANIUM) + dat += "* [uranium_amount] of Uranium: " + if(uranium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(uranium_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(uranium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Diamond - dat += "* [linked_lathe.diamond_amount] of Diamond: " - if(linked_lathe.diamond_amount >= 2000) dat += "Eject " - if(linked_lathe.diamond_amount >= 10000) dat += "5x " - if(linked_lathe.diamond_amount >= 2000) dat += "All" + var/diamond_amount = linked_lathe.materials.amount(MAT_DIAMOND) + dat += "* [diamond_amount] of Diamond: " + if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(diamond_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Bananium - dat += "* [linked_lathe.clown_amount] of Bananium: " - if(linked_lathe.clown_amount >= 2000) dat += "Eject " - if(linked_lathe.clown_amount >= 10000) dat += "5x " - if(linked_lathe.clown_amount >= 2000) dat += "All" + var/bananium_amount = linked_lathe.materials.amount(MAT_BANANIUM) + dat += "* [bananium_amount] of Bananium: " + if(bananium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(bananium_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(bananium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " if(3.3) @@ -1048,21 +1026,21 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "

    Material Storage:



    " //Glass dat += "* [linked_imprinter.g_amount] glass: " - if(linked_imprinter.g_amount >= 3750) dat += "Eject " - if(linked_imprinter.g_amount >= 18750) dat += "5x " - if(linked_imprinter.g_amount >= 3750) dat += "All" + if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(linked_imprinter.g_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Gold dat += "* [linked_imprinter.gold_amount] gold: " - if(linked_imprinter.gold_amount >= 2000) dat += "Eject " - if(linked_imprinter.gold_amount >= 10000) dat += "5x " - if(linked_imprinter.gold_amount >= 2000) dat += "All" + if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(linked_imprinter.gold_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " //Diamond dat += "* [linked_imprinter.diamond_amount] diamond: " - if(linked_imprinter.diamond_amount >= 2000) dat += "Eject " - if(linked_imprinter.diamond_amount >= 10000) dat += "5x " - if(linked_imprinter.diamond_amount >= 2000) dat += "All" + if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "Eject " + if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "5x " + if(linked_imprinter.diamond_amount >= MINERAL_MATERIAL_AMOUNT) dat += "All" dat += "
    " var/datum/browser/popup = new(user, "rndconsole", name, 460, 550)