From 1f04cb5f64a3c9fcf664df9db74f6e7dfa8211b0 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Rollo Date: Fri, 17 Oct 2025 18:54:59 +0200 Subject: [PATCH] feat: Add 3x3 and 5x5 frameless clocks --- ontime_clocks/common.lua | 7 +- ontime_clocks/crafts.lua | 53 +++ .../ontime_clocks_large_clock_inventory.svg | 112 +++++++ .../ontime_clocks_large_clock_parts.svg | 304 ++++++++++++++++++ ontime_clocks/locale/ontime_clocks.de.tr | 9 + ontime_clocks/locale/ontime_clocks.fr.tr | 8 +- ontime_clocks/locale/ontime_clocks.ms.tr | 9 + ontime_clocks/locale/template.txt | 8 +- ontime_clocks/nodes.lua | 265 +++++++-------- .../textures/ontime_clocks_3x3_center.png | Bin 0 -> 162 bytes .../ontime_clocks_3x3_clock_inventory.png | Bin 0 -> 272 bytes .../ontime_clocks_3x3_needle_hours.png | Bin 0 -> 163 bytes .../ontime_clocks_3x3_needle_minutes.png | Bin 0 -> 162 bytes .../textures/ontime_clocks_5x5_center.png | Bin 0 -> 162 bytes .../ontime_clocks_5x5_clock_inventory.png | Bin 0 -> 270 bytes .../ontime_clocks_5x5_needle_hours.png | Bin 0 -> 164 bytes .../ontime_clocks_5x5_needle_minutes.png | Bin 0 -> 162 bytes .../ontime_clocks_large_clock_inventory.png | Bin 0 -> 463 bytes 18 files changed, 626 insertions(+), 149 deletions(-) create mode 100644 ontime_clocks/design/ontime_clocks_large_clock_inventory.svg create mode 100644 ontime_clocks/design/ontime_clocks_large_clock_parts.svg create mode 100644 ontime_clocks/textures/ontime_clocks_3x3_center.png create mode 100644 ontime_clocks/textures/ontime_clocks_3x3_clock_inventory.png create mode 100644 ontime_clocks/textures/ontime_clocks_3x3_needle_hours.png create mode 100644 ontime_clocks/textures/ontime_clocks_3x3_needle_minutes.png create mode 100644 ontime_clocks/textures/ontime_clocks_5x5_center.png create mode 100644 ontime_clocks/textures/ontime_clocks_5x5_clock_inventory.png create mode 100644 ontime_clocks/textures/ontime_clocks_5x5_needle_hours.png create mode 100644 ontime_clocks/textures/ontime_clocks_5x5_needle_minutes.png create mode 100644 ontime_clocks/textures/ontime_clocks_large_clock_inventory.png diff --git a/ontime_clocks/common.lua b/ontime_clocks/common.lua index 2c7639f..9bd7bb2 100644 --- a/ontime_clocks/common.lua +++ b/ontime_clocks/common.lua @@ -18,9 +18,13 @@ along with ontime_clocks. If not, see . --]] --- Entity for time display +-- Entity for time display of most of clocks display_api.register_display_entity("ontime_clocks:display") +-- Entities for two needles of large clocks +display_api.register_display_entity("ontime_clocks:hours_needle") +display_api.register_display_entity("ontime_clocks:minutes_needle") + function ontime_clocks.get_h24() return math.floor(minetest.get_timeofday()*24)%24 end @@ -58,4 +62,3 @@ function ontime_clocks.get_needles_properties(color, size, hour, minute) visual_size = {x=size/64, y=size/64} } end - diff --git a/ontime_clocks/crafts.lua b/ontime_clocks/crafts.lua index fa218a2..f2bef22 100644 --- a/ontime_clocks/crafts.lua +++ b/ontime_clocks/crafts.lua @@ -56,6 +56,24 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'ontime_clocks:3x3_clock_black', + recipe = { + {mat.steel_ingot, mat.dye_black, mat.steel_ingot}, + {'', 'ontime_clocks:frameless_black', ''}, + {'', '', ''}, + } +}) + +minetest.register_craft({ + output = 'ontime_clocks:5x5_clock_black', + recipe = { + {mat.steel_ingot, mat.dye_black, mat.steel_ingot}, + {'', 'ontime_clocks:3x3_clock_black', ''}, + {'', '', ''}, + } +}) + minetest.register_craft({ output = 'ontime_clocks:frameless_gold', recipe = { @@ -65,6 +83,24 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'ontime_clocks:3x3_clock_gold', + recipe = { + {mat.gold_ingot, '', mat.gold_ingot}, + {'', 'ontime_clocks:frameless_gold', ''}, + {'', '', ''}, + } +}) + +minetest.register_craft({ + output = 'ontime_clocks:5x5_clock_gold', + recipe = { + {mat.gold_ingot, '', mat.gold_ingot}, + {'', 'ontime_clocks:3x3_clock_gold', ''}, + {'', '', ''}, + } +}) + minetest.register_craft({ output = 'ontime_clocks:frameless_white', recipe = { @@ -74,4 +110,21 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'ontime_clocks:3x3_clock_white', + recipe = { + {mat.steel_ingot, mat.dye_white, mat.steel_ingot}, + {'', 'ontime_clocks:frameless_white', ''}, + {'', '', ''}, + } +}) + +minetest.register_craft({ + output = 'ontime_clocks:5x5_clock_white', + recipe = { + {mat.steel_ingot, mat.dye_white, mat.steel_ingot}, + {'', 'ontime_clocks:3x3_clock_white', ''}, + {'', '', ''}, + } +}) diff --git a/ontime_clocks/design/ontime_clocks_large_clock_inventory.svg b/ontime_clocks/design/ontime_clocks_large_clock_inventory.svg new file mode 100644 index 0000000..7a48932 --- /dev/null +++ b/ontime_clocks/design/ontime_clocks_large_clock_inventory.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ontime_clocks/design/ontime_clocks_large_clock_parts.svg b/ontime_clocks/design/ontime_clocks_large_clock_parts.svg new file mode 100644 index 0000000..23833a9 --- /dev/null +++ b/ontime_clocks/design/ontime_clocks_large_clock_parts.svg @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ontime_clocks/locale/ontime_clocks.de.tr b/ontime_clocks/locale/ontime_clocks.de.tr index 5bdb660..2fc1555 100644 --- a/ontime_clocks/locale/ontime_clocks.de.tr +++ b/ontime_clocks/locale/ontime_clocks.de.tr @@ -2,6 +2,15 @@ Green digital clock=Grüne Digitaluhr Red digital clock=Rote Digitaluhr White clock=Weiße Uhr +@1 frameless @2 clock= +gold= +black= +white= +Frameless @1 clock= + + +##### not used anymore ##### + Frameless clock=Rahmenlose Uhr Frameless gold clock=Rahmenlose goldene Uhr Frameless white clock=Rahmenlose weiße Uhr diff --git a/ontime_clocks/locale/ontime_clocks.fr.tr b/ontime_clocks/locale/ontime_clocks.fr.tr index fdc8ccf..9011d30 100644 --- a/ontime_clocks/locale/ontime_clocks.fr.tr +++ b/ontime_clocks/locale/ontime_clocks.fr.tr @@ -2,6 +2,8 @@ Green digital clock=Horloge numérique verte Red digital clock=Horloge numérique rouge White clock=Horloge blanche -Frameless clock=Horloge sans cadre -Frameless gold clock=Horloge dorée sans cadre -Frameless white clock=Horloge blanche sans cadre +@1 frameless @2 clock=Horloge @2 sans cadre @1 +gold=dorée +black=noire +white=blanche +Frameless @1 clock=Horloge @1 sans cadre diff --git a/ontime_clocks/locale/ontime_clocks.ms.tr b/ontime_clocks/locale/ontime_clocks.ms.tr index 0478935..6e4f6d8 100644 --- a/ontime_clocks/locale/ontime_clocks.ms.tr +++ b/ontime_clocks/locale/ontime_clocks.ms.tr @@ -2,6 +2,15 @@ Green digital clock=Jam digital hijau Red digital clock=Jam digital merah White clock=Jam putih +@1 frameless @2 clock= +gold= +black= +white= +Frameless @1 clock= + + +##### not used anymore ##### + Frameless clock=Jam tanpa bingkai Frameless gold clock=Jam emas tanpa bingkai Frameless white clock=Jam putih tanpa bingkai diff --git a/ontime_clocks/locale/template.txt b/ontime_clocks/locale/template.txt index 6db07cb..84941b0 100644 --- a/ontime_clocks/locale/template.txt +++ b/ontime_clocks/locale/template.txt @@ -2,6 +2,8 @@ Green digital clock= Red digital clock= White clock= -Frameless clock= -Frameless gold clock= -Frameless white clock= +@1 frameless @2 clock= +gold= +black= +white= +Frameless @1 clock= diff --git a/ontime_clocks/nodes.lua b/ontime_clocks/nodes.lua index afa28fe..768a574 100644 --- a/ontime_clocks/nodes.lua +++ b/ontime_clocks/nodes.lua @@ -31,8 +31,31 @@ local function clock_on_timer(pos) return true end +minetest.register_lbm({ + name = "ontime_clocks:nodetimer_init", + nodenames = {"group:ontime_clocks_tick"}, + run_at_every_load = false, + action = function(pos) + local timer = minetest.get_node_timer(pos) + timer:start(5) + end +}) + +local function register_clock(name, def) + def.on_place = display_api.on_place + def.on_construct = clock_on_construct + def.on_destruct = display_api.on_destruct + def.on_blast = display_api.on_blast + def.on_rotate = display_api.on_rotate + def.on_timer = clock_on_timer + def.groups.ontime_clocks_tick = 1 + def.groups.display_api = 1 + + minetest.register_node(name, def) +end + -- Green digital clock -minetest.register_node("ontime_clocks:green_digital", { +register_clock("ontime_clocks:green_digital", { description = S("Green digital clock"), inventory_image = "ontime_clocks_green_digital_inventory.png", wield_image = "ontime_clocks_green_digital_inventory.png", @@ -46,7 +69,7 @@ minetest.register_node("ontime_clocks:green_digital", { wall_top = {-7/16, 0.5, -7/32, 7/16, 13/32, 3/16} }, tiles = {"ontime_clocks_digital.png"}, - groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, display_api=1, handy = 1}, + groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, handy = 1}, _mcl_hardness = 0.8, _mcl_blast_resistance = 1, is_ground_content = false, @@ -59,17 +82,11 @@ minetest.register_node("ontime_clocks:green_digital", { "#040", "#0F0", ontime_clocks.get_h24(), ontime_clocks.get_m12())) end }, }, - on_place = display_api.on_place, - on_construct = clock_on_construct, - on_destruct = display_api.on_destruct, - on_blast = display_api.on_blast, - on_rotate = display_api.on_rotate, - on_timer = clock_on_timer, }) -- Red digital clock -minetest.register_node("ontime_clocks:red_digital", { +register_clock("ontime_clocks:red_digital", { description = S("Red digital clock"), inventory_image = "ontime_clocks_red_digital_inventory.png", wield_image = "ontime_clocks_red_digital_inventory.png", @@ -83,7 +100,7 @@ minetest.register_node("ontime_clocks:red_digital", { wall_top = {-7/16, 0.5, -7/32, 7/16, 13/32, 3/16} }, tiles = {"ontime_clocks_digital.png"}, - groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, display_api=1, handy = 1}, + groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, handy = 1}, _mcl_hardness = 0.8, _mcl_blast_resistance = 1, is_ground_content = false, @@ -96,16 +113,10 @@ minetest.register_node("ontime_clocks:red_digital", { "#400", "#F00", ontime_clocks.get_h24(), ontime_clocks.get_m12())) end }, }, - on_place = display_api.on_place, - on_construct = clock_on_construct, - on_destruct = display_api.on_destruct, - on_blast = display_api.on_blast, - on_rotate = display_api.on_rotate, - on_timer = clock_on_timer, }) -minetest.register_node("ontime_clocks:white", { +register_clock("ontime_clocks:white", { description = S("White clock"), inventory_image = "ontime_clocks_white_inventory.png", wield_image = "ontime_clocks_white_inventory.png", @@ -119,7 +130,7 @@ minetest.register_node("ontime_clocks:white", { wall_top = { -7/16, 0.5, -7/16, 7/16, 7/16, 7/16}, }, tiles = {"ontime_clocks_white.png"}, - groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, display_api=1, handy = 1}, + groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, handy = 1}, _mcl_hardness = 0.8, _mcl_blast_resistance = 1, is_ground_content = false, @@ -132,133 +143,105 @@ minetest.register_node("ontime_clocks:white", { "#000", 36, ontime_clocks.get_h12(), ontime_clocks.get_m12())) end }, }, - on_place = display_api.on_place, - on_construct = clock_on_construct, - on_destruct = display_api.on_destruct, - on_blast = display_api.on_blast, - on_rotate = display_api.on_rotate, - on_timer = clock_on_timer, }) +local function register_large_clock(name, label, color, size) + local sstr = size .. "x" .. size -- Size string + register_clock("ontime_clocks:" .. sstr .. "_clock_" .. name, { + description = S("@1 frameless @2 clock", sstr, label), + inventory_image = "ontime_clocks_large_clock_inventory.png^[colorize:" .. + color .. "^ontime_clocks_" .. sstr .. "_clock_inventory.png", + wield_image = "ontime_clocks_large_clock_inventory.png^[colorize:" .. color, + paramtype = "light", + paramtype2 = "wallmounted", + drawtype = "nodebox", + use_texture_alpha = "clip", + node_box = { + type = "wallmounted", + wall_side = { -0.5, -7/16, -7/16, -15/32, 7/16, 7/16 }, + wall_bottom = { -7/16, -0.5, -7/16, 7/16, -15/32, 7/16 }, + wall_top = { -7/16, 0.5, -7/16, 7/16, 15/32, 7/16 } + }, + tiles = {"ontime_clocks_" .. sstr .. "_center.png^[colorize:" .. color}, + groups = {oddly_breakable_by_hand = 1, not_blocking_trains = 1, handy = 1}, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1, + is_ground_content = false, + display_entities = { + ["ontime_clocks:hours_needle"] = { + depth = 14/32, + on_display_update = function(pos, objref) + objref:set_properties({ + textures={"ontime_clocks_" .. sstr .. "_needle_hours.png^[colorize:" .. color}, + visual_size = {x=1, y=size}, + }) + objref:get_luaentity()["rotation"] = { + z = math.floor(minetest.get_timeofday() * 24) / 6 * math.pi + } + end + }, + ["ontime_clocks:minutes_needle"] = { + depth = 13/32, + on_display_update = function(pos, objref) + objref:set_properties({ + textures={"ontime_clocks_" .. sstr .. "_needle_minutes.png^[colorize:" .. color}, + visual_size = {x=1, y=size}, + }) + objref:get_luaentity()["rotation"] = { + z = math.floor(minetest.get_timeofday() * 288) / 6 * math.pi + } + end + }, + }, + }) +end -minetest.register_node("ontime_clocks:frameless_black", { - description = S("Frameless clock"), - inventory_image = "ontime_clocks_frameless_inventory.png", - wield_image = "ontime_clocks_frameless_inventory.png", - paramtype = "light", - paramtype2 = "wallmounted", - drawtype = "nodebox", - use_texture_alpha = "clip", - node_box = { - type = "wallmounted", - wall_side = { -0.5, -7/16, -7/16, -0.45, 7/16, 7/16 }, - wall_bottom = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - wall_top = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } - }, - tiles = {"ontime_clocks_frameless.png"}, - groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, display_api=1, handy = 1}, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1, - is_ground_content = false, - display_entities = { - ["ontime_clocks:display"] = { - depth = 7/16, - on_display_update = function(pos, objref) - objref:set_properties( - ontime_clocks.get_needles_properties( - "#000", 48, ontime_clocks.get_h12(), ontime_clocks.get_m12())) - end }, - }, - on_place = display_api.on_place, - on_construct = clock_on_construct, - on_destruct = display_api.on_destruct, - on_blast = display_api.on_blast, - on_rotate = display_api.on_rotate, - on_timer = clock_on_timer, -}) +local models = { + { name = "gold", label = S("gold"), color = "#FF0" }, + { name = "black", label = S("black"), color = "#000" }, + { name = "white", label = S("white"), color = "#FFF" }, +} +for _, model in ipairs(models) do + -- Frameless clock + register_clock("ontime_clocks:frameless_" .. model.name, { + description = S("Frameless @1 clock", model.label), + inventory_image = "ontime_clocks_frameless_inventory.png^[colorize:" .. model.color, + wield_image = "ontime_clocks_frameless_inventory.png^[colorize:" .. model.color, + paramtype = "light", + paramtype2 = "wallmounted", + drawtype = "nodebox", + use_texture_alpha = "clip", + node_box = { + type = "wallmounted", + wall_side = { -0.5, -7/16, -7/16, -0.45, 7/16, 7/16 }, + wall_bottom = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + wall_top = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } + }, + tiles = {"ontime_clocks_frameless.png^[colorize:" .. model.color}, + groups = { oddly_breakable_by_hand=1, not_blocking_trains=1, handy = 1}, + _mcl_hardness = 0.8, + _mcl_blast_resistance = 1, + is_ground_content = false, + display_entities = { + ["ontime_clocks:display"] = { + depth = 7/16, + on_display_update = function(pos, objref) + objref:set_properties( + ontime_clocks.get_needles_properties( + model.color, 48, + ontime_clocks.get_h12(), + ontime_clocks.get_m12() + ) + ) + end }, + }, + }) -minetest.register_node("ontime_clocks:frameless_gold", { - description = S("Frameless gold clock"), - inventory_image = "ontime_clocks_frameless_inventory.png^[colorize:#FF0", - wield_image = "ontime_clocks_frameless_inventory.png^[colorize:#FF0", - paramtype = "light", - paramtype2 = "wallmounted", - drawtype = "nodebox", - use_texture_alpha = "clip", - node_box = { - type = "wallmounted", - wall_side = { -0.5, -7/16, -7/16, -0.45, 7/16, 7/16 }, - wall_bottom = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - wall_top = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } - }, - tiles = {"ontime_clocks_frameless.png^[colorize:#FF0"}, - groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, display_api=1, handy = 1}, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1, - is_ground_content = false, - display_entities = { - ["ontime_clocks:display"] = { - depth = 7/16, - on_display_update = function(pos, objref) - objref:set_properties( - ontime_clocks.get_needles_properties( - "#FF0", 48, ontime_clocks.get_h12(), ontime_clocks.get_m12())) - end }, - }, - on_place = display_api.on_place, - on_construct = clock_on_construct, - on_destruct = display_api.on_destruct, - on_blast = display_api.on_blast, - on_rotate = display_api.on_rotate, - on_timer = clock_on_timer, -}) + -- 3x3 large clock + register_large_clock(model.name, model.label, model.color, 3) + -- 5x5 large clock + register_large_clock(model.name, model.label, model.color, 5) +end -minetest.register_node("ontime_clocks:frameless_white", { - description = S("Frameless white clock"), - inventory_image = "ontime_clocks_frameless_inventory.png^[colorize:#FFF", - wield_image = "ontime_clocks_frameless_inventory.png^[colorize:#FFF", - paramtype = "light", - paramtype2 = "wallmounted", - drawtype = "nodebox", - use_texture_alpha = "clip", - node_box = { - type = "wallmounted", - wall_side = { -0.5, -7/16, -7/16, -0.45, 7/16, 7/16 }, - wall_bottom = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, - wall_top = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 } - }, - tiles = {"ontime_clocks_frameless.png^[colorize:#FFF"}, - groups = {oddly_breakable_by_hand=1, not_blocking_trains=1, display_api=1, handy = 1}, - _mcl_hardness = 0.8, - _mcl_blast_resistance = 1, - is_ground_content = false, - display_entities = { - ["ontime_clocks:display"] = { - depth = 7/16, - on_display_update = function(pos, objref) - objref:set_properties( - ontime_clocks.get_needles_properties( - "#FFF", 48, ontime_clocks.get_h12(), ontime_clocks.get_m12())) - end }, - }, - on_place = display_api.on_place, - on_construct = clock_on_construct, - on_destruct = display_api.on_destruct, - on_blast = display_api.on_blast, - on_rotate = display_api.on_rotate, - on_timer = clock_on_timer, -}) - - -minetest.register_lbm({ - name = "ontime_clocks:nodetimer_init", - nodenames = {"ontime_clocks:green_digital", "ontime_clocks:red_digital", "ontime_clocks:white", - "ontime_clocks:frameless_black", "ontime_clocks:frameless_gold", "ontime_clocks:frameless_white"}, - run_at_every_load = false, - action = function(pos) - local timer = minetest.get_node_timer(pos) - timer:start(5) - end -}) diff --git a/ontime_clocks/textures/ontime_clocks_3x3_center.png b/ontime_clocks/textures/ontime_clocks_3x3_center.png new file mode 100644 index 0000000000000000000000000000000000000000..5d01630be3d5a46b3e169706f88862761e297af0 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt=kVE{-7sWZRk|G zd-yPeSWc6gnp%YOw=*-1dqT<&u3+Th=~?VKvxu4DSPhqS`SmZafm#_nUHx3vIVCg! E0M-{W`v3p{ literal 0 HcmV?d00001 diff --git a/ontime_clocks/textures/ontime_clocks_3x3_clock_inventory.png b/ontime_clocks/textures/ontime_clocks_3x3_clock_inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..85537edfa1c882a09d37d67958e5c3bade6be7b8 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;I14-?iy0XB4ude`@%$AjKtah8 z*NBqf{Irtt#G+J&^73-M%)IR4E~o7r{)!> z7V9Tf>J}&Jo9G$n9}Y=k1)9zl;1l9{=FFLfhK47$#{EDM#*!evUq&N#aB8wRq_zr_G_!@pBk1Yk7{YNqIl+PH4Eu`C6q&N#aB8wRq_zr_G_!@pBjD-c7{YNqIUy%u0qY_&1_n_pzIn@@GBp9^7(8A5T-G@yGywo+ CT`mm( literal 0 HcmV?d00001 diff --git a/ontime_clocks/textures/ontime_clocks_5x5_center.png b/ontime_clocks/textures/ontime_clocks_5x5_center.png new file mode 100644 index 0000000000000000000000000000000000000000..92eab529fc6ddf1cc64e17f22fb3ed73335a134c GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprB-l zYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt=kVE{-7sWZRk|G z+kA*Ytb|cmSa?rk(X%s>ZmV`BTxmF%!0E~o7r{)!> z7V9Tf>J}&Jo9G$n9}Y=k1)9zl;1l9{=FFLfhK47$#{EDM#*!evUJvt~zsLTQaLYP$h$>tDnm{r-UW|8%|Tr literal 0 HcmV?d00001 diff --git a/ontime_clocks/textures/ontime_clocks_5x5_needle_hours.png b/ontime_clocks/textures/ontime_clocks_5x5_needle_hours.png new file mode 100644 index 0000000000000000000000000000000000000000..4e081ce6cc127a3081f93b3cf979eced009e90a7 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0ze$V$P6U4Qq%o_6lZ})WHAE+-(e7DJf6QI1t=(4 z;u=vBoS#-wo>-L1P+nfHmzkGcoSayYs+V7sKKq@G6i^XcfKQ0)|NsAujg2irdL{xz z7)yfuf*Bm1-ADs+ggjjwLpZJ{CmdkBA%B7SqAUZ$&Qo&hpS+1s0m?FXy85}Sb4q9e E03L5IIsgCw literal 0 HcmV?d00001 diff --git a/ontime_clocks/textures/ontime_clocks_5x5_needle_minutes.png b/ontime_clocks/textures/ontime_clocks_5x5_needle_minutes.png new file mode 100644 index 0000000000000000000000000000000000000000..f086d8027a4c13a51a82bbdfb378b82ee3b8c291 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0ze$V$P6U4Qq%o_6lZ})WHAE+-(e7DJf6QI1t=(4 z;u=vBoS#-wo>-L1P+nfHmzkGcoSayYs+V7sKKq@G6i^XcfKQ0)|NsAujg2irdL{xz z7)yfuf*Bm1-ADs+1Uy|FLpZJ{C)gb@Xy|yyz#ted|KCQ-{u@w^!PC{xWt~$(69B3~ BEocA$ literal 0 HcmV?d00001 diff --git a/ontime_clocks/textures/ontime_clocks_large_clock_inventory.png b/ontime_clocks/textures/ontime_clocks_large_clock_inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9b7734fcb4bfc4dbe2a8a805a3590f5a15a6ae GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvI6-`N#5=* z4FB8v&+G^CI14-?iy0XB4ude`@%$AjKtc8rPhVH|mt2DEBARA5C-MS?vOQfKLp+YZ zo$SqZK!L}__~`F=%UF?%+l(Cxl_kQHKFK{%zH{x|))UJU%o&%3G5vcoU9Nq$rQ3rt zeH{r;t(an~o4Z-mejZvS1ACk4JvVsC~?j&s4U7%&nRJVc2;mKDJjZKDlN&(&(jUgNGwWq%*o77 zRmdnQDX`MlPcBMLEXgcOP0r8F&Ce^=%P&gT&&f!XK+6D$z1_mdrnQozI$jwj5OsmAL zVQ1Q|G@u4akPX54X(i=Amok)>m+NKbWfvzW7NmllHv6586i^X^r>mdKI;Vst09^T+ AG5`Po literal 0 HcmV?d00001