From 07033beca612387313ce7ab282a0ebcb10fee188 Mon Sep 17 00:00:00 2001 From: flux <25628292+fluxionary@users.noreply.github.com> Date: Wed, 6 Mar 2024 15:56:52 -0800 Subject: [PATCH] allow throwing tomatoes with the slingshot --- README.md | 2 +- ammo.lua | 59 +++++++++++++++++++++++++ arrows.lua | 2 +- compat/cucina_vegana.lua | 30 +++++++++++++ compat/farming_redo.lua | 30 +++++++++++++ compat/init.lua | 2 + init.lua | 4 +- mod.conf | 1 + projectile.lua | 31 ------------- entities.lua => projectile_entities.lua | 0 slingshot_ammo.lua | 2 +- 11 files changed, 127 insertions(+), 36 deletions(-) create mode 100644 ammo.lua create mode 100644 compat/cucina_vegana.lua create mode 100644 compat/farming_redo.lua delete mode 100644 projectile.lua rename entities.lua => projectile_entities.lua (100%) diff --git a/README.md b/README.md index b5f8953..04d018a 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ note: SaKeL is the author of x_bows. * y_bows_target.png * CC BY-SA 4.0, AliasAlreadyTaken * y_bows_bow_steel.png (modified from y_bows_bow_wood.png) - * StyxColor, ? + * StyxColor, TODO: get license info from alias * y_bows_ball_rock.png * y_bows_slingshot_steel.png * y_bows_slingshot_wood.png diff --git a/ammo.lua b/ammo.lua new file mode 100644 index 0000000..35d82e1 --- /dev/null +++ b/ammo.lua @@ -0,0 +1,59 @@ +local f = string.format + +local S = y_bows.S + +function y_bows.register_ammo(name, ammo_group, def) + local parameters = table.copy(def.parameters or {}) + parameters.pickup_item = { item = name } + + local damage = 0 + for _, value in pairs(((parameters.punch or {}).tool_capabilities or {}).damage_groups or {}) do + damage = damage + value + end + local drag = (parameters.drag or {}).coefficient or 0 + + minetest.register_craftitem(name, { + description = f( + "%s\n%s\n%s", + def.description, + minetest.colorize("green", S("damage: @1", damage)), + minetest.colorize("cyan", S("drag: @1", drag)) + ), + short_description = def.description, + inventory_image = def.inventory_image, + groups = { [ammo_group] = 1 }, + light_source = def.light_source, + _y_bows_parameters = parameters, + _y_bows_properties = def.properties, + }) + + y_bows.util.register_craft_if_valid(name, def.recipe) +end + +function y_bows.register_item_as_ammo(name, ammo_group, def) + local existing_def = assert(minetest.registered_items[name], f("item %s doesn't exist", name)) + + local parameters = table.copy(def.parameters or {}) + parameters.pickup_item = { item = name } + + local damage = 0 + for _, value in pairs(((parameters.punch or {}).tool_capabilities or {}).damage_groups or {}) do + damage = damage + value + end + local drag = (parameters.drag or {}).coefficient or 0 + local groups = table.copy(existing_def.groups) + groups[ammo_group] = 1 + + minetest.override_item(name, { + description = f( + "%s\n%s\n%s", + existing_def.description, + minetest.colorize("green", S("damage: @1", damage)), + minetest.colorize("cyan", S("drag: @1", drag)) + ), + short_description = futil.get_safe_short_description(name), + groups = groups, + _y_bows_parameters = parameters, + _y_bows_properties = def.properties, + }) +end diff --git a/arrows.lua b/arrows.lua index 1f2a046..a396313 100644 --- a/arrows.lua +++ b/arrows.lua @@ -6,7 +6,7 @@ local ci = y_bows.resources.craftitems local damage_multiplier = y_bows.settings.damage_multiplier function y_bows.register_arrow(name, def) - y_bows.register_projectile(name, "y_bows_arrow", def) + y_bows.register_ammo(name, "y_bows_arrow", def) end local function diagonal(a, b, c) diff --git a/compat/cucina_vegana.lua b/compat/cucina_vegana.lua new file mode 100644 index 0000000..e9d39e5 --- /dev/null +++ b/compat/cucina_vegana.lua @@ -0,0 +1,30 @@ +if not y_bows.has.cucina_vegana then + return +end + +local def = minetest.registered_items["cucina_vegana:tomato"] +if not def then + return +end + +y_bows.register_item_as_ammo("cucina_vegana:tomato", "y_bows_slingshot_ammo", { + parameters = { + drag = { + coefficient = 0.6, + }, + punch = { + tool_capabilities = { + damage_groups = { fleshy = 0 }, + }, + }, + hit_sound = { + spec = { + name = "y_bows_splat", + }, + }, + }, + properties = { + textures = { rawget(def, "wield_image") or def.inventory_image }, + collisionbox = { -0.2, -0.2, -0.2, 0.2, 0.2, 0.2 }, + }, +}) diff --git a/compat/farming_redo.lua b/compat/farming_redo.lua new file mode 100644 index 0000000..a6194f9 --- /dev/null +++ b/compat/farming_redo.lua @@ -0,0 +1,30 @@ +if not y_bows.has.farming then + return +end + +local def = minetest.registered_items["farming:tomato"] +if not def then + return +end + +y_bows.register_item_as_ammo("farming:tomato", "y_bows_slingshot_ammo", { + parameters = { + drag = { + coefficient = 0.6, + }, + punch = { + tool_capabilities = { + damage_groups = { fleshy = 0 }, + }, + }, + hit_sound = { + spec = { + name = "y_bows_splat", + }, + }, + }, + properties = { + textures = { rawget(def, "wield_image") or def.inventory_image }, + collisionbox = { -0.2, -0.2, -0.2, 0.2, 0.2, 0.2 }, + }, +}) diff --git a/compat/init.lua b/compat/init.lua index 2854c50..7803538 100644 --- a/compat/init.lua +++ b/compat/init.lua @@ -1,2 +1,4 @@ +y_bows.dofile("compat", "cucina_vegana") +y_bows.dofile("compat", "farming_redo") y_bows.dofile("compat", "mesecons") y_bows.dofile("compat", "x_bows") diff --git a/init.lua b/init.lua index 04cf777..c74aae8 100644 --- a/init.lua +++ b/init.lua @@ -6,14 +6,14 @@ y_bows.dofile("util") y_bows.dofile("resources", "init") -y_bows.dofile("entities") +y_bows.dofile("projectile_entities") y_bows.dofile("shoot") y_bows.dofile("weapon") y_bows.dofile("bows") y_bows.dofile("slingshots") -y_bows.dofile("projectile") +y_bows.dofile("ammo") y_bows.dofile("arrows") y_bows.dofile("slingshot_ammo") diff --git a/mod.conf b/mod.conf index 1b71600..fbd61e1 100644 --- a/mod.conf +++ b/mod.conf @@ -12,6 +12,7 @@ depends = fmod, futil, ballistics, craftsystem optional_depends = """ animalia, basic_materials, +cucina_vegana, default, dye, farming, diff --git a/projectile.lua b/projectile.lua deleted file mode 100644 index b99a6b7..0000000 --- a/projectile.lua +++ /dev/null @@ -1,31 +0,0 @@ -local f = string.format - -local S = y_bows.S - -function y_bows.register_projectile(name, projectile_group, def) - local parameters = table.copy(def.parameters or {}) - parameters.pickup_item = { item = name } - - local damage = 0 - for _, value in pairs(((parameters.punch or {}).tool_capabilities or {}).damage_groups or {}) do - damage = damage + value - end - local drag = (parameters.drag or {}).coefficient or 0 - - minetest.register_craftitem(name, { - description = f( - "%s\n%s\n%s", - def.description, - minetest.colorize("green", S("damage: @1", damage)), - minetest.colorize("cyan", S("drag: @1", drag)) - ), - short_description = def.description, - inventory_image = def.inventory_image, - groups = { [projectile_group] = 1 }, - light_source = def.light_source, - _y_bows_parameters = parameters, - _y_bows_properties = def.properties, - }) - - y_bows.util.register_craft_if_valid(name, def.recipe) -end diff --git a/entities.lua b/projectile_entities.lua similarity index 100% rename from entities.lua rename to projectile_entities.lua diff --git a/slingshot_ammo.lua b/slingshot_ammo.lua index 0a9c6c1..22fc32a 100644 --- a/slingshot_ammo.lua +++ b/slingshot_ammo.lua @@ -4,7 +4,7 @@ local ci = y_bows.resources.craftitems local damage_multiplier = y_bows.settings.damage_multiplier function y_bows.register_slingshot_ammo(name, def) - y_bows.register_projectile(name, "y_bows_slingshot_ammo", def) + y_bows.register_ammo(name, "y_bows_slingshot_ammo", def) end y_bows.register_slingshot_ammo("y_bows:ball_rock", {