From a7c997696186f1021a2c49e07fc6e330598bf48d Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Mon, 20 Apr 2015 19:06:24 +0100 Subject: [PATCH] Adds Easels + Canvases, Sprites by Nienhaus --- code/game/objects/structures/artstuff.dm | 128 +++++++++++++++++++++++ icons/obj/artstuff.dmi | Bin 0 -> 1847 bytes tgstation.dme | 1 + 3 files changed, 129 insertions(+) create mode 100644 code/game/objects/structures/artstuff.dm create mode 100644 icons/obj/artstuff.dmi diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm new file mode 100644 index 00000000000..af82cf97946 --- /dev/null +++ b/code/game/objects/structures/artstuff.dm @@ -0,0 +1,128 @@ + +/////////// +// EASEL // +/////////// + +/obj/structure/easel + name = "easel" + desc = "only for the finest of art!" + icon = 'icons/obj/artstuff.dmi' + icon_state = "easel" + density = 1 + var/obj/item/weapon/canvas/painting = null + + +//Adding canvases +/obj/structure/easel/attackby(var/obj/item/I, var/mob/user, params) + if(istype(I, /obj/item/weapon/canvas)) + var/obj/item/weapon/canvas/C = I + user.unEquip(C) + painting = C + C.loc = get_turf(src) + C.layer = layer+0.1 + user.visible_message("[user] puts \the [C] on \the [src].","You place \the [C] on \the [src].") + return + + ..() + + +//Stick to the easel like glue +/obj/structure/easel/Move() + var/turf/T = get_turf(src) + ..() + if(painting && painting.loc == T) //Only move if it's near us. + painting.loc = get_turf(src) + else + painting = null + + +////////////// +// CANVASES // +////////////// + +#define AMT_OF_CANVASES 4 //Keep this up to date or shit will break. + +//To safe memory on making /icons we cache the blanks.. +var/global/list/globalBlankCanvases[AMT_OF_CANVASES] + +/obj/item/weapon/canvas + name = "canvas" + desc = "draw out your soul on this canvas!" + icon = 'icons/obj/artstuff.dmi' + icon_state = "11x11" + var/whichGlobalBackup = 1 //List index + var/icon/selfBackup = null //Used so we can still see it in our hands. + +/obj/item/weapon/canvas/nineteenXnineteen + icon_state = "19x19" + whichGlobalBackup = 2 + +/obj/item/weapon/canvas/twentythreeXnineteen + icon_state = "23x19" + whichGlobalBackup = 3 + +/obj/item/weapon/canvas/twentythreeXtwentythree + icon_state = "23x23" + whichGlobalBackup = 4 + + +//Find the right size blank canvas +/obj/item/weapon/canvas/proc/getGlobalBackup() + . = null + if(globalBlankCanvases[whichGlobalBackup]) + . = globalBlankCanvases[whichGlobalBackup] + else + var/icon/I = icon(initial(icon),initial(icon_state)) + globalBlankCanvases[whichGlobalBackup] = I + . = I + + + +//One pixel increments +/obj/item/weapon/canvas/attackby(var/obj/item/I, var/mob/user, params) + //Click info + var/list/click_params = params2list(params) + var/pixX = text2num(click_params["icon-x"]) + var/pixY = text2num(click_params["icon-y"]) + + //Should always be true, otherwise you didn't click the object, but let's check because SS13~ + if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) + return + + //Cleaning one pixel with a soap or rag + if(istype(I, /obj/item/weapon/soap) || istype(I, /obj/item/weapon/reagent_containers/glass/rag)) + //Pixel info created only when needed + var/icon/masterpiece = icon(icon,icon_state) + var/thePix = masterpiece.GetPixel(pixX,pixY) + var/icon/Ico = getGlobalBackup() + if(!Ico) + qdel(masterpiece) + return + + var/theOriginalPix = Ico.GetPixel(pixX,pixY) + if(thePix != theOriginalPix) //colour changed + DrawPixelOn(theOriginalPix,pixX,pixY) + qdel(masterpiece) + return + + //Drawing one pixel with a crayon + if(istype(I, /obj/item/toy/crayon)) + var/obj/item/toy/crayon/C = I + DrawPixelOn(C.colour, pixX, pixY) + return + + ..() + +//Clean the whole canvas +/obj/item/weapon/canvas/attack_self(var/mob/user) + if(!user) + return + var/icon/blank = getGlobalBackup() + if(blank) + //it's basically a giant etch-a-sketch + icon = blank + user.visible_message("[user] cleans the canvas.","You clean the canvas.") + + + +#undef AMT_OF_CANVASES \ No newline at end of file diff --git a/icons/obj/artstuff.dmi b/icons/obj/artstuff.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a11d1a81d0e16867718bdc8e510d012f3916bb86 GIT binary patch literal 1847 zcmV-72gvw|P)V>ZpryV=>z+}zOJ-O=9O z(ca$D-`~>R-O$|J&)eJ2+S<;LWH*pwHj!pIkz_cKW;l>#JCbEMk!3lNWjM~xyxG~# zgIY3yS~P)LGlN?*f?6|!Tr`1LGlN|-&d$5w;M3vZ)RAU5bx|&NRWXiYHP_e7($c@w z)W6i!z|YUUk7PJ>Q7&{*EzHcj*4E47;?&sK%z|1mc2O;NQ!mxk%7R-oc2X|mKq0*VoI~*v;bN)#2gOgIzRrQZJ8VH-lU?b5AURS~7A^EP`1w zbx|#iVm5ysxHXXuH;-gFkYzZ_%eufFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainG zjE%TBGg33tGfE(w;*!LYR3K9+HL*A~M~RCwC9|j)$T#HTOe;#vO@*-Gs*H>)jEsp< zWoSuIm7yh3sthX(4RNVbR&e!m0ecq!`G!HBBmm~D000D*Nkltm~^1x2N7(Q19x`qn?#J4v?5GAIdW zkH>T5+aK=D`I7l^A2YdU3x$6R+==v6aUgxg3xX(?%3`@(7Qqn*d4VsL%H>=FL&fw} z<(~AFBqIf>08Q5n(=ah6GBQv;f$H$RBiwx)cR$CS92gxNOLLZNV-pl~fPzeHf`BX| zF_!@Mz=PwJnp2#3=-~;c==2DjB7|U5L0Y}u&{Tv7k>N)Ma|t{$9-7mShNkvdnv-PN zB?wW0I!zL?se)O$%UhNt3=Z;>XQrmglOoRx)7G@bm(pt#W+H*dp9sx~o+3A0&$BVX zkfYhUW*|(64-u5I@*#%iLi6O=&^V(#5x8#P%NV12qtSpEXbFgI^I7>2+_@-4=c5!2 z?T^5P*HR4qso8p6Rgvryf`qI*MfK@tLi_A|Xr8-}?o+F^upryeH>iHGv8bu4LEwEc zpOp^-cs{c8mm)jPrBmd)vg^WIDe6T?vWmkt#X?q|V#$f@`KZW+7e>=5@_gTeEZB;+ z*npjYFqT`cZ)N4f2;z-A|6*j9dm>nH{lN2lTh$@K3SGhWi7#d4LxDJg`IjPFOYbzx z_ky71%EUm1q9GMQk|7ILR-U5za%9i0#1T}}0xj1IeAkC6Vx${zBq0-FS;)#$ys{eE zOR>P(<+K3wITVo=4r4{pR9!>JBtlj`Owp_B!(*3cUaP)7w!VI4rpmpMBAc%3xvmRg z+pvVGLKYNQO32Dn4AfTFmTPYoYtCD9PGzFDd?hVFQ|$Q|_NPn}jSy{h!e`|vMrx6L zJKAW4b3I+;wc8#P(U$#|PYe|!4O+$Iv+@+fS0mfqXz#q67I51e?*%P;fu@>ZsHCAm zFA7=tFoH^CPsbbW{h6K!f{g&$L=OA~I3-nN!iPs!N?Cb8^}=%Gtb7pJtJhLFYPL5w z+nX)ub`P2zBX~i5v96Z0@&GQ*Q1^QP2X?AYx1fma&9)b`VF6!OR7Kb8dSfapPX#`V zot2MbXKg8AEjNG_Ha6NDo1RaTtizcw+t|*^!}=euk1l;OGQ$mUpK@Gvh}*f&T}wic z0J~DNbEDJgNRlwkPtu`fdnzjr$NyLbKKSE%mCqb!@AHat)7krCXSL8rd>Nm0gleO`yR`7lx3Tlx_k9%@or|5@Kg7-}8+)MP@2kKTJKqb3Ka~R#JKy(LV2hpa`zvsY zo$vX>pUMG=o$vcwWQm>crNf`ffhIfO_qoXIe9s6pEkPUrIhgbBj~X6 zJ@b~$gwG$rE<4{dg_IIL|1r{G=le5E1POnXA~W+n6G128k0QX#_uKpLxsmWk*arv9 l_xtZj^SK3%ag6^m{sPtpA*6-R*|h)w002ovPDHLkV1f?eh~xkO literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 940664d4864..519a549f74e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -683,6 +683,7 @@ #include "code\game\objects\items\weapons\tanks\tank_types.dm" #include "code\game\objects\items\weapons\tanks\tanks.dm" #include "code\game\objects\items\weapons\tanks\watertank.dm" +#include "code\game\objects\structures\artstuff.dm" #include "code\game\objects\structures\barsigns.dm" #include "code\game\objects\structures\bedsheet_bin.dm" #include "code\game\objects\structures\displaycase.dm"