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 # 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. 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 - Some creature parts removed by the original developer (to conserve space) have been re-added
- Most creature parts now have manually placed accent colors - Most creature parts now have manually placed accent colors
- Creature parts are now dynamically and randomly re-colored when loaded in - Creature parts are now dynamically and randomly re-colored when loaded in
- This port is not compatible with 144x168 Pebbles - 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 144x168 watches! - 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 # Development
1. Install the [Pebble SDK](https://developer.repebble.com/sdk/) 1. Install the [Pebble SDK](https://developer.repebble.com/sdk/)

View File

@@ -16,6 +16,7 @@
"name": "H001", "name": "H001",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -28,6 +29,7 @@
"name": "H002", "name": "H002",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -40,6 +42,7 @@
"name": "H003", "name": "H003",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -52,6 +55,7 @@
"name": "H004", "name": "H004",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -64,6 +68,7 @@
"name": "H005", "name": "H005",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -76,6 +81,7 @@
"name": "H006", "name": "H006",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -88,6 +94,7 @@
"name": "H007", "name": "H007",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -100,6 +107,7 @@
"name": "H008", "name": "H008",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -112,6 +120,7 @@
"name": "H009", "name": "H009",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -124,6 +133,7 @@
"name": "H010", "name": "H010",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -136,6 +146,7 @@
"name": "H011", "name": "H011",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -148,6 +159,7 @@
"name": "H012", "name": "H012",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -160,6 +172,7 @@
"name": "H013", "name": "H013",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -172,6 +185,7 @@
"name": "H014", "name": "H014",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -184,6 +198,7 @@
"name": "H015", "name": "H015",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -196,6 +211,7 @@
"name": "H016", "name": "H016",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -208,6 +224,7 @@
"name": "H017", "name": "H017",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -220,6 +237,7 @@
"name": "H018", "name": "H018",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -232,6 +250,7 @@
"name": "H019", "name": "H019",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -244,6 +263,7 @@
"name": "H020", "name": "H020",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -256,6 +276,7 @@
"name": "H021", "name": "H021",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -268,6 +289,7 @@
"name": "H022", "name": "H022",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -280,6 +302,7 @@
"name": "H023", "name": "H023",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -292,6 +315,7 @@
"name": "H024", "name": "H024",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -304,6 +328,7 @@
"name": "H025", "name": "H025",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -316,6 +341,7 @@
"name": "B001", "name": "B001",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -328,6 +354,7 @@
"name": "B002", "name": "B002",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -340,6 +367,7 @@
"name": "B003", "name": "B003",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -352,6 +380,7 @@
"name": "B004", "name": "B004",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -364,6 +393,7 @@
"name": "B005", "name": "B005",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -376,6 +406,7 @@
"name": "B006", "name": "B006",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -388,6 +419,7 @@
"name": "B007", "name": "B007",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -400,6 +432,7 @@
"name": "B008", "name": "B008",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -412,6 +445,7 @@
"name": "B009", "name": "B009",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -424,6 +458,7 @@
"name": "B010", "name": "B010",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -436,6 +471,7 @@
"name": "B011", "name": "B011",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -448,6 +484,7 @@
"name": "B012", "name": "B012",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -460,6 +497,7 @@
"name": "B013", "name": "B013",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -472,6 +510,7 @@
"name": "B014", "name": "B014",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -484,6 +523,7 @@
"name": "B015", "name": "B015",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -496,6 +536,7 @@
"name": "B016", "name": "B016",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -508,6 +549,7 @@
"name": "B017", "name": "B017",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -520,6 +562,7 @@
"name": "B018", "name": "B018",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -532,6 +575,7 @@
"name": "B019", "name": "B019",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -544,6 +588,7 @@
"name": "B020", "name": "B020",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -556,6 +601,7 @@
"name": "B021", "name": "B021",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -568,6 +614,7 @@
"name": "B022", "name": "B022",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -580,6 +627,7 @@
"name": "B023", "name": "B023",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -592,6 +640,7 @@
"name": "B024", "name": "B024",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -604,6 +653,7 @@
"name": "B025", "name": "B025",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -616,6 +666,7 @@
"name": "XB001", "name": "XB001",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -628,6 +679,7 @@
"name": "BT", "name": "BT",
"spaceOptimization": "storage", "spaceOptimization": "storage",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "gabbro"
@@ -649,6 +701,7 @@
"file": "fonts/RetroComputerTime.ttf", "file": "fonts/RetroComputerTime.ttf",
"name": "FONT_RETRO_COMPUTER_28", "name": "FONT_RETRO_COMPUTER_28",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk" "chalk"
], ],
"type": "font" "type": "font"
@@ -657,6 +710,7 @@
}, },
"sdkVersion": "3", "sdkVersion": "3",
"targetPlatforms": [ "targetPlatforms": [
"basalt",
"chalk", "chalk",
"emery", "emery",
"gabbro" "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_on_screen_raised;
static GRect s_guy_butt_grect_off_screen_raised; static GRect s_guy_butt_grect_off_screen_raised;
static GRect s_guy_butt_grect_on_screen_resting; static GRect s_guy_butt_grect_on_screen_resting;
#if PBL_DISPLAY_WIDTH == 180 #if PBL_DISPLAY_WIDTH <= 180
// 8x+20(4-x)+20, // 8x+20(4-x)+20,
// where x=one_count, // where x=one_count,
// 8=width of "1", // 8=width of "1",
@@ -65,7 +65,7 @@ static Animation *s_butt_raise_template;
static Animation *s_butt_out_template; static Animation *s_butt_out_template;
// declare lookup tables // 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}; static const uint8_t s_ones_offset[] = {0, 3, 6, 9, 12};
#else #else
static const uint8_t s_ones_offset[] = {0, 4, 7, 11, 15}; 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 // write the current date into a buffer & format
static char s_date_buffer[16]; static char s_date_buffer[16];
#if PBL_DISPLAY_WIDTH <= 144
strftime(s_date_buffer, sizeof(s_date_buffer), "%m .%d", tick_time); 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 // update layers
text_layer_set_text(s_time_layer, s_time_buffer); 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]; s_random_color_next = s_dark_bg_colors[rand() % s_color_count];
// load custom font // 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)); s_custom_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_RETRO_COMPUTER_28));
#else #else
s_custom_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_RETRO_COMPUTER_34)); s_custom_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FONT_RETRO_COMPUTER_34));
@@ -383,10 +387,14 @@ static void init() {
s_bt_icon = gbitmap_create_with_resource(RESOURCE_ID_BT); 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; s_date_pos_y = PBL_DISPLAY_HEIGHT / 2 - 9;
#endif
s_date_bt_width = (PBL_DISPLAY_WIDTH - s_max_time_width) / 2; 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); 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; s_bt_pos_x = s_date_bt_width + s_max_time_width;
#else #else
s_bt_pos_x = s_date_bt_width + s_max_time_width + 1; 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 // pre-create layers used in update_minute_1
//// time //// 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)); s_time_layer = text_layer_create(GRect(0, (PBL_DISPLAY_HEIGHT / 2) - 18, PBL_DISPLAY_WIDTH, 28));
#else #else
s_time_layer = text_layer_create(GRect(0, (PBL_DISPLAY_HEIGHT / 2) - 21, PBL_DISPLAY_WIDTH, 34)); 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 //// date
s_date_layer = text_layer_create(s_date_grect_a); s_date_layer = text_layer_create(s_date_grect_a);
text_layer_set_background_color(s_date_layer, GColorClear); 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)); 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); text_layer_set_text_alignment(s_date_layer, GTextAlignmentCenter);
//// bt //// bt
s_bt_layer = bitmap_layer_create(s_bt_grect_a); s_bt_layer = bitmap_layer_create(s_bt_grect_a);