Add Basalt support, completing support of color Pebbles

This commit is contained in:
2026-03-23 22:27:43 -04:00
parent 9cddec1767
commit 5d93928678
3 changed files with 75 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
# Maan On My Wrist XL
This is an unofficial and greatly expanded port of the [Maan On My Wrist](https://apps.rebble.io/en_US/application/557724772d93bc0eae00004c?native=false&query=maan&section=watchfaces) watchface to all devices not natively supported by the original. This includes the new Pebble Time 2 (emery) and Pebble Round 2 (gabbro), as well as the classic Pebble Time Round (chalk).
This is an unofficial and greatly expanded port of the [Maan On My Wrist](https://apps.rebble.io/en_US/application/557724772d93bc0eae00004c?native=false&query=maan&section=watchfaces) watchface to all color Pebbles, including the new Pebble Time 2/Round 2.
Since the original watchface is **NOT** open source, this "port" could be more accurately described as a recreation based on assets dumped from the original.
@@ -12,8 +12,8 @@ Since the original watchface is **NOT** open source, this "port" could be more a
- Some creature parts removed by the original developer (to conserve space) have been re-added
- Most creature parts now have manually placed accent colors
- Creature parts are now dynamically and randomly re-colored when loaded in
- This port is not compatible with 144x168 Pebbles
- The original [Maan On My Wrist](https://apps.rebble.io/en_US/application/557724772d93bc0eae00004c?native=false&query=maan&section=watchfaces) is still perfectly silly on 144x168 watches!
- This port is not compatible with black&white Pebbles
- The original [Maan On My Wrist](https://apps.rebble.io/en_US/application/557724772d93bc0eae00004c?native=false&query=maan&section=watchfaces) is still perfectly silly on b&w screens!
# Development
1. Install the [Pebble SDK](https://developer.repebble.com/sdk/)

View File

@@ -16,6 +16,7 @@
"name": "H001",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -28,6 +29,7 @@
"name": "H002",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -40,6 +42,7 @@
"name": "H003",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -52,6 +55,7 @@
"name": "H004",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -64,6 +68,7 @@
"name": "H005",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -76,6 +81,7 @@
"name": "H006",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -88,6 +94,7 @@
"name": "H007",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -100,6 +107,7 @@
"name": "H008",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -112,6 +120,7 @@
"name": "H009",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -124,6 +133,7 @@
"name": "H010",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -136,6 +146,7 @@
"name": "H011",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -148,6 +159,7 @@
"name": "H012",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -160,6 +172,7 @@
"name": "H013",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -172,6 +185,7 @@
"name": "H014",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -184,6 +198,7 @@
"name": "H015",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -196,6 +211,7 @@
"name": "H016",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -208,6 +224,7 @@
"name": "H017",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -220,6 +237,7 @@
"name": "H018",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -232,6 +250,7 @@
"name": "H019",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -244,6 +263,7 @@
"name": "H020",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -256,6 +276,7 @@
"name": "H021",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -268,6 +289,7 @@
"name": "H022",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -280,6 +302,7 @@
"name": "H023",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -292,6 +315,7 @@
"name": "H024",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -304,6 +328,7 @@
"name": "H025",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -316,6 +341,7 @@
"name": "B001",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -328,6 +354,7 @@
"name": "B002",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -340,6 +367,7 @@
"name": "B003",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -352,6 +380,7 @@
"name": "B004",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -364,6 +393,7 @@
"name": "B005",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -376,6 +406,7 @@
"name": "B006",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -388,6 +419,7 @@
"name": "B007",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -400,6 +432,7 @@
"name": "B008",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -412,6 +445,7 @@
"name": "B009",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -424,6 +458,7 @@
"name": "B010",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -436,6 +471,7 @@
"name": "B011",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -448,6 +484,7 @@
"name": "B012",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -460,6 +497,7 @@
"name": "B013",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -472,6 +510,7 @@
"name": "B014",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -484,6 +523,7 @@
"name": "B015",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -496,6 +536,7 @@
"name": "B016",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -508,6 +549,7 @@
"name": "B017",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -520,6 +562,7 @@
"name": "B018",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -532,6 +575,7 @@
"name": "B019",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -544,6 +588,7 @@
"name": "B020",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -556,6 +601,7 @@
"name": "B021",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -568,6 +614,7 @@
"name": "B022",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -580,6 +627,7 @@
"name": "B023",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -592,6 +640,7 @@
"name": "B024",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -604,6 +653,7 @@
"name": "B025",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -616,6 +666,7 @@
"name": "XB001",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -628,6 +679,7 @@
"name": "BT",
"spaceOptimization": "storage",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"
@@ -649,6 +701,7 @@
"file": "fonts/RetroComputerTime.ttf",
"name": "FONT_RETRO_COMPUTER_28",
"targetPlatforms": [
"basalt",
"chalk"
],
"type": "font"
@@ -657,6 +710,7 @@
},
"sdkVersion": "3",
"targetPlatforms": [
"basalt",
"chalk",
"emery",
"gabbro"

View File

@@ -30,7 +30,7 @@ static GRect s_guy_head_grect_on_screen_resting;
static GRect s_guy_butt_grect_on_screen_raised;
static GRect s_guy_butt_grect_off_screen_raised;
static GRect s_guy_butt_grect_on_screen_resting;
#if PBL_DISPLAY_WIDTH == 180
#if PBL_DISPLAY_WIDTH <= 180
// 8x+20(4-x)+20,
// where x=one_count,
// 8=width of "1",
@@ -65,7 +65,7 @@ static Animation *s_butt_raise_template;
static Animation *s_butt_out_template;
// declare lookup tables
#if PBL_DISPLAY_WIDTH == 180
#if PBL_DISPLAY_WIDTH <= 180
static const uint8_t s_ones_offset[] = {0, 3, 6, 9, 12};
#else
static const uint8_t s_ones_offset[] = {0, 4, 7, 11, 15};
@@ -124,7 +124,11 @@ static void update_minute_1() {
// write the current date into a buffer & format
static char s_date_buffer[16];
#if PBL_DISPLAY_WIDTH <= 144
strftime(s_date_buffer, sizeof(s_date_buffer), "%m .%d", tick_time);
#else
strftime(s_date_buffer, sizeof(s_date_buffer), "%m.%d", tick_time);
#endif
// update layers
text_layer_set_text(s_time_layer, s_time_buffer);
@@ -373,7 +377,7 @@ static void init() {
s_random_color_next = s_dark_bg_colors[rand() % s_color_count];
// load custom font
#if PBL_DISPLAY_WIDTH == 180
#if PBL_DISPLAY_WIDTH <= 180
s_custom_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_RETRO_COMPUTER_28));
#else
s_custom_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_RETRO_COMPUTER_34));
@@ -382,11 +386,15 @@ static void init() {
// load bluetooth indicator
s_bt_icon = gbitmap_create_with_resource(RESOURCE_ID_BT);
// dynamically calculate coordinates for date/bt indicators
// dynamically calculate coordinates for date/bt indicators
#if PBL_DISPLAY_WIDTH <= 144
s_date_pos_y = PBL_DISPLAY_HEIGHT / 2 - 6;
#else
s_date_pos_y = PBL_DISPLAY_HEIGHT / 2 - 9;
#endif
s_date_bt_width = (PBL_DISPLAY_WIDTH - s_max_time_width) / 2;
s_date_grect_a = GRect(s_date_pos_x, s_date_pos_y, s_date_bt_width, s_date_height);
#if PBL_DISPLAY_WIDTH == 180
#if PBL_DISPLAY_WIDTH <= 180
s_bt_pos_x = s_date_bt_width + s_max_time_width;
#else
s_bt_pos_x = s_date_bt_width + s_max_time_width + 1;
@@ -396,7 +404,7 @@ static void init() {
// pre-create layers used in update_minute_1
//// time
#if PBL_DISPLAY_WIDTH == 180
#if PBL_DISPLAY_WIDTH <= 180
s_time_layer = text_layer_create(GRect(0, (PBL_DISPLAY_HEIGHT / 2) - 18, PBL_DISPLAY_WIDTH, 28));
#else
s_time_layer = text_layer_create(GRect(0, (PBL_DISPLAY_HEIGHT / 2) - 21, PBL_DISPLAY_WIDTH, 34));
@@ -407,7 +415,11 @@ static void init() {
//// date
s_date_layer = text_layer_create(s_date_grect_a);
text_layer_set_background_color(s_date_layer, GColorClear);
#if PBL_DISPLAY_WIDTH <= 144
text_layer_set_font(s_date_layer, fonts_get_system_font(FONT_KEY_GOTHIC_09));
#else
text_layer_set_font(s_date_layer, fonts_get_system_font(FONT_KEY_GOTHIC_14_BOLD));
#endif
text_layer_set_text_alignment(s_date_layer, GTextAlignmentCenter);
//// bt
s_bt_layer = bitmap_layer_create(s_bt_grect_a);