From 73d9c4da1e5c536b48a56b5e8153e1f2877da695 Mon Sep 17 00:00:00 2001 From: sillysagiri Date: Thu, 17 Oct 2024 03:49:45 +0700 Subject: [PATCH] adding gzip into bmf --- .gitmodules | 3 + .vscode/settings.json | 5 +- assets/silly/bmf/nds12_0.png | Bin 1124 -> 0 bytes assets/silly/bmf/nds12_0.silly | Bin 16388 -> 0 bytes assets/silly/bmf/nds12_0.silly.gz | Bin 763 -> 725 bytes assets/silly/bmf/onds12_0.png | Bin 2172 -> 0 bytes assets/silly/bmf/onds12_0.silly.gz | Bin 0 -> 1223 bytes raw/nds12/onds12.fnt | Bin 11234 -> 1992 bytes src/sillysagiri/BMF.java | 108 +++++++------------------- src/sillysagiri/Sagiri.java | 2 +- src/sillysagiri/Utils.java | 19 +++++ src/sillysagiri/scene/DeathError.java | 1 + src/sillysagiri/scene/Intro.java | 17 ++-- src/sillysagiri/scene/MainMenu.java | 78 +++++++++++++++++-- tools/sillyimage | 1 + 15 files changed, 135 insertions(+), 99 deletions(-) create mode 100644 .gitmodules delete mode 100644 assets/silly/bmf/nds12_0.png delete mode 100644 assets/silly/bmf/nds12_0.silly delete mode 100644 assets/silly/bmf/onds12_0.png create mode 100644 assets/silly/bmf/onds12_0.silly.gz create mode 160000 tools/sillyimage diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..fd59645 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "tools/sillyimage"] + path = tools/sillyimage + url = https://git.sillysagiri.moe/sillysagiri/sillyimage.git diff --git a/.vscode/settings.json b/.vscode/settings.json index eb04c1a..124523b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,9 @@ { "java.project.referencedLibraries": [ - "vendor/**/*.jar", + "/home/sillysagiri/Documents/wtk/lib/midpapi20.jar", + "/home/sillysagiri/Documents/wtk/lib/cldcapi11.jar", + "/home/sillysagiri/Documents/wtk/lib/midpapi20.jar", + "/home/sillysagiri/Documents/wtk/lib/mmapi.jar", "library/tinygzip/tinylinegzip.jar" ], "java.project.sourcePaths": [ diff --git a/assets/silly/bmf/nds12_0.png b/assets/silly/bmf/nds12_0.png deleted file mode 100644 index a6a93e7698258e049f6d0556daf25d4232b644ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1124 zcmV-q1e^PbP)I`APj|>D)0Zu-Tjr3>-utRNHS^9Cyk~9#uzZz z(AEAtpU;0I;qiF|_X@i#duH`} z$iC1;t~x3*$FRMqAZpZG2f)si3$_35o)%dj z#Y6{X?G!z@%*mvVqfUmSi59e?V~mCaL|3BB!$U(B$Nw`zzzVWtH7d8{D*cX8$N{1W zMeeOy7ByDuuC%ZAg@zC7l)2i$ta;i$M{CpaEV<)nj3(F9x&=h>UCTsATJ(5i>G2+F zD*9KIqjq{kNpW^^Stp`phow`>j8Sla>V#{9EaRhoyuUsDojBiFtgfB2HbnBC9iE(& z*($Nv`us^`FKnO479|L)lN|3#cSV-oNknIoNnJjpCz7wu<#J-Nf)yy3q0%i|l zi+0Lxzi2Mu*=il(@Py>oQc|uMFBy z4=h!jObl8cO?=fUBipJDklBNrq^rx3{x#uCU>0LmUDsB#It(qo z8;vuP@odX<{s}x|z570@2VH1OF7tTAj;j5L+@U-1?qoY8D?=A6b6CWAvbydmaYx)+ zfOqZii%@yS1`M?qHOpGd&yds{s$3XwR1j%&HJ*zYoO)1=!6hL2qARe%72C9sx^(FZpZ9M%t@@>8mrLuSZN<2EHuc#`q-zzSY=jO)xk;8K$#v;)hPpnb*_p%^S@}5xvz7T>5j0 z={-(2^rMa+c}$Kv(|rOn@sX*X3A$$N=*Si#UhFms%ou_F9GM|9tN6V8PdL~b@xJ5fIGek~ z=V=eZ;IBD#_a|G7`82n4Si-=ca`Br-ZH%`S^7f3oGiU$QF$$mF6Bk!}c@+G`>4LVB zayHrV8JVmTCo0xKts`?MpYX)d(;W5kxH@5QTB~#QTi5k@%Dks@M@iYL!rqSTgH5mT z^WJR8EKF|(Z>{9v!ds(H3K~t2r>I`{sg2qD+K;#MuI7g^_ZUZMR{Q)s;ocVlnvEb& z(Y=26uCF~mr^HX3D$94Cd05P?(bMMf7H8$1YGeKG^Z)xi?sq@kd-AOw4*f;;NzNu_ zIGv+0BXf$c^47FsnAy--`~_`&P(^cj?>^wd_`TzL{`IuEuVmu*Cb_HbwW68UG@d!W zPxz=1VVqT9*@LU(WZq{5V^*b)xA1l@97p%pJZ{!LOfg{L0WR+0!VJ!&;`{kNpAFy7 zdRMmMnfdHU2ZurW#GskPd3nj#C&@$814%V<~a~+P{o~RyxFrTm^(34==I#xOcgz2tD-f+|M6Kn>Rg*uKmD5Xp3~C? z?>NuH$HltQcy2x!&aIGpZAI^#2nwK2?#`Z{&{ox^>0nmsHiOz2729A&J*vpXXOFyw`KzuvA7hwBUNA9}LCKmUCT)OLLH{bfHwd$Kda?Rh_TRLiV=i}>3) z`X~E-f#QO1VLfo}T!8B{7LRguBkq^iG_3Ml-+xp! z?w|kgxgfXy89uxGx$m6iub;60=lJV5v(A72|H=Jl3J}v+BE@Je|Ks?l>kj7szRuC{ z_CM5t%uXVoLJ>Gtv&Njqbqua3L^grWr(>RC`Jd-mU2!mtAXbaGvZ(Z<+<$)lowbd1 z{Q@(CR)qg*#F}jtjJGx_>cAPNtH+0i)Mj5D$4&z z)j&0y_i;A&TpSz~oSe>q_}^azW=pKPeJx0apFIZ H1V8`)N_~j@ literal 763 zcmVvTDZ!1+1_VXA_ zmZWOrC$+l}10H|a&)diCE9my4@kS&6yuU{avelX2mG*=&@*c5$zK=iElZ~~+?|qCT zKd=082m55dDT-^G`l%X^VZY)ZQL}4eY&EKMGVM|2r^xTk+sfGE_kPZ^U*V^{{|~>? z=YFs1f6dSRT$}g&zLxF$KEGA~=iiH}*#zy&LzSZx!*S?Cp$J8~tzpY!XyGQta&ugBE|89AE zd*%Gm%G=LkJmxd|{k)M^)}z>Swu;nJt1YjK{OlUTtYd0-RmBI55#3sRC$VOG&HQ_e ze~`bL-&Z}?TRb}>+2gmTj{o%g?2fcvW&M)RQG90m`jtvS_d>Mr9T=IJKY!2fBR-!Z zFpGD_lU3Dz{&g<$?7sU*MBa+uE1s+TdGDO%pO3izYy7(BDgNv4_U&r^H7?Ab$1&$$ zG1wmD`_J3heP;cyStdVXExfa`{M+B@*AY*>3urv%Z5~GUvU=rOTGfQLA-il3Pp4#A z_ml5gB>ip~zwYz+oeMV-kRrFvZVOU}H*U$3N7q8Qro?9bZlpEkz% z`mCBY+oK|U?)(j{JH|68k0kNnovxwGAWRho~iYnfhejxp;;vx<18 z?76-M*q;jj{PvGl@f5OnhHCwsdB~ReSAfobZMIeZt{R@~@@MxS*FSyF{zj`@QD?l9 tYW(jku7CeMY_(dgR;$%&wOXxKtJP|?TCG;A)oT40eFJggKaT`J002bAv-ki2 diff --git a/assets/silly/bmf/onds12_0.png b/assets/silly/bmf/onds12_0.png deleted file mode 100644 index 2291ced93df16ec084454e4ae832860b4ab703a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2172 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 literal 0 HcmV?d00001 diff --git a/raw/nds12/onds12.fnt b/raw/nds12/onds12.fnt index 6c8d74819865a2f9e1053647fea673837f29fc4f..a41868f97519b5317d6983bade1bdb317d086df4 100644 GIT binary patch literal 1992 zcmZ9NX;TwH5QaPC=5Q(X17MXRiXaFiK{-_-L_`EcK;=-02m&e)MFl+hY5pod8lT=Q z)NDh|*7lQkr{C_KnH`-Tk4Dam$lvlGS(gZR5{X1+3iH{VRCz?TQX|Kb*Pry)XdRcm z-Sz!!ZZ*?g+TE1caZ;oix*+`$m#F+JS92BbGVBK<$_)B&4A#P3hYX^NNx58MS77ao zG&*G|bXSQBjAXzPuvX%WMt6-k$4CV_taxq2d2&R9991x#|D3dvw~|A>T!+<3TZnbQ zX5=bf(s-%zy>!Ahq#G|uSX9)@4OkyJVt$S^SMj=F1z3{I<#OEDb;FkFOO$`DP<1`r zwUR@m%y9d1i+I53`e1p(`e74>4Zt#n z4Z;=;8-g847uE76xN5!Xqe%Z^+D%v-cAL9>SUl*d>h8dr{Qkx1U(D~zUD%G%jlf3e zRwC$&&Xq)au-ns7*gC^yW5h2ED-bUjcAt3M_83+#jUnAE>@&ml{DipH zXSKdRU8i%zDe*$OdDwvQti9VZo}a>shCPGL8ulEf^|@XaiAf(~OOOu?SGP>OZM>|& zI)nXoa^~p!ZZv!Fr9W5rJa`4muqNH}Y85s`#g%=Y_Sb0M0ls-y@pLn54zOp zdR~Jy@b7wl13ScvtJ5{wY;+s2YUvH>-on;Qy_>L-KcAjqm3_1Y%b5ALVUy^h%&KRd zuD^G%OF>_h>ArjqJ1{x4?|tY_&L*vQ2PXJS2lcYsy4 q_|CZJm3|jTc-GzfKVj3R&%aHN3_g3a>E8c&G+zvAU literal 11234 zcmcgy%WmUF5WFw2|1j`*9guqKFsJ0;Q!Y8=7|;?e5i661B_~q8KHXhC=8VIqVU8DA zixS0RS65f}3|*8@m3hi`xxM@Sw?ER^ojDi(=Jq~K%wu)h+r$)?>{RUN#qOBBp7V>n zyEAWPv8(pEP0ji8nqPLu2b(5|IX_p`!#rEJryU4yDInRboN*B%S(Bz#0JO699->I>(TEW0MQsjL^=DtcZ`gYBO%X`fJm!e9y_WdM3jK*-qDvwc#bqH zQVun7`hivhR!3AvA0ksiy+fD@V+@ot0m)aw2F|pz6Jj z7>MDV<0DR_9BIYut1O);Q^y*f<0dPACPx!eCm%7ditO9h$ZL4cmdT|UeO4!OxwU$Z z*jyY|)pInDF=B-0pz?`T5$L3zBO3rzkDNx%V+2Haj_VyWX>OCoxM4oI9yy<3f1Jnx zHt-xw#$AX~WzBPrRMy}%@`kTe=TSzwY1hab^&BbpC=MWvk!Jw*o+u8mf#k)fb4gC>=T{9wEj+NoYfi7)zRCRK|xY2Wu%W)CYvpG@0qtt}qLLk}lIZ4olu@>JavXNBO6el4ief@m17GdZ>IX!S z+<{2x;yiMqA}NPdT0ejES;f6NR)vISR^_9b)gE7!ZO(eK^6L@uRKyXUgHzjC<=Q7! zwH|%MpgKk%_IVCVf~F2Rje3V%d0Nlm(yw>s{X7OSexU>Kjw<^q>m;m>$q)&O){jzC z;XZlbt0VH*=c_#T6QZyd2~j*pHg-R-8pNo7OV#M)A3UcwM)91vlzSwtQiiB^xID(F z4$5Ht7eO)Vkw+>*l-T01%8vm_tBM%I0cPSk^4Np48iiHy9O>{}9a5L@)v!8-cdNeY z;K_!bl}l3#T@HP2e1AlFws$LDtJ0h!CK_i3;66ojjyiz9whEjaR1KN|kd2NQ#dBO9 a@f&%>Fy&a4TWUtc6W90kBMk9>i2ni3cIIyY diff --git a/src/sillysagiri/BMF.java b/src/sillysagiri/BMF.java index c88f19e..bad499e 100644 --- a/src/sillysagiri/BMF.java +++ b/src/sillysagiri/BMF.java @@ -7,6 +7,8 @@ import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.game.Sprite; +import com.tinyline.util.GZIPInputStream; + import sillysagiri.scene.DeathError; public class BMF { @@ -29,21 +31,33 @@ public class BMF { { } - public static final BMF Create(String path_img, String path_fnt) throws Exception + public static final BMF Create(String path_sillyimg, String path_fnt, int tint) throws Exception { BMF bmf = new BMF(); - bmf.img = Image.createImage(path_img); + // InputStream in = bmf.getClass().getResourceAsStream(path_sillyimg); + GZIPInputStream in = new GZIPInputStream(bmf.getClass().getResourceAsStream(path_sillyimg)); + + // read header + byte[] temp = new byte[4]; + in.read(temp, 0, 4); + + int w = ((temp[1] << 8 | temp[0])) & 0xFF; + int h = ((temp[3] << 8 | temp[2])) & 0xFF; + int[] buffer = new int[w*h]; + + for (int i=0; true; i++) + { + int read = in.read(temp, 0, 2); + if (read == -1) break; + + int rgb = Utils.ARGB15to255((char)((temp[1] << 8) | (temp[0] & 0xff))); + if (rgb == 0xFFFFFFFF) buffer[i] = tint; + else buffer[i] = rgb; + } + + bmf.img = Image.createRGBImage(buffer, w, h, true); bmf.Parse_fnt(path_fnt); - - return bmf; - } - - public static final BMF Create(Image img, String path_fnt) throws Exception - { - BMF bmf = new BMF(); - bmf.img = img; - bmf.Parse_fnt(path_fnt); - + in.close(); return bmf; } @@ -148,76 +162,6 @@ public class BMF { } } } - - /* - * this is cpu intensive process - * consider creating new BMF for each color instead - * - * limitation: - * currently can only be used once - * since its replacing white pixel with tinted color - */ - public void SetColor(int rgb) - { - // int[] buffer = new int[img.getWidth()*img.getHeight()]; - // img.getRGB(buffer, 0, img.getWidth(), 0, 0, img.getWidth(), img.getHeight()); - - // for (int i=0; i> 15) & 0x01); - char blue = (char)((i >> 10) & 0x1F); - char green = (char)((i >> 5) & 0x1F); - char red = (char)(i & 0x1F); - - // Scale the 5-bit values to 8-bit - if (alpha == 1) alpha = 255; - else alpha = 0; - - red = (char)((red << 3) | 0x07); - blue = (char)((green << 3) | 0x07); - green = (char)((blue << 3) | 0x07); - - // Combine into 24-bit value AARRGGBB - buffer[pointer] = (alpha << 24) | (red << 16) | (green << 8) | blue; - pointer++; - } - - // img = Image.createRGBImage(buffer, img.getWidth(), img.getHeight(), true); - img = Image.createRGBImage(buffer, 128, 64, true); - } - catch(Exception e) - { - e.printStackTrace(); - Sagiri._instance.Set_Scene(new DeathError(e)); - } - } // TODO: handle multiline public short[] Measure(String str) diff --git a/src/sillysagiri/Sagiri.java b/src/sillysagiri/Sagiri.java index 3b9be41..a50b985 100644 --- a/src/sillysagiri/Sagiri.java +++ b/src/sillysagiri/Sagiri.java @@ -39,7 +39,7 @@ public class Sagiri public Input input; - public int fps = 20; + public int fps = 60; private Scene _scene_current = null; public long time_begin = 0; diff --git a/src/sillysagiri/Utils.java b/src/sillysagiri/Utils.java index 30ccac6..cacdc14 100644 --- a/src/sillysagiri/Utils.java +++ b/src/sillysagiri/Utils.java @@ -6,6 +6,25 @@ import javax.microedition.lcdui.Image; import dothack.Global; public final class Utils { + public static int ARGB15to255(char argb15) + { + // Extract 5-bit ABGR; + int a5 = ((argb15 >> 15) & 0x01); + int b5 = ((argb15 >> 10) & 0x1F); + int g5 = ((argb15 >> 5) & 0x1F); + int r5 = (argb15 & 0x1F); + + // Scale the 5-bit values to 8-bit + if (a5 == 1) a5 = 255; + else a5 = 0; + + int r8 = (r5 * 255) / 31; + int g8 = (g5 * 255) / 31; + int b8 = (b5 * 255) / 31; + + return (a5 << 24) | (r8 << 16) | (g8 << 8) | b8; + } + public static void Clear_Screen(Graphics gg, int r, int g, int b) { gg.setColor(r,g,b); diff --git a/src/sillysagiri/scene/DeathError.java b/src/sillysagiri/scene/DeathError.java index 44f0bed..03a5deb 100644 --- a/src/sillysagiri/scene/DeathError.java +++ b/src/sillysagiri/scene/DeathError.java @@ -10,6 +10,7 @@ public class DeathError extends Scene { public DeathError(Exception e) { super(); + e.printStackTrace(); this.e = e; } diff --git a/src/sillysagiri/scene/Intro.java b/src/sillysagiri/scene/Intro.java index 026469a..1b84534 100644 --- a/src/sillysagiri/scene/Intro.java +++ b/src/sillysagiri/scene/Intro.java @@ -14,7 +14,7 @@ public class Intro extends Scene { private long counter = 0; private int state = 0; - private BMF bmf_normal; + private BMF bmf_white; private BMF bmf_black; private BMF bmf_outline; private Image img_logo = null; @@ -23,10 +23,9 @@ public class Intro extends Scene { public void Preload() { try { - bmf_normal = BMF.Create("/silly/bmf/nds12_0.png", "/silly/bmf/nds12.fnt"); - bmf_outline = BMF.Create("/silly/bmf/onds12_0.png", "/silly/bmf/onds12.fnt"); - bmf_black = BMF.Create("/silly/bmf/nds12_0.png", "/silly/bmf/nds12.fnt"); - bmf_black.SetColor(0xFFFF0000); + bmf_white = BMF.Create("/silly/bmf/nds12_0.silly.gz", "/silly/bmf/nds12.fnt", 0xffffffff); + bmf_outline = BMF.Create("/silly/bmf/onds12_0.silly.gz", "/silly/bmf/onds12.fnt", 0xffffffff); + bmf_black = BMF.Create("/silly/bmf/nds12_0.silly.gz", "/silly/bmf/nds12.fnt", 0xff000000); img_logo = Image.createImage("/t_1.png"); } catch(Exception e) @@ -39,7 +38,7 @@ public class Intro extends Scene { { img_logo = null; img_theworld = null; - bmf_normal = null; + bmf_white = null; bmf_black = null; bmf_outline = null; } @@ -68,7 +67,7 @@ public class Intro extends Scene { g.drawRegion( img_logo, 0, 0, img_logo.getWidth(), halfH, Sprite.TRANS_NONE, - pos, Utils.GetScreenHeight()/2-1, + pos, Utils.GetScreenHeight()/2, Graphics.BOTTOM | Graphics.HCENTER); g.drawRegion( @@ -117,7 +116,7 @@ public class Intro extends Scene { 5, Utils.GetScreenHeight()-5, Graphics.LEFT | Graphics.BOTTOM); - bmf_normal.Draw(g, + bmf_white.Draw(g, "VOL 1 - v0.1-silly", 5, 5); @@ -128,8 +127,6 @@ public class Intro extends Scene { Utils.GetScreenWidth()/2, (int)(Utils.GetScreenHeight()*0.7), Graphics.VCENTER | Graphics.HCENTER); - g.drawImage(bmf_black.img, 0, 0, 20); - if (sagiri.input.IsKeyDownAny()) sagiri.Set_Scene(new MainMenu()); } diff --git a/src/sillysagiri/scene/MainMenu.java b/src/sillysagiri/scene/MainMenu.java index 80326f7..39465c9 100644 --- a/src/sillysagiri/scene/MainMenu.java +++ b/src/sillysagiri/scene/MainMenu.java @@ -1,9 +1,8 @@ package sillysagiri.scene; -import java.io.IOException; - import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; +import javax.microedition.lcdui.game.Sprite; import sillysagiri.BMF; import sillysagiri.Scene; @@ -14,12 +13,23 @@ public class MainMenu extends Scene { private int state = 0; private Image img_bg; + private Image img_box; private Image img_bandai; - private BMF bmf; + private BMF bmf_white; + private BMF bmf_blue; + + private Image img_head1; + private Image img_head2; + private Image img_head3; + private Image img_head4; + + private Image img_arrow; public void Preload() { try { - bmf = BMF.Create("/silly/bmf/onds12_0.png", "/silly/bmf/onds12.fnt"); + bmf_white = BMF.Create("/silly/bmf/onds12_0.silly.gz", "/silly/bmf/onds12.fnt", 0xffffffff); + bmf_blue = BMF.Create("/silly/bmf/onds12_0.silly.gz", "/silly/bmf/onds12.fnt", 0xff00dbff); + bmf_blue.lineHeight = (short)(bmf_blue.lineHeight*1.5); Image img_loop = Image.createImage("/m_2.png"); img_bandai = Image.createImage("/c_0.png"); @@ -31,6 +41,19 @@ public class MainMenu extends Scene { for (int i = 0; i= 600) counter = 0; if (counter < 400) - bmf.DrawEx(g, + bmf_white.DrawEx(g, "PRESS ANY KEY", Utils.GetScreenWidth()/2, (int)(Utils.GetScreenHeight()*0.7), Graphics.VCENTER | Graphics.HCENTER); @@ -70,6 +93,51 @@ public class MainMenu extends Scene { } } break; + + case 1: + { + Utils.Clear_Screen(g, 255, 108, 0); + g.drawImage(img_bg, 0, 0, Graphics.TOP | Graphics.LEFT); + + int padding = 3; + g.drawImage(img_head1, padding, padding, Graphics.LEFT | Graphics.TOP); + g.drawImage(img_head2, Utils.GetScreenWidth()-padding, padding, Graphics.RIGHT | Graphics.TOP); + g.drawImage(img_head3, padding, Utils.GetScreenHeight()-padding, Graphics.LEFT | Graphics.BOTTOM); + g.drawImage(img_head4, Utils.GetScreenWidth()-padding, Utils.GetScreenHeight()-5, Graphics.RIGHT | Graphics.BOTTOM); + + int cursor = (int)(Utils.GetScreenHeight()*0.35); + g.drawImage(img_box, Utils.GetScreenWidth()/2, cursor-(bmf_blue.lineHeight/2), Graphics.HCENTER | Graphics.TOP); + + bmf_blue.DrawEx(g, "NEW GAME", Utils.GetScreenWidth()/2, cursor, Graphics.HCENTER | Graphics.TOP); + bmf_blue.DrawEx(g, "LOAD GAME", Utils.GetScreenWidth()/2, cursor+=bmf_blue.lineHeight, Graphics.HCENTER | Graphics.TOP); + bmf_blue.DrawEx(g, "INSTRUCTION", Utils.GetScreenWidth()/2, cursor+=bmf_blue.lineHeight, Graphics.HCENTER | Graphics.TOP); + bmf_blue.DrawEx(g, "OPTIONS", Utils.GetScreenWidth()/2, cursor+=bmf_blue.lineHeight, Graphics.HCENTER | Graphics.TOP); + bmf_blue.DrawEx(g, "LEADERBOARD", Utils.GetScreenWidth()/2, cursor+=bmf_blue.lineHeight, Graphics.HCENTER | Graphics.TOP); + bmf_blue.DrawEx(g, "CREDITS", Utils.GetScreenWidth()/2, cursor+=bmf_blue.lineHeight, Graphics.HCENTER | Graphics.TOP); + bmf_blue.DrawEx(g, "EXIT GAME", Utils.GetScreenWidth()/2, cursor+=bmf_blue.lineHeight, Graphics.HCENTER | Graphics.TOP); + + // if (counter > 360) counter = 0; + + padding = (int)(Math.sin((float)counter/200) * 3) + 3; + cursor = (int)(Utils.GetScreenHeight()*0.35); + + g.drawRegion( + img_arrow, + 0, 0, + img_arrow.getWidth()/2, img_arrow.getHeight(), + Sprite.TRANS_NONE, + (Utils.GetScreenWidth()/2) + (img_box.getWidth()/2)+padding, cursor, + Graphics.LEFT | Graphics.TOP); + + g.drawRegion( + img_arrow, + img_arrow.getWidth()/2, 0, + img_arrow.getWidth()/2, img_arrow.getHeight(), + Sprite.TRANS_NONE, + (Utils.GetScreenWidth()/2) - (img_box.getWidth()/2)-padding, cursor, + Graphics.RIGHT | Graphics.TOP); + } + break; default: break; } diff --git a/tools/sillyimage b/tools/sillyimage new file mode 160000 index 0000000..cfadc03 --- /dev/null +++ b/tools/sillyimage @@ -0,0 +1 @@ +Subproject commit cfadc0314b3d9c41bc693b63bef3d162ca45c8fb