From b1a71e3e351d513120aa772e9c873b71e580ad44 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Wed, 7 Aug 2019 22:25:27 -0400 Subject: [PATCH] add background tile editing & saving --- game.exe | Bin 101592 -> 102889 bytes game.prj | Bin 5522 -> 5721 bytes gameboot.jor | 2 +- jiles.jor | 25 ++++++++++--- ntiles.gfx | Bin 0 -> 8192 bytes state.jor | 4 +-- testbed.c | 98 ++++++++++++++++++++++++++++++++++++++------------- tiles.c | 36 +++++++++++++------ tiles.gfx | Bin 0 -> 8192 bytes 9 files changed, 123 insertions(+), 42 deletions(-) create mode 100755 ntiles.gfx create mode 100755 tiles.gfx diff --git a/game.exe b/game.exe index f452deb40e120de26fdd91d90d61ebd0a53805bc..eda9108c83413661a1baa85f95e2d9f880383a00 100755 GIT binary patch delta 23925 zcmc(nd0bT0|Nr0TFbp`N;D$TmhNy@vf(+{b!zPHMA}}uChFhkFfM(`kn2M8{-EwTP zGApZ(mPO^LW#j^FnoEmW?q*jp_g!RuuXFDVn*F|???1oC<9BU_=Xt%)zTI=~J=5Wr zwddAry$6pBVGGHF{E5ins9WWo#>Ylgom}u93^e4MWUoQUgVpZ~Lv31vAz%K;F=p2Y z>jfb=<}}#v8BBH)e4WjB;L9Za?X!|64wDwN7{#rlrQcil@u!AL_gct)De1!7<%$MY z(sp@jgUPN*G&!S^d#6jRRVx2(q?FOh%AX%u^-HTD9{fbKxmH_kAX1XewYPl`U{IXd zY`q*_Z3?drKWG}3E5|2DA-+9$t2imwcPQTzFTL;ErN!Iv6}vr^z)Asc#Y?~WcH|kk z(oNs)iRJl?$!}D%*7Rm+Q)g*k&#!CZM4|#``UoL^nvQhgQD=W$8rilp|2DPi$+qQ; zXJktE+9m79!b?Mr*&KeePFMcL*!o%rP~V^Y$(%MUA^qeuhV9B4edF z?YsDH7;ZKAc21_{ zsr4p#{J+(^COPZh>TQ!8DO77}LyUH_p`^2j29@b3Q+vV>!U(s#>b$uwOr!&g@Z*Tw zY>@BirRol87SEVR^04j;gL{L+BwuD~?(()OED_MjFviqm4_KY?ML*i}+x@ zWDA_%zB|Q5T!|Pn&fvykno%5 zUL-XtFA>!dle|KW>Ikt?wBo7C)U$O@ER+m=E7=g~yS`oUeZH@OAJR)fK|OnS6rLSr z8YMFtXJ&>6ikL;4-xbYXrjf4)O7nuc^G<=%8$tEP@lj^;?t<&fQm+Lp^{{h|$-dhS zoynzMQB=%TLXC8(R~6M$RsEx?j`!=sdQS*=H2Lc$`PH7TP4;vtD3Vlv$Ixyc-aY2`xXHC_tuSvD0dRlX}mA>DkuKzC8?v6U% zhiqhqo6WVU4MgV_5&RvHD^u(3#Fk|@96GU$Q`7y!l-%}!w{SasRX7au-*TijR4i!FJneRFw!_Z7)jD}U%xo?!u>L7! zh4tWZAyvg;uWFh$7U0)@(yW19`(#ebBzI7s?AswaQuwp1V0hj$5*0`(L48@;6E`i{5} zy|4eE&nM^&T6+_Wg&hIr^>%Ea5j}|8TPpJLBgrf<{DI7<7OOMC2YgY{oEg|Y`TQj8rgz?hVbfb0W_j2B_oC(G# z3EEL|m+xG;Qv>QaR}Ok4h6u!J|Bo22n%yKve3oR*zQE=jR`;qSs^WCJciR<*wCOGaF)ZSChPN`XjaEoki->GJ^aa#KjK1F8#9mk8VIF{^`rYCl>#JS=a)4vw$!zZ7YKWejmEPMIZy>-P#x1H{n9hju#SKDltNoXaiX1y&hZL^&Vsp&y% zJ?^rS?sc(wn11A0ZMIWu=m$<=f^yp_x{FEfgRbUT*HL)zle6K&03Qo?Zl+yykWylLD+`ChC8?DN2(C-FFk2A z4Z>_HyET|`f33`|SGv?MJ5YPhTjstl%5u6tZrMFiD6Cg<^W)C~UL7TO zQ80z()GNi9@ufO^EXrb7F8s18In|prRf{kHn+bz-F}1xkGp)Z^HpssB9*)g&*AsAyt^FDJdKS_;NY6v+U2A^}QZc0W zhM6q#)6jft?NcI6av`)&;B6Wtw_5vdc*}yc15zHO%Qf~bko1tghh&6ww8oxnFv$Us z4nPWp^j(ep41BeM^a~_ENLy;`>)?wZ{Q;>dq_=DAA42-uvej%q0qyoyv%IRtz6;tB zNHU~9AuXt}%aCdzU4e8E(qlFD`;b0`bQjWBkn(Hng>fc%9VCz8CV3;Ilp1>(>S6_? z7LZ?7gpOGw3#zJWAuk6nWF z0i>rOeFiCekNprN8>9+IZ$XOLWAC1Bk{3aG4$?|UfqU$&Aw6NYnC&)b^P#obV-JB= z0B`FdO@+kwV8t)n_L=P;L78yGy#8vweJbkpBc_gkx_0)ZSn0(f%;)eC@FS|>#~SU@ zp`_?@{tyok{!m6mt=4lGQ=gqIyiiVJ>FK%OJi(rqX_D)Vuqglb03&Z_O-Ep_5Yi0GjF#N!2+_Wl} zc$GV}7lwydD;1DyEz>l;Ip4jaq4oSGb}gY_w5s#A9y@Tlc1cvO!;vdb@HS(yD;{dq z>C{*pHm~w^7lu2UUl@*xtP{!ARymUw8xn){a^J`mWUY~w4Q|SAN~;G)v|7{|cNFCj zTvKIwl-J*sjt%bHdR=g_zqR?hWc7QSuw6w4bLk->32t z&BAXDRI9z3(`J;k&y?!_dJ8ncQlmy!{dBV$qsCEd&WIe#155h{mhxt$ zO>^bMQo&J#`}Uh&BM=5-QVpXU;R>T0(NYP- zsm>M1bA(i%7u0=5E|oT4*x)&$)U#GQBUg-^iumaey%sjy&MDQ_YNtz?`90VsX;yys zW|wm!M^!A)QmJpAoF%=PpOjhciPE!JYo{6yvesf_yHiWzad3eKg8i+0Y>BX4EyG6E z(6j zqak~7t|?bGw#0Oz!*jtJcWgMEv%+&82x2c2_8zcXYmh;W$e@@8ax3Dq%N>|6P%Uog z9!#5EzAjtRjqGf(=4vYL3KL!nbXd0YQ?eeux#ZGtO-U2saQCM=jQ}Mx3ok4q@eIn- z5XWh@dwBJ^UkF7!aQYS|6b!(YD4z3?&D!>;t#eyc^TG|7Z|-CI5G%V>EL`jB@*LUq z)`Hs(Y2L`ULT~5P`JfZJQHgu5oOR8Nk%)%~t>@Pj7VOH+`$|JQ{^8^LHEHmuF6>g( zdA7A3trI+^84M@NrnQkK`scWz!q{5&aUOgt>}##FaL&{kF>?@4ZPHK z!{Dh^8;S-pwnsWXX@Jj*Z7Oza&eh+SSGGBK^S)dub)Ou^4p)tvJcqHv(r;7Bg0@W& z|K2IuSoBFz#pIhsH;ZV}u1PgT2aA3vx>D3@^4F8k6x}NtG3jv8u_EcIsd=c#LsO6O zg!y?UdFNG3<(O59^W=9O<~R)%Pg&-^22VcFCDy#}MJ48CDePf)#~lFOOlOF3U5e)@tYGVgF>w!@~(AdaD6lyFxfh^5pYy zoZC*~aggZbLdwC@0A+KNr+C*o#Ej%uoL7_PhC%7xUu?j?{o8CB7Jks~)7(5t{-OE$ zvb;)k3Xv$$4mYZsXg#(}lmXpb+WL5>C}+vytjCuboMlnV+E;8pthM4HoJhMuY^ArBFJ|qU_06oHSyyKLIP1`?UuQl3MEl|| zpE&x&@YySse}1!i%u;6@WyDGKv-<~O-1+3!X-u+QH)hwi%XxKf+iv7-b*E1a*fj6$ zy0sT=yPNl^VQ<%S-!ES^uC04;jPKYI>4}n7V@v9yo;w^Iqa9mP(q^3}1+O1p;)iOM z*HQ2azey!^-Gi<08e9txMEEma{WDSg5gvvK&kcw3^LMQ{;AS@S&8&wnZK?Cnes<~_Y%xBQas);av9hLvb5BYWi6 z`Nu>;Yi2zr=a4mxuZILjc=h^j`QY^d`NQQECr9mac*h{DG^z)>CC*upnWG$vy4ibgdfC4ry4F%pQxnI zfT9LlTMt(v>Po*J`O?s*TDMu@)P1do*Y(J+Oyi1W-cysC_sB2x#w!62w_ON+TDtVq zCxKDgnu@d?RC7x-v?Wn@@>W&8l?+xhGA7Mb0?Ljywe3(QY; z``voodZBM!@mcGimBD@TPdBeDql!H|a-**L#NCq1;nkI?qEmh}--yy8J5jg^aq_3Y2PK?aQqQUK4;G*#AtqwA~EcdF*JMvpdsr!?g zluVsoG&^|mq`6fu?2lsIiY87iDH&Hhxu}F5U{@+Gnm%*fM8&W4?EyoT=RwXay#|Ya zBHbopC^@g&IYc_nTu$;FLB#n35AEPi#?8}p1;U-gH7+Mb!Hu{6jqdbE-1#oI#pz{= zOK`g9KH^^bh>A+mVnP_3|lGSbDG2s3D`p8SY!ymP7~M)0b6M@D+mQ_qbJxB0o!RT`$)hS zG@ktu2KbT+*k|E@9W;^o4gh>bMQpc#Y8u7bMFPI2VhfuhXeT|z`a}VC(Oh;!z;1ey zT@$c}=Cde0poYrX3IVnBEL$Vs8+wM_7w|1ru-?&t?`RP-3;3R@*-QaH&_?!(fW7oB zJ1Afu`rQoyKjNvSr62~hpZfCs0uIn##$o{n>1Q@uz#;mKZ4&Sk?PC6MfS>6)D-`ex z?PTu?_>~%1bv)oO9bo4L{6@!Fa01{6{lNwa_?j#4YW#Ukh!oo2fQ z948NcM!*Sb%99O%lT^jl2{=U;*oOj6(ta3+NY#$$-D9hB*XWq+{#}Bj6GS;mZOp(+ze} zz!f^nZVR|db&RI~u2DV96>y#Iu?wky8}uuSO#|Gd^K7JmTXdC40&deec1XY-+Rs|2 zlZD#dr5{=MbV&E;BnuHxPg_`;fcw;u2W0{p$cv8`;GjQQjR0c(`G_n4V&}2*gyP30(l@x_ zP!}kF3h-x-Q6Dp)E0lBr-2g=bx&xjT(8B`yN>ESMp5GJ@0HxbVKrcX>QGh@|q=4Rl zJOOXUP1ehQ-od_5TXe$6u_vi-!!vSXn*l^Gh0r^O*)pURvkR)IvGBioRDEKKCFdDGYB4`Y#;|xFn;I4o| zK;TTkSiq&(fN=n^M#lV(kAMjPvE;@4evrLh3MgVb*rGDPB$$rO0Ze9-DRnMj3X}{1 zQ(Z6(FnF#7(qkZ#uuXTt$$fc*+Iy0i{BD8ZcMD0vA}=UA9&zG2p9tV*XhI@|_Q9DY8FVKqZs~0+s>Z5MTwY7w{ZlgMj6L{|HzC zAUfkgD*?pwp&pya8Av;7!0Q0@eXu6Yv(`O#$o0{PVV;x0#OK6YviE zkTwf=mwiK<4S)^oJ^Dnzdn^!JKEV5c&jozI-XXhy|FAu@O~6KWfW8p0iM3)o1boP@ zQMG`Nn1;>@*bIm?0zPJzDQt$IPuM)xU;*0=@uT7w{$EwtyXgs9eBTV*VK`s2b9E0bc_q3fKvl zC14j|zJT3;1p@W}^78;SfMNl)fHDE!0Okq!7SJsp@ExFsfbRhT0)7Al3fK#<^bxcV z6e-|GK$L*}fM@{+*t1kF;2`V6E(kcp-ep$>{KRgt>jHjemzbs;@C!S^JO%uU;9dd_ z1F{ADhCv~Es{0Y;58!tJV*I=R0rC=XR7gI6Q>-0nz`8~_jsBr1{{>|Dd5PmLe~xKY zIK#S;9?F`(ST99scb4^}4+t6hlXa&L$pX57=2W6?g!|}UiqZ%-U49zjmMcSzaG!;` zLOJ0M3saRwXpGPa7Sc5!u?7bgTK_-5^8YN=+bo>4Xfn-hHb4aj3RW))M%-CK2DmE} z4p2-MQ4dP#-CR&OThzovuU5($$TMiHC}M9{)O`^3ZV`1~R~kWlklL&J{Ywc( zsGGubf7Ie_0U*gd6pwiRtP0(DDgfzw7`QJJwsr}qy;GvcrT~RmBC0u z$wy=V5GFB9yhNd+apzR#S_MozfVB+3T${~%umV84;Rqfj?yfli;fIC-Vg(H2y;wZJ zLPK~@wo&vrG4PZE$h2lU4`W9}k9(Yl zGo|az-~-rMp@>jQre`8l2T{~n$VWQ?mM0+j3KG6WM7p~yLM?qUJSl@}HsFkis05(I zSPGDZQU*9LU=H4E{w-iGl#2pxBBz%HGytv$coKfD3gCci0_ItGB)cx?DL#531n@ zkuy;Z`viz;*e^g-!$AR}8h#QWs^M1wq8bhhs6YiP#aIMT8t7TTAHuYl>nwCk&=MZa zP6$}aW0+Fal{}UyHN1?+u?xavqXR_0G+Tk`c~rnhe_$o|M#ffL3Evj z(l$s+w;HL~5YZZEM4JC8{KLUt=IQDPdIh1B-0OG-Q%0$XS!s@c#EiadAugg;QWcYo z(o_B&(W?lrmvrDjOSGgZ%x^O(zILFt{g*O3pg3e|~muhi8W zJlhq1uo__V3^#)#k2ZDCH4;l=6rqlv;d)4^_*fv+!YRL?W1yBT@SQ zEtn{@5~KM+jKkF!--Dvm$NK;!(;|7LJR*5#_i7A|`Nx?fXZR1C;dTE3DD|;{=crlS z2t}#(?kWe3ND;0DBwK>;fp`zOj3YcM&~z=2E;GmAweB^f(>2s-Ew$C2A|~gGp(ZA6;qe=g+Bklm8OR zX~OzP$5*&wT&~7=z!lL!fKswUt~B=ZmF$>kg@>YkH26=r8z~L^GeRjX)i~>k9-~x4 zIDcMA%Yt>sD)qK@m%X6&bC*pQ&LuTNciD?BlT&#p)Jv-A7qpABdpZZ67@SHz8e8F4 zS3@6mHKL`Fe&egvrIl+&(~0m(EBXMGT#Ja5?%e=Tdi9eqDZQEll*GjRq14&GBJ^sE z@J0AhhW$v_{_8&TrnO6C`Eh_-l;qYE=>QNm_@2e?tkMprsVY)6eWxI zm}QMxd!mTSDnk@e8SbKp$|x5_bgtSo>MBDNQK<%zm=d+C&NL!1CHdd@%a0`X4?oTf zy@JPxqBk|>=(ww+>G-S4npJb`f%2NFh&2A$(mKADDFr&g-%!efEzRr5KL+r>l`Q@y zTPhx7_2cUp=3iw-e2bNfd00@%#*)>+$$WfX6xR z$Mf(ih%UIY*x1h-6*04ks?z=K^7Dv-`A63n>>>~2hAeDcjw6MKuak^5IfK&UOquep z4({>131(lWe2knmc^YmvxWy+I?n=&3aq0)B2Ak~XT5^Y5d{)7o=_ayW zl1k|zX;g@}icf_MqNO2Ov?3&%R)-9s*FsG6e#lVzJY*Q{2pLW_Avtt3B$rNxF3ZgIu<&IPK3^-y3l!aJ@hHkgv}>i*wfT9Yyq_ovry--ataN5 zhQ@|f(8RE3X;#=`Dh^vhPlhd}r^6~~RhX5k!=9tvVJm5W*ed!Z>;*a&_9ER6dx@Ha zuclVvHtH0rugtz$dVoYDh&^Rjpm21#pexrKm1MlDEuw@Ec_k%GWX0Falj7pjQEP8BdYP)MFkPNsVHI(Er_V0)e*H8dMDx=+8FUIRYiP<&-ZjNVlVw1 z@gp6N*iYvoej?AvpQ(A|FVr&fFtv+3LY*Ujr#_K?P-x^)N{>8F6C+R3l*m&wEAlkW zi#$V%BLAcpBhS*?k$=(0kuvR#tfQlm7wCNCMY_h7nt{ZA9?03Lfo|;FKzDY1pqAAS^k6*7lWC)L ztVfgw^@;MNeo;**GD=73QC^f2)q--P+R&7!wlp=W9nFktPjjO>kR_@UEsg3-%cK10 zgQzaFF{&%=v_y5I+NkcdH>wBiiwdA4QN8GBR3M#+>P;7-`p}iAAi5USk8VZ z`RGHai$0Ws_2Cq$kDw@hB*p5ZC|<9p1bs9m>tiTWA4kLW@ia=GKx6d=8m~{JDf(oZ zrZ>`beG1Ler&6&#jh@tJlI1D=U|OcnCaYdUEA;NPO0T8WdQV!T*U?&iQ>xN?(N=vk z+Np0&HF|G4toNbg`WE!3z9n7Mx1y{1)^tbjOZWA7CKcU|nnky#4$&Q`S9E9U9qmU! z(OoDp+Mn{GyOBA%JB^O+L1UwP(xm7BdOW&~g=Qj9DFT%t(46Rw^kj4=dJ2J`Mqmp9 zFGS#HqPx{8riw>cK(P8v^bSV8D zJ%Fx852PE>db%GSM=U0ud}9(QC?*jH@?t3@#*$1qF-FRdNu`3Abea^CMblyiQ+Z4_ zy%aNqY%wN!Ehdv*kHMIa$)WFJ#?t_DNb0JCB~h-?bJ9>tmm$_hT)zDYk+> zja@`LW1ppCv5QF)x0IU1RZ_<|EBVJgM?K<}Q&`*zN{M@(2F0zS(Qy(L#=S`6<6fdg zajR)%oQ+n+y-csgy+Uuty-x4Oy+xbi-lolQ?^0FV2C~P!Pt|cB(5|@u(D!khXkQ%O zXdH;!Oh3haOsC^MAxB&lb&CIty2gJ_A@N%%Iesgp$8V#&`0X@1{tH?a{}ru{-%YQ_ z@1f1{HMBkc8>)`~mUhK|M?c1YPrt?Qr4#Y{NRHo6=i?91#rT7CBmNMzNcf5RCj3Id z3BOWk!eL5JI6{LGey70+e^_X4!ci(uI8M(boSPkJZeENx2o zi#|&@M_Urk)3$^<+L`b-?M}EzwF#H#NWx`0m2j2LBwVAv60Xzrgd5b{aFcuuw@7ce zO^JrPlx(<1sfKzQZn#g68ycw8;2@iU*c%3pvoaPp_O?O8HX5`zFXO>JHh8kFh9>N5 zLsPcP;KgbT&Db$Rb9UC?gVQrDSe>CIyJl#`?ipI+5KS9KiN4G;u^rPTwr9-}JFpIk z9a*o$PAnm@GfPYC!ZH&5Syp0KR+!k0O-}5I(=`EXdSWkDlGvM-CH7$pEQvvEX<|S2 zd}1(rDX~9$KQV-Tkr>AICx)|2i4p8dVkFZg^yebk^hxO~ zCTS2Gnv{jJIfGe2QZ}2MG=x2yWMc0o4P~`S!LSYmP^%Sax}MkbGA z(~~E#vgC=(GC#S9txlfA)+A46pCnIZyOO7|TKv71Je}Q1o`DlSGnt2R7HeUg&HRid zEWlXG!j1UZhj9*zG0tUK;6i9c#;4e0#;0)*XaOrRTG&csIkOp`VJ{mi*jnQv_L1>f z_PKE}`_{OGeQ&H}$BfI^X`|J`>Ws^AR%ivgVqD2?8du@C&S`GkwY{EH&j-HaO)qmXq>24ide=3R2!=Q&QHk(v-KDCFLEqIOScoB4q=6 zDdl~(Hsu5MZpweyhbbGGJ!KQyo$?_&n6jCjO!=63r+&hcQ!Q0&PU@%ZKdGOwPg1wA zv#DEgC}|tJp1Peiq<+DgrhUm;rtM(u)2dn5w69rY+Af?`+RYNu_OR5n8kU__%S>tC zvi!8~adhbiR+zSzO-kFx9#8v`m8R`yE7K0*B-0_bChaHoM%vHp-LzlWhiSjEAJcxr z!KNeZh$ZcJb|&o)R+n~^T}?a2?xr1Q&C^ffu+u5lHvKf~nvOS*>1SC$`d=(K{Txm_ zooC_cbu1wGKeqCVEn}l&NpPZ@ogCzzBj|2pUBYiYZ;zg zJE#e7KS;-e1~ugggS_~#LCtv4pyqt;Aa8CRIB&WDek~Gb8xxnNfUwrk-!kjOO;tfqZ*rEZ>@}kLE&1gneb1KX7p}AQtX?|8KD$i;| z&u6tIDXSf=&T3CDXLX=;*axVWp5x3TF0m)b;Qlxor|u4>@}@ZDCl>rTxq>G!CsbWa zCA=%0w3QlJcgrcK-*0&s&iIM7J5KZP{x}w=#&Hkthp?HTrqCOBU%ZM|_1QVZ>a;ECD@a^tq(G}tw;C&K>JL-zl`?#^umu(#L3jw6fo=R@{39(wYyEl)%4 zJYmj&dAP>_e5=;aI3k0qq(hj59)1;%R*NB*gnf*g{-fw z&0tp8z8|u*2j2GiOltHzphYD0w=Eyc(%Oe0uDvk4(juVIT-{;?h1&iejM5LVxo0C^ z5w^kEI7$*}iyOi=v>%8l@4&a*`aw0eXcIwt+x;O36K!i_V*OdnmJ|~k!ZH%zyE6t! zWLwd$>h)CHNtB2)<6WRX)3%VXO;-#j+xp`bD_0Ii{)Nuwx)=`ErrC}TWo^f0!D~aZQqTu!Qx=#iuPUb=2DGr6Lb?;9FN=#eW+9avAqrNIk|dBvb}`2psN2# z9lFs7+lXN(ajtFcFjRFOEDU5*Pi3l;T zqla#^Q(xFKn#Lf#Wax`~Mo^(s-;N)WjJ1^xM{SL>y)&G}SRR8#oIacu5Q(Wv-Gsj# z@CD7}_+NrR{~+LVS2k#DuMo^=OgV@+u~!h4I%9plmmigZ#c@QbS4W!T)IaQn%@G*C zJ*3ZiwWKGVdTp=AXdcqaXJjkPVTqQ-aEJqklL8ZInbXsTz-(s4gOah(KM71`tB@ga z-RM1$ujM|<;lqaBqxfs^KLLK8?X!lhhX08ou|BD66Ifj4pp$$X_f-xejt@G_x5EEq z_=)RR&8pxBkK1isMzGG7Ur=A-%Icp?hmj$11Tn9F6#eehSN1p3QRw0zqOE@{op9=h z`cI%!(8Y1YWBv2#Pdr}|7k-gJ=eUP*C@~I?7cM*fuL#*sH{nMdODI8H>nDF+vih5bsc;a?oOYl5c&9o;Ny^?nvUj{M!U$`Qsd z!_5?c0OIn+#1U%CcXB>S82D$uTH?Fcc>DUjO zXxEh+wTOlwf#;!5i7Ix<*l@R3Se$x18s*!lUyD*_h8LmVj7m~;JpRLhH+?P*N5bL+ zWUPJ|4Mn8l5M(lT+OBH_HqYV`My_vz znt--^2l`uxbh1-Fh#mP<@CN9=VdMRnvng*xPo)`X;`gE7j~+)QijMLZ#1vx%pv4JF z48@pfGzXd32%Z-6;NG`CM%>B?M=5dKJ0@6R@x`zaUI71_p?hG1?7C*hMw0~zd;)!L zYy>?6KjPXHJDVz?e+uWP@V^+FHO1f`mq1I9>(Alr5f`Iq;;S$&O<_Cq@o~mR{oS|@ ztP=jkam!6{t<*?ht&Z=b_z{OLcf~)rJD-m?k`-x*qn8)s4UO?wf)m6600e{~G(qh+ z!aXPf@5*rPgg!VytW?zNnFN0Y#9_>56FNIpG(mz`Ns)3S^PPm2jrx`Zv4kV#VCJ?2 zwGRpRZZ#f@az3;6p@_~T6bid?O7pLT(F%*NWP>>8jvFizPBn~DSbVKBs0r+c{}32vEf06b{TpqVSj>NW3Y5n6|z2NN0!;>!3OPJ}-Krcu-O|Luk#N-{c4wKbc=o!fmZeWh&VtOC(%g{ZH)95|K zc@7+7>>*x1s@D_7Kn3bxC^4#4B!riZBWM!>{0)7rQLO6J>!MMuiA&J07(HAv-FE6% zpx=8)=P5agpKH+FQySy3P%bvaA7Tc)0YgEGnB&w7|2q@fid^4QOB~xsgIKqS9 z6hKc%>)5D|Ow-es7!miN7p6TJx>A~fzJh)q`kJ%{BkNFFB7N;ED3e+zI$;0o|C@f=)U8kI3pyXTYtX=V$pVarY75bF(_qSp;qa z!+dN5U6+I{qPW^ZU!7&E8O`#OFMCd7J(O2A;{9cxsEKR^YpT4mX#)2O{Yl&*#8DOT zS_Z#bh(6F_J)5DtvJr(dWKEzJwsB)vM3)T+uettGGAM>LiQ8uw&heIj$O0(El0+&=31NQ6y|Tcji2M$3Z}3(*<&`x z6xM~!v~`)v`Zp;RN4l^)D6{2F#bVQ9dqezLYWoXDykJ{B4Y3AKV?G_0GE5dY7|6wb z5Px0nrOf6th4~^#;WU<)^!6j(ICW7nIKmn1-GAEo2Ta{qDBDaWTAOJ)(ro@1^K7}w zY5dq3NTf9#Ta%Q>SfchTCFizI<5(ZQhuOwXX92e0ao8*!dyIwH8XjX|ZM%t_imTjV zDZt4HHL2fi1E;egwguDKH+a2h^B>0yw#(z0mc46R`8c!LW=vsWHq#8IZ8=sPd_(0Z zCjzrLb?2+6GC$sn+x(}pV39_k?br;~)bh7@BYF|df}J-~ye!_5UlH0>)*nCFV%ULR zhqe5M(8Rk$j9GZT&9GFt!_dR-vc6P)kM$Eh3D$PvtG)Q@Aig?^uTJ8tv-t88E7&gL z%O79mUAYAq#TVnpPGTt;jkm!RBfesVIgT&EVpllD5rgtkg8oZ>Lm2WK${xyZp$IWn ze2v4Yh4S(Eq6xw|5nts+a9U`Ra8DLrQ-pb{@HkD7IE+Q&{1tsBvi`aF+QO$Y+Q6qV zdPNvs=2%g`#_@xmt84}%JDck=%|M)DLSUhgdkV%t}lFer+>u*b0%F4I=z7+F|`_vf|i{{#VmocMX rN>1T$)3A)36awXBWZ|zX;*!D=n|T?#;gK^WYe-(ouq}hF%*y@`se>)k delta 22583 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 Zv~8Y<$Gd<9BH1=_fw;M8=t40^{D0SvFEIcB diff --git a/game.prj b/game.prj index 6f7eab46a4e3e455a5c9b15a1fa0c265873dfa75..1303699cd963a15ee7ed9c9fff2f9a5399489391 100755 GIT binary patch delta 331 zcmbQFeN$(HIvX?d7WU0rY!w`QDjV7TKX5QGbn`GU@Gx%Pz-Pk9s>Hwmlzz!?&scw% zMW2CzA(3S=^LCb1EZ)pLEV(TI|Ld?sFn?hRWwBy8!u3A?D2_{(?)HeV06J!uu-Q*|7AhX26kBOlnXR04RL%}9C ze=dg4v!?hdGV~SJ`-w69sNLcx$}j~eE5hJdQt$WwzlVYXLkfeLG=mZ&g91pX5oojH zv=Hz2RSFiH8{k{)kV)4sE~s}m_cD9`{v1llFZCN J#^m)Pj{!L!SFr#9 delta 188 zcmcbqGf8`cIvewoZETyh*eW>q=4@i~x8Pu4=;mQy_`|Sy1D^>aD+9wrp!7?Ad&YVm z7JUW=hFQ#Km_9H+W^Q3R%DjyE|Nm6xiA=goeaywof0_ROzsdB3sgZd<(|aZr=1ok# zK>0`@HUwf%rZ6UPW-cIW3d2H%pNx@=s*DpElbMb(?qw)tOknuPkN`BDgF%=f8|Vxc c1_h27F?KM?0VY{D=LxYgGXo_jmx(?G0CkHw8vpbuf - spriteindex @ preview spr>buf + 0 edittarget = if + i preview tile>buf + spriteindex @ preview spr>buf + else + spriteindex @ preview tile>buf + then i 3 % 2 * 65 + i 3 / 16 * preview paintbuf next ; @@ -28,12 +32,24 @@ array preview 128 allot r@ mousexys putpixel refresh then rdrop ; +: gfxfilename + 0 edittarget = if + s" sprite.gfx" + else + NIGHT flag@ if + s" ntiles.gfx" + else + s" tiles.gfx" + then + then ; + var jiles-old-tick var jiles-old-draw 44 const ^Z 45 const ^X 31 const ^S +20 const ^T : jiles-tick mousepos 128 < swap 128 < and if @@ -49,11 +65,12 @@ var jiles-old-draw ^RIGHT key-pressed if 1 +sprite! then ^Z key-pressed if mousexys getpixel lcolor color! then ^X key-pressed if mousexys getpixel rcolor color! then - ^S key-pressed if s" SAVING" type cr savegfx then + ^S key-pressed if s" SAVING " type gfxfilename dup type cr savegfx then + ^T key-pressed if edittarget if 0 else 1 then edittarget! 0 +sprite! then ^TAB key-pressed if jiles-old-draw @ ' draw redefine jiles-old-tick @ ' tick redefine - mousehide unfuck invalidate-map + mousehide unfuck invalidate-map reloadtiles then tick-debounce ; diff --git a/ntiles.gfx b/ntiles.gfx new file mode 100755 index 0000000000000000000000000000000000000000..9cce95a6718cef8309fe234ab58934a3ba606f29 GIT binary patch literal 8192 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 R546czI>%a};V^k){V!F7{$>CG literal 0 HcmV?d00001 diff --git a/state.jor b/state.jor index 06795af..a45e57a 100755 --- a/state.jor +++ b/state.jor @@ -16,8 +16,8 @@ array flags FLAG-COUNT 8 / 1 + allot : setflag 1 swap flagsf! ; : clearflag 0 swap flagsf! ; -: day s" TILES.TIF" loadtiles invalidate-map NIGHT clearflag ; -: night s" NTILES.TIF" loadtiles invalidate-map NIGHT setflag ; +: day s" tiles.gfx" loadtiles invalidate-map NIGHT clearflag ; +: night s" ntiles.gfx" loadtiles invalidate-map NIGHT setflag ; : {car-drive} NIGHT flag@ if {car-lit} else {car} then ; diff --git a/testbed.c b/testbed.c index 699f1c1..d23fd74 100755 --- a/testbed.c +++ b/testbed.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "video.h" #include "kbd.h" @@ -123,25 +124,36 @@ void fillMap() { } } -void readTiles(char *filename) { +void readTifTiles(char *filename) { FILE *f; TifImageMeta_t meta; f = fopen(filename, "rb"); meta = tifLoadMeta(f); tifLoad(f, meta, tiles, NUM_TILES * 16, 16, 4); - tifLoadEGA(f, meta, OFF_TILES, NUM_TILES * 16, 16); + fclose(f); + + loadTiles(OFF_TILES, tiles); +} + +void readTiles(char *filename) { + FILE *f = fopen(filename, "rb"); + freadfar(f, tiles, NUM_TILES * TILE_STRIDE * 2); fclose(f); loadTiles(OFF_TILES, tiles); } void f_loadtiles() { - readTiles(TOP().s); + if (tolower(TOP().s[strlen(TOP().s) - 1]) == 'f') { + readTifTiles(TOP().s); + } else { + readTiles(TOP().s); + } DROP(1); } -#define SPRITE_GFX +#define TILES_GFX void game_init() { FILE *f; @@ -166,23 +178,20 @@ void game_init() { tifLoadEGA(f, meta, 0, 48, 336); fclose(f); -#ifdef SPRITE_GFX f = fopen("sprite.gfx", "rb"); freadfar(f, sprites, NUM_SPRITES * SPRITE_STRIDE * 2); fclose(f); -#else - f = fopen("SPRITE.TIF", "rb"); - meta = tifLoadMeta(f); - tifLoad(f, meta, sprites, NUM_SPRITES * 16, 16, 5); - fclose(f); -#endif f = fopen("PORTRAIT.TIF", "rb"); meta = tifLoadMeta(f); tifLoadEGA(f, meta, OFF_PORTRAITS, NUM_PORTRAITS * 32, 32); fclose(f); - readTiles("TILES.TIF"); +#ifdef TILES_GFX + readTiles("tiles.gfx"); +#else + readTifTiles("TILES.TIF"); +#endif loadMap(map, 100, 100); scroll(0, 0); @@ -306,13 +315,27 @@ void f_glitch() { /* JILES */ #define SCREEN_STRIDE 40 +typedef enum { + ET_SPRITE = 0, + ET_TILE = 1 +} EditTarget_t; +EditTarget_t editTarget = ET_SPRITE; + +unsigned int far *getTarget(int index) { + if (editTarget == ET_SPRITE) { + return &sprites[index * SPRITE_STRIDE]; + } else { + return &tiles[index * TILE_STRIDE]; + } +} + int getsprpixel(int x, int y, unsigned int far *spr) { int shift = (15 - x); int b = (spr[y + 0] & (1 << shift)) >> shift; int g = (spr[y + 16] & (1 << shift)) >> shift; int r = (spr[y + 32] & (1 << shift)) >> shift; int i = (spr[y + 48] & (1 << shift)) >> shift; - int v = (spr[y + 64] & (1 << shift)) ? 0 : 1; + int v = editTarget != ET_SPRITE || (spr[y + 64] & (1 << shift)) ? 0 : 1; return b | (g << 1) | (r << 2) | (i << 3) | (v << 4); } int resetEnabledCache = 0; @@ -342,7 +365,7 @@ void drawFatBox(int x, int y, int color) { void f_drawfatsprite() { int isprite = TOP().i; - unsigned int far *spr = &sprites[isprite * SPRITE_STRIDE]; + unsigned int far *spr = getTarget(isprite); int x, y; DROP(1); @@ -361,10 +384,14 @@ void f_drawfatbox() { } void f_savegfx() { - FILE *fp; - fp = fopen("sprite.gfx", "wb"); - fwritefar(fp, sprites, NUM_SPRITES * SPRITE_STRIDE * 2); + FILE *fp = fopen(TOP().s, "wb"); + if (editTarget == ET_SPRITE) { + fwritefar(fp, sprites, NUM_SPRITES * SPRITE_STRIDE * 2); + } else { + fwritefar(fp, tiles, NUM_TILES * TILE_STRIDE * 2); + } fclose(fp); + DROP(1); } void f_mousehide() { @@ -386,7 +413,7 @@ void f_resetvideo() { void f_putpixel() { int isprite = TOP().i; - unsigned int far *spr = &sprites[isprite * SPRITE_STRIDE]; + unsigned int far *spr = getTarget(isprite); int x = ST2().i; int y = ST1().i; int color, shift, b, g, r, i, v; @@ -406,12 +433,14 @@ void f_putpixel() { spr[y + 16] = (spr[y + 16] & ~(1 << shift)) | (g << shift); spr[y + 32] = (spr[y + 32] & ~(1 << shift)) | (r << shift); spr[y + 48] = (spr[y + 48] & ~(1 << shift)) | (i << shift); - spr[y + 64] = (spr[y + 64] & ~(1 << shift)) | (v << shift); + if (editTarget == ET_SPRITE) { + spr[y + 64] = (spr[y + 64] & ~(1 << shift)) | (v << shift); + } } void f_getpixel() { int isprite = TOP().i; - unsigned int far *spr = &sprites[isprite * SPRITE_STRIDE]; + unsigned int far *spr = getTarget(isprite); int x = ST2().i; int y = ST1().i; DROP(2); @@ -420,29 +449,45 @@ void f_getpixel() { } void f_spritecount() { - PUSHI(NUM_SPRITES); + if (editTarget == ET_SPRITE) { + PUSHI(NUM_SPRITES); + } else { + PUSHI(NUM_TILES); + } } void f_tile2buf() { - unsigned int *buf = TOP().p; + unsigned int *buf = (unsigned int *)TOP().p; unsigned int itile = ST1().u; DROP(2); writeTile(buf, &tiles[itile * TILE_STRIDE]); } void f_spr2buf() { - unsigned int *buf = TOP().p; + unsigned int *buf = (unsigned int *)TOP().p; unsigned int isprite = ST1().u; DROP(2); overlaySprite(buf, &sprites[isprite * SPRITE_STRIDE], 0, 0); } void f_paintbuf() { - unsigned int *buf = TOP().p; + unsigned int *buf = (unsigned int *)TOP().p; int y = ST1().i; int x = ST2().i; DROP(3); - paintBuffer(buf, x + (y * 40)); + paintBuffer(buf, x + (y * SCREEN_STRIDE)); +} + +void f_setedittarget() { + editTarget = TOP().i; +} + +void f_getedittarget() { + PUSHI(editTarget); +} + +void f_reloadtiles() { + loadTiles(OFF_TILES, tiles); } /* INIT */ @@ -483,6 +528,9 @@ void game_f_init(char *exe, char *bootjor) { CDEF("tile>buf", f_tile2buf); CDEF("spr>buf", f_spr2buf); CDEF("paintbuf", f_paintbuf); + CDEF("edittarget", f_getedittarget); + CDEF("edittarget!", f_setedittarget); + CDEF("reloadtiles", f_reloadtiles); f_loadjor(bootjor); diff --git a/tiles.c b/tiles.c index 399ce8b..5cb19ee 100755 --- a/tiles.c +++ b/tiles.c @@ -62,9 +62,35 @@ void blit32x32(unsigned int offsetFrom, unsigned int offsetTo) { TiledScreen_t screen = { 0, 0, 0, 0, { OFF_PAGE1, OFF_PAGE2 }, 0, 0, NULL, NULL, 0, 0, 0, 0, 0 }; + +void paintBufferPlane(unsigned int *buf, unsigned int vidOffset, int stride, int plane) { + unsigned int drawOffset = vidOffset >> 1; + unsigned int y, bmp; + for (y = 0; y < 16; y ++) { + bmp = buf[y + (BUF_WSTRIDE * plane)]; + WVID[drawOffset] = (bmp << 8) | (bmp >> 8); + drawOffset += stride >> 1; + } +} + void loadTiles(unsigned int tilesOffset, unsigned int far *memTiles) { + int i, plane; screen.tilesOffset = tilesOffset; screen.memTiles = memTiles; + setWriteMode(0); + for (plane = 0; plane < 4; plane ++) { + unsigned int drawOffset = tilesOffset >> 1; + setPlane(plane); + for (i = 0; i < NUM_TILES; i ++) { + unsigned int y, bmp; + unsigned int far *buf = &memTiles[(i * BUF_WSIZE) + (BUF_WSTRIDE * plane)]; + for (y = 0; y < 16; y ++) { + bmp = buf[y]; + WVID[drawOffset ++] = (bmp << 8) | (bmp >> 8); + } + } + } + setAllPlanes(); } void loadMap(unsigned char *map, unsigned int w, unsigned int h) { @@ -187,16 +213,6 @@ void scroll(int newX, int newY) { screen.scrollY = newY; } -void paintBufferPlane(unsigned int *buf, unsigned int vidOffset, int stride, int plane) { - unsigned int drawOffset = vidOffset >> 1; - unsigned int y, bmp; - for (y = 0; y < 16; y ++) { - bmp = buf[y + (BUF_WSTRIDE * plane)]; - WVID[drawOffset] = (bmp << 8) | (bmp >> 8); - drawOffset += stride >> 1; - } -} - void paintBuffer(unsigned int *buf, unsigned int vidOffset) { int plane; setWriteMode(0); diff --git a/tiles.gfx b/tiles.gfx new file mode 100755 index 0000000000000000000000000000000000000000..7e975e751c671310a6b9d9f734846d57a62bb3d2 GIT binary patch literal 8192 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 literal 0 HcmV?d00001