From 73545c89afe619a07f02dec8838d4640ab96e809 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Wed, 25 Jan 2017 04:22:28 -0500 Subject: [PATCH] Use texture colorization where possible Uses "color = " in the tile image def instead of compositing with ^[colorize or ^[brighten. Saves RAM. --- homedecor/bathroom_sanitation.lua | 26 ++++---- homedecor/climate-control.lua | 2 +- homedecor/clocks.lua | 4 +- homedecor/doors_and_gates.lua | 10 +-- homedecor/exterior.lua | 6 +- homedecor/furniture_medieval.lua | 18 ++++-- homedecor/init.lua | 19 +++--- homedecor/laundry.lua | 2 +- homedecor/lighting.lua | 60 ++++++++++-------- homedecor/misc-nodes.lua | 22 +++---- homedecor/office.lua | 2 +- homedecor/shutters.lua | 26 ++++---- .../textures/homedecor_generic_metal.png | Bin 0 -> 218 bytes .../homedecor_generic_metal_black.png | Bin 211 -> 0 bytes .../textures/homedecor_generic_plastic.png | Bin 0 -> 226 bytes .../homedecor_generic_plastic_black.png | Bin 217 -> 0 bytes .../homedecor_generic_wood_boards_overlay.png | Bin 98 -> 0 bytes .../homedecor_generic_wood_luxury.png | Bin 1314 -> 590 bytes .../textures/homedecor_generic_wood_plain.png | Bin 605 -> 293 bytes homedecor/textures/homedecor_marble.png | Bin 818 -> 233 bytes ...omedecor_table_standing_lamp_lightbulb.png | Bin 581 -> 594 bytes .../textures/homedecor_window_shutter.png | Bin 278 -> 278 bytes .../textures/homedecor_window_shutter_inv.png | Bin 4871 -> 4879 bytes homedecor/window_treatments.lua | 24 +++---- lrfurn/armchairs.lua | 2 +- lrfurn/init.lua | 32 +++++----- lrfurn/longsofas.lua | 2 +- lrfurn/sofas.lua | 2 +- lrfurn/textures/lrfurn_bg_white.png | Bin 121 -> 0 bytes lrfurn/textures/lrfurn_sofa_overlay.png | Bin 2855 -> 0 bytes lrfurn/textures/lrfurn_upholstery.png | Bin 0 -> 2309 bytes 31 files changed, 133 insertions(+), 126 deletions(-) create mode 100644 homedecor/textures/homedecor_generic_metal.png delete mode 100644 homedecor/textures/homedecor_generic_metal_black.png create mode 100644 homedecor/textures/homedecor_generic_plastic.png delete mode 100644 homedecor/textures/homedecor_generic_plastic_black.png delete mode 100644 homedecor/textures/homedecor_generic_wood_boards_overlay.png delete mode 100644 lrfurn/textures/lrfurn_bg_white.png delete mode 100644 lrfurn/textures/lrfurn_sofa_overlay.png create mode 100644 lrfurn/textures/lrfurn_upholstery.png diff --git a/homedecor/bathroom_sanitation.lua b/homedecor/bathroom_sanitation.lua index 82dd282..e36e998 100644 --- a/homedecor/bathroom_sanitation.lua +++ b/homedecor/bathroom_sanitation.lua @@ -17,10 +17,10 @@ homedecor.register("toilet", { description = S("Toilet"), mesh = "homedecor_toilet_closed.obj", tiles = { - "homedecor_marble.png^[colorize:#ffffff:175", - "homedecor_marble.png^[colorize:#ffffff:175", - "homedecor_marble.png^[colorize:#ffffff:175", - "homedecor_generic_metal_black.png^[brighten" + "homedecor_marble.png", + "homedecor_marble.png", + "homedecor_marble.png", + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey } }, selection_box = toilet_sbox, node_box = toilet_cbox, @@ -35,11 +35,11 @@ homedecor.register("toilet", { homedecor.register("toilet_open", { mesh = "homedecor_toilet_open.obj", tiles = { - "homedecor_marble.png^[colorize:#ffffff:175", - "homedecor_marble.png^[colorize:#ffffff:175", - "homedecor_marble.png^[colorize:#ffffff:175", + "homedecor_marble.png", + "homedecor_marble.png", + "homedecor_marble.png", "default_water.png", - "homedecor_generic_metal_black.png^[brighten" + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey } }, selection_box = toilet_sbox, collision_box = toilet_cbox, @@ -89,7 +89,7 @@ homedecor.register("sink", { description = S("Bathroom Sink"), mesh = "homedecor_bathroom_sink.obj", tiles = { - "homedecor_marble.png^[colorize:#ffffff:175", + "homedecor_marble.png", "homedecor_marble.png", "default_water.png" }, @@ -137,9 +137,9 @@ homedecor.register("taps", { description = S("Bathroom taps/faucet"), mesh = "homedecor_bathroom_faucet.obj", tiles = { - "homedecor_generic_metal_black.png^[brighten", + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, "homedecor_generic_metal_bright.png", - "homedecor_generic_metal_black.png^[colorize:#ffffff:200", + "homedecor_generic_metal.png", "homedecor_generic_metal_bright.png" }, inventory_image = "3dforniture_taps_inv.png", @@ -162,7 +162,7 @@ homedecor.register("taps_brass", { tiles = { "homedecor_generic_metal_brass.png", "homedecor_generic_metal_brass.png", - "homedecor_generic_metal_black.png^[colorize:#ffffff:200", + "homedecor_generic_metal.png", "homedecor_generic_metal_brass.png" }, inventory_image = "3dforniture_taps_brass_inv.png", @@ -218,7 +218,7 @@ homedecor.register("shower_head", { drawtype = "mesh", mesh = "homedecor_shower_head.obj", tiles = { - "homedecor_generic_metal_black.png^[brighten", + "homedecor_generic_metal.png", "homedecor_shower_head.png" }, inventory_image = "homedecor_shower_head_inv.png", diff --git a/homedecor/climate-control.lua b/homedecor/climate-control.lua index b334d17..392655b 100644 --- a/homedecor/climate-control.lua +++ b/homedecor/climate-control.lua @@ -132,7 +132,7 @@ local r_cbox = homedecor.nodebox.slab_z(-0.25) homedecor.register("radiator", { mesh = "homedecor_radiator.obj", tiles = { - "homedecor_generic_metal_black.png^[colorize:#ffffff:200", + "homedecor_generic_metal.png", "homedecor_radiator_controls.png" }, inventory_image = "homedecor_radiator_inv.png", diff --git a/homedecor/clocks.lua b/homedecor/clocks.lua index 0a00934..b2a594a 100644 --- a/homedecor/clocks.lua +++ b/homedecor/clocks.lua @@ -4,7 +4,7 @@ local clock_sbox = { } local clock_materials = { - { "plastic", "homedecor_generic_plastic_black.png^[colorize:#ffffff:220" }, + { "plastic", "homedecor_generic_plastic.png" }, { "wood", "default_wood.png" } } @@ -82,7 +82,7 @@ homedecor.register("grandfather_clock", { tiles = { "default_glass.png", "homedecor_grandfather_clock_face.png", - "homedecor_generic_wood_luxury.png", + homedecor.lux_wood, "homedecor_grandfather_clock_face_edge.png", "homedecor_generic_metal_brass.png" }, diff --git a/homedecor/doors_and_gates.lua b/homedecor/doors_and_gates.lua index dc9a758..e1fc996 100644 --- a/homedecor/doors_and_gates.lua +++ b/homedecor/doors_and_gates.lua @@ -527,7 +527,7 @@ minetest.register_node("homedecor:japanese_wall_top", { drawtype = "mesh", mesh = "homedecor_wall_japanese_top.obj", tiles = { - "homedecor_generic_wood_luxury.png", + homedecor.lux_wood, "homedecor_japanese_paper.png" }, paramtype = "light", @@ -543,7 +543,7 @@ minetest.register_node("homedecor:japanese_wall_middle", { drawtype = "mesh", mesh = "homedecor_wall_japanese_middle.obj", tiles = { - "homedecor_generic_wood_luxury.png", + homedecor.lux_wood, "homedecor_japanese_paper.png" }, paramtype = "light", @@ -559,7 +559,7 @@ minetest.register_node("homedecor:japanese_wall_bottom", { drawtype = "mesh", mesh = "homedecor_wall_japanese_bottom.obj", tiles = { - "homedecor_generic_wood_luxury.png", + homedecor.lux_wood, "homedecor_japanese_paper.png" }, paramtype = "light", @@ -595,7 +595,7 @@ homedecor.register("door_japanese_closed", { description = S("Japanese-style door"), inventory_image = "homedecor_door_japanese_inv.png", tiles = { - "homedecor_generic_wood_luxury.png", + homedecor.lux_wood, "homedecor_japanese_paper.png" }, mesh = "homedecor_door_japanese_closed.obj", @@ -618,7 +618,7 @@ homedecor.register("door_japanese_closed", { homedecor.register("door_japanese_open", { tiles = { - "homedecor_generic_wood_luxury.png", + homedecor.lux_wood, "homedecor_japanese_paper.png" }, mesh = "homedecor_door_japanese_open.obj", diff --git a/homedecor/exterior.lua b/homedecor/exterior.lua index 8e2b028..6937942 100644 --- a/homedecor/exterior.lua +++ b/homedecor/exterior.lua @@ -12,8 +12,8 @@ homedecor.register("barbecue", { description = S("Barbecue"), mesh = "homedecor_barbecue.obj", tiles = { - "homedecor_generic_metal_black.png", - { name="homedecor_embers.png", + { name = "homedecor_generic_metal.png" , color = homedecor.color_black }, + { name = "homedecor_embers.png", animation={ type="vertical_frames", aspect_w=16, @@ -319,7 +319,7 @@ homedecor.register("well", { mesh = "homedecor_well.obj", tiles = { "homedecor_rope_texture.png", - "homedecor_generic_metal_black.png^[brighten", + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, "default_water.png", "default_cobble.png", "default_wood.png", diff --git a/homedecor/furniture_medieval.lua b/homedecor/furniture_medieval.lua index 43c38fc..9fb9a9e 100644 --- a/homedecor/furniture_medieval.lua +++ b/homedecor/furniture_medieval.lua @@ -3,7 +3,7 @@ local S = homedecor.gettext homedecor.register("bars", { description = S("Bars"), - tiles = { "homedecor_generic_metal_black.png^[transformR270" }, + tiles = { { name = "homedecor_generic_metal.png^[transformR270", color = homedecor.color_black } }, node_box = { type = "fixed", fixed = { @@ -25,7 +25,7 @@ homedecor.register("bars", { --L Binding Bars homedecor.register("L_binding_bars", { description = S("Binding Bars"), - tiles = { "homedecor_generic_metal_black.png^[transformR270" }, + tiles = { { name = "homedecor_generic_metal.png^[transformR270", color = homedecor.color_black } }, node_box = { type = "fixed", fixed = { @@ -50,7 +50,7 @@ local chain_cbox = { homedecor.register("chains", { description = S("Chains"), mesh = "forniture_chains.obj", - tiles = { "homedecor_generic_metal_black.png" }, + tiles = { { name = "homedecor_generic_metal.png", color = homedecor.color_black } }, inventory_image="forniture_chains_inv.png", selection_box = chain_cbox, walkable = false, @@ -71,8 +71,8 @@ homedecor.register("torch_wall", { length=1.0, }, }, - "homedecor_generic_metal_black.png", - "homedecor_generic_metal_black.png^[brighten", + { name = "homedecor_generic_metal.png", color = homedecor.color_black }, + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, "forniture_coal.png", }, inventory_image="forniture_torch_inv.png", @@ -93,8 +93,12 @@ local wl_cbox = { homedecor.register("wall_lamp", { description = S("Wall Lamp"), mesh = "homedecor_wall_lamp.obj", - tiles = {"homedecor_generic_metal_black.png^[brighten", "homedecor_generic_wood_luxury.png^[colorize:#000000:30", - "homedecor_light.png", "homedecor_generic_metal_wrought_iron.png"}, + tiles = { + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, + homedecor.lux_wood, + "homedecor_light.png", + "homedecor_generic_metal_wrought_iron.png" + }, use_texture_alpha = true, inventory_image = "homedecor_wall_lamp_inv.png", groups = {snappy=3}, diff --git a/homedecor/init.lua b/homedecor/init.lua index 7f30769..090e2b6 100644 --- a/homedecor/init.lua +++ b/homedecor/init.lua @@ -67,18 +67,15 @@ end screwdriver = screwdriver or {} -homedecor.plain_wood = "homedecor_generic_wood_plain.png^".. - "(homedecor_generic_wood_boards_overlay.png^[colorize:#a7682020:100)" - -homedecor.mahogany_wood = "(homedecor_generic_wood_plain.png^[colorize:#401010:125)^".. - "(homedecor_generic_wood_boards_overlay.png^[colorize:#66493880:200)" - -homedecor.white_wood = "(homedecor_generic_wood_plain.png^[colorize:#e0f0ff:200)^".. - "(homedecor_generic_wood_boards_overlay.png^[colorize:#ffffff:200)" - -homedecor.dark_wood = "(homedecor_generic_wood_plain.png^[colorize:#140900:200)^".. - "(homedecor_generic_wood_boards_overlay.png^[colorize:#21110180:180)" +homedecor.plain_wood = { name = "homedecor_generic_wood_plain.png", color = 0xffa76820 } +homedecor.mahogany_wood = { name = "homedecor_generic_wood_plain.png", color = 0xff7d2506 } +homedecor.white_wood = "homedecor_generic_wood_plain.png" +homedecor.dark_wood = { name = "homedecor_generic_wood_plain.png", color = 0xff39240f } +homedecor.lux_wood = { name = "homedecor_generic_wood_luxury.png", color = 0xff643f23 } +homedecor.color_black = 0xff303030 +homedecor.color_dark_grey = 0xff606060 +homedecor.color_med_grey = 0xffa0a0a0 -- load different handler subsystems dofile(modpath.."/handlers/init.lua") diff --git a/homedecor/laundry.lua b/homedecor/laundry.lua index e2ef721..5ee9ec6 100644 --- a/homedecor/laundry.lua +++ b/homedecor/laundry.lua @@ -52,7 +52,7 @@ homedecor.register("ironing_board", { mesh = "homedecor_ironing_board.obj", tiles = { "wool_grey.png", - "homedecor_generic_metal_black.png^[brighten" + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, }, expand = {right = "placeholder"}, groups = { snappy = 3 }, diff --git a/homedecor/lighting.lua b/homedecor/lighting.lua index f7031df..89aaecc 100644 --- a/homedecor/lighting.lua +++ b/homedecor/lighting.lua @@ -151,7 +151,7 @@ homedecor.register("plasma_ball", { description = S("Plasma Ball"), mesh = "homedecor_plasma_ball.obj", tiles = { - "homedecor_generic_plastic_black.png", + "homedecor_generic_plastic.png", { name = "homedecor_plasma_ball_streamers.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}, @@ -281,10 +281,10 @@ homedecor.register("oil_lamp", { mesh = "homedecor_oil_lamp.obj", tiles = { "homedecor_generic_metal_brass.png", - "homedecor_generic_metal_black.png", - "homedecor_generic_metal_black.png^[colorize:#ff0000:160", + { name = "homedecor_generic_metal.png", color = homedecor.color_black }, + { name = "homedecor_generic_metal.png", color = 0xffa00000 }, "homedecor_oil_lamp_wick.png", - "homedecor_generic_metal_black.png^[colorize:#ff0000:150", + { name = "homedecor_generic_metal.png", color = 0xffa00000 }, "homedecor_oil_lamp_glass.png", }, use_texture_alpha = true, @@ -414,22 +414,28 @@ local slamp_cbox = { fixed = { -0.25, -0.5, -0.25, 0.25, 1.5, 0.25 } } -local function reg_lamp(suffix, nxt, tilesuffix, light, color) +local brightness_tab = { + 0xffd0d0d0, + 0xffd8d8d8, + 0xffe0e0e0, + 0xffe8e8e8, + 0xffffffff, +} + +local function reg_lamp(suffix, nxt, tilesuffix, light, color, brightness) local lampcolor = "_"..color[1] local colordesc = S(color[1]) local woolcolor = color[1] local invcolor = color[2] - local wool_brighten = (light or 0) * 7 - local bulb_brighten = (light or 0) * 14 homedecor.register("table_lamp"..lampcolor.."_"..suffix, { description = S("Table Lamp (@1)", colordesc), mesh = "homedecor_table_lamp.obj", tiles = { - "wool_"..woolcolor..".png^[colorize:#ffffff:"..wool_brighten, - "homedecor_table_standing_lamp_lightbulb.png^[colorize:#ffffff:"..bulb_brighten, + { name = "wool_"..woolcolor..".png", color = brightness_tab[brightness] }, + { name = "homedecor_table_standing_lamp_lightbulb.png", color = brightness_tab[brightness] }, "homedecor_generic_wood_red.png", - "homedecor_generic_metal_black.png^[brighten", + { name = "homedecor_generic_metal.png", color = homedecor.color_black }, }, inventory_image = "homedecor_table_lamp_foot_inv.png^(homedecor_table_lamp_top_inv.png^[colorize:"..invcolor..")", walkable = false, @@ -452,10 +458,10 @@ local function reg_lamp(suffix, nxt, tilesuffix, light, color) description = S("Standing Lamp (@1)", colordesc), mesh = "homedecor_standing_lamp.obj", tiles = { - "wool_"..woolcolor..".png^[colorize:#ffffff:"..wool_brighten, - "homedecor_table_standing_lamp_lightbulb.png^[colorize:#ffffff:"..bulb_brighten, + { name = "wool_"..woolcolor..".png", color = brightness_tab[brightness] }, + { name = "homedecor_table_standing_lamp_lightbulb.png", color = brightness_tab[brightness] }, "homedecor_generic_wood_red.png", - "homedecor_generic_metal_black.png^[brighten", + { name ="homedecor_generic_metal.png", color = homedecor.color_black }, }, inventory_image = "homedecor_standing_lamp_foot_inv.png^(homedecor_standing_lamp_top_inv.png^[colorize:"..invcolor..")", walkable = false, @@ -482,12 +488,12 @@ local function reg_lamp(suffix, nxt, tilesuffix, light, color) end end -for _, color in ipairs(lamp_colors) do - reg_lamp("off", "low", "", nil, color ) - reg_lamp("low", "med", "l", 3, color ) - reg_lamp("med", "hi", "m", 7, color ) - reg_lamp("hi", "max", "h", 11, color ) - reg_lamp("max", "off", "x", 14, color ) +for n, color in ipairs(lamp_colors) do + reg_lamp("off", "low", "", nil, color, 1 ) + reg_lamp("low", "med", "l", 3, color, 2 ) + reg_lamp("med", "hi", "m", 7, color, 3 ) + reg_lamp("hi", "max", "h", 11, color, 4 ) + reg_lamp("max", "off", "x", 14, color, 5 ) end local dlamp_cbox = { @@ -502,10 +508,10 @@ for _, color in ipairs(dlamp_colors) do description = S("Desk Lamp (@1)", S(color)), mesh = "homedecor_desk_lamp.obj", tiles = { - "homedecor_table_standing_lamp_lightbulb.png^[colorize:#ffffff:200", - "homedecor_generic_metal_black.png^[colorize:"..color..":150", - "homedecor_generic_metal_black.png", - "homedecor_generic_metal_black.png^[colorize:"..color..":150" + { name = "homedecor_table_standing_lamp_lightbulb.png", color = brightness_tab[5] }, + { name = "homedecor_generic_metal.png", color = color }, + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, + { name = "homedecor_generic_metal.png", color = color } }, inventory_image = "homedecor_desk_lamp_stem_inv.png^(homedecor_desk_lamp_metal_inv.png^[colorize:"..color..":140)", selection_box = dlamp_cbox, @@ -520,8 +526,8 @@ homedecor.register("ceiling_lamp", { tiles = { "homedecor_generic_metal_brass.png", "homedecor_ceiling_lamp_glass.png", - "homedecor_table_standing_lamp_lightbulb.png^[colorize:#ffffff:200", - "homedecor_generic_plastic_black.png^[colorize:#442d04:200", + "homedecor_table_standing_lamp_lightbulb.png", + { name = "homedecor_generic_plastic.png", color = 0xff442d04 }, }, inventory_image = "homedecor_ceiling_lamp_inv.png", light_source = default.LIGHT_MAX, @@ -538,8 +544,8 @@ homedecor.register("ceiling_lamp_off", { tiles = { "homedecor_generic_metal_brass.png", "homedecor_ceiling_lamp_glass.png", - "homedecor_table_standing_lamp_lightbulb.png", - "homedecor_generic_plastic_black.png^[colorize:#442d04:200", + { "homedecor_table_standing_lamp_lightbulb.png", color = 0xffd0d0d0 }, + { name = "homedecor_generic_plastic.png", color = 0xff442d04 }, }, groups = {snappy=3, not_in_creative_inventory=1}, walkable = false, diff --git a/homedecor/misc-nodes.lua b/homedecor/misc-nodes.lua index 66b7ac3..1c8d1c0 100644 --- a/homedecor/misc-nodes.lua +++ b/homedecor/misc-nodes.lua @@ -74,7 +74,7 @@ homedecor.register("flower_pot_"..p, { mesh = "homedecor_flowerpot.obj", tiles = { "homedecor_flower_pot_"..p..".png", - "default_dirt.png^[colorize:#000000:175" + { name = "default_dirt.png", color = 0xff505050 }, }, groups = { snappy = 3, potting_soil=1 }, sounds = default.node_sound_stone_defaults(), @@ -100,7 +100,7 @@ for _, f in ipairs(flowers_list) do mesh = "homedecor_potted_plant.obj", tiles = { "homedecor_flower_pot_terracotta.png", - "default_dirt.png^[colorize:#000000:175", + { name = "default_dirt.png", color = 0xff303030 }, "flowers_"..flower..".png" }, walkable = false, @@ -167,7 +167,7 @@ homedecor.register("fishtank", { description = S("Fishtank"), mesh = "homedecor_fishtank.obj", tiles = { - "homedecor_generic_plastic_black.png", + { name = "homedecor_generic_plastic.png", color = homedecor.color_black }, "homedecor_fishtank_filter.png", "homedecor_fishtank_fishes.png", "homedecor_fishtank_gravel.png", @@ -189,7 +189,7 @@ homedecor.register("fishtank_lighted", { description = S("Fishtank (lighted)"), mesh = "homedecor_fishtank.obj", tiles = { - "homedecor_generic_plastic_black.png", + { name = "homedecor_generic_plastic.png", color = homedecor.color_black }, "homedecor_fishtank_filter.png", "homedecor_fishtank_fishes_lighted.png", "homedecor_fishtank_gravel_lighted.png", @@ -268,7 +268,7 @@ homedecor.register("pool_table", { "homedecor_pool_table_baize.png", "homedecor_pool_table_pockets.png", "homedecor_pool_table_balls.png", - "homedecor_generic_wood_luxury.png^[colorize:#000000:90" + homedecor.lux_wood, }, description = S("Pool Table"), inventory_image = "homedecor_pool_table_inv.png", @@ -290,7 +290,7 @@ local piano_cbox = { homedecor.register("piano", { mesh = "homedecor_piano.obj", tiles = { - "homedecor_generic_wood_luxury.png^[colorize:#000000:175", + { name = "homedecor_generic_wood_luxury.png", color = homedecor.color_black }, "homedecor_piano_keys.png", "homedecor_generic_metal_brass.png", }, @@ -336,7 +336,7 @@ homedecor.register("sportbench", { tiles = { "homedecor_generic_metal_wrought_iron.png", "homedecor_generic_metal_bright.png", - "homedecor_generic_metal_black.png", + { name = "homedecor_generic_metal.png", color = homedecor.color_black }, "wool_black.png" }, inventory_image = "homedecor_sport_bench_inv.png", @@ -368,10 +368,10 @@ homedecor.register("tool_cabinet", { description = S("Metal tool cabinet and work table"), mesh = "homedecor_tool_cabinet.obj", tiles = { - "homedecor_generic_metal_black.png^[colorize:#ff0000:150", + { name = "homedecor_generic_metal.png", color = 0xffd00000 }, "homedecor_tool_cabinet_drawers.png", - "homedecor_generic_metal_black.png^[colorize:#006000:150", - "homedecor_generic_metal_black.png^[brighten", + { name = "homedecor_generic_metal.png", color = 0xff006000 }, + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, "homedecor_generic_metal_bright.png", "homedecor_tool_cabinet_misc.png", }, @@ -400,7 +400,7 @@ for _, i in ipairs(n) do mesh = "homedecor_picture_frame.obj", tiles = { "homedecor_picture_frame_image"..i..".png", - "homedecor_generic_wood_luxury.png^[colorize:#000000:50", + homedecor.lux_wood, "homedecor_picture_frame_back.png", }, inventory_image = "homedecor_picture_frame"..i.."_inv.png", diff --git a/homedecor/office.lua b/homedecor/office.lua index aa8d553..15b7ad1 100644 --- a/homedecor/office.lua +++ b/homedecor/office.lua @@ -52,7 +52,7 @@ homedecor.register("desk_globe", { mesh = "homedecor_desk_globe.obj", tiles = { "homedecor_generic_wood_red.png", - "homedecor_generic_metal_black.png^[brighten", + { name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }, "homedecor_earth.png" }, inventory_image = "homedecor_desk_globe_inv.png", diff --git a/homedecor/shutters.lua b/homedecor/shutters.lua index a16a02b..e0e26de 100644 --- a/homedecor/shutters.lua +++ b/homedecor/shutters.lua @@ -3,17 +3,17 @@ local S = homedecor.gettext local shutters = { - {"oak", S("unpainted oak"), "#bf8a51:200" }, - {"mahogany", S("mahogany"), "#822606:200" }, - {"red", S("red"), "#d00000:150" }, - {"yellow", S("yellow"), "#ffff00:150" }, - {"forest_green", S("forest green"), "#006000:150" }, - {"light_blue", S("light blue"), "#1963c7:150" }, - {"violet", S("violet"), "#6000ff:150" }, - {"black", S("black"), "#000000:200" }, - {"dark_grey", S("dark grey"), "#202020:200" }, - {"grey", S("grey"), "#c0c0c0:150" }, - {"white", S("white"), "#ffffff:150" }, + {"oak", S("unpainted oak"), "bf8a51" }, + {"mahogany", S("mahogany"), "822606" }, + {"red", S("red"), "d00000" }, + {"yellow", S("yellow"), "ffff00" }, + {"forest_green", S("forest green"), "006000" }, + {"light_blue", S("light blue"), "2878d8" }, + {"violet", S("violet"), "7000e0" }, + {"black", S("black"), "181818" }, + {"dark_grey", S("dark grey"), "404040" }, + {"grey", S("grey"), "b0b0b0" }, + {"white", S("white"), "ffffff" }, } local shutter_cbox = { @@ -26,8 +26,8 @@ local shutter_cbox = { for _, s in ipairs(shutters) do local name, desc, hue = unpack(s) - local tile = "homedecor_window_shutter.png^[colorize:"..hue - local inv = "homedecor_window_shutter_inv.png^[colorize:"..hue + local tile = { name = "homedecor_window_shutter.png", color = tonumber("0xff"..hue) } + local inv = "homedecor_window_shutter_inv.png^[colorize:#"..hue..":150" homedecor.register("shutter_"..name, { mesh = "homedecor_window_shutter.obj", diff --git a/homedecor/textures/homedecor_generic_metal.png b/homedecor/textures/homedecor_generic_metal.png new file mode 100644 index 0000000000000000000000000000000000000000..3a7c063e640cc8811fd536bd0afcb7a923f9b28b GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UA7J9lkhDcmyJ?L0;#DIh0AY-HM z^?(28TdHjJP?(&T`EA$hcCNbnrB1t3e;8TEDd^9-bpCsCU2^}U;JvcRY3Zi5POe%% zqfZ>?s0?giTAypkc-HLW?%6#*;}(dR^vz_QecERi_o`|K!C7-}oO0r;Uhqt0OGFss zf|+G&_HEPI(Xw^}o6XhiV@=*Gt9AchlQg`!;B~@bp7dkAai?M*i literal 0 HcmV?d00001 diff --git a/homedecor/textures/homedecor_generic_metal_black.png b/homedecor/textures/homedecor_generic_metal_black.png deleted file mode 100644 index c5437468d9ebecc1e654c3d0625afcedaeb7b8cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAW_h|ehDcmyJ$SH@*^r0H!J+8V zm9O_N+LraYr2UwFeDD7o?C0<8{WR@XXm#7g1{Nm#RPIk8|R46`Wfqt@V&+vs1_6%|97uxmP}x&zfTea;>MU KpUXO@geCwo_*PQ@ diff --git a/homedecor/textures/homedecor_generic_plastic.png b/homedecor/textures/homedecor_generic_plastic.png new file mode 100644 index 0000000000000000000000000000000000000000..44cdc6ae4ea8e7f0a8b1a092cd7913e0e6a25283 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAR(iTPhDcmyJs6nfY{+wWWpf6TX`dflcok~vm#{c{*7XI=2Y8bT ZuiIN?6y!KDb-e^R-qY33Wt~$(69Bn)Sb_im literal 0 HcmV?d00001 diff --git a/homedecor/textures/homedecor_generic_plastic_black.png b/homedecor/textures/homedecor_generic_plastic_black.png deleted file mode 100644 index 3aa3493d25c9e2d233224d08ada55b14979c6a22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU<>27p=H}+-=NA$Z5)%`X zl9G~@l~q(!lw<0f3{+F&>Eal|A^LA(U2?0CUu>geIru#Z$$Fv zsEdZCd2Suq@0P_o*{)q!?Z3laM{m94WnH;R?<8i-&wX@c(ML(0m;CyRr3AEosH6kk O!QkoY=d#Wzp$PzrwM%#a diff --git a/homedecor/textures/homedecor_generic_wood_boards_overlay.png b/homedecor/textures/homedecor_generic_wood_boards_overlay.png deleted file mode 100644 index 20de5ac28c33f1d7067fee149946a4cb370670cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`nw~C>Ar_~T6BOic7zS{xNN7c;}YmqM8vZf#}+YGUwo^>bP0l+XkKUY{DI diff --git a/homedecor/textures/homedecor_generic_wood_luxury.png b/homedecor/textures/homedecor_generic_wood_luxury.png index a03d17c97d6a2f1283b9cc0d7f91874a7665deee..3387c3bb77c0452b23a1468d78a9d51aca1738f5 100644 GIT binary patch delta 576 zcmV-G0>AyD3eE(O8Gir(0034IB`5#@0u@O_K~y-)HIhqiBu5a%7@y2)!I=BsaW*!f zvD8%=FTxAKdu|BQzF-z(f8MT+*LrF#Z=m1nuT|umi36%wEa(l5vxxQm@L)Go(;C9+ z=5_TC0d$dRUkhSXLS5Y#VNAQ>%~)EV;k2)YFy?-Tvf9?Qn163^hy9-E+%#)b9XeE~ zm6?uIW}ofws6FgTOE}LN)e!g&Z+mWUB$4616BtIER*x;nzt;l>HqH*FPB&@hv^HJ2 zd^1(>?VD{(e?3}j8y`WoKfJ4%qq*}o9C=ZLM#>sS3oj(EDidJ z@Ro3F(k9qzyeVBCE%9}2*#r81k_W^gCRug{a&<^ds_X@-Q?XO4c!!a=;Fp4Rg z_PjojJ)Ck`-V7XrG*-JzwIh-Q{F6vAXYdaRyZP7IU-jzA6GUVS2rJ5I3HIyAy_sbST`P6I3QR#AXqsfSUMtEHXm6y zA6YpcSvezFIwM&-BU(5hS~(zEIv`p)B3n2gTRI_IJ0V*;BY#^wBV0KkTsb0KJ0e^> zB3(HjT{$6LIw4&;BV9ZpT|6UQJtJN^AYM8mUOOUQJRn{@B40WoUppaRJR@H{Az(Wo zU^^mUJR)E{AYeWsVLTyWJtJX0Az?owVmu&XJR)K}B4R%xV?7~bJtJd2A!9xxV?QBd zKqF*4B4j-vWPd&&WIiHfKO|&8B4s}zWj`ZjKqF;ABW6D$WCA!$J&X+a}tLL+KGBx*t=YC|MzKp|^DBWpq-YeFMyLnCZL zBy2+@Y(yk&LL+TLC2d0`ZA2q(LL_cOByL3{Z$l$*M1Li3MI&!UC2&S0aYQ3=MI~}Y zByvY2b4Dd|NF{VeBy>n5bx9?4Oec3rC3#CFc}ypHO(lCzCuY!9f&c&mIY~r8R2Ufr z!CP+IMi>UrZ-)PnLsBF~QM43Wj*}n-3MA-Tm(U&bwU6CL*VR=NXpk02>ois*UqV^D z4llzYdw&l51#C*t$v>sYTQe#B-DS3ZU_jDX}m;q(xzQP7j*FXzNG29m) z&nQRstJAmIluBEUmmT%nYmKS)2(VC{kgRAX@}a`K7Mtymnpj3Bz^m((#@K^uXy`ngMW6q4AJVKI+%)2rzVcJA&Rng*w3va z%sx|FSM0n+z{V`UYnoj5ffv452~F#a4chUceWzy;CwsSfJ2mWa$fmY62K0OK2yo1; zZ(D0=>GG*lh{U2xv)+e#wBE@e@>*4?yF(YSp&!~0e||jZ0W&lGCr#{Cl#J_%Pi@tP z+kc2aR(>bW?)sse95isORGp0p-8hswjXW#RvvjVnxTQwI=y5PVbr;T3S^?UQ0Yq|K zEPAznL|&Be1}n7$@sYER``)~O8Q92_R`ublhOn15TdxB-3m_IOh>T^%xmQk8s-ZzK z7ow)dyVxp}s5i?fU~C5TAdGH~=ewq!s(%%|JLthUY2Dp@aDSu`?Bu~`8Yn0XuC{`{ zmmnt|=rT>em+d`r7jb#tfk;_Hm&8#x@urrC#w^-0U8wtog z0Q21WWP(X;(R9x^x97sItW@~>%3MURQ_g#qi$G1?xsn9(q)oYIKiyZ+l=X4E@qbFS z?;Xplp8fZB#kWhCDyZ0R&+6Y(Q=G`PZ#I`ecktrw@T7uRu4TFe(Q36Dt3Ds@$7#%g zWanoH1|K|~JsKr-_eU-qvFKhFg+lo7`5PJ^7})f5<9jsHvG}rA{tvFjTeO+5@e+el z4QuLS_IBeKN*2*~q7c#E41nTr;D6dLl~?h)zOZM`X#o6na?;f2E2IX^DebXcCg#lD zr4NT1M3H03zbfGK%v!|5x5Vpm3S!ykxdl3tf`^WwoR QdH?_b07*qoM6N<$g1i?g-T(jq diff --git a/homedecor/textures/homedecor_generic_wood_plain.png b/homedecor/textures/homedecor_generic_wood_plain.png index 4df1e39c34173edf8032e59a53a96df4e36b9f22..04d3a91316b32d1b8e253aec4c86bd56e6466e0b 100644 GIT binary patch delta 277 zcmV+w0qXwU1f>Fy8Gir(0026epuGS90PIObK~xyi1;H^+!!Q&8P=EWoNu3Zkm5^F4 zz{bK6xGF1LfQ11j2Ce`D6-dykbsQ)C_W!&GCqbzFqp|@lJl4j*ZrNBWA{bw9YfK93GgS*U=YZxSC51Tn{m*J$GadqoJ^?)JYmZ0e zTp5xFB6z==scfFFyDpbVrAEK2{QMEO^jlP$<*b8~o$0&pFEH`5xm>{g;Cc$uG=FRf b*ZLm}1%XR8^bRD@00000NkvXXu0mjf8Mt;6 delta 591 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 HEFYGB)*Q&8LN_ikb;UPVf;9w7a5aOf# zfS`{!w3*mmQM}}`{6W#u#oCKTU1Qonk#6B4ks*Z2PY9+sY4M@GaE^V8$3K z&yL?$aoLdjtOfiUA*ApJ^cBt~t|yE?I1c*Q6s4Iw7J{A3=4EWZv%e=eo|JZ7`MUgF zZnC^YN$EST>f@>SQ}I*vH3$5$<+z4JGo!MBG`F9zQ;dch&fU(}P{G;Sg9$gM`_ z8x{4x=9>h_bLl4$cn$*}h!UrZn0LU~BW4(3JTh7e*5#JFQ(5Af%GaK&c_zNRWVUxL z2@@NcNB6B#_gK$~2Uy}5X&(d7I4a`}k-kHt(Y?B0&f}boK=Xr73c&(S1E2|)HV(8Q zXZa&Y5+g0zaF4R?jZO+JQ9mPxMUchLe>c^4p2gR_);{_Ij>SCrjN0ZkO5xr_+u+{| zGem)bk;U!s$O5+?a{G^YAn;cs(xTYmZ$=YgA|)tc!F2gZ@r=TY)Gx@&00t+i7Z04( zc^T)bcO8^KGM1k^J&}?z!&%H4419+^TwMBb+9uNbv3cT0CTTANiV|QK-ou$MnMP71 zD8xL23I!xi92?_VlU5}(-X8v8|(A( zClB5f=RHb4D+_$U$6!5e6rcA_K)#~*z~9b3a>N*dW!NIA<+0}P3hE0k7C)s21D{&) zc;}sMkE!`Qs~n{PpVL@Xy}7KxdsrH1h3CaSa7a+}u`c{DT!@9HngB_*at`s|^u5kB zb4ZF#AW9)&EF(+W*Q3IV3j%>#oqdcUh#=vgnwj7GbmpX3d0?~-D2Xph#c3sVVH}Ym zou2q;)s~$s7#vW33W19;fB=&yVk~#lN5^~Z_YCdPlXdI^IuH~hNf=#*c=iV&6A1eLNc7y_O0d{44^e(T78hIB}xP zqn>?)vDR<9Bat-5xS?)(DI`D%g@zXRTKQG-tf&axoZaVF67&LoK+F=i<=$yK-d1Wv zzhwud0U4vU_x&rUv5uKM@L48=hX9u?#HeE|#Xy7?$ugJUQu>rU$&6@{R1!p!B7^6n zWI&--b^pRU+Bs7d6N_L1Jf@aLrbd4dj#}(A-q_tZ`U-wH*ouCt0&pe|JYA2TJp@i)i-;Ea-018VjBMnle48${1HuL-iY57YIPAq8 zzr$#0UvT#ik?j3j1pdHj7RSupv7{uVz;fDp)vP)w4i+2}i9EPdziApp|%(*_HtF_@ega%j5f z-kkka+|O4~bVit4Wz<32ojw}hn^xfW8%`(~qZN?_Q#fJ!^NebIiT6xUo@%YT*e>d;pO;2>{ zl+laV0@(p?e0o3dQ7i_Y0CHpp>A>A|P>Dx^o=Y;6{n4D0E!fN+e+kX+OPmA=g;bRcIGoxryV@3DJq{GB&9l^rH!p@J%A_+CL4k#1D}m6 zfZvhjtW~UfYB66G^IY>?zsVmdBqla_&l`L}!Dlxl|5q#nE@l~pSNEKwW<#MWFf60l zSiiTaD$JYgfPa1n4ln1hjEgzzu6K{-`|=%Ax+1MosPq?k^AonAe-W0k41n+Q+?{`U z|2hBXxhpP$TK->g12+KhmlK}-!(Gq7cR%I4{{g?}1|>Q=3a|hG002ovPDHLkV1g-4 BP%8ic literal 4871 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 FV1kReXvhEn diff --git a/lrfurn/textures/lrfurn_upholstery.png b/lrfurn/textures/lrfurn_upholstery.png new file mode 100644 index 0000000000000000000000000000000000000000..6db36a83f6dda8a6334fee2a3651d62fc472cf8a GIT binary patch literal 2309 zcmV+g3HtVlP)#X zTaI1XaRkta$lT}LDi*6qHk_;pZ{r3xHzzEbCic?G+qitV-`XB+7uUzv?|y9R*s6y0 zR3D$;uB^Zk`}*~}leBfq-EteP+f!`$nwT@{9?9)-paX&B4&VFn=))V83vtmtd)TX z1j=c-wtp7tZC^QK`?X`8F)pAr+o+YFli@-*diI7yesDTbNsHD6E$VG0J4bxRk zde6(k{ik;uFU?NOOP~9Ru+}mW&$BP{T!>yR&)LV;;dz>Z9Ked4f8V}-`eilUvei8feg3Z> z{^iBv!<$i{)f<!MI{SF-~ROH^Y4%S4n%>y z!pQXgV*sMysN!Ez%R9OLFiCSn#0nj~= z)s!S-^qQzx6~PhYMVBtQfu;kIWjH;-RIMh{(h3-`Y`cU3tQ4HX>A?)mW)oJ$nPLSr z0>=unII&C?JD_lIgkb6Lq*oTB+)aa0fKGux)1^SU)L{}ADnVgcC0gzQ(Ew19rOfs+ z1jb@_i!j0z%o0Jdyddm?*|D5vn5fhQ*lt5Lr`Lh@uuEPuWWpi%@-1%aUKNWyvWa#x zy!J+@n+{=s!$!pvk-#L?UBR95NM@a59?$1S*v&OpJ)Y(I^8J3*ZgF*AeD18jCQLciYbW1=IkDI_-RUotv3}jpN1R)yr4L z94*KG@+$E3J?J6Fd2@8+AMzQrgU_4&<6ppPw5&RPy4>8ofo3!)8~XHli$z9}-5ZfhH(Rd=n@7gg zvM8%$QY|Qa96chdD2qx`UG4&fjsWN-!Dxt4 zJU3h`mYtQ2zSOppf|@1S2!c>Rvtb)NTnZ4@?Czp8H(63;6|k-4#?;yn&UtxCsPUYY zjmxY#A5IsYSC(2wtvb##t4%m;)VX_a#0qCy$}cs8Ek{}4{QZ5tXBbdJ^zr`Vp2*s4U^#9V6}kDSpC=ok_a`4Thx=YduW zT70hCA96I{;^^lO^X`Y6u)MZ){{8-X-}45VGn|TDu`W6BdDGoqMMo0U3u5X9Y z)fd@2Co4eu2xNiMDhigCy^h6#!A1o}jxr6YI|%hv2g{6}QCd5Z(|tV6^H|vzvYx*_ z+~2=!frOX)(tTb%WwU0@v)tG0TpF#WJM#B49?tI{L9h|?>rv;=55aEGS^Zdb|7)Nq z$N7^v`uvxdA}kb&aITIkU5RcZOD}&qZbzU@gNwNO9#@1F%ZS&#x!P<)i_sC6E&p@g z%23fHQRw>mE1Cq04o`s~VY;>89=HF_m8@)bcw_F{-Dbc9SAZor7HO^cr&Q4|YipX#u!#y3C!p$pfpDWG6AMC22EO&Dy#@`$V$;k83Al`zoqXI^ zfR(Oj8Q;_)HygR4JKKVdbc4-U0>GwaxU)EkMMxz8^kr|g{0%Qnst_nZ=vWmZIme0y zIu9htTHqRN%9m3YX_98EK*2VlZ;~ycB2yAZI%akSs?53>45|6->xrr{NY& zvsAMX1l7 z{Pw=hpQ}ZxC^vy`bF$GFnNDK~W~?kUVL#pdn@gfDs;D*c z=^k#`VZ&_EPzjv^!vzaq6sE&jT-K5QB%c;DxQbxs9NiErFM+Ut0u6P{+Ny?0gJ{ZH f>9*K0fyDm