From 38682de629a847d6a784ae3d9d2339cf9bd67aef Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Sat, 28 Dec 2013 11:08:52 -0500 Subject: [PATCH] Adds ability to write on walls with blood --- .../effects/decals/Cleanable/humans.dm | 35 ++++++++++++ code/modules/mob/living/carbon/human/human.dm | 52 ++++++++++++++++++ icons/effects/blood.dmi | Bin 82470 -> 84469 bytes 3 files changed, 87 insertions(+) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 23d76f7094e..0013d531067 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -70,10 +70,45 @@ spawn(DRYING_TIME) Del() +/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) + ..() + if (amount && istype(user)) + add_fingerprint(user) + if (user.gloves) + return + var/taken = rand(1,amount) + amount -= taken + user << "You get some blood on your hands." + if (!user.blood_DNA) + user.blood_DNA = list() + user.blood_DNA |= blood_DNA.Copy() + user.bloody_hands += taken + user.update_inv_gloves(1) + user.verbs += /mob/living/carbon/human/proc/bloody_doodle + /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") amount = 2 +/obj/effect/decal/cleanable/blood/writing + icon_state = "tracks" + desc = "It looks like a writing in blood." + gender = NEUTER + random_icon_states = list("writing1","writing2","writing3","writing4","writing5") + amount = 0 + var/message + +/obj/effect/decal/cleanable/blood/writing/New() + ..() + for(var/obj/effect/decal/cleanable/blood/writing/W in loc) + random_icon_states.Remove(W.icon_state) + icon_state = pick(random_icon_states) + +/obj/effect/decal/cleanable/blood/writing/examine() + ..() + usr << "It reads: \"[message]\"" + + /obj/effect/decal/cleanable/blood/green name = "green blood" desc = "It's green and gooey. Perhaps it's the chef's cooking?" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a5c37346cc2..9b94b22085a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1186,6 +1186,7 @@ src.update_inv_gloves(1,1) //handles bloody hands overlays and updating else src.update_inv_gloves(1,0) + verbs += /mob/living/carbon/human/proc/bloody_doodle return 1 //we applied blood to the item /mob/living/carbon/human/clean_blood() @@ -1363,3 +1364,54 @@ mob/living/carbon/human/yank_out_object() return 1 else return 0 + + +/mob/living/carbon/human/proc/bloody_doodle() + set category = "IC" + set name = "Write in blood" + set desc = "Use blood on your hands to write a short message on the floor or a wall, murder mystery style." + + if (usr != src) + return 0 //something is terribly wrong + + if (!bloody_hands) + verbs -= /mob/living/carbon/human/proc/bloody_doodle + + if (src.gloves) + src << "Your [src.gloves] are getting in the way." + return + + var/turf/simulated/T = src.loc + if (!istype(T)) //to prevent doodling out of mechs and lockers + src << "You cannot reach the floor." + return + + var/direction = input(src,"Which way?","Tile selection") as anything in list("Here","North","South","East","West") + if (direction != "Here") + T = get_step(T,text2dir(direction)) + if (!istype(T)) + src << "You cannot doodle there." + return + + var/num_doodles = 0 + for (var/obj/effect/decal/cleanable/blood/writing/W in T) + num_doodles++ + if (num_doodles > 4) + src << "There is no space to write on!" + return + + var/max_length = bloody_hands * 30 //tweeter style + + var/message = stripped_input(src,"Write a message. It cannot be longer than [max_length] characters.","Blood writing", "") + + if (message) + var/used_blood_amount = round(length(message) / 30, 1) + bloody_hands = max(0, bloody_hands - used_blood_amount) //use up some blood + + if (length(message) > max_length) + message += "-" + src << "You ran out of blood to write with!" + + var/obj/effect/decal/cleanable/blood/writing/W = new(T) + W.message = message + W.add_fingerprint(src) \ No newline at end of file diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 71df0e9bcd2a5c3fcf053f152e0c24edb3547aae..90acdae7be1dc9ea8272bcb195048732ed2932bf 100644 GIT binary patch delta 3996 zcmV;N4`cAAga!4J1&}0vt$I{gbVOxyV{&P5bZKvH004NLm6*Y9+b|GB&-Pac$-QV2 zC+)?TAVJ|n@(Ttj(d5FU)*vZ+{r5dcb)2Hjj&3&aJld63Gv?kl&#%8W@6F5GW_fhE z5ckcxS$+GyT%4$@p;!}zayUP1M(PF z2=s_RPY47R4vph*fV4V3^$?h-(huC`$~=xMg~ z1I2mbIS))1HevoZX?jsSSf^druQ!MP#}7L>dZ2(ND4+|rkx#v@hNhOlc_g6o2y8uqI=Y})EvTCb_$NWYR2Our zp&$?_3FLFoeL(@!{5k5rpnypRqe8%}5HKtRObY?yBD-X$FDNIjXO;D2tuwjh>`)fV zTxS3eoIospcbx%Ta02z4If0NT9XV0m>V1!#-uB4pU5}jJ^pO+Q%7T_ySZC_-@ z`bFmKUu4b#MrLhb1Yg0(j2(>NOBk84g%NyXA~RMyCMB?AimGM_>^{fQ7vPZ-Rh2wt zs?>YkLncsfW&(BZm_Xe(Ch)&ublbeXzcepzo8@o$I72X$Y-ZSl#R9j*0s(Fy0w4gl zH6sE48GqeJM^)Z=0RKMs&P-+|i3VmeVK;kvs-YVs)Mb-pTT0#eVP0k?YPH2eZA-fx zE69Rfw&DscU3Z~+q}^5fq6Y!(i@>RhxGiThGa0}KT&t}GQ9w3D5Tnr$CLz3J-tNn@ ze?*%$a$fJkK-t4u5UyiKvE%rVl;7m5BBe(Ov)u5*6fb zh(t7YXj?`^9wKTSdOVAWmJpF=sQ!7ksTY`MdOnVG-ctbVeK!m=)n8uXT99r`&3tC7 zNUz2QXer`PW4BM*zXlL!>}R1wv=+d40CxfS>Cib(lTto&zQ?*G zy_JuvjisA*tZ}q`gByRw7%P|r5xocCUI3i{x-i)I0YC$Q41o0*Y={A1MxN_GPDJ|v zBrv$}{Zjx=-iWCIz-0io0r)KuJqloSo`36~t{y-)fEEA;iRexM>xpQ=`5uTz02pJ8 zjYvdP>gO9=7lWH>xl39 zTtck+ayGk4N~wrQNGVm|Q8;Hhv*ki0aXCH?*YVfM4}ETw@XSUIduIV0G|{< zcP5pJR7;rz0HJAjq%)Z*rrYgv3UNbEOUqjhhhu{hV!PAresw_8>IYg|kAESPxz4v` z%ZXx~EBpB24gh0}T_ArnTK^u=Cl!!$4E`P+y4U-PVcRp4;qc-sfu&xDW4v&=eyb_< zh_bA;Lf0cuYO)4+0HBXZ_epsL0K84)8Y5-n5h5*Z+dd~yEgX)!pwvr3smpy^ww&l~ zZSC>3wFSlW z+D4g{^|H{k;I33^nlBm+=zswLLI}4(SYO?sPt!GmL-Koqx`TKs5Rg0Ca{z zWA|sX2c}ACpY88^!{O_d5HpcZ&(>V7DV7icP17di(&=R-UT?c)Sqp_y4Yp}M9oVv^ z>o-K=0k<1lV=-P6aFIs(g@CvNz!+l}sE5cEkTUn-uRK5fEiJx^_V(Vxk;qC-)21og z?h`^>4$HbvY1#>YG=IAK!;iu~%t-G5@Du=Jj9s97H~ziXUR%{03Vp4jy}cIzDx=Za z{h3U)Wm$`iRBD3K^(L2PwdJ!W8@YG{fHB5~k-nxT_vlTVG9UiR;iHG>6VUZq&FO4V zO7#j|pKYg7Q-s_7kYQP?9J>COfmrOxV&^;^j{q>n7#lV|YJZJC0BA0kS2&%wz_#}Y zUB6CQ)-M3Su&h;1hhv#0#Qejd&}{(FNpwYTYwP}^24(=b1Hc$#>>?e{kEZeK-0!K zO!L;u5()mV@qZ&G+1NN$X4kG7hpfuUq zx*tmIfKprhvDlA_oq43=DFDXUu+!Vx`X|`7glTq_wSTuC^LxE-Yf43rG&M~vb~g5$ zN_{&300xUmL_t(RZxXp*OQn1PDRWS2mDAyP!sB*-T`BcD0H~GHaF>*nDW%p3pbvmv z1;7{^M&2VTE%AC^hHbAax2y-9iNwH>=H_cmO{;JNZ4qs;r@mbBb_l=6jf7KU>JO|re2TkkxV>%uE zjMF*UayYJ0z~_9?=#9nB%RW9v`WgTp0bq<3&5=mt76@?-lnjz-%W z-0sDurhP^k#Bt6s{U~J^M76;et$x#GNF{IH0{aKZ1$!Bk7uW{tPR32 zR*&Ai`CzegvX37g0bq==BC3eR{`;s>H<&=_sCfK%E}g#lgvawPluBztlyKwEPIb7s z`Id)?{_i>hokW4Rhme!&NO__s6uK2cBm%Km z=Q$jwpgD&-?f@{xhLz(@P44oK;D0S~S>g4DLd{BuN+{*AO|w%tonH`|7O@TEi@L7Q zw=HXha5&Zg*a6^gja=@IKij;yJ=xlN1WLUKrCtJH1IYPfu^*1~4nSVk01(mid>rR& z=H=)f0Qk0>>c3M>HS@(_&G~|Em~)8Yizd-t00z4fs00e_~)>qW6uBoltIDP2xt+jO<_m>6N74-eDFy@aP+Ll$+t@Z?i zcQy{?npIo3aY=b&qi3l8C0SSVQr)tGf9B3rzO!)S&;CEYcsyZeGXLd|#~*_bM{VHu zN~vE@H;mm%sizZ$vD*e#Du3I4CzVcLr(4zm01&2mn{C@0>`Z2z(zL3hnat0NeJ;bn z1$|i&(X^rMULtA&u$YL}<~7+V=H=*~hh6gD<{YA(01oHg#Zsdi-vt1p8xx#kur0L< zOXeJ+U0bCzzjc6AA?gn`@*k+5dlz5PFT?IRhiKR20emT+wa;YHB!3E8$1!v6F&a1L z(BQewJw})8{@N#N%{fGB?lBr?9mmW?lPFlIdck1F?Hzl*zqG=bzhiUh-ovKfyY!dX zxflStlQb8=BMoR+5)5|i-72M7){)=$KN#$o)$jb-8^K`5*s6&k>uay9xe=JX5CAG( z``kQW=b=P5`D=X}J%3xJv}@~@wdJ$^=_-u*Yn%Kvi)-taH3fqmdjX)fZsW8<);!h8 zTESq)-rBllO-=rq#TCZ+#tAFUzMEO)Bh&$nh7jVr8}bp64pOt$8qe?lHRBPUF=} z(Fr)Umgd21&wo{Tdu6r!-tiYuu*-XPC;yZv3$A;wYGUZ##(@VrtCQs$?)LY;KD4`G zj9+3qwy&>UH|J3RXqerQ*Y|%rwm%*WcIVPXH?q0ux)RljYr26GH|2{4>T1<9`8>_um}LjiP=40000>44+kX5QE_XdarP}Ca`f|n5Si&~Lo!VrWK zhFFH0VnLKuLf9(=lo5s?tH@3T!VZ+b;Xe2L^1kOe&-8lvbIM6xE78Fldr z1s@nr3JVUU1c#6Th-9W`Hjqb+Wbi$MmnA#uuKQ~*w>;yVo3vX+O6Y!=Y5Z;Qr0%t~ zO`G-zWb$okZMp?{wrL2>x(kX4BM~(I>5XAcvuO5S?5hh{lf?idJ4VVh zj>dz!N-0~u=~#=~t-qZ0@WEDP5?Uy4uJ}|XiFf)s`j}>gaqxzk9>K&TUOSKb?X9rH zT_sPYcPZ5nDrhcIkJhr#n9J&L8dwjIgGEG@H>lJ_xMM9D#Psm1kisX2*}KIVl?<-8 zz+XLU?P!yi@Y0jxm(^YsOj6y zHLqKa@2fo=^K#m+(h&w_<@uMq6f1f=;r+i7x?M!lt2z40=Inc%sFuq{9&1BSc5Z5K z{d75q8G-OCY-eh)xRy!FqSN+uN+Ew>_xi9t>UUyIG?>gYFE+QM zEts?kYr$mb%5LaN-n4{4h}%k^WAp?esE=@);*_H6v+i5o<(X^ zqc~{r2Da61HJjd=`7mva|Fk0g;Pv{_8~3H0+cSZ#`)Kt2c{CNl!2%^fXdIe30@48) zKG!^imjbWv@;| zQeD%=QdU4*yPe(YRn$4C`Cm0+C(&sCQwl&Qjm!QfTaTONT_At|;TS1`~3* zYp*l(f&fSBnoGoftVsqV1f>TR#KJI{3Cvw%1ya1_OEVZJB3r-F4RWCNJMp6yZx*=i z5K?N-_O7X`k(mO6#6~xV_K581@v4Oax0>J0)lk&!pFLmIhkM@l3*TI?`FZn6uwu2tQ`PZH0H=`&NlF@VsltlG(HfjF?SRS%v0NBKeV2YVHCy zC}5dNmq-z~u5LmzD4*6u2Df28Ah$TTE>>xeyRU6o<=qi) zv&f|L3FZ5_5Wjm+*t54~#_#4C#t(dons2MqkJ*8q0Ga*yY9TI!t>5NI@wM##4|lmF z&2sA6KK}4;bi5<=X1|jb!7LjVQZ~`u30=Muw=*)?sw_<@U06%xX6tYg;&NUIYxXN@AmC5kB`3kj|kzv$>15v$mQ nl`WLp-Y(Vjk{c2lq8qkU8CMOZ?2qbNgF`skyWvZ1i4Xn(v3jX8