Skip to content

Commit

Permalink
allow throwing tomatoes with the slingshot
Browse files Browse the repository at this point in the history
  • Loading branch information
fluxionary committed Mar 6, 2024
1 parent fe6061c commit 07033be
Show file tree
Hide file tree
Showing 11 changed files with 127 additions and 36 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -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
Expand Down
59 changes: 59 additions & 0 deletions 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
2 changes: 1 addition & 1 deletion arrows.lua
Expand Up @@ -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)
Expand Down
30 changes: 30 additions & 0 deletions 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 },
},
})
30 changes: 30 additions & 0 deletions 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 },
},
})
2 changes: 2 additions & 0 deletions 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")
4 changes: 2 additions & 2 deletions init.lua
Expand Up @@ -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")

Expand Down
1 change: 1 addition & 0 deletions mod.conf
Expand Up @@ -12,6 +12,7 @@ depends = fmod, futil, ballistics, craftsystem
optional_depends = """
animalia,
basic_materials,
cucina_vegana,
default,
dye,
farming,
Expand Down
31 changes: 0 additions & 31 deletions projectile.lua

This file was deleted.

File renamed without changes.
2 changes: 1 addition & 1 deletion slingshot_ammo.lua
Expand Up @@ -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", {
Expand Down

0 comments on commit 07033be

Please sign in to comment.