From e31a10fd7eacdef181db9c2cba785845a91f49eb Mon Sep 17 00:00:00 2001 From: Lutz Date: Sat, 12 Feb 2022 18:22:03 +0100 Subject: [PATCH] added my bowser watchface --- apps/bowserWF/README.md | 6 +++ apps/bowserWF/app-icon.js | 1 + apps/bowserWF/app.js | 102 ++++++++++++++++++++++++++++++++++++ apps/bowserWF/app.png | Bin 0 -> 1108 bytes apps/bowserWF/metadata.json | 14 +++++ 5 files changed, 123 insertions(+) create mode 100644 apps/bowserWF/README.md create mode 100644 apps/bowserWF/app-icon.js create mode 100644 apps/bowserWF/app.js create mode 100644 apps/bowserWF/app.png create mode 100644 apps/bowserWF/metadata.json diff --git a/apps/bowserWF/README.md b/apps/bowserWF/README.md new file mode 100644 index 000000000..19dc84c83 --- /dev/null +++ b/apps/bowserWF/README.md @@ -0,0 +1,6 @@ +# Bowser Watchface + +Show your evil character. +With style! + +Bowser jumps once every minute to advance the clock. hehe diff --git a/apps/bowserWF/app-icon.js b/apps/bowserWF/app-icon.js new file mode 100644 index 000000000..7d040b0ad --- /dev/null +++ b/apps/bowserWF/app-icon.js @@ -0,0 +1 @@ +E.toArrayBuffer(atob("Ly+EARERERERERERERERER//8RERERERERERERERERERERERERERERzP//d3EREREREREREREREREREREREREcz//3dxERERERERERERERERERERERERHMz/93dxERERERERERERERERERERERERd8zHd3f/8REREREREREREREREREREREXfMx3d3//ERERERERERERERERERERERF3d3d3d//3cRHBEREREREREREREREREXd3d3d3f/93fMDMERERERERERERERERF3d3d3d3//d3zAzBERERERERERERERERd3d3fMd3f//8zMwREREREREREREREREXd3d8zMd3f/zMzMERERERERERERERERF3d3fMzHd3/8zMzBERERERERER93d3//d3d3x3/Mx3fMzP8REREREREXzP/3d//3d3d8d3fMzMz/8RERERERERF8z/93f/93d3fHd3zMzM//ERERER//93zM//93//d3d3z/d/9////xEREREcz/d3zM/3d///d3d8zHERH/ERERERERHM/3d8zP93f//3d3fMxxER/xERERER/3zMd3d3d3d3f///d3zM8REREREREREf93d3d3d3d3d3d///d3zMERERERERERH/d3d3d3d3d3d3f//3d8zBERERERERERd3d3f///d3d3d3//93fMzP8RERERERH//3d3zP/3d//////3d3d8wRERERERER//93d8z/93f/////93d3fMEREREREREc//d3fMx3f//MzMd3d3d3dxERERERERHMx3d3d3d//8zMAPd3zMzHERERERERH/d3d3d3d3f3fMzwDMzAD8zBERERERER/3d3d3d3d393zM8AzMwA/MwRERERERH913d///d3d/d3AAzMzMAAzMERERERERREd3fM/3d//3d//MzMzMwP/BEREREREURHd3zP93f/93f/zMzMzMD/wRERERERFP/3d8zHd3//d3d3zMzMzAAMERERERER//93d3d3d//3d3d8zMzMwP8BEREREREf//d3d3d3f/93d3fMzMzMD/ARERERERFMzHf/93d3/3d3d3EczM/wABERERERERR3x3fMd3f/93d3dxEREREREREREREREUd8d3zHd3//d3d3cRERERERERERERERFHd3d3d///d3d3dxERERERERERERERERR3d3f///93d3dxEREREREREREREREREUd3d3////d3d3cRERERERERERERERERH//////3d3d3d8ERERERERERERERERER/////MzMx3fMz/8REREREREREREREREf////zMzMd3zM//EREREREREREREREREf/8zMzMzMzMzP//ERERERERERERERERERzMzM/8zP/xEREREREREREREREREREREczMzP/Mz/8REREREREREREREREREREczMzMz//8///xERERERERERERERERERA=")) diff --git a/apps/bowserWF/app.js b/apps/bowserWF/app.js new file mode 100644 index 000000000..e53d945cc --- /dev/null +++ b/apps/bowserWF/app.js @@ -0,0 +1,102 @@ +var sprite = { + width : 47, height : 47, bpp : 3, + transparent : 1, + buffer : require("heatshrink").decompress(atob("kmSpICFn/+BAwCImV//VICJuT//SogRMpmT/2SCJtSyQDB/4RMymRkmX/gRLygDC3/piVhCJElAYf/pNIkgRIlIDCl/6pVBkIRIGwWJEYPypMJCI9KGwQRBLANIPRI2CGoPkyVCBwmeyVLTYNJom8yImBz4gEqV/6Vf+g2BPwf/IIq8C/+kyVRkgDBp/5CIX/+mkz/+y/9BIOf0v6///5LdCz+kCIOk34RBYQMSp5XBGQVk/pNBAQP/9IyBxGSv4yCk/1OIK8EC4QgEpM/JgJ+EGoIRBTApQCEYvplLOFXIIdBO4SqBeQJABGoeTDQMlk5WCAAPSYQLgEz4aBlM/9IgB/7CCcAvP/QsBiVfUwOJBgUiCIcmpAVCy/+pMAKwMkRgIRCp6VBAwW6qVOgmSgPkwgRDv53E6WSuEkyEPRgmf2VJv5HBl2SgAKBwEJRgnJiVKp/Sr/0y/yBQOQv56DKwVSv2STwO/DgWD/BADmaDByRoBYoQRCgFCCIf/+jgDNwOUAwMg/kSPQbODX4IJBAwUH8B6DsmRl5oBl7OBklMyV+gBoDycSxMpiVLZwS8EAQeYyjaByR6BBIJBDAQnEIgbFCogOFRgQDBr//I4L0EAQsxAYP//5WCGQ6MCAAKbCpKYEAQiMB//kIQOUyf+CJF/CIIEBTYOfcgQRHBQv/CJKnBpP8GRTCDJIPkGRQCB5I3C/n/EZUgA")) +}; + +const boxes = { + width : 122, height : 56, bpp : 3, + transparent : 1, + buffer : require("heatshrink").decompress(atob("kmZkmSpICPwgDBmQUQAQMJAYNkFiOSiQDB5JESAYQsSpADByYsSyBZBydt23bAR+wgFJkwUQAQNggGSposR23AgMkzZESwECpM2IiUAgmSFiW2gDlBFiVsgDlBFiXYgDNBL4MDWZy2FgEGWZy2FgENWZy2EL4MbWZpTBWwZfBXJpTCWwZiCWZpTBWwZiCWZsbWwhiCWZpWCWwTORWwgXRWwgXRWwZESWwZESWwZESWwYXRWwgXRW362/W362/W362/W362/W362/W362/W362/W362/W362/W362/WwuAgazOWwsAgyzOWwsAhqzOWwhfBjazNKYK2DL4K5NKYS2DMQSzNKYK2DMQSzNja2EMQSzNKwS2CZyK2EC6K2EC6K2DIiS2DIiS2DIiUAFoMAAFTkBFtckyAtrLgWSpICnLIIsqyVAgAsqpIA=")) +}; + +const background = { + width : 176, height : 176, bpp : 3, + transparent : 5, + buffer : require("heatshrink").decompress(atob("kmSpIC/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/ATWAgEAIP1///8iRB8gf/AAOCIPdIIARBBoJB/+E4IP4ABghB9v4CB8BB5g/92//9pB7wP/97FEIO9IgDACAAn8iVBIOlHH4xBDnA+wyY9IAAmB/BB//5B/IOQ/OAARBup5B/yV/IP5B/IP5BRt5B7/wDC7aD8/w+B+3bBgP7IP5B7HYNt23/AQPfIPX/9oCC24IDINwCBIRAAHIOACBHI3+g4EC/l/4BByAQkA//wpED//4gGAhJB3pMAgQFBgEBH3AC/AX4C/AX4C/AX4C/AX4C/AUOAgBB/v//ghB9gf///gH3UgiVIIAJBBwRB5j+CIIf8uBB5//wIIXb//+hJB6o/92/7v5B7/0/97GCIPYAG4MgIP/BjkSIP34/hB//5B/AAQ+0IP5B/IP5BN7ZB97///wCBIPX93yAB2wCB+5B5tv//dt24CB35B5v/+n/t+P/I4PH8ESIO38gFA/+CgH/+EIgiD3gACCPoMAgQ+2AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/ASVIgAACgRB/IPY8GkAHBiRB/IPBLKgJB/IP5B/AQUAkmQghB/IP2AgEAyVAiRB/IP5BBpMAIP5B/IIUkgBB/IP5BpoAsBgJBOgEEIIoIBIP5BlyE27dt2EEIJ4CBBAlIgRBgpEAhu2IIO24ESQwxB/IJQhGkEJIL8GHwQCDgOweQpB/IKMkwAKJILVgAofYeQhBzsEAIKICLoESILmBQARBBtuwgZB3kA4B4ENIgJBcpMAIMYCDIOcAgEbHYgCGsEJkhEBE6cBIP5BZfYQ+JIIkDsEBIP5BVyEAIKtAHxgCDwBEBINk2IKCGCIKmSpECIP5BUkEBHyACD2BBUFoMJIP5BSpEbHyQCDIP5BXkmAIP5B/AQcAbKJB/ILH/AAP8hM/AgWSv4KCAAP+gmfAoXJk4ME//gpIEC8mTBgvwkgEC+QRDAAX4gVPAgP5kgsCLwWQh/kMIUf5LuFg4jBAoMBKAJ5EwF/AoUA/yFFoE/CI6RDgY+BCIQsDIP5B/IP5B/IP5B/IJ/AIJfghJBKv0EIJcAIJfwIP5BMhMAAAMEz5BGgmABoVJII9IBgUkII8kBgUSII8CoAMBhJB/IIsQoMAYoP/AAP4YpAMC/+BII9/BgXAYpAMC8DFIBgXwIIcCIP6DCgkQh/kCIRBIbQcBIJAFCgBBICI5BE/IRDFgQA=")) +}; + +numbersDims = { + width: 20, + height: 44 +}; +const numbers = [ + require("heatshrink").decompress(atob("ikswcBkmSpIC/ARGQKYQIDAwUEBxMAAQNAgECpMgAQMkB4IOIAQQLCgEQBwQaBgEBB1oCBBwYCCiRWDCIRWEO5wOHAX4CnA=")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/ARNIKYIIEwEAggOKNIQODyAHCBxQsWB3TUFgMgA4sSBwzU/AVA=")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/AQ8gKggIBAwkCBw+QCIQLCgIRCDQcQBwwyDDwUSCgVAAwIOBEwI7EpI7FBw4FDghZGHwgOEF4Y+CEYQ+DBxQADNAIAFNAIOFa/4CoA=")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/AQ8gKosSAwsBBw4aCoEAgQjEBoIpEBwtIBoIUEwEAggUDBwwyDDoWQA4ZWHhIIEJQoOCgI+EBwMQEAYOJO4oLBO4oRDJQrX/AU4")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/ARNIKgQIDwAGBgQOJNQYOCyAHDBxEggB6BBwYDBiVABxIjBCIIODF4YOEAAkBV40QBwxiDNAosEB0IC/AUg")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/AQ5UFkmQAwkCBxIdGCIIIDBxAsTgAaEkEASooOBiQOVJQgOBiBKDBxMSJQwRBLIgRCBwjX/AVA=")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/ARGQKgYICAwcCBxADBiQdDkEANYoOGEAYyEHYoOIHYqfFBxIdDBAMQFgZHCBysSFgwRBO46GFa/4CnA")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/AQ5VGiAGFgIOIDQUgBwUCEYQOJGQYNBHAlADQgOHwEAggUDpANBCgYpBBwmQAwJiGhIjDB1gC/AU4A=")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/AQ8gKYYICAwcEBxGQgAaDgVJgACBDQQOJgB6CBwcAiQODHa4AEhIRBpAHDiARBwAGCgIgCFIYOCFIYOHiQrEJQxlCBwzX/AVAA=")), + require("heatshrink").decompress(atob("ikswcBkmSpIC/AQ8gKggIBAwkCBw+QCIQLCgIRCDQcQBzkSTAsBHYoOIL4gOCMooOENAYOCoA4EBwoqDgiGGF4gOEa/4CoA=")), +]; +digitPositions = [ // relative to the box + {x:13, y:6}, {x:32, y:6}, + {x:74, y:6}, {x:93, y:6}, +]; + +var drawTimeout; +const animation_duration = 1; // seconds +const animation_steps = 20; +const jump_height = 45; // top coordinate of the jump +const seconds_per_minute = 60; + +function draw() { + const now = new Date(); + g.drawImage(background, 0, 0); + var boxTL_x = 27; var boxTL_y = 29; + var sprite_TL_x = 72; var sprite_TL_y = 161 - sprite.height; + const seconds = now.getSeconds()%seconds_per_minute + now.getMilliseconds()/1000; + const hours = now.getHours(); + const minutes = now.getMinutes(); + + var time_advance = seconds / animation_duration; + + if (time_advance < 0.5) { + sprite_TL_y += (jump_height - sprite_TL_y) * time_advance * 2; + } else if (time_advance < 1) { + sprite_TL_y = jump_height + (sprite_TL_y-jump_height) * (time_advance-0.5) * 2; + } + const box_penetration = boxTL_y + boxes.height - sprite_TL_y; + if (box_penetration > 0) { + boxTL_y -= box_penetration; + } + g.drawImage(boxes, boxTL_x, boxTL_y); + g.drawImage(numbers[(hours / 10) >> 0], boxTL_x+digitPositions[0].x, boxTL_y+digitPositions[0].y); + g.drawImage(numbers[(hours % 10) >> 0], boxTL_x+digitPositions[1].x, boxTL_y+digitPositions[1].y); + g.drawImage(numbers[(minutes / 10) >> 0], boxTL_x+digitPositions[2].x, boxTL_y+digitPositions[2].y); + g.drawImage(numbers[(minutes % 10) >> 0], boxTL_x+digitPositions[3].x, boxTL_y+digitPositions[3].y); + g.drawImage(sprite, sprite_TL_x, sprite_TL_y); + Bangle.drawWidgets(); + + const timeout = time_advance <= 1? + animation_duration / animation_steps + : (seconds_per_minute - seconds); + setTimeout( _=>{ + drawTimeout = undefined; + draw(); + }, timeout * 1000); +} + +// Clear the screen once, at startup +g.setTheme({bg:"#00f",fg:"#fff",dark:true}).clear(); + +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) { + clearTimeout(drawTimeout); + } + drawTimeout = undefined; + } +}); + +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +Bangle.loadWidgets(); + +draw(); diff --git a/apps/bowserWF/app.png b/apps/bowserWF/app.png new file mode 100644 index 0000000000000000000000000000000000000000..724d6307823dda1d7ad2313f39620c373f70b077 GIT binary patch literal 1108 zcmV-a1grarP)EX>4Tx04R}tkv&MmKpe$iQ^gM|B4!YAh)|s@h>AFB6^c+H)C#RSm|Xe=O&XFG z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIc7y4^Mo=tkK} z#G+Cvy()FQB7`pVVHl#qY;#VQ33p`V_l8Jd@kyy&Lu-d{bZ|THS#9>W0C|^i< zta0ArtQRY+aZmojP{vqU<~q$G#IT4Z$dI6-f&z*tBSNb|ij4&AM}7Q*u3sjXO0EJJ zITlcY4#o9@|H1EW?d;@)mlTQu?Jth=F#>e#0`;ond>=bb{R9X;16M}VU#bB!pQKlt zTKEX)-3BhMo0_@@T*53X-)9CL9P%(0u1S0UgW zUBJ5Bp=ao_XRB1C_ExOB;0mvc#LmQjCt#Y?k%c0hWIXfc&Bu@igCzAm0NmoekVb}(EGCSj;o$!@d4n1$+ z2E|;9h7BIAd8<)o9trsFLp86Nhmb_@!ur@|Hf%^T6xBz39r+9~z=gt*hBb^_tC$pH zn&!WR>|R0h;kkqYfhVw;R^Wc3AL|WLUMkz0pNNx6Wn$>Zq5hNjhVYHkG4H0aTCmXu zLjOx5^$olO^cNZB#d4f=v5noWAe#YBiA^c%)mB(Z;qMh-V;g|{qe^O%GHWdiZc^tO z=P!T|N~qB@F~iZbBv7TIZ7pO~i`mQ7G3M4_Lc|sq7j|WE&flDyT6f_<%CT zDKZhHiZnl$9&Os-W`1Tf!011{DYJ&CPjQ!xd6JZm*Y57UJh()03khmF>^hj0NN>)^ z({T45>23v_I7W+>ZIOx>3O)tvR|y;WJiJg3Q5RMH;$E?5V$X-Bs7a|u5OPtqgd%fM zGsV*!(t+xldf6@R^YPRl_actbb54x$XL9=q9-D%6Ry9X}M&rxWf8R8+B4;38}Ae?9ul(aR$ ztqzLU3mdQSo})1Lbo