From 386e0b2b0cccf20ab0067cdff689afb48b155ed0 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sun, 20 Jun 2021 10:42:51 -0700 Subject: [PATCH] Brighten Patterns + Update Default Palettes * The pattern textures for level palettes have been brightened and work better with bright colors. * The three default palettes for new levels now have patterns applied to each of their colors. * Bugfix around resetting keybind states for Zoom In/Out, Scroll to Origin and Reset Zoom Level bindings. --- Changes.md | 30 +++++--- assets/pattern/ink.png | Bin 1302 -> 8360 bytes assets/pattern/marker.png | Bin 1502 -> 9127 bytes assets/pattern/noise.png | Bin 2128 -> 13250 bytes pkg/editor_scene.go | 6 ++ pkg/level/palette_defaults.go | 130 +++++++++++++++++++--------------- pkg/windows/settings.go | 4 +- 7 files changed, 98 insertions(+), 72 deletions(-) diff --git a/Changes.md b/Changes.md index cfc1bdd..40a9b66 100644 --- a/Changes.md +++ b/Changes.md @@ -5,8 +5,8 @@ This is the first release of the game where the "free version" drifts meaningfully away from the "full version". Free versions of the game will show the label "(shareware)" next to the game version numbers and will not support embedding -doodads inside of level files -- for creating them or playing them. Check the -website for how you can register the full version of the game. +doodads inside of level files -- for creating them or playing them. +Check the website for how you can register the full version of the game. This release brings several improvements to the game: @@ -22,26 +22,34 @@ This release brings several improvements to the game: file, it will "just play" on someone else's computer, and they don't need to copy all your custom doodads for it to work! But, free versions of the game will not get to enjoy this feature. +* **Settings UI**: a "Settings" button on the home screen (or the Edit->Settings + menu in the editor) will open a settings window. Check it out! +* **Horizontal Toolbars option:** if enabled in the Settings window, the toolbar + and palette in the Editor will be horizontal instead of vertical, along the top + and bottom of the screen. This may be better optimized for smartphone-sized + screens like the Pinephone. If the program is started with `-w mobile` the first + time, it will use horizontal toolbars by default. Some small bits of polish in the game's user interface: * Some buttons are more colorful! The "Ok" button in alert boxes is blue and pressing - Enter will select the "Ok" button. -* When opening a Level or Doodad to play or edit, a blue **Browse...** button is + Enter will select the blue button. +* When opening a drawing to play or edit, a blue **Browse...** button is added so you can more easily find downloaded custom levels and play them. * In the Level Editor, the "Level -> **Attached Files**" menu will let you see and manage files attached to your level, such as its custom wallpaper image or any custom doodads that were published with the level. * The keyboard shortcut to open the developer console is now the tilde/grave key - instead of Enter. + (`) instead of Enter. -This release also makes the game a little bit more functional on smartphone-sized -devices like the Pine64 Pinephone: +Bugs fixed: -* **Horizontal Toolbars** option for the Level Editor. If the game is started with - the `-w mobile` command line option, the game window takes on a mobile form factor - and the Horizontal Toolbars are enabled by default. -* Alternatively, press the tilde/grave key and type: `boolProp horizontalToolbars true` +* The WASD keys to move the player character (as an alternative to the arrow keys) + now works more reliably. Previously, they were affected by key-repeat so Boy would + do a quick hop followed by a longer one when pressing W to jump. Also, his + animation would not update correctly when moving via the WASD keys. Both bugs + are fixed in this release. +* Shortcut keys advertised in the menu, such as Ctrl-N and Ctrl-S, now actually work. ## v0.6.0-alpha (June 6 2021) diff --git a/assets/pattern/ink.png b/assets/pattern/ink.png index 0a2abfeed5043491c9c391dd660a4bb410ebaaef..9c40c52eb5711f2fcf072886a9aefb0e5f0bcea6 100644 GIT binary patch literal 8360 zcmeHrc{tQ<)c;6jNy%1ZX&PI~FvDO*hOC)n$xfj$27@uoV&93fl_d(v@*w+DLbi}l zwxKd2TPPvfw`}iF&vyOZf1d05z5hLPUEi7ed*A1L&N-iR?)$pW+&0j=bd>cJD*ymE ziqh6Fr2q2nJjC+$ipXr!r;mzMaxtrM|#7Ba9eRweMQBW8loS2 z@1sB{_ah?@(Zy5SR+n9COLt;#`biz~$t8GXFN-YujxKGG3dF_gLystwD!&qM%LtSr z@7P;!__>3`{n?xEN-ikmh#Umr=hU`$#FnUoTN7Uc*Eh^6R$jikF<(5eHe5fy;JlS9NI!OGb=a>DWKkr(rQ zo2Xt&kzv#q2ZPS+0BKJ@7I2Y)YSY2)&ib>R zF%qZ_DzD0gU+5Fx6$nT6MlIWA!ocK69?St{QMGdLD!1VkiO=DK76F_B(PC_VCp92PfxZ&l9tQRV2z}^l-#!^s6{6A?*7e ztw#+GEf4I|v9x}Bn}D0nJ+IG~KAm_)+OZ zFxf2`m}}dfGa(UrYkAIHuT3QM!mqbYp3o!58_S;ilAS%K$ph%Nma8d@>M10KmQ-~M zR)f5=uAJ*47Vz>!f7~DsR(h!1+svcX*lt%&e+e}EZaB50a?UfKTz_uu4rNo^Dq-=b;}H$ zN3`N?p{ID=oIMcryIZ=Qr!1(~vKTEe~VCDW*rA%aFs>@RR7kB*z9y^Ps1T zua*0fU~&@51juq}qB!P&TBxw_#Y{?|mb5Qm=go94UWTQuN-$-HV~E>b_{FTEy7gdl zEAcWSevLDB4Ilmd2e?UnJ zWHDOlUV)qw@QGuEKyASf4O@q=mip&G0!pthviSz*Zn6Qm5^lY2VpbP#b^gly=F%;i zhxqCzIJamuJ}C!J10DM2Lq-# zRQHNVRbN`y{pkw-5D!rUm*=;>NoF=Q z7yVwkrKXgiO{H=B07EJz-nTrs2q_$IfQgH#a_IYN&pNTk-~LYY>zXxP_m~`91+1%o z7RSg8sA=3eK1IzvanI1QuGz=Os;@uK<-u1(WvO%FX&DI0eWVxHCQ+Af^--b#dC^)Lz^H!I+op~!TSZrU0w$DV`5_kOubpqs zl6=zobDagRPTmXBai?H|rW|Kfff3uIW4F46J(R13^n=>wc-m{2-ipeX#iFSbFGpG= z%sARJ9LXEZ;REnj$*K-ramOAHvM92TJ-tQ&1_;=8BxI1AIhn36^HVY(g$(6N6bqCk z3>%?S2ZVfXYmvw`LrF7-awk08PimS-v*zCR?R((z`J$=64y~S(X{8LUfBN-xE=7Cq zRLjp1FcF{|w=Qe=mimy~6=Sxv?B4!_`z4LbEJ3(e7wT!c{+3TnQtH`Y-Sx0TdaO+~ z5)aEtNeD(0e)9Rtb*D5;GzT}Y=1clC&%g80i=7o=8I1`~ZWxM%#?D=GYCtkN>OPG% zE+RXp#&amU<;K1q(->sl<{RY5^~*I`CRl`+LoHgL@jA}LdhtK#WVrZ*nNw_tYgsX? zDqVTe(N~-=a%rmUio#vc=y-4`L;OZ(g0ENB%{r<^N7`5E5j21|Xp zrPaw(@f+*F!-;cImYh$TWoh{@iTTJ0t;SME;-Y-Phi}nPLOaY!{^-uKwiTCQM(;rn z%?$S+8ZYXOs!Y9XY3vkBYX{ws@jJWCuB23q;yismGv8(>KO8<#2u&`Jj!PRK>~@xk zrE1O4{O~3{DJ5Q9MJ0h6<5#s877sb-p~X~YsStqr2Sq1ATVj%DCD+ctzYYD;%!R%`D34-)!JVT_eBYsi*f&Y_ zLG!NqdYV!5EZ}RBCUrI8@{HnE)U7))wQoFcO+q{c?S&kUVVmNjE&Nkr7`=|0npn{m zSjsMmjSg&PRylw>K{BYMD=M9mD8^gbq+G8t=N-2Xv}d!bnV-<9yef&yFWqQh&l1-z ziDxhGi=J#RD*Uwmrnulf zHt`)uyAtWMLkVgIM*g1R{61Tj3#%oNor4W)@2(D~=CsGmAs$>ZnJg}6`{L-lB7BLV z82{}{uT^QqJHy{I7jGuS)n=Lp#U~yz{`{DUs|om?d4ydQ@#CasSE_H#YBC$gvyWd> zigxdxix)YvYB|U&hS2Ouk7MuhX@*-j+=lS>+gb|=O~q+8${oNwMLv_fd@XO2(ECy0{Ze=DY86hMJ&8G!>>Tu(fS*4hzq7*SW_z3s!S4IA zG_5}Ba-n-*?b0Ip<+$4G-B&4h52Tn_m4IDU^<>_6aLTXAo#yTJ8IUb{x`Ga4IG8z5 zqWbjXsA#|Kz~}U$u*KF%)llA*pa6IyY-38X^*Z&&(4&pd)@H{AUp`EED|evz9!woS z13OxyznNzr12}y=Cyw#Rwdo5a29LS4 zZBx%~$*He?^=B>`JkUywrkQgmOHQ%bKZA*XAtgJ%c@*Bq50z_QkZB2B!(=Mu`3QjG z)OOw%_)VH>^uSJy_$`$CE??HaJMfUQbN^jBA;Yz0TPk9bxr6htkYUC>7eh6|<@=?p zUT4cYj(8qsT*lMhMX658M*LoLjhZl=2l|}Z2vYZV==i#&&Crtu(=6uU%CQ#y>WY-E z5*mN_t?a0>dzsb2fg*6Qb)?{z`G+;~7;MrNhqZ!LJulUD&TD7wCw0Y7RENe3b$(&a zEdmNpt#pud@3>y|aUe2@tVo8Sc6nHR;?|XKFl{X`BG9PFzLLS$BH2%J7m%IGgibN} ztJ1gQOWlIfK`7}A-W-OI06f-PkC6Oj(`i*SY0^9T86~3CJR{I_dh+)5Lf@p*3HR^;Ik?u_TXLr#t5ESVWUOToj*{CsqtW zzcw*jhZ~l5v8He{Oa$NAek8(PFJ^4Bo1Nvk5pi_I9Mi*|(y_o~r2pG$q4>$i@0Qr8 z*eRm}y8L6`7h9X6kugs)(c~Up*6O#}aZ7jK-7D*;BaBp7{pik$OYJ-}!=_OdSY5om zaaNVwth>VxdlGI6=c};-02o4X>gon4b@e}*LwZY?<{yXDZn`MYY-3ao;^C0J1-E;w zcS1u`pqy3n@o}e{rh-?bwnM~@q9UWRM=jmvF;AvP$BGI=3xUi5LC>oY64lzbcXe37 zwn+H*)*9bCHJ(8R=b=O2d6~#fPvRHuCw3KG&NL&dYN#B%h^|10x3fGGv{_@GUy*7n z8+f!yT6VHXWnj4NmGmGqb+z4e;XJE_p+edkcRgk}DO z(i3gT&)3ZHXw%=xV-jPxa`_XbfAgoo3GOr<9@=y9Ks4OBNRssM3uMgv6{nrH!Btfb zQTVO5PIqmEQJYWXcg|3y6Ldt)IHCoPoK=q)+i2V!^{n)8CBD>WZ4K%=*|*KhpjLCS zZn}D;wd9%#LkP9uUe9u}b3=#tRB!GH#DO0b!BI20x!)O*FEorMr&=%`}b47yYYU)8ioE;KmCZ`M0 zbyLSW;ly&n2}CRqCIyp%fHl2v9x@+XToEsTOa0TvRqHPHjG7F3p$!qIUc zc4%3w3`QQT0K>|GVQ{z|7$GZT4~D>?axg61UO^tC@HYs3B92~_XqUfxwFhNKhq8rY zp%{!U1`J0l*n?pTGO}Pa+ExLKu(Ok~w}ZpcXvj|}JB*?hfrv-b(}}~Q9k9}Ft`7S) z_6S#0H9#RjGE$JgW(-`=WP7>-5_ARUO7Z$@!5D|f8j;a^Y(nK_U@{Om93rP64}rj; ze+ijli6nX@?qNb9QZlgpmA$km(u1KBi{7hKI>7!sJr+fEA{I?15RC~07bIxUCE%Xs zet83xekMg5N1{u3?^XP-nm59_|9tzo1zd3ZOF-a$*(#zjKaG&k9$345Lv+2LOBhGA zs{@w4zke0fAM?2XC0R01J6kAJ1`S3dAa-Dwj6I!USy_7e?XmRq$tob=Xv{y+Nd$Yc zCz^;=b)ZK|kA_}A`_TZ;?o%o8Piap_>>f`L87LSc50-%#Lm`R~c}18U7^0vEfqq@@`dD7dN)3NvY>8%ipo3;fB z0FV;idl?q30l#-k2JBznuy#OC9N7`L zcX=}lK6VlSU^GB!s2XdxQcSP8&M2}8Tz=m!@ixF?_x!YBNXru}axQ|MC9i?!xJEG6 z9WE=PuA-u{wBnOl9)A2lG!zijH**sqo<>^V-qvJhICD_4{eT6+;T7*y=jJr7VmUy= ztOp}U@T~@#We0)-qv3qCg;$_8c=$q5`Qvh1ixcq4(KL05Lr|@Ww8oCJIgS@61#U4H z%XJ_cJ4Pv13kwUu2ytT9@3fEy9BK``jOC`$&~D#|HK7(>myd_-X;H1bKTr~lh&(Dh zC(M5Y9nB!?yzD=ss^Rm2Hx!X~SO`N`!bHC{cGjG;>ZzpZMTSXZ*jji2L0F5?y1wMv zwHx*Vtqh<8fJ8$`OG5>|AZAcB@d54BE#`8Xtf>7&T92iX&%rRePiaQWwvnyl!4#{N zbj$PURB`xZ(c@+ws8+9CG=qIh8W)C*67{W>*E~s6F0O3YmyRlg$w)jfDPSAjRx{5A zpjqZ=(q@AvZDtt3Nk29CO_@q&bJ&F-!4XYpB~ zY2y^DPig9xS+XKXdQn=_8q>DXnUi#HR{ChW0Eo|=<#o{A3=RiAOkx2dk5#%NiA1cR zMN+KvBLTp$j0jChZ!sOO`kf@Uk`!}i9^i$^<7z=`*7;Q@+RHQSc0Ktp!%~4Wtd$>+ z(k#IRGe^vhipa9e2R0r||O=v+0dNl{P;q* z{bU^zz-zAe%-CTLlc$gt$Hr#ftCzjcUv!@BcTdLlh|w&K&a+y&$9yo{8u9H5sZD7_ zL?H4^D>;lmR-moSCeq4nZw9IkS<=(L`QlOCj*YLj#F?D1^FtW6u;UH3m6nCacyLFC zeP8jq3q(YogRuskr@TbUVn)`CmZ?;Iyk!V%a!a03gi`gbpxs^IhCSuetcQ9uhmDPm zL*_P55v_nb(J+zFgX_9&SvV~UtiT(QUVn{&hG2tkVSMJy`*_wit*$MVn{aU$UcP+$ z;KFcrVwNw5O@uNBy6bi#=ZpIKIMQJbT;9E`_&}jCf&TW1!g8ln_pXQBE5jUW2F}*a wNty2~o1RJnK@S_>E@9hHzQ;33UF+;S{X-{boT|UkHy{9|si#q*b|d6}0LhOpF8}}l delta 1249 zcmV<71RndSL6!=TBYy#fX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmP!xqvQ?*(u4(%Y~ zkfAzR5EXIMDionYs1;guFnQ@8G-*guTpR`0f`dPcRR6lU)@9ujoM#K7WMKCo{{KlcXd%*4I6C zQr*RPR_DGyt6$Ao4DgA>v&=AU;tk^IP21qSPaI)IStULv9y95J#E)E8JbvR`a9QA) z5i^~dCyo${g*H~&m=#Tpc#1fxYC7c$8IM)YTb#9Wl{N3lUl_{iE6ZG`HH-unu>=Vs z6jV_{88%|H>wlzJNYQz`gMY~NOXO0>RRSZ&0xHlTyMFLL_&r-IKRMwgh2lW>i{pHZ z0D)bgQFEN{W5;Qn0RCs-N^kiqbztU`^jb@c9svW}z{Pb-Q}%$%9boXukWJZ@{IrC8 z9(X^aZ^{DUTOhdR&8>Nk(+40;vr66o2Zz9DfwI>-ygIwLeQy8uH0SpN-6nEt2SeV0 z00009a7bBm001r{001r{0eGc9b^rhX2XskIMF-^u3Iz-p)3PAslN%i;e**tWL_t(Y z$6Z!Sj_WWCqiy+<7MOd^^^0j@#~-~#9)+}C1$81(6e-pH{{HH|@0fEUr3CLi0ASyD zs47GR@An%iCBzu9Z5w!6Ysfici~&`}7y|(Ccs$^ogL4iNLV&8;i{5***09!s_a0*m zlu{rfh%ut~j+`@EYY-9if8H%&j1kT`%sHW|2q8e;?>C;$CsY-!wd+R_5lduu9RCQ?>`sl7XyQ&ouSI1cpQ zZKzRIMCHA=(am8iXS$ui;2HkaLX00000 LNkvXXu0mjfUOGHm diff --git a/assets/pattern/marker.png b/assets/pattern/marker.png index 5504a78073b34b51aeefd17477d2b859d942c486..ad8069e9e55f18bd66ea13129583f707fdea08e9 100644 GIT binary patch literal 9127 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 Up7<~bwe+DW%WKHh$XEpbAG|-Vv;Y7A delta 2054 zcmV+h2>JKIXV4IkBYy#fX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmP!xqvQ?*(u4(%Y~ zkfAzR5EXIMDionYs1;guFnQ@8G-*guTpR`0f`dPcRR6lU)@9ujoM#K7WMKCo{{KlcXd%*4I6C zQr*RPR_DGyt6$Ao4DgA>v&=AU;tk^IP21qSPaI)IStULv9y95J#E)E8JbvR`a9QA) z5i^~dCyo${g*H~&m=#Tpc#1fxYC7c$8IM)YTb#9Wl{N3lUl_{iE6ZG`HH-unu>=Vs z6jV_{88%|H>wlzJNYQz`gMY~NOXO0>RRSZ&0xHlTyMFLL_&r-IKRMwgh2lW>i{pHZ z0D)bgQFEN{W5;Qn0RCs-N^kiqbztU`^jb@c9svW}z{Pb-Q}%$%9boXukWJZ@{IrC8 z9(X^aZ^{DUTOhdR&8>Nk(+40;vr66o2Zz9DfwI>-yb`;&eQy8uH0SpN-6nEt2SeV0 zlb$Ug2nqrK0BI!QJCnvOCw~SxNklzn$zi2C=?(Z4oi{*!?04R6a;}Fh+Hn`^ZC}-*HIKDN%GdMTO7wVo6WhoxxT(W zgTau=WB>p(P4DjRcDr4MVO%a3(r&jyp^zww5CnC*-L0)Hk|fLJvdLun`0=A&ulMz1x5CrLTx^OrwiXsfd1VQ}!_mAiK8#ivqvJ64c%*>40Yz97`FO^E6 zD9WV?RK|Xt-pW&@;nbgP^Z%=6bd$*ZD(gk z5QLSLm5GT7Q4~!k6Gc%62M1246OKe8wOZ}+@)7{x^ZAaCk1sARUcP+EFboXCola+R zaxxx|8;!=v$$v?U#d30T(r7f!&d!?6W}#5Hyu2J68`EmFU}R*Z)oKk54e9lIK@hxN zZ>dx=8jZbCm&;YHR&6$$D2lCCYjt(i?RKA^pQ9*>Ac(`^`1R{oy={82^?E&#NCbnyt*xzvg$1QjsZyzAS$_NWZ8#jJC~9M4gQn?hHfuJU zaU2%}A(zY1H0^LWMn*;|l?u>kG_hDrqtQenkz_JCJw46y{MyH5v__P8W;C=I7^oa`jGB zE|)hqH=jOzS}vE1#Uc#DrBW#n2w)gS5X9Kn7)g?5v-$n|_duu9$+E0gs|7*$`t>VK z)75I#;cx%|QmNGV__*KiXIYk}>0~lFHGefFNz%Z;K&#cdcJ12k?(X{fdao^DVPQd` zQ1o);^Z6Ktkt7KK;PrYLhFMx#8XX;lVR&e0h-KM>g9A|%^?E(WaqV{d+qZ8{r&E?? z000OC0!pRQZnvAw=1QevGMT(yFOK8O%gcVhU!_vPFx=nY-}_n*Sw5e~FpMP0>wnj; zcRHPBvuQ9Gz>_CWPESv*R;$Tm((CnyhljabZhwDY5QLMHlexLMbUHmfJ&mI1`uh6z z_O>j`4u=Cp(MqMFP$&w80)}BIiXx>_so8AeIIdJGE0u~Uin1(6qft>5B}wWP%3v^j z`t)gGVS(egKY#vU7`C*uG&wohGk?iqu{0VD5Q#(xg4o^NwOA}1$NByKt*xzEtyZts zyWOr@t=`$$DHIA21pWN^Q>|9lYBh($;qiES$WRnrSy{P%|2~+Vo!#Ev{_*37R;!gH zDVNK+-EN&u2SE^qVF-d;US2jD4THfD4u@?vTPBnF{{8#Sn>Sy)c%jqjnp@50ojZ3Z ziUPr4&}y~byLXT0d0Cc6M@Q4?w8>;52x578nWCt6yPZy_?RGnk3ERd~|g5AHgfsc>n+a diff --git a/pkg/editor_scene.go b/pkg/editor_scene.go index 72eef8e..6d663f3 100644 --- a/pkg/editor_scene.go +++ b/pkg/editor_scene.go @@ -215,8 +215,10 @@ func (s *EditorScene) Loop(d *Doodle, ev *event.State) error { // Undo/Redo key bindings. if keybind.Undo(ev) { s.UI.Canvas.UndoStroke() + ev.ResetKeyDown() } else if keybind.Redo(ev) { s.UI.Canvas.RedoStroke() + ev.ResetKeyDown() } // Zoom in/out. @@ -224,12 +226,15 @@ func (s *EditorScene) Loop(d *Doodle, ev *event.State) error { if keybind.ZoomIn(ev) { d.Flash("Zoom in") s.UI.Canvas.Zoom++ + ev.ResetKeyDown() } else if keybind.ZoomOut(ev) { d.Flash("Zoom out") s.UI.Canvas.Zoom-- + ev.ResetKeyDown() } else if keybind.ZoomReset(ev) { d.Flash("Reset zoom") s.UI.Canvas.Zoom = 0 + ev.ResetKeyDown() } } @@ -237,6 +242,7 @@ func (s *EditorScene) Loop(d *Doodle, ev *event.State) error { if keybind.Origin(ev) { d.Flash("Scrolled back to level origin (0,0)") s.UI.Canvas.ScrollTo(render.Origin) + ev.ResetKeyDown() } // s.UI.Loop(ev) diff --git a/pkg/level/palette_defaults.go b/pkg/level/palette_defaults.go index 926a7c0..b8b3c42 100644 --- a/pkg/level/palette_defaults.go +++ b/pkg/level/palette_defaults.go @@ -13,87 +13,101 @@ var ( } DefaultPalettes = map[string]*Palette{ - "Default": &Palette{ + "Default": { Swatches: []*Swatch{ - &Swatch{ - Name: "solid", - Color: render.Black, - Solid: true, + { + Name: "solid", + Color: render.MustHexColor("#777"), + Solid: true, + Pattern: "noise.png", }, - &Swatch{ - Name: "decoration", - Color: render.Grey, + { + Name: "decoration", + Color: render.MustHexColor("#CCC"), + Pattern: "noise.png", }, - &Swatch{ - Name: "fire", - Color: render.Red, - Fire: true, + { + Name: "fire", + Color: render.Red, + Fire: true, + Pattern: "marker.png", }, - &Swatch{ - Name: "water", - Color: render.RGBA(0, 0, 255, 180), - Water: true, + { + Name: "water", + Color: render.MustHexColor("#09F"), + Water: true, + Pattern: "ink.png", }, }, }, - "Colored Pencil": &Palette{ + "Colored Pencil": { Swatches: []*Swatch{ - &Swatch{ - Name: "grass", - Color: render.DarkGreen, - Solid: true, + { + Name: "grass", + Color: render.DarkGreen, + Solid: true, + Pattern: "noise.png", }, - &Swatch{ - Name: "dirt", - Color: render.RGBA(100, 64, 0, 255), - Solid: true, + { + Name: "dirt", + Color: render.MustHexColor("#960"), + Solid: true, + Pattern: "noise.png", }, - &Swatch{ - Name: "stone", - Color: render.DarkGrey, - Solid: true, + { + Name: "stone", + Color: render.Grey, + Solid: true, + Pattern: "noise.png", }, - &Swatch{ - Name: "fire", - Color: render.Red, - Fire: true, + { + Name: "fire", + Color: render.Red, + Fire: true, + Pattern: "marker.png", }, - &Swatch{ - Name: "water", - Color: render.RGBA(0, 153, 255, 255), - Water: true, + { + Name: "water", + Color: render.RGBA(0, 153, 255, 255), + Water: true, + Pattern: "ink.png", }, }, }, - "Blueprint": &Palette{ + "Blueprint": { Swatches: []*Swatch{ - &Swatch{ - Name: "solid", - Color: render.RGBA(254, 254, 254, 255), - Solid: true, + { + Name: "solid", + Color: render.RGBA(254, 254, 254, 255), + Solid: true, + Pattern: "noise.png", }, - &Swatch{ - Name: "decoration", - Color: render.Grey, + { + Name: "decoration", + Color: render.Grey, + Pattern: "noise.png", }, - &Swatch{ - Name: "fire", - Color: render.RGBA(255, 80, 0, 255), - Fire: true, + { + Name: "fire", + Color: render.RGBA(255, 80, 0, 255), + Fire: true, + Pattern: "marker.png", }, - &Swatch{ - Name: "water", - Color: render.RGBA(0, 153, 255, 255), - Water: true, + { + Name: "water", + Color: render.RGBA(0, 153, 255, 255), + Water: true, + Pattern: "ink.png", }, - &Swatch{ - Name: "electric", - Color: render.RGBA(255, 255, 0, 255), - Solid: true, + { + Name: "electric", + Color: render.RGBA(255, 255, 0, 255), + Solid: true, + Pattern: "marker.png", }, }, }, } -) \ No newline at end of file +) diff --git a/pkg/windows/settings.go b/pkg/windows/settings.go index 7e24fbd..3a657de 100644 --- a/pkg/windows/settings.go +++ b/pkg/windows/settings.go @@ -144,8 +144,6 @@ func saveGameSettings() { func (c Settings) makeOptionsTab(Width, Height int) *ui.Frame { tab := ui.NewFrame("Options Tab") - log.Error("c.Super: %+v", c.Supervisor) - // Common click handler for all settings, // so we can write the updated info to disk. onClick := func(ed ui.EventData) error { @@ -176,7 +174,7 @@ func (c Settings) makeOptionsTab(Width, Height int) *ui.Frame { name: "toolbars", }, { - Header: "Debug Options", + Header: "Debug Options (temporary)", }, { Boolean: c.DebugOverlay,