From 00b76c9335bd1e7fa8eb02d9f87b2641a44eb909 Mon Sep 17 00:00:00 2001 From: acmgit Date: Sat, 12 Feb 2022 14:00:09 +0100 Subject: [PATCH] Banana added. --- LICENSE | 0 README.md | 4 + asparagus.lua | 0 asparagus_default.lua | 0 asparagus_redo.lua | 0 banana.lua | 19 + banana_default.lua | 66 +++ banana_redo.lua | 146 +++++++ changelog.txt | 0 chives.lua | 0 chives_default.lua | 0 chives_redo.lua | 0 depends.txt | 0 flax.lua | 0 flax_default.lua | 0 flax_redo.lua | 0 fuels.lua | 0 i18n.py | 426 +++++++++++++++++++ init.lua | 2 +- intllib.lua | 0 items.lua | 7 + kohlrabi.lua | 0 kohlrabi_default.lua | 0 kohlrabi_redo.lua | 0 lettuce.lua | 0 lettuce_default.lua | 0 lettuce_redo.lua | 0 locale/cucina_vegana.de.tr | 10 + locale/cucina_vegana.tr | 10 + locale/de.mo | Bin 0 -> 4552 bytes locale/template.txt | 10 + mod.conf | 0 nodes.lua | 0 overrides.lua | 0 parsley.lua | 0 parsley_default.lua | 0 parsley_redo.lua | 0 peanut.lua | 0 peanut_default.lua | 2 +- peanut_redo.lua | 0 recipes.lua | 0 recipes_5xx.lua | 0 recipes_cook.lua | 0 recipes_support.lua | 0 register_mods.lua | 0 register_signs_bot.lua | 12 +- rice.lua | 0 rice_default.lua | 0 rice_redo.lua | 0 rosemary.lua | 0 rosemary_default.lua | 0 rosemary_redo.lua | 0 settings.lua | 5 + settingtypes.txt | 5 + soy.lua | 0 soy_default.lua | 0 soy_redo.lua | 0 sunflower.lua | 0 sunflower_default.lua | 0 sunflower_redo.lua | 0 textures/16x16/cucina_vegana_banana_1.png | Bin 0 -> 107 bytes textures/16x16/cucina_vegana_banana_2.png | Bin 0 -> 118 bytes textures/16x16/cucina_vegana_banana_3.png | Bin 0 -> 140 bytes textures/16x16/cucina_vegana_banana_4.png | Bin 0 -> 147 bytes textures/16x16/cucina_vegana_banana_5.png | Bin 0 -> 171 bytes textures/16x16/cucina_vegana_banana_6.png | Bin 0 -> 188 bytes textures/16x16/cucina_vegana_banana_7.png | Bin 0 -> 194 bytes textures/16x16/cucina_vegana_banana_8.png | Bin 0 -> 213 bytes textures/16x16/cucina_vegana_banana_item.png | Bin 0 -> 175 bytes textures/16x16/cucina_vegana_banana_seed.png | Bin 0 -> 132 bytes textures/cucina_vegana_banana_1.png | Bin 0 -> 109 bytes textures/cucina_vegana_banana_2.png | Bin 0 -> 126 bytes textures/cucina_vegana_banana_3.png | Bin 0 -> 162 bytes textures/cucina_vegana_banana_4.png | Bin 0 -> 204 bytes textures/cucina_vegana_banana_5.png | Bin 0 -> 277 bytes textures/cucina_vegana_banana_6.png | Bin 0 -> 268 bytes textures/cucina_vegana_banana_7.png | Bin 0 -> 294 bytes textures/cucina_vegana_banana_8.png | Bin 0 -> 311 bytes textures/cucina_vegana_banana_item.png | Bin 0 -> 250 bytes textures/cucina_vegana_banana_seed.png | Bin 0 -> 158 bytes tools.lua | 0 xgettext.sh | 0 82 files changed, 717 insertions(+), 7 deletions(-) mode change 100755 => 100644 LICENSE mode change 100755 => 100644 README.md mode change 100755 => 100644 asparagus.lua mode change 100755 => 100644 asparagus_default.lua mode change 100755 => 100644 asparagus_redo.lua create mode 100644 banana.lua create mode 100644 banana_default.lua create mode 100644 banana_redo.lua mode change 100755 => 100644 changelog.txt mode change 100755 => 100644 chives.lua mode change 100755 => 100644 chives_default.lua mode change 100755 => 100644 chives_redo.lua mode change 100755 => 100644 depends.txt mode change 100755 => 100644 flax.lua mode change 100755 => 100644 flax_default.lua mode change 100755 => 100644 flax_redo.lua mode change 100755 => 100644 fuels.lua create mode 100755 i18n.py mode change 100755 => 100644 init.lua mode change 100755 => 100644 intllib.lua mode change 100755 => 100644 items.lua mode change 100755 => 100644 kohlrabi.lua mode change 100755 => 100644 kohlrabi_default.lua mode change 100755 => 100644 kohlrabi_redo.lua mode change 100755 => 100644 lettuce.lua mode change 100755 => 100644 lettuce_default.lua mode change 100755 => 100644 lettuce_redo.lua create mode 100644 locale/de.mo mode change 100755 => 100644 mod.conf mode change 100755 => 100644 nodes.lua mode change 100755 => 100644 overrides.lua mode change 100755 => 100644 parsley.lua mode change 100755 => 100644 parsley_default.lua mode change 100755 => 100644 parsley_redo.lua mode change 100755 => 100644 peanut.lua mode change 100755 => 100644 peanut_default.lua mode change 100755 => 100644 peanut_redo.lua mode change 100755 => 100644 recipes.lua mode change 100755 => 100644 recipes_5xx.lua mode change 100755 => 100644 recipes_cook.lua mode change 100755 => 100644 recipes_support.lua mode change 100755 => 100644 register_mods.lua mode change 100755 => 100644 register_signs_bot.lua mode change 100755 => 100644 rice.lua mode change 100755 => 100644 rice_default.lua mode change 100755 => 100644 rice_redo.lua mode change 100755 => 100644 rosemary.lua mode change 100755 => 100644 rosemary_default.lua mode change 100755 => 100644 rosemary_redo.lua mode change 100755 => 100644 settings.lua mode change 100755 => 100644 settingtypes.txt mode change 100755 => 100644 soy.lua mode change 100755 => 100644 soy_default.lua mode change 100755 => 100644 soy_redo.lua mode change 100755 => 100644 sunflower.lua mode change 100755 => 100644 sunflower_default.lua mode change 100755 => 100644 sunflower_redo.lua create mode 100644 textures/16x16/cucina_vegana_banana_1.png create mode 100644 textures/16x16/cucina_vegana_banana_2.png create mode 100644 textures/16x16/cucina_vegana_banana_3.png create mode 100644 textures/16x16/cucina_vegana_banana_4.png create mode 100644 textures/16x16/cucina_vegana_banana_5.png create mode 100644 textures/16x16/cucina_vegana_banana_6.png create mode 100644 textures/16x16/cucina_vegana_banana_7.png create mode 100644 textures/16x16/cucina_vegana_banana_8.png create mode 100644 textures/16x16/cucina_vegana_banana_item.png create mode 100644 textures/16x16/cucina_vegana_banana_seed.png create mode 100644 textures/cucina_vegana_banana_1.png create mode 100644 textures/cucina_vegana_banana_2.png create mode 100644 textures/cucina_vegana_banana_3.png create mode 100644 textures/cucina_vegana_banana_4.png create mode 100644 textures/cucina_vegana_banana_5.png create mode 100644 textures/cucina_vegana_banana_6.png create mode 100644 textures/cucina_vegana_banana_7.png create mode 100644 textures/cucina_vegana_banana_8.png create mode 100644 textures/cucina_vegana_banana_item.png create mode 100644 textures/cucina_vegana_banana_seed.png mode change 100755 => 100644 tools.lua mode change 100755 => 100644 xgettext.sh diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 index 6a59801..24944ff --- a/README.md +++ b/README.md @@ -39,6 +39,10 @@ It supports farming and farming_redo from TenPlus. ![Screenshot 1](textures/cucina_vegana_peanut_screenshot.jpg)
+## Banana +![Screenshot 1](textures/cucina_vegana_banana_screenshot.jpg) +
+ ## The Mod vegan_sunflower is integrated in Cucina Vegana. ![Screenshot 1](textures/cucina_vegana_sunflower_screenshot.jpg) diff --git a/asparagus.lua b/asparagus.lua old mode 100755 new mode 100644 diff --git a/asparagus_default.lua b/asparagus_default.lua old mode 100755 new mode 100644 diff --git a/asparagus_redo.lua b/asparagus_redo.lua old mode 100755 new mode 100644 diff --git a/banana.lua b/banana.lua new file mode 100644 index 0000000..9e98175 --- /dev/null +++ b/banana.lua @@ -0,0 +1,19 @@ +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_rainforest_litter"}, + spawn_by = {"default:jungletree"}, + num_spawn_by = 2, + sidelen = 32, + noise_params = { + offset = 0, + scale = cucina_vegana.plant_settings.asparagus_scale, + spread = {x = 10, y = 10, z = 10}, + seed = 6349, + octaves = 4, + persist = 0.6 + }, + y_min = 10, + y_max = 120, + decoration = "cucina_vegana:wild_banana", +}) + diff --git a/banana_default.lua b/banana_default.lua new file mode 100644 index 0000000..b0adb3e --- /dev/null +++ b/banana_default.lua @@ -0,0 +1,66 @@ +--[[ + ********************************************** + *** Banana default *** + ********************************************** +]]-- + +-- Load support for intllib. +local S = cucina_vegana.get_translator + +local dname = S("Banana") +local pname = "banana" +local step = 8 + +-- asparagus +farming.register_plant("cucina_vegana:" .. pname, { + description = dname .. " " .. S("Seed"), + harvest_description = dname, + inventory_image = "cucina_vegana_" .. pname .. "_seed.png", + steps = step, + minlight = cucina_vegana.plant_settings.asparagus_light, + fertility = {"grassland"}, + groups = {flammable = 4, attached_node = 1}, +}) + +-- Register for Mapgen +minetest.register_node("cucina_vegana:wild_" .. pname, { + description = S("Wild") .. " " .. dname, + paramtype = "light", + walkable = false, + drop = { + items = { + {items = {"cucina_vegana:seed_" .. pname .. " 3"}}, + {items = {"cucina_vegana:" .. pname .. ""}}, + } + }, + drawtype = "plantlike", + paramtype2 = "facedir", + tiles = {"cucina_vegana_" .. pname .. "_" .. step .. ".png"}, + sunlight_propagates = true, + groups = {snappy = 3, dig_immediate=1, flammable=2, plant=1, attached_node = 1, growing = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.35, 0.5}, -- side f + }, + }, +}) + +if(cucina_vegana.plant_settings.bonemeal) then + table.insert(cucina_vegana.plant_settings.bonemeal_list, + {"cucina_vegana:" .. pname .. "_", step, "cucina_vegana:seed_" .. pname}) + +end -- if(cucina_vegana.plant_settings.bonemeal + +-- Register @ farming_nextgen +if cucina_vegana.farming_ng then + cucina_vegana.register_farming_ng(pname, step) + +end -- if(cucina_vegana.farming_ng + +-- Register @ Signs_bot +if(cucina_vegana.signs_bot) then + cucina_vegana.register_signs_bot(pname, 1, step) + +end diff --git a/banana_redo.lua b/banana_redo.lua new file mode 100644 index 0000000..b2109bd --- /dev/null +++ b/banana_redo.lua @@ -0,0 +1,146 @@ +--[[ + ********************************************** + *** Banana redo *** + ********************************************** +]]-- + +-- Load support for intllib. +local S = cucina_vegana.get_translator + +local dname = S("Banana") +local pname = "banana" +local step = 8 +local germ = tonumber(cucina_vegana.plant_settings.germ_launch) + +if germ == 0 then + germ = "_seed" + +else + germ = "_" .. germ + +end + + -- asparagus + minetest.register_node("cucina_vegana:" .. pname .. "_seed", { + description = dname .. " " .. S("Seed"), + tiles = {"cucina_vegana_" .. pname .. "_seed.png"}, + inventory_image = "cucina_vegana_" .. pname .. "_seed.png", + wield_image = "cucina_vegana_" .. pname .. "_seed.png", + drawtype = "signlike", + minlight = cucina_vegana.plant_settings.asparagus_light, + groups = {seed = 1, snappy = 3, attached_node = 1, dig_immediate=1, flammable = 4}, + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + sunlight_propagates = true, + selection_box = farming.select, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "cucina_vegana:" .. pname .. germ) + end, + }) + + -- asparagus definition + local crop_def = { + drawtype = "plantlike", + tiles = {"cucina_vegana_" .. pname .. "_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + waving = 1, + buildable_to = true, + minlight = 11, + drop = "", + selection_box = farming.select, + groups = { + flammable = 4, snappy=3, dig_immediate=1, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults() + } + + -- stage 1 + minetest.register_node("cucina_vegana:" .. pname .. "_1", table.copy(crop_def)) + + -- stage 2 + crop_def.tiles = {"cucina_vegana_" .. pname .. "_2.png"} + minetest.register_node("cucina_vegana:" .. pname .. "_2", table.copy(crop_def)) + + -- stage 3 + crop_def.tiles = {"cucina_vegana_" .. pname .. "_3.png"} + minetest.register_node("cucina_vegana:" .. pname .. "_3", table.copy(crop_def)) + + -- stage 4 + crop_def.tiles = {"cucina_vegana_" .. pname .. "_4.png"} + crop_def.drop = { + items = { + {items = {"cucina_vegana:" .. pname .. "_seed"}, rarity = 2}, + } + } + minetest.register_node("cucina_vegana:" .. pname .. "_4", table.copy(crop_def)) + + -- stage 5 + crop_def.tiles = {"cucina_vegana_" .. pname .. "_5.png"} + crop_def.drop = { + items = { + {items = {"cucina_vegana:" .. pname .. "_seed"}, rarity = 1}, + {items = {"cucina_vegana:" .. pname .. "_seed"}, rarity = 2}, + {items = {"cucina_vegana:" .. pname .. ""}, rarity = 3} + } + } + minetest.register_node("cucina_vegana:" .. pname .. "_5", table.copy(crop_def)) + + -- stage 6 + crop_def.tiles = {"cucina_vegana_" .. pname .. "_" .. step .. ".png"} + crop_def.drop = { + items = { + {items = {"cucina_vegana:" .. pname .. ""}, rarity = 1}, + {items = {"cucina_vegana:" .. pname .. ""}, rarity = 2}, + {items = {"cucina_vegana:" .. pname .. ""}, rarity = 3}, + {items = {"cucina_vegana:" .. pname .. "_seed"}, rarity = 1}, + {items = {"cucina_vegana:" .. pname .. "_seed"}, rarity = 1}, + {items = {"cucina_vegana:" .. pname .. "_seed"}, rarity = 3}, + } + } + minetest.register_node("cucina_vegana:" .. pname .. "_" .. step, table.copy(crop_def)) + + -- Register for Mapgen + minetest.register_node("cucina_vegana:wild_" .. pname .. "", { + description = S("Wild ") .. dname, + paramtype = "light", + walkable = false, + drop = { + items = { + {items = {"cucina_vegana:" .. pname .. "_seed 3"}}, + {items = {"cucina_vegana:" .. pname .. ""}}, + } + }, + drawtype = "plantlike", + paramtype2 = "facedir", + tiles = {"cucina_vegana_" .. pname .. "_" .. step .. ".png"}, + groups = {snappy=3, dig_immediate=1, flammable=2, plant=1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, -0.35, 0.5}, -- side f + }, + }, + }) + +if(cucina_vegana.plant_settings.bonemeal) then + table.insert(cucina_vegana.plant_settings.bonemeal_list, + {"cucina_vegana:" .. pname .. "_", step, "cucina_vegana:" .. pname .. "_seed"}) + +end -- if(cucina_vegana.plant_settings.bonemeal + +-- Register @ farming_nextgen +if cucina_vegana.farming_ng then + cucina_vegana.register_farming_ng(pname, step) + +end -- if(cucina_vegana.farming_ng + +-- Register @ Signs_bot +if(cucina_vegana.signs_bot) then + cucina_vegana.register_signs_bot(pname, 1, step) + +end diff --git a/changelog.txt b/changelog.txt old mode 100755 new mode 100644 diff --git a/chives.lua b/chives.lua old mode 100755 new mode 100644 diff --git a/chives_default.lua b/chives_default.lua old mode 100755 new mode 100644 diff --git a/chives_redo.lua b/chives_redo.lua old mode 100755 new mode 100644 diff --git a/depends.txt b/depends.txt old mode 100755 new mode 100644 diff --git a/flax.lua b/flax.lua old mode 100755 new mode 100644 diff --git a/flax_default.lua b/flax_default.lua old mode 100755 new mode 100644 diff --git a/flax_redo.lua b/flax_redo.lua old mode 100755 new mode 100644 diff --git a/fuels.lua b/fuels.lua old mode 100755 new mode 100644 diff --git a/i18n.py b/i18n.py new file mode 100755 index 0000000..5e87937 --- /dev/null +++ b/i18n.py @@ -0,0 +1,426 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Script to generate the template file and update the translation files. +# Copy the script into the mod or modpack root folder and run it there. +# +# Copyright (C) 2019 Joachim Stolberg, 2020 FaceDeer, 2020 Louis Royer +# LGPLv2.1+ +# +# See https://github.com/minetest-tools/update_translations for +# potential future updates to this script. + +from __future__ import print_function +import os, fnmatch, re, shutil, errno +from sys import argv as _argv + +# Running params +params = {"recursive": False, + "help": False, + "mods": False, + "verbose": False, + "folders": [], + "no-old-file": False +} +# Available CLI options +options = {"recursive": ['--recursive', '-r'], + "help": ['--help', '-h'], + "mods": ['--installed-mods'], + "verbose": ['--verbose', '-v'], + "no-old-file": ['--no-old-file'] +} + +# Strings longer than this will have extra space added between +# them in the translation files to make it easier to distinguish their +# beginnings and endings at a glance +doublespace_threshold = 60 + +def set_params_folders(tab: list): + '''Initialize params["folders"] from CLI arguments.''' + # Discarding argument 0 (tool name) + for param in tab[1:]: + stop_param = False + for option in options: + if param in options[option]: + stop_param = True + break + if not stop_param: + params["folders"].append(os.path.abspath(param)) + +def set_params(tab: list): + '''Initialize params from CLI arguments.''' + for option in options: + for option_name in options[option]: + if option_name in tab: + params[option] = True + break + +def print_help(name): + '''Prints some help message.''' + print(f'''SYNOPSIS + {name} [OPTIONS] [PATHS...] +DESCRIPTION + {', '.join(options["help"])} + prints this help message + {', '.join(options["recursive"])} + run on all subfolders of paths given + {', '.join(options["mods"])} + run on locally installed modules + {', '.join(options["no-old-file"])} + do not create *.old files + {', '.join(options["verbose"])} + add output information +''') + + +def main(): + '''Main function''' + set_params(_argv) + set_params_folders(_argv) + if params["help"]: + print_help(_argv[0]) + elif params["recursive"] and params["mods"]: + print("Option --installed-mods is incompatible with --recursive") + else: + # Add recursivity message + print("Running ", end='') + if params["recursive"]: + print("recursively ", end='') + # Running + if params["mods"]: + print(f"on all locally installed modules in {os.path.abspath('~/.minetest/mods/')}") + run_all_subfolders("~/.minetest/mods") + elif len(params["folders"]) >= 2: + print("on folder list:", params["folders"]) + for f in params["folders"]: + if params["recursive"]: + run_all_subfolders(f) + else: + update_folder(f) + elif len(params["folders"]) == 1: + print("on folder", params["folders"][0]) + if params["recursive"]: + run_all_subfolders(params["folders"][0]) + else: + update_folder(params["folders"][0]) + else: + print("on folder", os.path.abspath("./")) + if params["recursive"]: + run_all_subfolders(os.path.abspath("./")) + else: + update_folder(os.path.abspath("./")) + +#group 2 will be the string, groups 1 and 3 will be the delimiters (" or ') +#See https://stackoverflow.com/questions/46967465/regex-match-text-in-either-single-or-double-quote +pattern_lua = re.compile(r'[\.=^\t,{\(\s]N?S\(\s*(["\'])((?:\\\1|(?:(?!\1)).)*)(\1)[\s,\)]', re.DOTALL) +pattern_lua_bracketed = re.compile(r'[\.=^\t,{\(\s]N?S\(\s*\[\[(.*?)\]\][\s,\)]', re.DOTALL) + +# Handles "concatenation" .. " of strings" +pattern_concat = re.compile(r'["\'][\s]*\.\.[\s]*["\']', re.DOTALL) + +pattern_tr = re.compile(r'(.+?[^@])=(.*)') +pattern_name = re.compile(r'^name[ ]*=[ ]*([^ \n]*)') +pattern_tr_filename = re.compile(r'\.tr$') +pattern_po_language_code = re.compile(r'(.*)\.po$') + +#attempt to read the mod's name from the mod.conf file. Returns None on failure +def get_modname(folder): + try: + with open(os.path.join(folder, "mod.conf"), "r", encoding='utf-8') as mod_conf: + for line in mod_conf: + match = pattern_name.match(line) + if match: + return match.group(1) + except FileNotFoundError: + pass + return None + +#If there are already .tr files in /locale, returns a list of their names +def get_existing_tr_files(folder): + out = [] + for root, dirs, files in os.walk(os.path.join(folder, 'locale/')): + for name in files: + if pattern_tr_filename.search(name): + out.append(name) + return out + +# A series of search and replaces that massage a .po file's contents into +# a .tr file's equivalent +def process_po_file(text): + # The first three items are for unused matches + text = re.sub(r'#~ msgid "', "", text) + text = re.sub(r'"\n#~ msgstr ""\n"', "=", text) + text = re.sub(r'"\n#~ msgstr "', "=", text) + # comment lines + text = re.sub(r'#.*\n', "", text) + # converting msg pairs into "=" pairs + text = re.sub(r'msgid "', "", text) + text = re.sub(r'"\nmsgstr ""\n"', "=", text) + text = re.sub(r'"\nmsgstr "', "=", text) + # various line breaks and escape codes + text = re.sub(r'"\n"', "", text) + text = re.sub(r'"\n', "\n", text) + text = re.sub(r'\\"', '"', text) + text = re.sub(r'\\n', '@n', text) + # remove header text + text = re.sub(r'=Project-Id-Version:.*\n', "", text) + # remove double-spaced lines + text = re.sub(r'\n\n', '\n', text) + return text + +# Go through existing .po files and, if a .tr file for that language +# *doesn't* exist, convert it and create it. +# The .tr file that results will subsequently be reprocessed so +# any "no longer used" strings will be preserved. +# Note that "fuzzy" tags will be lost in this process. +def process_po_files(folder, modname): + for root, dirs, files in os.walk(os.path.join(folder, 'locale/')): + for name in files: + code_match = pattern_po_language_code.match(name) + if code_match == None: + continue + language_code = code_match.group(1) + tr_name = modname + "." + language_code + ".tr" + tr_file = os.path.join(root, tr_name) + if os.path.exists(tr_file): + if params["verbose"]: + print(f"{tr_name} already exists, ignoring {name}") + continue + fname = os.path.join(root, name) + with open(fname, "r", encoding='utf-8') as po_file: + if params["verbose"]: + print(f"Importing translations from {name}") + text = process_po_file(po_file.read()) + with open(tr_file, "wt", encoding='utf-8') as tr_out: + tr_out.write(text) + +# from https://stackoverflow.com/questions/600268/mkdir-p-functionality-in-python/600612#600612 +# Creates a directory if it doesn't exist, silently does +# nothing if it already exists +def mkdir_p(path): + try: + os.makedirs(path) + except OSError as exc: # Python >2.5 + if exc.errno == errno.EEXIST and os.path.isdir(path): + pass + else: raise + +# Converts the template dictionary to a text to be written as a file +# dKeyStrings is a dictionary of localized string to source file sets +# dOld is a dictionary of existing translations and comments from +# the previous version of this text +def strings_to_text(dkeyStrings, dOld, mod_name): + lOut = [f"# textdomain: {mod_name}\n"] + + dGroupedBySource = {} + + for key in dkeyStrings: + sourceList = list(dkeyStrings[key]) + sourceList.sort() + sourceString = "\n".join(sourceList) + listForSource = dGroupedBySource.get(sourceString, []) + listForSource.append(key) + dGroupedBySource[sourceString] = listForSource + + lSourceKeys = list(dGroupedBySource.keys()) + lSourceKeys.sort() + for source in lSourceKeys: + localizedStrings = dGroupedBySource[source] + localizedStrings.sort() + lOut.append("") + lOut.append(source) + lOut.append("") + for localizedString in localizedStrings: + val = dOld.get(localizedString, {}) + translation = val.get("translation", "") + comment = val.get("comment") + if len(localizedString) > doublespace_threshold and not lOut[-1] == "": + lOut.append("") + if comment != None: + lOut.append(comment) + lOut.append(f"{localizedString}={translation}") + if len(localizedString) > doublespace_threshold: + lOut.append("") + + + unusedExist = False + for key in dOld: + if key not in dkeyStrings: + val = dOld[key] + translation = val.get("translation") + comment = val.get("comment") + # only keep an unused translation if there was translated + # text or a comment associated with it + if translation != None and (translation != "" or comment): + if not unusedExist: + unusedExist = True + lOut.append("\n\n##### not used anymore #####\n") + if len(key) > doublespace_threshold and not lOut[-1] == "": + lOut.append("") + if comment != None: + lOut.append(comment) + lOut.append(f"{key}={translation}") + if len(key) > doublespace_threshold: + lOut.append("") + return "\n".join(lOut) + '\n' + +# Writes a template.txt file +# dkeyStrings is the dictionary returned by generate_template +def write_template(templ_file, dkeyStrings, mod_name): + # read existing template file to preserve comments + existing_template = import_tr_file(templ_file) + + text = strings_to_text(dkeyStrings, existing_template[0], mod_name) + mkdir_p(os.path.dirname(templ_file)) + with open(templ_file, "wt", encoding='utf-8') as template_file: + template_file.write(text) + + +# Gets all translatable strings from a lua file +def read_lua_file_strings(lua_file): + lOut = [] + with open(lua_file, encoding='utf-8') as text_file: + text = text_file.read() + #TODO remove comments here + + text = re.sub(pattern_concat, "", text) + + strings = [] + for s in pattern_lua.findall(text): + strings.append(s[1]) + for s in pattern_lua_bracketed.findall(text): + strings.append(s) + + for s in strings: + s = re.sub(r'"\.\.\s+"', "", s) + s = re.sub("@[^@=0-9]", "@@", s) + s = s.replace('\\"', '"') + s = s.replace("\\'", "'") + s = s.replace("\n", "@n") + s = s.replace("\\n", "@n") + s = s.replace("=", "@=") + lOut.append(s) + return lOut + +# Gets strings from an existing translation file +# returns both a dictionary of translations +# and the full original source text so that the new text +# can be compared to it for changes. +def import_tr_file(tr_file): + dOut = {} + text = None + if os.path.exists(tr_file): + with open(tr_file, "r", encoding='utf-8') as existing_file : + # save the full text to allow for comparison + # of the old version with the new output + text = existing_file.read() + existing_file.seek(0) + # a running record of the current comment block + # we're inside, to allow preceeding multi-line comments + # to be retained for a translation line + latest_comment_block = None + for line in existing_file.readlines(): + line = line.rstrip('\n') + if line[:3] == "###": + # Reset comment block if we hit a header + latest_comment_block = None + continue + if line[:1] == "#": + # Save the comment we're inside + if not latest_comment_block: + latest_comment_block = line + else: + latest_comment_block = latest_comment_block + "\n" + line + continue + match = pattern_tr.match(line) + if match: + # this line is a translated line + outval = {} + outval["translation"] = match.group(2) + if latest_comment_block: + # if there was a comment, record that. + outval["comment"] = latest_comment_block + latest_comment_block = None + dOut[match.group(1)] = outval + return (dOut, text) + +# Walks all lua files in the mod folder, collects translatable strings, +# and writes it to a template.txt file +# Returns a dictionary of localized strings to source file sets +# that can be used with the strings_to_text function. +def generate_template(folder, mod_name): + dOut = {} + for root, dirs, files in os.walk(folder): + for name in files: + if fnmatch.fnmatch(name, "*.lua"): + fname = os.path.join(root, name) + found = read_lua_file_strings(fname) + if params["verbose"]: + print(f"{fname}: {str(len(found))} translatable strings") + + for s in found: + sources = dOut.get(s, set()) + sources.add(f"### {os.path.basename(fname)} ###") + dOut[s] = sources + + if len(dOut) == 0: + return None + templ_file = os.path.join(folder, "locale/template.txt") + write_template(templ_file, dOut, mod_name) + return dOut + +# Updates an existing .tr file, copying the old one to a ".old" file +# if any changes have happened +# dNew is the data used to generate the template, it has all the +# currently-existing localized strings +def update_tr_file(dNew, mod_name, tr_file): + if params["verbose"]: + print(f"updating {tr_file}") + + tr_import = import_tr_file(tr_file) + dOld = tr_import[0] + textOld = tr_import[1] + + textNew = strings_to_text(dNew, dOld, mod_name) + + if textOld and textOld != textNew: + print(f"{tr_file} has changed.") + if not params["no-old-file"]: + shutil.copyfile(tr_file, f"{tr_file}.old") + + with open(tr_file, "w", encoding='utf-8') as new_tr_file: + new_tr_file.write(textNew) + +# Updates translation files for the mod in the given folder +def update_mod(folder): + modname = get_modname(folder) + if modname is not None: + process_po_files(folder, modname) + print(f"Updating translations for {modname}") + data = generate_template(folder, modname) + if data == None: + print(f"No translatable strings found in {modname}") + else: + for tr_file in get_existing_tr_files(folder): + update_tr_file(data, modname, os.path.join(folder, "locale/", tr_file)) + else: + print("Unable to find modname in folder " + folder) + +# Determines if the folder being pointed to is a mod or a mod pack +# and then runs update_mod accordingly +def update_folder(folder): + is_modpack = os.path.exists(os.path.join(folder, "modpack.txt")) or os.path.exists(os.path.join(folder, "modpack.conf")) + if is_modpack: + subfolders = [f.path for f in os.scandir(folder) if f.is_dir()] + for subfolder in subfolders: + update_mod(subfolder + "/") + else: + update_mod(folder) + print("Done.") + +def run_all_subfolders(folder): + for modfolder in [f.path for f in os.scandir(folder) if f.is_dir()]: + update_folder(modfolder + "/") + + +main() diff --git a/init.lua b/init.lua old mode 100755 new mode 100644 index 8dbcd58..79810fe --- a/init.lua +++ b/init.lua @@ -79,7 +79,7 @@ local plants = { ["rice"] = cucina_vegana.plant_settings.rice, ["soy"] = cucina_vegana.plant_settings.soy, ["sunflower"] = cucina_vegana.plant_settings.sunflower, - + ["banana"] = cucina_vegana.plant_settings.banana, } diff --git a/intllib.lua b/intllib.lua old mode 100755 new mode 100644 diff --git a/items.lua b/items.lua old mode 100755 new mode 100644 index 92dbdf4..b7f904d --- a/items.lua +++ b/items.lua @@ -153,6 +153,13 @@ minetest.register_craftitem("cucina_vegana:asparagus", { on_use = minetest.item_eat(3), }) +minetest.register_craftitem("cucina_vegana:banana", { + description = S("Banana"), + inventory_image = "cucina_vegana_banana.png", + groups = {flammable = 1, food = 1, eatable = 1, food_vegan = 1, food_banana = 1}, + on_use = minetest.item_eat(4), +}) + minetest.register_craftitem("cucina_vegana:chives", { description = S("Chives"), inventory_image = "cucina_vegana_chives.png", diff --git a/kohlrabi.lua b/kohlrabi.lua old mode 100755 new mode 100644 diff --git a/kohlrabi_default.lua b/kohlrabi_default.lua old mode 100755 new mode 100644 diff --git a/kohlrabi_redo.lua b/kohlrabi_redo.lua old mode 100755 new mode 100644 diff --git a/lettuce.lua b/lettuce.lua old mode 100755 new mode 100644 diff --git a/lettuce_default.lua b/lettuce_default.lua old mode 100755 new mode 100644 diff --git a/lettuce_redo.lua b/lettuce_redo.lua old mode 100755 new mode 100644 diff --git a/locale/cucina_vegana.de.tr b/locale/cucina_vegana.de.tr index e7d5f69..b20075e 100755 --- a/locale/cucina_vegana.de.tr +++ b/locale/cucina_vegana.de.tr @@ -3,6 +3,8 @@ ### asparagus_default.lua ### ### asparagus_redo.lua ### +### banana_default.lua ### +### banana_redo.lua ### ### chives_default.lua ### ### chives_redo.lua ### ### flax_default.lua ### @@ -34,6 +36,7 @@ Seed=Samen Asparagus=Spargel ### asparagus_default.lua ### +### banana_default.lua ### ### chives_default.lua ### ### flax_default.lua ### ### kohlrabi_default.lua ### @@ -48,6 +51,7 @@ Asparagus=Spargel Wild=Wilde(r) ### asparagus_redo.lua ### +### banana_redo.lua ### ### chives_redo.lua ### ### flax_redo.lua ### ### kohlrabi_redo.lua ### @@ -61,6 +65,12 @@ Wild=Wilde(r) Wild =Wilde(r) +### banana_default.lua ### +### banana_redo.lua ### +### items.lua ### + +Banana=Banane + ### chives_default.lua ### ### chives_redo.lua ### ### items.lua ### diff --git a/locale/cucina_vegana.tr b/locale/cucina_vegana.tr index f69cc6e..c4611b2 100755 --- a/locale/cucina_vegana.tr +++ b/locale/cucina_vegana.tr @@ -3,6 +3,8 @@ ### asparagus_default.lua ### ### asparagus_redo.lua ### +### banana_default.lua ### +### banana_redo.lua ### ### chives_default.lua ### ### chives_redo.lua ### ### flax_default.lua ### @@ -34,6 +36,7 @@ Seed= Asparagus= ### asparagus_default.lua ### +### banana_default.lua ### ### chives_default.lua ### ### flax_default.lua ### ### kohlrabi_default.lua ### @@ -48,6 +51,7 @@ Asparagus= Wild= ### asparagus_redo.lua ### +### banana_redo.lua ### ### chives_redo.lua ### ### flax_redo.lua ### ### kohlrabi_redo.lua ### @@ -61,6 +65,12 @@ Wild= Wild = +### banana_default.lua ### +### banana_redo.lua ### +### items.lua ### + +Banana= + ### chives_default.lua ### ### chives_redo.lua ### ### items.lua ### diff --git a/locale/de.mo b/locale/de.mo new file mode 100644 index 0000000000000000000000000000000000000000..20bf6d10200f1c20c17abce49ea4389ac8f181ab GIT binary patch literal 4552 zcma);U5q4E702%`ATXfdI)Z@W#ofgju$Gw~T-Tl**zNh+WvAVCx?PPL&F!u`RmD`- z?bHWDkBRYReel6(B9a(lF!-P^5Cd*BA~B3HqED#V__WDBkmw7E8y=PT|5x4WuOS;M zed>4bsrzy6Ip^NnR}S6yjKI@?d>r!JK_RwTz6mcpfBt|Fw}Nkg9|ivo-Ut30{1AB4 z%|c9r)8L1}S@3Rf5&R(7v{c|-s2lK3@VmDDEXe*Zf}a5Qz}vyA;34pB5L1Z*w-oc; zVtF@s2lNlx`f>1MsIP+PBEA7~{wa=oWXTZTOJ0v?h1$|Vg=;9b?_tL*Ff51?Drk3|BluF2;};n1KIBdkn8^y$o0Qw z>u=in6_9rS2c+Hq1-YJsP*Q(0UbOoV$T%DZY1bmi@mD~`VG~4G5rDKm0Xfb^@CNXE zAp3pa@>$F0L9YLoAp8FYWE@@xnIC_%{FmjsAjh4Cb5RucfXtsG-~-?(5I@nzi|rzi z>q@|{9}uDs(tnrX6#DZDcn^3Dp$ESEu!-vaY^gKWP8GVd;eGvF^k#`{f> z=Lj048JHr$MgcevolH3UdC3K+d}Wa^Ib?dJSR- z5rOpcx2^ssAoK49kaqqW@vCO@E4zdA3Nb(qSzw@aV5Ra0llb(u| zmnFlJJY&L8MXm}G{oYzR6RVxsk#9|t^(LzO+L%ag2A$Cnt;V*jg_&;aIPS|QR96gZ zJ(G^taffsccV4Y`7r28ZFX67an z)nZve)Rzt-}sQVIw%T1H$u8RBOdLPUFaEYK_%6i<_u~_5V zYSu%QB$BHYMX{+uXir7TelIGc-;1a=LX~QfCk9_gHIv0+)2JjxzLn+=6cgD6y$xAekgc7- z6GK;z?Y~0JByK8rVEh}hRWwbXB5TO(yigCq?YxkClb=|y%NQ6V2BjkDC+jw$CtAss zJg+CUg$G(@D-(R#x$+|NrPwOt>3W@Sws-D**+iTJ@#P?N^OqEj*gUB_sdLtKF6cNx zK33(_rtXGIV*@+RaWLI6=$yE%va?6LUrNMhv(+! z=B73fIj0q?C_!XRT$QTRl_xXo-8fa-nB|+k4tuBi$~Wd%$8;YDvPoxF3m*pfh9RVi@&-}+y$OSsudhhw*5Lp%J{Q`*3GQf)8n;? z7AnJms)Jmo!rsJo)4vOw=6 zHZ)G;BnSg7k+!@Qa47^jdLK>fI^eI4pSukx!+~t_Gd~hFTd?~4xGkL_hF;=Xm5S4m z3XNBuyS8?2@8|q8QGCkn9#ldk1bk<|t?R9D?^Pz@;2f^gS^8uvlzBVprTvRzzgqqoB36+w4j?}`|FPZ{f$4ny3Kd8+f()jn=i z9q(Pj6#*-Tm&8zsQ+hlDamCm$4hoU{>JG=BaQXN?r6-u#?{QynAK+?uQsu9<@saX* zQR31-4EV`XY}%*GxH0Asg1P`HrPaRzmGQ7 N`1~?KGVHrf{trL;PT&9l literal 0 HcmV?d00001 diff --git a/locale/template.txt b/locale/template.txt index 9168e52..134f2ba 100755 --- a/locale/template.txt +++ b/locale/template.txt @@ -3,6 +3,8 @@ ### asparagus_default.lua ### ### asparagus_redo.lua ### +### banana_default.lua ### +### banana_redo.lua ### ### chives_default.lua ### ### chives_redo.lua ### ### flax_default.lua ### @@ -33,6 +35,7 @@ Seed= Asparagus= ### asparagus_default.lua ### +### banana_default.lua ### ### chives_default.lua ### ### flax_default.lua ### ### kohlrabi_default.lua ### @@ -47,6 +50,7 @@ Asparagus= Wild= ### asparagus_redo.lua ### +### banana_redo.lua ### ### chives_redo.lua ### ### flax_redo.lua ### ### kohlrabi_redo.lua ### @@ -60,6 +64,12 @@ Wild= Wild = +### banana_default.lua ### +### banana_redo.lua ### +### items.lua ### + +Banana= + ### chives_default.lua ### ### chives_redo.lua ### ### items.lua ### diff --git a/mod.conf b/mod.conf old mode 100755 new mode 100644 diff --git a/nodes.lua b/nodes.lua old mode 100755 new mode 100644 diff --git a/overrides.lua b/overrides.lua old mode 100755 new mode 100644 diff --git a/parsley.lua b/parsley.lua old mode 100755 new mode 100644 diff --git a/parsley_default.lua b/parsley_default.lua old mode 100755 new mode 100644 diff --git a/parsley_redo.lua b/parsley_redo.lua old mode 100755 new mode 100644 diff --git a/peanut.lua b/peanut.lua old mode 100755 new mode 100644 diff --git a/peanut_default.lua b/peanut_default.lua old mode 100755 new mode 100644 index f5854ca..67daebe --- a/peanut_default.lua +++ b/peanut_default.lua @@ -62,6 +62,6 @@ end -- if(cucina_vegana.farming_ng -- Register @ Signs_bot if(cucina_vegana.sign_bot) then - cucina_vegana.register_signs_bot(pname, 1, step) + cucina_vegana.register_signs_bot(pname, 1, step) end diff --git a/peanut_redo.lua b/peanut_redo.lua old mode 100755 new mode 100644 diff --git a/recipes.lua b/recipes.lua old mode 100755 new mode 100644 diff --git a/recipes_5xx.lua b/recipes_5xx.lua old mode 100755 new mode 100644 diff --git a/recipes_cook.lua b/recipes_cook.lua old mode 100755 new mode 100644 diff --git a/recipes_support.lua b/recipes_support.lua old mode 100755 new mode 100644 diff --git a/register_mods.lua b/register_mods.lua old mode 100755 new mode 100644 diff --git a/register_signs_bot.lua b/register_signs_bot.lua old mode 100755 new mode 100644 index 0c8effe..b647745 --- a/register_signs_bot.lua +++ b/register_signs_bot.lua @@ -8,11 +8,13 @@ function cucina_vegana.register_signs_bot(pname, start, steps) local mname = cucina_vegana.modname if(cucina_vegana.farming_default) then - fp("cucina_vegana:seed_" .. pname, "cucina_vegana:" .. pname .. "_" .. start, "cucina_vegana:" .. pname .. "_" .. steps) - + fp("cucina_vegana:seed_" .. pname, "cucina_vegana:" .. pname .. "_" + .. start, "cucina_vegana:" .. pname .. "_" .. steps) + else - fp("cucina_vegana:" .. pname .. "_seed", "cucina_vegana:" .. pname .. "_" .. start, "cucina_vegana:" .. pname .. "_" .. steps) - + fp("cucina_vegana:" .. pname .. "_seed", "cucina_vegana:" .. pname .. "_" + .. start, "cucina_vegana:" .. pname .. "_" .. steps) + end - + end diff --git a/rice.lua b/rice.lua old mode 100755 new mode 100644 diff --git a/rice_default.lua b/rice_default.lua old mode 100755 new mode 100644 diff --git a/rice_redo.lua b/rice_redo.lua old mode 100755 new mode 100644 diff --git a/rosemary.lua b/rosemary.lua old mode 100755 new mode 100644 diff --git a/rosemary_default.lua b/rosemary_default.lua old mode 100755 new mode 100644 diff --git a/rosemary_redo.lua b/rosemary_redo.lua old mode 100755 new mode 100644 diff --git a/settings.lua b/settings.lua old mode 100755 new mode 100644 index 8013caf..49655c5 --- a/settings.lua +++ b/settings.lua @@ -17,6 +17,11 @@ cucina_vegana.plant_settings.asparagus = minetest.settings:get_bool(cv_setting . cucina_vegana.plant_settings.asparagus_scale = minetest.settings:get(cv_setting .."asparagus_scale") or 0.0007 cucina_vegana.plant_settings.asparagus_light = minetest.settings:get(cv_setting .."asparagus_light") or 11 +-- Banana +cucina_vegana.plant_settings.asparagus = minetest.settings:get_bool(cv_setting .. "banana", true) +cucina_vegana.plant_settings.asparagus_scale = minetest.settings:get(cv_setting .."banana_scale") or 0.0006 +cucina_vegana.plant_settings.asparagus_light = minetest.settings:get(cv_setting .."banana") or 12 + -- Chives cucina_vegana.plant_settings.chives = minetest.settings:get_bool(cv_setting .."chives", true) cucina_vegana.plant_settings.chives_scale = minetest.settings:get(cv_setting .."chives_scale") or 0.0005 diff --git a/settingtypes.txt b/settingtypes.txt old mode 100755 new mode 100644 index 4452f13..1825bf0 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -7,6 +7,11 @@ cucina_vegana.plant_settings.asparagus (Enable Asparagus) bool true cucina_vegana.plant_settings.asparagus_scale (Spreadvalue) float 0.0007 cucina_vegana.plant_settings.asparagus_light (Min. Light) int 11 +#Banana +cucina_vegana.plant_settings.banana (Enable Banana) bool true +cucina_vegana.plant_settings.banana_scale (Spreadvalue) float 0.0006 +cucina_vegana.plant_settings.banana_light (Min. Light) int 12 + #Chives cucina_vegana.plant_settings.chives (Enable Chives) bool true cucina_vegana.plant_settings.chives_scale (Spreadvalue) float 0.0005 diff --git a/soy.lua b/soy.lua old mode 100755 new mode 100644 diff --git a/soy_default.lua b/soy_default.lua old mode 100755 new mode 100644 diff --git a/soy_redo.lua b/soy_redo.lua old mode 100755 new mode 100644 diff --git a/sunflower.lua b/sunflower.lua old mode 100755 new mode 100644 diff --git a/sunflower_default.lua b/sunflower_default.lua old mode 100755 new mode 100644 diff --git a/sunflower_redo.lua b/sunflower_redo.lua old mode 100755 new mode 100644 diff --git a/textures/16x16/cucina_vegana_banana_1.png b/textures/16x16/cucina_vegana_banana_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3c812e828e1406c05bcc4d1fc9dfc68e395d3a2f GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJTYyi9E0AVb#t>_@XaSJHR1)MD z%_@XaSJHR1)MD z%K|E0AVb#=x+Pf#EX4%9Zh7 zfLxZ6AirRS|NsAQ)^+Fr^0hr(977~7CnqdWOgN@}-~@|ULQ>1e#vHXYH8lh7gGxBn0iz=7#M`}8Fc>pgoc2O^>p=fS?83{1ORj@BSruK literal 0 HcmV?d00001 diff --git a/textures/16x16/cucina_vegana_banana_4.png b/textures/16x16/cucina_vegana_banana_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4d1e7c3465231eaaa9837e550e17b24776809ed8 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJPk>K|E0AVb#=x+Pf#EX4%9Zh7 zfLxZ6AirRS|NsAQ)^+Fr@{K%Q977~7CnqTI8yFim8_wx(31pEh;4(03WSt?ASfenz ob7m*!8K)IVF2>BU4HH)}F=#Dj@IJ3-auH;@r>mdKI;Vst0AB+piU0rr literal 0 HcmV?d00001 diff --git a/textures/16x16/cucina_vegana_banana_5.png b/textures/16x16/cucina_vegana_banana_5.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9a4fbaa6627786d1ba1be5d5fcf9915b9f9431 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!P=HT}E0AVb#=x+Pf#EX4s@&LJ zO{Gba2NHpTY$ZW{!3_UFpsMo0KcI+{r;B5V#O0-DJoy+DIG7zYfBe_y=2e}ywexn% zu4~bE=6c^ut$pP?f#qPyXW&rWTg^7Vo1EC@{i$iz43BWL9co+wv-KXl;yQj)I(LgR dr1$&l82QWn7=COzuVnyohNr8a%Q~loCIEyELj?c; literal 0 HcmV?d00001 diff --git a/textures/16x16/cucina_vegana_banana_7.png b/textures/16x16/cucina_vegana_banana_7.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5c9934b4828d32ac5bf9b9c113787b25aa82ab GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Xn;?ME0AVb#=x+Pf#EVk;s4xK zxv{&NO4FywYXimEOM?7@8UBO8()wk;fkL64E{-7*m*@6*3ms74a2B?^_y0tzhpc$) zR7r!%2ChHc<>C7_YFR%2xW_|o!Y7wm4Nu>FT_S3rvu&~3R-;-rCj~Fl6;ZQ_E{4ZD j?0UVX=YIZc`5#RDi46?rjkl>JgB;`O>gTe~DWM4f8^1(K literal 0 HcmV?d00001 diff --git a/textures/16x16/cucina_vegana_banana_8.png b/textures/16x16/cucina_vegana_banana_8.png new file mode 100644 index 0000000000000000000000000000000000000000..663f338af4ae5fdf5290b3c5927f60d1d281ce1a GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!bbwEYE0BKvnBo8T-2cD#F)U+X z*u}tbnPF9K?5?KL4=qcl0Hrxgg8YIR{zHK|)9foi!30ki#}J9jbNg@e9Z=wKwqE(@ zfBna(Ht%m%N?!ca6+WEaajj{Ndw%?;H601zNVclzY-aYSJ2;-KVd5+mYyBIuO{an^LB{Ts5 D8G=&q literal 0 HcmV?d00001 diff --git a/textures/16x16/cucina_vegana_banana_item.png b/textures/16x16/cucina_vegana_banana_item.png new file mode 100644 index 0000000000000000000000000000000000000000..8cc2089cff8be220673ae21562d8c5cfc8e38332 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!bbwEYE0B(4VEF$Zh-Ci%Hu?WM z@c;MR|G(S*|6X+a)Rav?Y0i=$zhIy=1ei0;z5*1q@^od%t%Sei9dYS zzopr0K>yU!~g&Q literal 0 HcmV?d00001 diff --git a/textures/16x16/cucina_vegana_banana_seed.png b/textures/16x16/cucina_vegana_banana_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..c0fd2213342d36a32aee4f1ca213518e8ad8329b GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJXMj(LE07M=VAvMP&|+Qi56EFI z3GxeO`2XJ};F=1}@_V2b22WQ%mvv4FO#u6RAS?g? literal 0 HcmV?d00001 diff --git a/textures/cucina_vegana_banana_1.png b/textures/cucina_vegana_banana_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2af2335bd34cc43aeb70cfff112b185fb5e4a151 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyYymzYu0Wb0k>O_JV@)7~sU*lR znBjl)M5V1jo`|Q5V~EA+8Q9NO*{1^K89ZJ6T-G@yGywpj C-WZ<% literal 0 HcmV?d00001 diff --git a/textures/cucina_vegana_banana_2.png b/textures/cucina_vegana_banana_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce0acb9a1e67257ff910f577ac88e4df91c5cb8 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyYymzYu0Wb0k>O_JV@)7~sU*lR znBjl)M5V1jo~oydV~EA+UftDnm{r-UW|s7)Rq literal 0 HcmV?d00001 diff --git a/textures/cucina_vegana_banana_3.png b/textures/cucina_vegana_banana_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7d6487525b3df297c91e3cccc4eac6832503a049 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyJOMr-u0WchkAYzs1H&$cNuoVf zKrTy3kY6yv|Ns9t>pFA*`Hr40jv*GO-=6p80vf;)kpApnd0xhRCn1q1ULSsT|M-~o zB9Gxf=q-!rEkSHaMjemVs8@G9@^F)WVG{7wRX%~4r+X?xZaL?iZy?J&UHx3vIVCg! E0Lq^;+yDRo literal 0 HcmV?d00001 diff --git a/textures/cucina_vegana_banana_4.png b/textures/cucina_vegana_banana_4.png new file mode 100644 index 0000000000000000000000000000000000000000..57f129b82dcbc2277ba68c2ef3cb4346eb85c41c GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy`~f~8u0Wb0k%6I)fngZ~!!Cx( z6{0hNBCI7re!&d?fk5Vh8c1`xr;B5V#p$OLytxi2@VLx1zxV%4sQ9#?RI#I>%#Dhb zPmGuT(PF94+WYIB@8egEH)mT;l``8Y!`{KL`&S2}&))*aJk436E3&(laeckW1(~Dni zU^!&tKW*B9rzSIZse~=RdU3j<`10^LyJUq5vm?DtT%BB=OXmtLYg^YV#c|S1q=-fO z`r9{556=p3DU=oIHQoDq!H)A5cWUGoa`RoeSE~BxbNyEdhOe&~=HF}lW%q$e`~b7= Ut92)r0Nu;r>FVdQ&MBb@07a;A@c;k- literal 0 HcmV?d00001 diff --git a/textures/cucina_vegana_banana_6.png b/textures/cucina_vegana_banana_6.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8e8051b92fcc832f08243b9ab0d626ddeab9ed GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyq5(c3u0YyXg@GZFfuWLtp^t%K z83V&E2Gg^`_kj}ZB|(0{4FADkY5lU_K%x1bE{-7D3qyWS@`mA%vYgJsl|f# z)!Vk6Vs4P@IKBGzrpS9|Vy%=^4yW_Z{8an=fmk$mrU7fhG~kc%V~VO zwg)8Nn|0w~29qK`*BenbgXC+g(vzopr04OVRRR910 literal 0 HcmV?d00001 diff --git a/textures/cucina_vegana_banana_8.png b/textures/cucina_vegana_banana_8.png new file mode 100644 index 0000000000000000000000000000000000000000..7c58d54e81f2d949fd7e27ec5f2ee334c48e022e GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyasfUeu0YyXg&{JKp)ix-|8JB3 zzuOoR85sH)7?v?G>|%&M?sy)kf~zFRFPPy!4AgasgaJkOdAc};Se$+u$SKsKz_VC) z+sFU%W~-YtO20GSE<7fesjzU$ey(s{3E>vQXFDCQ>UIQ$9*{5oSbID?+VT?9^xrY( zZr#p$Z*t`4^>eyUSr=F?*tWaP-YUJ6@y$&uE&f&PD<;Vs8?T?ty+?ub%3MnmH}#gq z&MG|n;)NT|=moS^Ueev9((tsEQPVkBB;+E;sva}bs~LWq3SYkYz4)qpAB)54I>tZN z2>~D3PV`9#Fdq)u{Jig6LH#>9!xKKv=?B=XcQQX^UZ9=<^a+EftDnm{r-UW|Etz@_ literal 0 HcmV?d00001 diff --git a/textures/cucina_vegana_banana_item.png b/textures/cucina_vegana_banana_item.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5f0e27ab25e28d45c0dd112a0f92b2282768bf GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy1_3@Hu0T3egCW<1q0NS2o+rb$ zNQU#N4BOT*oIlR+{4vA-|3D=3|F_Bi-+}+X=l=iQW^qu+7N|#{B*-rqD2DZmeDSQ|u?fHLUrS}zQ2U{{zm_F~>*D=aS)$A_Qd25#bbh%f zx~)9)j^5?Tzj)bCY!T>ClUT|iIgKUm?SoADpaW_TX8pd@AaJqafvd%tFGbF_9a|;% g>;i31UBCZ>;msmepZst~6QHFGp00i_>zopr0EHiEo&W#< literal 0 HcmV?d00001 diff --git a/textures/cucina_vegana_banana_seed.png b/textures/cucina_vegana_banana_seed.png new file mode 100644 index 0000000000000000000000000000000000000000..220234fdd5cb118779d643950b8d0a619df47d8f GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyJOMr-u0T3egCW<1;e0BCD=(WM zkk3*QvFxL(aM7S*QMqy zP!mh#3yW?1c{|J^KxLOovD%v@iW(v&*)x~#y;<~v!C{5S*Xuxo7(8A5T-G@yGywoN CeK02g literal 0 HcmV?d00001 diff --git a/tools.lua b/tools.lua old mode 100755 new mode 100644 diff --git a/xgettext.sh b/xgettext.sh old mode 100755 new mode 100644