From 0ef1f57399b3a4fbed816b169b0a1da49fa32dc0 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Sun, 27 Jun 2021 23:53:16 -0500 Subject: [PATCH 1/3] Adds nail polish loadout fixes --- .../loadout/loadout_cosmetics_vr.dm | 14 +++ code/modules/makeup/nailpolish.dm | 113 ++++++++++++++++++ .../mob/living/carbon/human/update_icons.dm | 5 + code/modules/organs/organ_icon.dm | 9 ++ icons/obj/nailpolish_vr.dmi | Bin 0 -> 1434 bytes vorestation.dme | 2 + 6 files changed, 143 insertions(+) create mode 100644 code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm create mode 100644 code/modules/makeup/nailpolish.dm create mode 100644 icons/obj/nailpolish_vr.dmi diff --git a/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm b/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm new file mode 100644 index 00000000000..8a1935d3549 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm @@ -0,0 +1,14 @@ +/datum/gear/cosmetic/nailpolish + display_name = "nail polish (colorable)" + path = /obj/item/weapon/nailpolish + +/datum/gear/cosmetic/nailpolish/New() + ..() + gear_tweaks += gear_tweak_free_color_choice + +/datum/gear/cosmetic/nailpolish/spawn_item(var/location, var/metadata) + var/obj/item/weapon/nailpolish/polish = ..() + polish.set_colour(polish.color) + polish.color = null + return polish + \ No newline at end of file diff --git a/code/modules/makeup/nailpolish.dm b/code/modules/makeup/nailpolish.dm new file mode 100644 index 00000000000..95e0fd24cd1 --- /dev/null +++ b/code/modules/makeup/nailpolish.dm @@ -0,0 +1,113 @@ +/obj/item/organ/external/var/datum/nail_polish/nail_polish + +/obj/item/weapon/nailpolish + name = "nail polish" + icon = 'icons/obj/nailpolish_vr.dmi' + icon_state = "nailpolish" + var/colour = "#FF0000" + var/icon/top_underlay + var/icon/top_underlay_open + var/icon/color_underlay + var/icon/color_underlay_open + var/open = FALSE + drop_sound = 'sound/items/drop/glass.ogg' + pickup_sound = 'sound/items/pickup/glass.ogg' + +/obj/item/weapon/nailpolish/Initialize() + . = ..() + regenerate_icons() + +/obj/item/weapon/nailpolish/proc/regenerate_icons() + top_underlay = icon(icon, "top") + top_underlay_open = icon(icon, "top-open") + color_underlay = icon(icon, "color") + color_underlay.Blend(colour, ICON_MULTIPLY) + color_underlay_open = icon(icon, "color-open") + color_underlay_open.Blend(colour, ICON_MULTIPLY) + update_icon() + +/obj/item/weapon/nailpolish/proc/set_colour(var/_colour) + colour = _colour + regenerate_icons() + +/obj/item/weapon/nailpolish/attack_self(var/mob/user) + open = !open + to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] \the [src].")) + update_icon() + +/obj/item/weapon/nailpolish/update_icon() + . = ..() + underlays.Cut() + icon_state = "[initial(icon_state)][open ? "-open" : null]" + if (open) + underlays = list(color_underlay_open, top_underlay_open) + else + underlays = list(color_underlay, top_underlay) + +/obj/item/weapon/nailpolish/proc/get_polish(var/mob/living/carbon/human/target, var/bp) + var/static/forbidden_parts + if(!forbidden_parts) + forbidden_parts = BP_ALL - list(BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT) + if(!istype(target)) // humantypes only for now + return FALSE + var/obj/item/organ/external/body_part = target.get_organ(bp) + if(!body_part) + return FALSE + var/ico + var/icostate + if(length(body_part.markings)) + for(var/mark_name in body_part.markings) + var/mark_data = body_part.markings[mark_name] + var/datum/sprite_accessory/marking/mark = mark_data["datum"] + if(length(mark.body_parts & forbidden_parts)) + continue + ico = mark.icon + icostate = "[mark.icon_state]-[bp]" + break + else + ico = 'icons/obj/nailpolish_vr.dmi' + icostate = bp + if(bp in forbidden_parts) + return FALSE + return new /datum/nail_polish(ico, icostate, colour) + +/obj/item/weapon/nailpolish/attack(var/mob/user, var/mob/living/carbon/human/target) + if(!open) + return + + if(!istype(target)) + return + + var/bp = user.zone_sel.selecting + var/obj/item/organ/external/body_part = target.get_organ(bp) + if(!body_part) + to_chat(user, SPAN_WARNING("[target] is missing that limb!")) + return + if(body_part.nail_polish) + to_chat(user, SPAN_NOTICE("[target]'s [body_part.name] already has nail polish on!")) + return + var/datum/nail_polish/polish = get_polish(target, bp) + if(!polish) + to_chat(user, SPAN_NOTICE("You can't find any nails on [body_part] to paint.")) + return + if(user == target) + user.visible_message("\The [user] paints their nails with \the [src].", "You paint your nails with \the [src].") + else + if(do_after(user, 2 SECONDS, target)) + user.visible_message("\The [user] paints \the [target]'s nails with \the [src].", "You paint \the [target]'s nails with \the [src].") + else + to_chat(user, SPAN_NOTICE("Both you and [target] must stay still!")) + return + body_part.nail_polish = polish + target.update_icons_body() + +/datum/nail_polish + var/icon = 'icons/obj/nailpolish_vr.dmi' + var/icon_state + var/color + +/datum/nail_polish/New(var/_icon, var/_icon_state, var/_color) + icon = _icon + icon_state = _icon_state + color = _color + \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 7f8d44a742e..0b77148d307 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -271,6 +271,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() for(var/M in part.markings) icon_key += "[M][part.markings[M]["color"]]" + + // VOREStation Edit Start + if(part.nail_polish) + icon_key += "_[part.nail_polish.icon]_[part.nail_polish.icon_state]_[part.nail_polish.color]" + // VOREStation Edit End if(part.robotic >= ORGAN_ROBOT) icon_key += "2[part.model ? "-[part.model]": ""]" diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm index 7216540734a..d35a5aa5165 100644 --- a/code/modules/organs/organ_icon.dm +++ b/code/modules/organs/organ_icon.dm @@ -131,6 +131,15 @@ var/global/list/limb_icon_cache = list() I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit limb_icon_cache[cache_key] = I mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY) + + // VOREStation edit start + if(nail_polish) + var/icon/I = new(nail_polish.icon, nail_polish.icon_state) + I.Blend(nail_polish.color, ICON_MULTIPLY) + add_overlay(I) + mob_icon.Blend(I, ICON_OVERLAY) + icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]" + // VOREStation edit end if(model) icon_cache_key += "_model_[model]" diff --git a/icons/obj/nailpolish_vr.dmi b/icons/obj/nailpolish_vr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1adfe631970ec349adad3de9e813e727163a5ae9 GIT binary patch literal 1434 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8I4M=vMPuB%fOR7R5N?cNllZ!G7N;32F7#J$% z^q$?wcSu2`^`YdvM@#0KhV9-YF>9IgZ>}~DQK2Vh4qv{?%DhtPQU6)=PwaZ)9I+FX zkMxBnFJ@@`SMli0+mdYpJLXt!K4zQquWw4InLx&$v#S}a`vV);qA6aSCwHoEVl@yjQ=ccu01$F5cC{u}-N=5Ch|8^`KZd^B}I}|8XvhTY-;ZW=B<`Ta0 z0`{Hd1>rIqJrnmcOX^Kfid9(4y|=l!c&bxxm&MW8Hwh$N>x;H1KY3-1_two$C^hQ+96KS@rjF$k%-#e|L!`{r2sA zdi3|I%cUI2KOeKB=|bi*1*dASUv<0f=q0sx_f{u4|9lnc&cO&%kz;ghM&9=99z(S@ zZNr+)LNIY`bjbP_(cw0`;^He~@8+4$uq)XccmC#Yfuj9;S8cav(CMG`o~gjxbCJ)i zYpyOSHgcWUDyQ83qq0aTkl&p>pk6G7LJwv9<-_N0tc52hLhp%2ex8D(E$Ji5N z$hB*N$|{a~Zke~Vm^vcO)a-+*w!BIf=Wea`GIh~Zt(+I%+Z6SDTliy>8l|3wi<-3~noK{Ee$WXSVk9){hk`%?D>@%v~QD-zeZv;l}V# z)cxQ@Nxt8vf-kezs(K1tjOxDjU*vNXU)WA9rR99nw3Q~Z6{PRKD=4_qS1(n1r_GPs zl|LV4*N29NhYN1e$(}i5J#)8<#DTeg%bvfyw*9T9hU4|KFZwPMSAg?PX=9T&b?!>8QVHpA+L(9#c3i$Fph8)$^Oe z?tiOV#P#6aKgZ`Mua*5a@jUN-{Jq(%v+UW6AD2rjO_%-$6s|7+zo5APRguxJ)X38s zS2NbFSz|IaX!3El;FWHdzny%yf+<47Y}0$Ib=+ImO>h-IkhEP*$w=Z)ZBTrDNy+6s zt6HPNUo7GTS(5(w<7QjIiNAg=Ui?~m=Z2p@ZpKaBofu!L+G*u^d6&uT`5u#22uGjR zee$#QN#(!!&vUxf8m`~nGSOKeEB5mYnb>fpSqyx?>MeiXb#0BhuC(P`_EUjr?uSlx z7Gy87=I_vUFRGkBZ?oX`J*Urp=2llup2GO%@4tT!eb3i_J(^x07V8~(v{cr2W}jCG z7`eKVMb%l$9F2*X~s{8kpEAR)AswB85)kZ z-kQ%3O2*Tg44*Xv(R-_DqUqbxcgXFDTKjF~`lxB4Cf}K>iVRbwrnwXwH@UN%S9CjY z^V~9@!$NKc{=0v8&~Nx`EfBr80ve*T>vHFdfZv}L?TY1D+b_(|zxDmnwJg*1;bl&1 zwNr}cv&U?+tN4(;j-d@GcWryo??1=h1-$0EJ9k~n1$O>zXJj3IJvg{5x;{hu`$6HI zGOWwDDp~*edOZC8{y*n_9Xyd+o*G*Jf`98ei90{jT2fy$v;WVNJ&^haNbiv4j=TG^ zYz@S6R)Z`5YC5j3WtMQN-}gwvXp48;!fT? Date: Sat, 3 Jul 2021 04:37:07 -0500 Subject: [PATCH 2/3] Adds nail polish remover. --- .../loadout/loadout_cosmetics_vr.dm | 7 ++- code/modules/makeup/nailpolish.dm | 45 ++++++++++++++++++ icons/obj/nailpolish_vr.dmi | Bin 1434 -> 2427 bytes 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm b/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm index 8a1935d3549..7ff9876a4a9 100644 --- a/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm @@ -1,5 +1,6 @@ /datum/gear/cosmetic/nailpolish display_name = "nail polish (colorable)" + description = "Nail polish, available in every color of the rainbow! Doesn't come with nail polish remover." path = /obj/item/weapon/nailpolish /datum/gear/cosmetic/nailpolish/New() @@ -11,4 +12,8 @@ polish.set_colour(polish.color) polish.color = null return polish - \ No newline at end of file + +/datum/gear/cosmetic/nailpolish_remover + display_name = "nail polish remover" + description = "Nail polish remover, for when the fun's over. Doesn't come with nail polish." + path = /obj/item/weapon/nailpolish_remover \ No newline at end of file diff --git a/code/modules/makeup/nailpolish.dm b/code/modules/makeup/nailpolish.dm index 95e0fd24cd1..ee901825e6b 100644 --- a/code/modules/makeup/nailpolish.dm +++ b/code/modules/makeup/nailpolish.dm @@ -2,6 +2,7 @@ /obj/item/weapon/nailpolish name = "nail polish" + desc = "Nail polish, to paint your nails with. Or someone else's!" icon = 'icons/obj/nailpolish_vr.dmi' icon_state = "nailpolish" var/colour = "#FF0000" @@ -100,7 +101,51 @@ return body_part.nail_polish = polish target.update_icons_body() + +/obj/item/weapon/nailpolish_remover + name = "nail polish remover" + desc = "Paint thinner, acetone, nail polish remover; whatever you call it, it gets the job done." + drop_sound = 'sound/items/drop/helm.ogg' + pickup_sound = 'sound/items/pickup/helm.ogg' + icon = 'icons/obj/nailpolish_vr.dmi' + icon_state = "nailpolishremover" + var/open = FALSE + +/obj/item/weapon/nailpolish_remover/attack_self(var/mob/user) + open = !open + to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] \the [src].")) + update_icon() + +/obj/item/weapon/nailpolish_remover/update_icon() + . = ..() + icon_state = "[initial(icon_state)][open ? "open" : null]" + +/obj/item/weapon/nailpolish_remover/attack(var/mob/user, var/mob/living/carbon/human/target) + if(!open) + return + + if(!istype(target)) + return + var/bp = user.zone_sel.selecting + var/obj/item/organ/external/body_part = target.get_organ(bp) + if(!body_part) + to_chat(user, SPAN_WARNING("[target] is missing that limb!")) + return + if(!body_part.nail_polish) + to_chat(user, SPAN_NOTICE("[target]'s [body_part.name] has no nail polish to remove!")) + return + if(user == target) + user.visible_message("\The [user] removes their nail polish with \the [src].", "You remove your nail polish with \the [src].") + else + if(do_after(user, 2 SECONDS, target)) + user.visible_message("\The [user] removes \the [target]'s nail polish with \the [src].", "You remove \the [target]'s nail polish with \the [src].") + else + to_chat(user, SPAN_NOTICE("Both you and [target] must stay still!")) + return + body_part.nail_polish = null + target.update_icons_body() + /datum/nail_polish var/icon = 'icons/obj/nailpolish_vr.dmi' var/icon_state diff --git a/icons/obj/nailpolish_vr.dmi b/icons/obj/nailpolish_vr.dmi index 1adfe631970ec349adad3de9e813e727163a5ae9..e3bddf098e801b637000bf126900fdbb08d565ef 100644 GIT binary patch literal 2427 zcma);dol7-Au%L`VYw~WR1y(NG#Sa)b#s}y zZTV7e%XLDzjC^HS6K10Ce&638zrTLxd>`k$-_Q4X{_}jD*Ll6pd8fkduSh_SKmY)c zu(q;r66mY{98nR${g8oC7fAKpYsfGQ?@+H0zu+*xpg;hK%+KztfzV;HNi+Jm2j+(7 z5LBOxXM=bnqyAxp$#9@64&ZJ}>(t)J*M5%I{-4 z$}hNQ+w!e$J^lclU|HWiZENhXGqK@Mup@T08OJ8uki8NFIpQM2 zMqOL2Xj7Il{DNXc*R2h`FbUdFH?{abIJD&D9X{9
  • KZrt5!aXLrK-TZ}b-^PBZ> z&;yOOXcv8!hMC(gFZKSv;QXl%gyu{oovS&Xvjump1KyB3|L~GNApJiqt3Kmxf3IGcmX=mcizG@ZNON)7!D86NVjT3wu*9#- zj35g5>Oh0tuJqhKJG9^QrT7Cztqp(|_(No}(e4e<;NyTO4*%oFh*%jW7lnT=?n2Yc zEjcLrCG}%iF%nOHDzmJdsB}F0p%+2cq(_xjtETsu^aavXDYNc>L){p!{wkb~X#+e^ zqkQshN&kprbfMv^jXXX`9BxiqiC~2~hPo}lNuSzhXD>EZhMwUb#DlHQdV!qYM#}w> zmz@m;dC;(Kxg}yu>`YTRt(hi|(BI=>oIEe|kql_M7Ub>$23EQeNW(2Er@SHVIr{Bf z2sp`SBEe=M*2DCjP;)Tu1~*NsEqBak#GFwxG+kg|tjd3fZE7dsNlOH+C&2lw7L?&Ku@yXArtM+MBzs zwQ%ZdAKl4or86}I_lwXunI_Xdo*cK+OG$m0Q+3tYl5)duCm;%rLX;W7VDNgi@*Sk= z?}##m^*;kEATX(bIdW(~)`%;r#0?}u)drBR&2bHS(cG_ywajM%yVUN#K|em}YJyDf z@aFo`p!&gl_KTd%Nr}?zo(mP!Bs1xGt`^L0Dezj4gkHb7p!Mikv}#4fi$;Of>xFLfjT!nh_!u+wGXxFR6F8 zJn!U3?;)RUk9ycYxh{F?3xFT0YTlt%pk;dZ!Zt6=xu8&bEwu-53l>G>rQ-&hqg7L2 zSaTnnvN_fA1CfanLiLS2jNRfG3dVn3qnx!SEscGI(LQ1j%kApcP{j8hJ|nl*7#9aF z{JCtd-ayoep$!)z@kji()XCA3!1T7U5yMvBaTAHB!fj%RS$x%H1yohkgp4%1A4JSP$yRO%V(J=i&aN@iPZZuH*^~T+4&`U205*iht9p9yWKVhEL{{%; zcC|gJ28hVXql;T!i?qV}3eH!Yk}AIzxFG#Mud7%}--OD;iIen3|CX zYQ>4erNGfdp5r(Qm@aJi^&3ONh>E)$3Z8-*=w(K}dJ=*Ks2iZR<5jFl1W)x z;fK06K;HNKxMIJ23MvlQN-IgEFgn_ZVq*6a3M^VZinch8;{#3Ioo>~acYpkugMH20 z*BWy>e5l#b#01i~KQ?6UqZRi<6Jyj_Ja^>#7XPK1Qv16N-6FZkoh62D-!}39q`pS8 z!q*M6)CiDZ##7-_w&xP9>MYX@na4rR!4X`W$WvVs@b#1XUf=AQuj zsqU9wb;G+}mOEC@ki&O{-7_F|1KT)ncr=MbdUH)x9tt&Ylz-hj>g*ueMYBbliz$?U zzTD~;^!&74Qc;_7*Df+e#&Kbk%~mTZDS?-d6!10?R2I4xoBxb8eR6div);sPUG9e8 zl3B>9+F!`;(M)mY?VNkpy3L#J+PwI4X00!xILu!_%ZRuOU9WbT@=s;xaBn|$GONEX zOKS#~9`w_&EgH)ktzdAb(oH&NGNkj}TMZtK$N{hBw|zHwSoEcHhh))2CmNgmwdb7U z%_Tmbpxj9tO2Xs@Pe5_nnCS-Ls=k@wTkU0CRVa0N{Hp0$@b&e2XeFZDU(l9p8*rVA zgqN3BjrT<8V64Jk2dKJo=eMU4zLC0nflKFD+r~dd1E20c3azb{W3TIP`F`J?sn-HHV1%V4m*$8nw z=efB?p@60Gla`ePncmUw(4lnJwD;#IU7v4s)l2*X$)%jZ!W`X}udfRg+d&RO-R6}e z9h6nc^dGhT$_i1aZ1#EXmQe^rLCGi*?_g4P`)v-IRI`SVS#|hTwGwrpV9%=)(Nif- z5GNZ^m7~S+Gr}cLBC%n<#mx1V$e-TcIinC*A;S}gTM}YxLrt=ZQzu`Ga0l^XVvA9* z#CShZD;_MXt^OVnBs?&g`~0c?TrmiE;#6g@5ojlM{-j)6cXpf3(alXE7BUK=- qVh2DZB*#wUue0gVbN&zppbIyX_6ku&>Z&7LH5&t)l&!%($ delta 1416 zcmZuvcTm#@6b>K-p~q5&Wg3PkXd48SAz_5XD8oY_5)8;PKonC5BS`%*3=Ogs5D2^;l4kc+%-t`y^6hBUDy??mE2PV-tG%;!{CiVZXT>P% z054jkF%eXzF-V;IanG$PP>LvFZgq{&qS97o)6{?Bk|?LZ$66&^FkE|AdxW03TlxeR z=k0mR;KiCbyRpzzvxFAn1lTb1Lu)1lrYrggJR9l&x`~I75Wiz$e6h){U`fxWen(j(7v2T=zuYQ_`I@ zf>JzQjuDSX=`Y$11Hla_P{~Nbz>QJm?!+?+Tz{&znzZ&4)5t7>UAh@6B#+VY@~!-#z1fAHQ}y zRz8F`FZWH~e}weeFf&^1bb8-Qll3=`fnXQjiXTE=>TAIzi~i!MR$LauB;5>>)TH*6 z|3CDmE%~GD+XDiL7*5o&Vh2K3!004jC7Rh)+X@Al=az0rRWKw-)oT>QO}J-f292yH_nu%1b(PgWCqUv4v%GWR8?!-kA!J6?6;?hyg3};%t#Wa~rm{w1@ zFm7>~-MV(L$*$XZsfsF5n!^*+81^fAxroQqB7F|FCzxR4{*nuQBi?!+akGMAvP>lE z#U4Jw0?@*X+@Qdkegl@?_lyM<*nOZk)*isdnsd=uN zJ;ALeU<)n5FJ6HFfiT`#OG2ZTDtAjn04FT>Q_~66{GFYust?+XC%o;+fWnTTz*yr9 zTjY4VPQUhZrPmn7aO#?9C7WF5S@Mg3d#7vBhkaJQnd)lJf-+@5$$g|L zit?9VE=q+gq(K&dv<=%Lb!-c^O|KJOzg0s+7x`FzmPw3;g#Azii#eK#*fqKz-ZME; z?e z^DPbuA8}Mrx+KSLjphsb*Ux-V;FMFZzmQXId9DjM?!4`-_6NevKKJfn=*T{72HOcX z2T(Ii!N^YU;N|!*A7DwjnX2_C@8b2ar8GHllx|Phss!6~6$3cSadrQy%l`C-D2Y5# yFQerQbkCVu&`$^4W2>hzW{STQOE$f0E0*rm$;=GhYpD3;ex$1hjOu(rD)k?ts+kM` From c44aa05d2a54656c979ac6410642f950d3774572 Mon Sep 17 00:00:00 2001 From: MarinaGryphon Date: Sun, 4 Jul 2021 12:05:51 -0500 Subject: [PATCH 3/3] Code review and tweaks --- .../loadout/loadout_cosmetics_vr.dm | 3 +- code/modules/makeup/nailpolish.dm | 73 ++++++++----------- 2 files changed, 32 insertions(+), 44 deletions(-) diff --git a/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm b/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm index 7ff9876a4a9..c538c66410b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_cosmetics_vr.dm @@ -5,7 +5,8 @@ /datum/gear/cosmetic/nailpolish/New() ..() - gear_tweaks += gear_tweak_free_color_choice + // can't set description, it'll look funny + gear_tweaks = list(gear_tweak_free_color_choice, gear_tweak_free_name) /datum/gear/cosmetic/nailpolish/spawn_item(var/location, var/metadata) var/obj/item/weapon/nailpolish/polish = ..() diff --git a/code/modules/makeup/nailpolish.dm b/code/modules/makeup/nailpolish.dm index ee901825e6b..4cd989959fb 100644 --- a/code/modules/makeup/nailpolish.dm +++ b/code/modules/makeup/nailpolish.dm @@ -2,34 +2,27 @@ /obj/item/weapon/nailpolish name = "nail polish" - desc = "Nail polish, to paint your nails with. Or someone else's!" + desc = "to paint your nails with. Or someone else's!" icon = 'icons/obj/nailpolish_vr.dmi' icon_state = "nailpolish" - var/colour = "#FF0000" - var/icon/top_underlay - var/icon/top_underlay_open - var/icon/color_underlay - var/icon/color_underlay_open + var/colour = "#FFFFFF" + var/image/top_underlay + var/image/color_underlay var/open = FALSE drop_sound = 'sound/items/drop/glass.ogg' pickup_sound = 'sound/items/pickup/glass.ogg' /obj/item/weapon/nailpolish/Initialize() . = ..() - regenerate_icons() - -/obj/item/weapon/nailpolish/proc/regenerate_icons() - top_underlay = icon(icon, "top") - top_underlay_open = icon(icon, "top-open") - color_underlay = icon(icon, "color") - color_underlay.Blend(colour, ICON_MULTIPLY) - color_underlay_open = icon(icon, "color-open") - color_underlay_open.Blend(colour, ICON_MULTIPLY) + desc = "Nail polish, " + initial(desc) + top_underlay = image(icon, "top") + color_underlay = image(icon, "color") update_icon() /obj/item/weapon/nailpolish/proc/set_colour(var/_colour) colour = _colour - regenerate_icons() + desc = "Nail polish, " + initial(desc) + update_icon() /obj/item/weapon/nailpolish/attack_self(var/mob/user) open = !open @@ -38,38 +31,30 @@ /obj/item/weapon/nailpolish/update_icon() . = ..() - underlays.Cut() - icon_state = "[initial(icon_state)][open ? "-open" : null]" - if (open) - underlays = list(color_underlay_open, top_underlay_open) - else - underlays = list(color_underlay, top_underlay) + icon_state = "[initial(icon_state)][open ? "-open" : ""]" + top_underlay.icon_state = "top[open ? "-open" : ""]" + color_underlay.icon_state = "color[open ? "-open" : ""]" + color_underlay.color = colour + underlays = list(color_underlay, top_underlay) -/obj/item/weapon/nailpolish/proc/get_polish(var/mob/living/carbon/human/target, var/bp) - var/static/forbidden_parts - if(!forbidden_parts) - forbidden_parts = BP_ALL - list(BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT) - if(!istype(target)) // humantypes only for now - return FALSE - var/obj/item/organ/external/body_part = target.get_organ(bp) - if(!body_part) +/obj/item/organ/external/proc/get_polish(var/colour) + var/static/forbidden_parts = BP_ALL - list(BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT) + if(organ_tag in forbidden_parts) return FALSE var/ico var/icostate - if(length(body_part.markings)) - for(var/mark_name in body_part.markings) - var/mark_data = body_part.markings[mark_name] + if(length(markings)) + for(var/mark_name in markings) + var/mark_data = markings[mark_name] var/datum/sprite_accessory/marking/mark = mark_data["datum"] if(length(mark.body_parts & forbidden_parts)) continue ico = mark.icon - icostate = "[mark.icon_state]-[bp]" + icostate = "[mark.icon_state]-[organ_tag]" break else ico = 'icons/obj/nailpolish_vr.dmi' - icostate = bp - if(bp in forbidden_parts) - return FALSE + icostate = organ_tag return new /datum/nail_polish(ico, icostate, colour) /obj/item/weapon/nailpolish/attack(var/mob/user, var/mob/living/carbon/human/target) @@ -87,7 +72,7 @@ if(body_part.nail_polish) to_chat(user, SPAN_NOTICE("[target]'s [body_part.name] already has nail polish on!")) return - var/datum/nail_polish/polish = get_polish(target, bp) + var/datum/nail_polish/polish = body_part.get_polish(colour) if(!polish) to_chat(user, SPAN_NOTICE("You can't find any nails on [body_part] to paint.")) return @@ -99,8 +84,11 @@ else to_chat(user, SPAN_NOTICE("Both you and [target] must stay still!")) return - body_part.nail_polish = polish - target.update_icons_body() + body_part.set_polish(polish) + +/obj/item/organ/external/proc/set_polish(var/datum/nail_polish/polish) + nail_polish = polish + owner?.update_icons_body() /obj/item/weapon/nailpolish_remover name = "nail polish remover" @@ -118,7 +106,7 @@ /obj/item/weapon/nailpolish_remover/update_icon() . = ..() - icon_state = "[initial(icon_state)][open ? "open" : null]" + icon_state = "[initial(icon_state)][open ? "-open" : ""]" /obj/item/weapon/nailpolish_remover/attack(var/mob/user, var/mob/living/carbon/human/target) if(!open) @@ -143,8 +131,7 @@ else to_chat(user, SPAN_NOTICE("Both you and [target] must stay still!")) return - body_part.nail_polish = null - target.update_icons_body() + body_part.set_polish(null) /datum/nail_polish var/icon = 'icons/obj/nailpolish_vr.dmi'