Drastic rebranding... lol
@@ -1,21 +1,11 @@
|
|||||||
# Stoner Alarm
|
# Trigalarm
|
||||||
An alarm designed to reliably wake a snoozing stoner. Seize the day (or at least don't get fired)!
|
A habit-correcting alarm for heavy sleepers. Cannot be shut off until you solve a triangle.
|
||||||
|
|
||||||
## The Pitch
|
## The Pitch
|
||||||
### Simple
|
### Simple
|
||||||
The app only has one page. You can only set one alarm. There is no snooze, there is no weekly schedule, and there is no way to disable the alarm (you'll always have one set - every day - like it or not).
|
The app only has one page. You can only set one alarm. There is no snooze, there is no weekly schedule, and there is no way to disable the alarm (you'll always have one set - every day - like it or not).
|
||||||
### Persistent
|
### Persistent
|
||||||
The alarm cannot be stopped until the drowsy stoner completes a thematically appropriate, touch-based game. Play well enough and quickly enough to prove you're awake and defuse the alarm.
|
The alarm cannot be stopped until you solve a randomized triangle. Even if you force-close the app, it will re-open itself until you solve the triangle.
|
||||||
#### "What if I just force-close the app in my sleep?"
|
|
||||||
Then it will schedule itself to re-open ASAP :)
|
|
||||||
### The Game
|
|
||||||
The alarm-defusing game requires you to serve some customers at an illegal flower bar. There are three stages, with each stage having its own meter to fill before progressing to the next.
|
|
||||||
#### The Stages
|
|
||||||
1. Grind the flower
|
|
||||||
- Quickly move your finger in a circle to utilize the grinder
|
|
||||||
2. Fill the bowls
|
|
||||||
- Drag the ground flower into each bowl
|
|
||||||
3. Light the bowls
|
|
||||||
- Swipe in the prompted direction with good reaction time to use the lighter
|
|
||||||
|
|
||||||
For all stages, be sure to watch for cops! Don't move a muscle when they're looking.
|
## Why Trigonometry?
|
||||||
|
Because it requires the perfect amount of thought to activate your brain in the morning. If the app gave you a more typical math problem, you could just mindlessly punch it into a calculator. Trigonometry still requires a base amount of thought ("Do I need sine, cosine, or tangent?") before a calculator is of any use.
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "stoner-alarm",
|
"name": "trigalarm",
|
||||||
"author": "RandyTheSilly",
|
"author": "RandyTheSilly",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"keywords": ["alarm"],
|
"keywords": ["alarm", "math", "trigonometry", "trig", "triangle"],
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"pebble": {
|
"pebble": {
|
||||||
"displayName": "Stoner Alarm",
|
"displayName": "Trigalarm",
|
||||||
"uuid": "293cd38c-4e8c-46ae-a3dc-c789d7ce93ab",
|
"uuid": "293cd38c-4e8c-46ae-a3dc-c789d7ce93ab",
|
||||||
"sdkVersion": "3",
|
"sdkVersion": "3",
|
||||||
"enableMultiJS": true,
|
"enableMultiJS": true,
|
||||||
@@ -22,16 +22,24 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"media": [
|
"media": [
|
||||||
{
|
{
|
||||||
"file": "leaf.png",
|
"file": "clock25.png",
|
||||||
"memoryFormat": "Smallest",
|
"memoryFormat": "Smallest",
|
||||||
"name": "LEAF",
|
"name": "CLOCK25",
|
||||||
|
"spaceOptimization": "storage",
|
||||||
|
"type": "bitmap",
|
||||||
|
"menuIcon": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"file": "clock35.png",
|
||||||
|
"memoryFormat": "Smallest",
|
||||||
|
"name": "CLOCK35",
|
||||||
"spaceOptimization": "storage",
|
"spaceOptimization": "storage",
|
||||||
"type": "bitmap"
|
"type": "bitmap"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"file": "clock.png",
|
"file": "check.png",
|
||||||
"memoryFormat": "Smallest",
|
"memoryFormat": "Smallest",
|
||||||
"name": "CLOCK",
|
"name": "CHECK",
|
||||||
"spaceOptimization": "storage",
|
"spaceOptimization": "storage",
|
||||||
"type": "bitmap"
|
"type": "bitmap"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
# Leaf Icon
|
|
||||||
[marijuana leaf by Rachel Fredericks](https://thenounproject.com/icon/marijuana-leaf-6959339/) (CC BY 3.0)
|
|
||||||
|
|
||||||
# Check Icon
|
# Check Icon
|
||||||
[checkmark by Asmuh](https://thenounproject.com/icon/checkmark-2193586/) (CC BY 3.0)
|
Modified version of [checkmark by Asmuh](https://thenounproject.com/icon/checkmark-2193586/) (CC BY 3.0)
|
||||||
|
|
||||||
# Clock Icon
|
# Clock Icon
|
||||||
[pebble-dev/iconography](https://raw.githubusercontent.com/pebble-dev/iconography/refs/heads/master/pebbleos/Pebble_50x50_Alarm_clock.svg)
|
Modified version of [pebble-dev/iconography](https://raw.githubusercontent.com/pebble-dev/iconography/refs/heads/master/pebbleos/Pebble_50x50_Alarm_clock.svg)
|
||||||
|
|||||||
@@ -0,0 +1,144 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
id="Comments"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
viewBox="0 0 50 50"
|
||||||
|
enable-background="new 0 0 50 50"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:docname="clock.svg"
|
||||||
|
inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs6" /><sodipodi:namedview
|
||||||
|
id="namedview6"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:zoom="12.586501"
|
||||||
|
inkscape:cx="20.02145"
|
||||||
|
inkscape:cy="24.748737"
|
||||||
|
inkscape:window-width="1524"
|
||||||
|
inkscape:window-height="793"
|
||||||
|
inkscape:window-x="20"
|
||||||
|
inkscape:window-y="20"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="Comments" />
|
||||||
|
|
||||||
|
<line
|
||||||
|
display="inline"
|
||||||
|
fill="none"
|
||||||
|
stroke="#000000"
|
||||||
|
stroke-width="3"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-miterlimit="10"
|
||||||
|
x1="7.5"
|
||||||
|
y1="15.5"
|
||||||
|
x2="14.5"
|
||||||
|
y2="8.5"
|
||||||
|
id="line1"
|
||||||
|
inkscape:label="leftRinger" /><line
|
||||||
|
display="inline"
|
||||||
|
fill="none"
|
||||||
|
stroke="#000000"
|
||||||
|
stroke-width="3"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-miterlimit="10"
|
||||||
|
x1="34.5"
|
||||||
|
y1="8.5"
|
||||||
|
x2="41.5"
|
||||||
|
y2="15.5"
|
||||||
|
id="line2"
|
||||||
|
inkscape:label="rightRinger" /><line
|
||||||
|
display="inline"
|
||||||
|
fill="none"
|
||||||
|
stroke="#000000"
|
||||||
|
stroke-width="3"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-miterlimit="10"
|
||||||
|
x1="11.5"
|
||||||
|
y1="40.5"
|
||||||
|
x2="9.5"
|
||||||
|
y2="45.059055"
|
||||||
|
id="line3"
|
||||||
|
inkscape:label="leftFoot" /><line
|
||||||
|
display="inline"
|
||||||
|
fill="none"
|
||||||
|
stroke="#000000"
|
||||||
|
stroke-width="3"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-miterlimit="10"
|
||||||
|
x1="37.5"
|
||||||
|
y1="40.5"
|
||||||
|
x2="39.5"
|
||||||
|
y2="45.059055"
|
||||||
|
id="line4"
|
||||||
|
inkscape:label="rightFoot" /><path
|
||||||
|
sodipodi:type="star"
|
||||||
|
style="fill:#ffffff;stroke:#000000;stroke-width:2.73055;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1"
|
||||||
|
id="path6"
|
||||||
|
inkscape:flatsided="true"
|
||||||
|
sodipodi:sides="3"
|
||||||
|
sodipodi:cx="18.426966"
|
||||||
|
sodipodi:cy="23.988764"
|
||||||
|
sodipodi:r1="18.541454"
|
||||||
|
sodipodi:r2="9.2707272"
|
||||||
|
sodipodi:arg1="-1.5707963"
|
||||||
|
sodipodi:arg2="-0.52359878"
|
||||||
|
inkscape:rounded="0.1"
|
||||||
|
inkscape:randomized="0"
|
||||||
|
d="m 18.426966,5.4473095 c 3.211474,10e-8 17.663107,25.0309635 16.05737,27.8121815 -1.605737,2.781219 -30.509004,2.781218 -32.114741,0 C 0.76385803,30.478272 15.215492,5.4473094 18.426966,5.4473095 Z"
|
||||||
|
inkscape:transform-center-y="-5.2946266"
|
||||||
|
transform="matrix(1.0567917,0,0,1.1422253,5.0410137,0.4019325)"
|
||||||
|
inkscape:export-filename="../resources/clock25.png"
|
||||||
|
inkscape:export-xdpi="57.838966"
|
||||||
|
inkscape:export-ydpi="57.838966"
|
||||||
|
inkscape:label="triangle" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<line
|
||||||
|
display="inline"
|
||||||
|
fill="none"
|
||||||
|
stroke="#000000"
|
||||||
|
stroke-width="3"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-miterlimit="10"
|
||||||
|
x1="18.5"
|
||||||
|
y1="33.5"
|
||||||
|
x2="24.5"
|
||||||
|
y2="27.5"
|
||||||
|
id="line5"
|
||||||
|
inkscape:label="hourHand" />
|
||||||
|
<line
|
||||||
|
display="inline"
|
||||||
|
fill="none"
|
||||||
|
stroke="#000000"
|
||||||
|
stroke-width="3"
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
stroke-miterlimit="10"
|
||||||
|
x1="24.5"
|
||||||
|
y1="15.5"
|
||||||
|
x2="24.5"
|
||||||
|
y2="27.5"
|
||||||
|
id="line6"
|
||||||
|
inkscape:label="minuteHand"
|
||||||
|
inkscape:export-filename="../resources/clock50~color.png"
|
||||||
|
inkscape:export-xdpi="115.67793"
|
||||||
|
inkscape:export-ydpi="115.67793" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<svg version="1.1" id="Comments" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
viewBox="0 0 50 50" enable-background="new 0 0 50 50" xml:space="preserve">
|
|
||||||
<polygon display="inline" fill="#FFFFFF" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
|
|
||||||
7.5,18.5 17.5,8.5 31.5,8.5 41.5,18.5 41.5,32.5 31.5,42.5 17.5,42.5 7.5,32.5 "/>
|
|
||||||
<line display="inline" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="5.5" y1="13.5" x2="12.5" y2="6.5"/>
|
|
||||||
<line display="inline" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="36.5" y1="6.5" x2="43.5" y2="13.5"/>
|
|
||||||
<line display="inline" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="11.5" y1="36.5" x2="9.5" y2="44.5"/>
|
|
||||||
<line display="inline" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="37.5" y1="36.5" x2="39.5" y2="44.5"/>
|
|
||||||
<line display="inline" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="18.5" y1="31.5" x2="24.5" y2="25.5"/>
|
|
||||||
<line display="inline" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="24.5" y1="13.5" x2="24.5" y2="25.5"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 333 B |
|
After Width: | Height: | Size: 974 B |
|
Before Width: | Height: | Size: 624 B |
|
After Width: | Height: | Size: 787 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 952 B |
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -2,15 +2,17 @@
|
|||||||
|
|
||||||
// layer-age
|
// layer-age
|
||||||
static Window *s_window;
|
static Window *s_window;
|
||||||
static BitmapLayer *s_leaf_layer;
|
|
||||||
static Layer *s_top_bar_layer;
|
static Layer *s_top_bar_layer;
|
||||||
static Layer *s_bottom_bar_layer;
|
static Layer *s_bottom_bar_layer;
|
||||||
|
static BitmapLayer *s_clock_bmp_layer;
|
||||||
|
static BitmapLayer *s_check_bmp_layer;
|
||||||
|
|
||||||
// bitmaps
|
// bitmaps
|
||||||
static GBitmap *s_leaf_bmp;
|
static GBitmap *s_clock_bmp;
|
||||||
|
static GBitmap *s_check_bmp;
|
||||||
|
|
||||||
// global vars
|
// global vars
|
||||||
static GColor s_bar_color = GColorDarkGreen;
|
static GColor s_bar_color = GColorMayGreen;
|
||||||
|
|
||||||
// constants
|
// constants
|
||||||
static const uint8_t s_edge_bar_height = ((PBL_DISPLAY_HEIGHT / 7) * 2);
|
static const uint8_t s_edge_bar_height = ((PBL_DISPLAY_HEIGHT / 7) * 2);
|
||||||
@@ -27,32 +29,41 @@ static void rect_fill_layer_update_proc(Layer *layer, GContext *ctx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void setter_window_load() {
|
static void setter_window_load() {
|
||||||
window_set_background_color(s_window, GColorMintGreen);
|
|
||||||
|
|
||||||
// leaf
|
|
||||||
s_leaf_bmp = gbitmap_create_with_resource(RESOURCE_ID_LEAF);
|
|
||||||
s_leaf_layer = bitmap_layer_create(GRect(PBL_IF_ROUND_ELSE(0, -4), PBL_IF_ROUND_ELSE(0, 7), PBL_IF_ROUND_ELSE(PBL_DISPLAY_WIDTH, PBL_DISPLAY_WIDTH + 8), PBL_DISPLAY_HEIGHT));
|
|
||||||
bitmap_layer_set_alignment(s_leaf_layer, GAlignCenter);
|
|
||||||
bitmap_layer_set_compositing_mode(s_leaf_layer, GCompOpSet);
|
|
||||||
bitmap_layer_set_bitmap(s_leaf_layer, s_leaf_bmp);
|
|
||||||
|
|
||||||
// top&bottom bars
|
// top&bottom bars
|
||||||
s_top_bar_layer = layer_create(GRect(0, 0, PBL_DISPLAY_WIDTH, s_edge_bar_height));
|
GRect top_bar_grect = GRect(0, 0, PBL_DISPLAY_WIDTH, s_edge_bar_height);
|
||||||
|
s_top_bar_layer = layer_create(top_bar_grect);
|
||||||
layer_set_update_proc(s_top_bar_layer, rect_fill_layer_update_proc);
|
layer_set_update_proc(s_top_bar_layer, rect_fill_layer_update_proc);
|
||||||
s_bottom_bar_layer = layer_create(GRect(0, PBL_DISPLAY_HEIGHT - s_edge_bar_height, PBL_DISPLAY_WIDTH, s_edge_bar_height));
|
GRect bottom_bar_grect = GRect(0, PBL_DISPLAY_HEIGHT - s_edge_bar_height, PBL_DISPLAY_WIDTH, s_edge_bar_height);
|
||||||
|
s_bottom_bar_layer = layer_create(bottom_bar_grect);
|
||||||
layer_set_update_proc(s_bottom_bar_layer, rect_fill_layer_update_proc);
|
layer_set_update_proc(s_bottom_bar_layer, rect_fill_layer_update_proc);
|
||||||
|
|
||||||
|
// clock icon
|
||||||
|
s_clock_bmp = gbitmap_create_with_resource(RESOURCE_ID_CLOCK35);
|
||||||
|
s_clock_bmp_layer = bitmap_layer_create(GRect(PBL_IF_ROUND_ELSE(0, 8), PBL_IF_ROUND_ELSE(8, 0), top_bar_grect.size.w, top_bar_grect.size.h));
|
||||||
|
bitmap_layer_set_bitmap(s_clock_bmp_layer, s_clock_bmp);
|
||||||
|
bitmap_layer_set_alignment(s_clock_bmp_layer, PBL_IF_ROUND_ELSE(GAlignTop, GAlignLeft));
|
||||||
|
bitmap_layer_set_compositing_mode(s_clock_bmp_layer, GCompOpSet);
|
||||||
|
|
||||||
|
// check icon
|
||||||
|
s_check_bmp = gbitmap_create_with_resource(RESOURCE_ID_CHECK);
|
||||||
|
s_check_bmp_layer = bitmap_layer_create(bottom_bar_grect);
|
||||||
|
bitmap_layer_set_bitmap(s_check_bmp_layer, s_check_bmp);
|
||||||
|
bitmap_layer_set_compositing_mode(s_check_bmp_layer, GCompOpSet);
|
||||||
|
|
||||||
Layer *window_layer = window_get_root_layer(s_window);
|
Layer *window_layer = window_get_root_layer(s_window);
|
||||||
layer_add_child(window_layer, bitmap_layer_get_layer(s_leaf_layer));
|
|
||||||
layer_add_child(window_layer, s_top_bar_layer);
|
layer_add_child(window_layer, s_top_bar_layer);
|
||||||
layer_add_child(window_layer, s_bottom_bar_layer);
|
layer_add_child(window_layer, s_bottom_bar_layer);
|
||||||
|
layer_add_child(window_layer, bitmap_layer_get_layer(s_clock_bmp_layer));
|
||||||
|
layer_add_child(window_layer, bitmap_layer_get_layer(s_check_bmp_layer));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setter_window_unload() {
|
static void setter_window_unload() {
|
||||||
|
bitmap_layer_destroy(s_check_bmp_layer);
|
||||||
|
bitmap_layer_destroy(s_clock_bmp_layer);
|
||||||
|
gbitmap_destroy(s_check_bmp);
|
||||||
|
gbitmap_destroy(s_clock_bmp);
|
||||||
layer_destroy(s_bottom_bar_layer);
|
layer_destroy(s_bottom_bar_layer);
|
||||||
layer_destroy(s_top_bar_layer);
|
layer_destroy(s_top_bar_layer);
|
||||||
bitmap_layer_destroy(s_leaf_layer);
|
|
||||||
gbitmap_destroy(s_leaf_bmp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init() {
|
static void init() {
|
||||||
@@ -60,7 +71,7 @@ static void init() {
|
|||||||
|
|
||||||
switch (launch_reason()) {
|
switch (launch_reason()) {
|
||||||
case APP_LAUNCH_WAKEUP:
|
case APP_LAUNCH_WAKEUP:
|
||||||
break; // TODO alarm game time!
|
break; // TODO math time!
|
||||||
default:
|
default:
|
||||||
window_set_window_handlers(
|
window_set_window_handlers(
|
||||||
s_window,
|
s_window,
|
||||||
|
|||||||