added Semmett9's improofments
better cannonstand with a realy nice nodebox 3 diffrent cannonballs wood stone iron better cannon hit sound some new textures
157
canonballs.lua
@ -128,3 +128,160 @@ local tree={
|
|||||||
if enable_fire then
|
if enable_fire then
|
||||||
canons.register_muni("default:tree",tree)
|
canons.register_muni("default:tree",tree)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
--+ Stone Cannon ball +
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
|
||||||
|
local ball_wood={
|
||||||
|
physical = false,
|
||||||
|
timer=0,
|
||||||
|
textures = {"canons_bullet.png"},
|
||||||
|
lastpos={},
|
||||||
|
damage=20,
|
||||||
|
range=1,
|
||||||
|
gravity=10,
|
||||||
|
velocity=40,
|
||||||
|
name="canons:stone_bullet",
|
||||||
|
collisionbox = {-0.25,-0.25,-0.25, 0.25,0.25,0.25},
|
||||||
|
on_player_hit = function(self,pos,player)
|
||||||
|
local playername = player:get_player_name()
|
||||||
|
player:punch(self.object, 1.0, {
|
||||||
|
full_punch_interval=1.0,
|
||||||
|
damage_groups={fleshy=self.damage},
|
||||||
|
}, nil)
|
||||||
|
self.object:remove()
|
||||||
|
minetest.chat_send_all(playername .." tried to catch a canonball")
|
||||||
|
end,
|
||||||
|
on_mob_hit = function(self,pos,mob)
|
||||||
|
mob:punch(self.object, 1.0, {
|
||||||
|
full_punch_interval=1.0,
|
||||||
|
damage_groups={fleshy=self.damage},
|
||||||
|
}, nil)
|
||||||
|
self.object:remove()
|
||||||
|
end,
|
||||||
|
on_node_hit = function(self,pos,node)
|
||||||
|
if node.name == "default:dirt_with_grass" then
|
||||||
|
minetest.env:set_node({x=pos.x, y=pos.y, z=pos.z},{name="default:dirt"})
|
||||||
|
minetest.sound_play("canons_hit",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
elseif node.name == "default:water_source" then
|
||||||
|
minetest.sound_play("canons_splash",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
else
|
||||||
|
minetest.sound_play("canons_hit",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
}
|
||||||
|
canons.register_muni("canons:canon_ball_wood",ball_wood)
|
||||||
|
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
--+ Stone Cannon ball +
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
|
||||||
|
local ball_stone={
|
||||||
|
physical = false,
|
||||||
|
timer=0,
|
||||||
|
textures = {"canons_bullet.png"},
|
||||||
|
lastpos={},
|
||||||
|
damage=20,
|
||||||
|
range=2,
|
||||||
|
gravity=10,
|
||||||
|
velocity=40,
|
||||||
|
name="canons:stone_bullet",
|
||||||
|
collisionbox = {-0.25,-0.25,-0.25, 0.25,0.25,0.25},
|
||||||
|
on_player_hit = function(self,pos,player)
|
||||||
|
local playername = player:get_player_name()
|
||||||
|
player:punch(self.object, 1.0, {
|
||||||
|
full_punch_interval=1.0,
|
||||||
|
damage_groups={fleshy=self.damage},
|
||||||
|
}, nil)
|
||||||
|
self.object:remove()
|
||||||
|
minetest.chat_send_all(playername .." tried to catch a canonball")
|
||||||
|
end,
|
||||||
|
on_mob_hit = function(self,pos,mob)
|
||||||
|
mob:punch(self.object, 1.0, {
|
||||||
|
full_punch_interval=1.0,
|
||||||
|
damage_groups={fleshy=self.damage},
|
||||||
|
}, nil)
|
||||||
|
self.object:remove()
|
||||||
|
end,
|
||||||
|
on_node_hit = function(self,pos,node)
|
||||||
|
if node.name == "default:dirt_with_grass" then
|
||||||
|
minetest.env:set_node({x=pos.x, y=pos.y, z=pos.z},{name="default:dirt"})
|
||||||
|
minetest.sound_play("canons_hit",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
elseif node.name == "default:water_source" then
|
||||||
|
minetest.sound_play("canons_splash",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
else
|
||||||
|
minetest.sound_play("canons_hit",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
}
|
||||||
|
canons.register_muni("canons:canon_ball_stone",ball_stone)
|
||||||
|
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
--+ Steel Cannon ball +
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
|
||||||
|
local ball_steel={
|
||||||
|
physical = false,
|
||||||
|
timer=0,
|
||||||
|
textures = {"canons_bullet_iron.png"},
|
||||||
|
lastpos={},
|
||||||
|
damage=30,
|
||||||
|
range=2,
|
||||||
|
gravity=5,
|
||||||
|
velocity=50,
|
||||||
|
name="canons:stone_bullet",
|
||||||
|
collisionbox = {-0.25,-0.25,-0.25, 0.25,0.25,0.25},
|
||||||
|
on_player_hit = function(self,pos,player)
|
||||||
|
local playername = player:get_player_name()
|
||||||
|
player:punch(self.object, 1.0, {
|
||||||
|
full_punch_interval=1.0,
|
||||||
|
damage_groups={fleshy=self.damage},
|
||||||
|
}, nil)
|
||||||
|
self.object:remove()
|
||||||
|
minetest.chat_send_all(playername .." tried to catch a canonball")
|
||||||
|
end,
|
||||||
|
on_mob_hit = function(self,pos,mob)
|
||||||
|
mob:punch(self.object, 1.0, {
|
||||||
|
full_punch_interval=1.0,
|
||||||
|
damage_groups={fleshy=self.damage},
|
||||||
|
}, nil)
|
||||||
|
self.object:remove()
|
||||||
|
end,
|
||||||
|
on_node_hit = function(self,pos,node)
|
||||||
|
if node.name == "default:dirt_with_grass" then
|
||||||
|
minetest.env:set_node({x=pos.x, y=pos.y, z=pos.z},{name="default:dirt"})
|
||||||
|
minetest.sound_play("canons_hit",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
elseif node.name == "default:water_source" then
|
||||||
|
minetest.sound_play("canons_splash",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
else
|
||||||
|
minetest.sound_play("canons_hit",
|
||||||
|
{pos = pos, gain = 1.0, max_hear_distance = 32,})
|
||||||
|
self.object:remove()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
}
|
||||||
|
canons.register_muni("canons:canon_ball_steel",ball_steel)
|
||||||
|
|
||||||
|
1
init.lua
@ -15,3 +15,4 @@ dofile(MODPATH .."/canonballs.lua")
|
|||||||
|
|
||||||
|
|
||||||
minetest.log("action", "[MOD]"..minetest.get_current_modname().." -- loaded from "..minetest.get_modpath(minetest.get_current_modname()))
|
minetest.log("action", "[MOD]"..minetest.get_current_modname().." -- loaded from "..minetest.get_modpath(minetest.get_current_modname()))
|
||||||
|
|
||||||
|
473
items.lua
@ -1,3 +1,7 @@
|
|||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
--+ Craft Items +
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
minetest.register_craftitem("canons:gunpowder", {
|
minetest.register_craftitem("canons:gunpowder", {
|
||||||
groups = {gunpowder=1},
|
groups = {gunpowder=1},
|
||||||
description = "Gunpowder",
|
description = "Gunpowder",
|
||||||
@ -15,24 +19,6 @@ minetest.register_craftitem("canons:bucket_salt", {
|
|||||||
stack_max = 300
|
stack_max = 300
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "shapeless",
|
|
||||||
output = 'canons:salt 12',
|
|
||||||
recipe = {
|
|
||||||
"canons:bucket_salt"
|
|
||||||
},
|
|
||||||
replacements = {
|
|
||||||
{"canons:bucket_salt", "bucket:bucket_empty"}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = 'canons:bucket_salt',
|
|
||||||
recipe = 'bucket:bucket_water',
|
|
||||||
cooktime = 15
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("canons:iron_barrel", {
|
minetest.register_craftitem("canons:iron_barrel", {
|
||||||
groups = {canonbarrel=1},
|
groups = {canonbarrel=1},
|
||||||
description = "Iron Cannonbarrel",
|
description = "Iron Cannonbarrel",
|
||||||
@ -52,6 +38,34 @@ minetest.register_craftitem("canons:mithrill_barrel", {
|
|||||||
stack_max = 10
|
stack_max = 10
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("canons:stone_bullet", {
|
||||||
|
Description = "Stone Bullet",
|
||||||
|
inventory_image = "canons_bullet.png"
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
--+ crafts +
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = 'canons:salt 12',
|
||||||
|
recipe = {
|
||||||
|
"canons:bucket_salt"
|
||||||
|
},
|
||||||
|
replacements = {
|
||||||
|
{"canons:bucket_salt", "bucket:bucket_empty"}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "cooking",
|
||||||
|
output = 'canons:bucket_salt',
|
||||||
|
recipe = 'bucket:bucket_water',
|
||||||
|
cooktime = 15
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
output = 'canons:gunpowder',
|
output = 'canons:gunpowder',
|
||||||
@ -60,6 +74,7 @@ minetest.register_craft({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- not needed --
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = 'canons:iron_barrel',
|
output = 'canons:iron_barrel',
|
||||||
recipe = {
|
recipe = {
|
||||||
@ -76,27 +91,119 @@ minetest.register_craft({
|
|||||||
{"default:cobble", "default:cobble", "default:cobble"}
|
{"default:cobble", "default:cobble", "default:cobble"}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
-- new crafts --
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
minetest.register_craftitem("canons:stone_bullet", {
|
output = 'canons:canon',
|
||||||
Description = "Stone Bullet",
|
recipe = {
|
||||||
inventory_image = "canons_bullet.png"
|
{"default:steelblock", "default:steelblock", "default:steelblock"},
|
||||||
|
{"canons:gunpowder", "default:mese_block", ""},
|
||||||
|
{"default:steelblock", "default:steelblock", "default:steelblock"}
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'canons:bronze_canon',
|
||||||
|
recipe = {
|
||||||
|
{"default:bronzeblock", "default:bronzeblock", "default:bronzeblock"},
|
||||||
|
{"canons:gunpowder", "default:mese_block", ""},
|
||||||
|
{"default:bronzeblock", "default:bronzeblock", "default:bronzeblock"}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'canons:canon_stand',
|
||||||
|
recipe = {
|
||||||
|
{"default:wood", "", "default:wood"},
|
||||||
|
{"default:wood", "default:steelblock", "default:wood"},
|
||||||
|
{"default:wood", "default:wood", "default:wood"}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = 'canons:canon_ball_steel_stack',
|
||||||
|
recipe = {
|
||||||
|
"canons:canon_ball_steel", "canons:canon_ball_steel", "canons:canon_ball_steel", "canons:canon_ball_steel"
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = 'canons:canon_ball_stone_stack',
|
||||||
|
recipe = {
|
||||||
|
"canons:canon_ball_stone", "canons:canon_ball_stone", "canons:canon_ball_stone", "canons:canon_ball_stone"
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = 'canons:canon_ball_wood_stack',
|
||||||
|
recipe = {
|
||||||
|
"canons:canon_ball_wood", "canons:canon_ball_wood", "canons:canon_ball_wood", "canons:canon_ball_wood"
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'canons:canon_ball_wood 2',
|
||||||
|
recipe = {
|
||||||
|
{"default:wood","default:wood"},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'canons:canon_ball_stone',
|
||||||
|
recipe = {
|
||||||
|
{"default:stone"},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'canons:canon_ball_steel',
|
||||||
|
recipe = {
|
||||||
|
{"default:steelblock"}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- silly crafts --
|
||||||
|
|
||||||
|
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
|
--+ cannon stuff +
|
||||||
|
--++++++++++++++++++++++++++++++++++++
|
||||||
canons.formspec =
|
canons.formspec =
|
||||||
"size[8,9]"..
|
"size[8,9]"..
|
||||||
"list[current_name;gunpowder;2,3;1,1;]"..
|
"list[current_name;gunpowder;2,3;1,1;]"..
|
||||||
"list[current_name;muni;2,1;1,1;]"..
|
"list[current_name;muni;2,1;1,1;]"..
|
||||||
"list[current_player;main;0,5;8,4;]"
|
"list[current_player;main;0,5;8,4;]"
|
||||||
|
-- classic cannon --
|
||||||
minetest.register_node("canons:canon", {
|
minetest.register_node("canons:canon", {
|
||||||
description = "Canon",
|
description = "Cannon",
|
||||||
tiles = {"default_furnace_top.png", "default_furnace_bottom.png", "default_furnace_side.png",
|
stack_max = 1,
|
||||||
"default_furnace_side.png","cannon_back.png", "cannon_front.png"},
|
tiles = {"cannon_cannon_top.png","cannon_cannon_top.png","cannon_cannon_side.png","cannon_cannon_side.png","cannon_cannon_top.png^canons_canons_rim.png","cannon_cannon_side.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
paramtype = "light",
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {cracky=2,canon=1},
|
is_ground_content = true,
|
||||||
legacy_facedir_simple = true,
|
groups = {cracky=1},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, 0.2, -0.7, 0.2, -0.2, 0.9}, -- barrle --
|
||||||
|
{0.53, -0.1, 0.1, -0.53, 0.1, -0.1}, -- plinth --
|
||||||
|
|
||||||
|
-- side , top hight , depth , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, 0.2, -0.7, 0.2, -0.2, 0.9},
|
||||||
|
{0.53, -0.1, 0.1, -0.53, 0.1, -0.1},
|
||||||
|
},
|
||||||
|
},
|
||||||
on_punch = canons.punched,
|
on_punch = canons.punched,
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
@ -153,4 +260,312 @@ minetest.register_node("canons:canon", {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- bronze cannon --
|
||||||
|
minetest.register_node("canons:bronze_canon", {
|
||||||
|
description = "Cannon",
|
||||||
|
stack_max = 1,
|
||||||
|
tiles = {"cannon_bronze_cannon_top.png","cannon_bronze_cannon_top.png","cannon_bronze_cannon_side.png","cannon_bronze_cannon_side.png","cannon_bronze_cannon_top.png^canons_canons_rim.png","cannon_bronze_cannon_side.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=1},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, 0.2, -0.7, 0.2, -0.2, 0.9}, -- barrle --
|
||||||
|
{0.53, -0.1, 0.1, -0.53, 0.1, -0.1}, -- plinth --
|
||||||
|
|
||||||
|
-- side , top hight , depth , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, 0.2, -0.7, 0.2, -0.2, 0.9},
|
||||||
|
{0.53, -0.1, 0.1, -0.53, 0.1, -0.1},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
on_punch = canons.punched,
|
||||||
|
on_construct = function(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("formspec", canons.formspec)
|
||||||
|
meta:set_string("infotext", "Canon has no muni and no gunpowder")
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
inv:set_size("gunpowder", 1)
|
||||||
|
inv:set_size("muni", 1)
|
||||||
|
|
||||||
|
end,
|
||||||
|
can_dig = function(pos,player)
|
||||||
|
local meta = minetest.get_meta(pos);
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
if not inv:is_empty("gunpowder") then
|
||||||
|
return false
|
||||||
|
elseif not inv:is_empty("muni") then
|
||||||
|
return false
|
||||||
|
else
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
stack = stack:to_table()
|
||||||
|
if listname == "gunpowder" and stack.name == "canons:gunpowder" then
|
||||||
|
return stack.count
|
||||||
|
elseif listname == "muni" and canons.is_muni(stack.name) then
|
||||||
|
return stack.count
|
||||||
|
else return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
end,
|
||||||
|
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
local stack = inv:get_stack(from_list, from_index)
|
||||||
|
stack = stack:to_table()
|
||||||
|
if to_list == "gunpowder" and stack.name == "canons:gunpowder" then
|
||||||
|
return count
|
||||||
|
|
||||||
|
elseif to_list == "muni" and canons.is_muni(stack.name) then
|
||||||
|
return count
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
|
end,
|
||||||
|
on_metadata_inventory_put = canons.inventory_modified,
|
||||||
|
|
||||||
|
on_metadata_inventory_take = canons.inventory_modified,
|
||||||
|
|
||||||
|
on_metadata_inventory_move = canons.inventory_modified,
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("canons:canon_stand", {
|
||||||
|
description = "Cannon Stand",
|
||||||
|
stack_max = 99,
|
||||||
|
tiles = {"default_junglewood.png","default_junglewood.png^canons_canons_rim.png","default_junglewood.png^canons_canons_rim.png","default_junglewood.png^canons_canons_rim.png","default_cobble.png","default_junglewood.png^canons_canons_rim.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, -- bottom --
|
||||||
|
{-0.5, -0.5, -0.5, -0.35, 1.0, 0.5}, -- side left --
|
||||||
|
{0.35, -0.5, -0.5, 0.5, 1.0, 0.5}, -- side right --
|
||||||
|
{0.35, -0.5, -0.2, 0.5, 1.2, 0.5}, -- side right --
|
||||||
|
{-0.5, -0.5, -0.2, -0.35, 1.2, 0.5}, -- side left --
|
||||||
|
|
||||||
|
-- side , top , side , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
minetest.register_node("canons:canon_ball_wood", {
|
||||||
|
description = "Cannon Ball Stone",
|
||||||
|
stack_max = 99,
|
||||||
|
tiles = {"default_wood.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2},
|
||||||
|
|
||||||
|
-- side , top , side , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("canons:canon_ball_stone", {
|
||||||
|
description = "Cannon Ball Stone",
|
||||||
|
stack_max = 99,
|
||||||
|
tiles = {"default_stone.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2},
|
||||||
|
|
||||||
|
-- side , top , side , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("canons:canon_ball_steel", {
|
||||||
|
description = "Cannon Ball Wood",
|
||||||
|
stack_max = 99,
|
||||||
|
tiles = {"cannon_cannon_top.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2},
|
||||||
|
|
||||||
|
-- side , top , side , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.5, -0.2, 0.2, -0.1, 0.2},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("canons:canon_ball_wood_stack", {
|
||||||
|
description = "Cannon Ball Wood Stack",
|
||||||
|
stack_max = 99,
|
||||||
|
tiles = {"default_wood.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
drop = 'canons:canon_ball_wood 4',
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.1, -0.2, 0.2, 0.3, 0.2}, -- ball top
|
||||||
|
{0.1, -0.5, -0.2, 0.2, -0.1, 0.2}, -- ball left
|
||||||
|
{0.5, -0.5, -0.2, 0.2, -0.1, 0.2}, -- ball left
|
||||||
|
{-0.2, -0.5, 0.5, 0.0, -0.1, 0.2},-- ball back
|
||||||
|
{0.0, -0.5, 0.1, -0.4, -0.1, 0.2},--ball back
|
||||||
|
{-0.2, -0.5, 0.5, -0.4, -0.1, 0.2},-- ball back
|
||||||
|
{-0.2, -0.5, 0.1, -0.4, -0.1, 0.2},-- ball back
|
||||||
|
{-0.2, -0.5, -0.1, -0.4, -0.1, -0.5},
|
||||||
|
{0.0, -0.5, -0.1, -0.4, -0.1, -0.5},
|
||||||
|
|
||||||
|
|
||||||
|
-- side , top , side , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.4, -0.5, -0.5, 0.5, 0.3, 0.5},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_node("canons:canon_ball_stone_stack", {
|
||||||
|
description = "Cannon Ball Stone Stack",
|
||||||
|
stack_max = 99,
|
||||||
|
tiles = {"default_stone.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
drop = 'canons:canon_ball_stone 4',
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.1, -0.2, 0.2, 0.3, 0.2}, -- ball top
|
||||||
|
{0.1, -0.5, -0.2, 0.2, -0.1, 0.2}, -- ball left
|
||||||
|
{0.5, -0.5, -0.2, 0.2, -0.1, 0.2}, -- ball left
|
||||||
|
{-0.2, -0.5, 0.5, 0.0, -0.1, 0.2},-- ball back
|
||||||
|
{0.0, -0.5, 0.1, -0.4, -0.1, 0.2},--ball back
|
||||||
|
{-0.2, -0.5, 0.5, -0.4, -0.1, 0.2},-- ball back
|
||||||
|
{-0.2, -0.5, 0.1, -0.4, -0.1, 0.2},-- ball back
|
||||||
|
{-0.2, -0.5, -0.1, -0.4, -0.1, -0.5},
|
||||||
|
{0.0, -0.5, -0.1, -0.4, -0.1, -0.5},
|
||||||
|
|
||||||
|
|
||||||
|
-- side , top , side , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.4, -0.5, -0.5, 0.5, 0.3, 0.5},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("canons:canon_ball_steel_stack", {
|
||||||
|
description = "Cannon Ball Steel Stack",
|
||||||
|
stack_max = 99,
|
||||||
|
tiles = {"cannon_cannon_top.png"},
|
||||||
|
drawtype = "nodebox",
|
||||||
|
drop = 'canons:canon_ball_steel 4',
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
is_ground_content = true,
|
||||||
|
groups = {cracky=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.2, -0.1, -0.2, 0.2, 0.3, 0.2}, -- ball top
|
||||||
|
{0.1, -0.5, -0.2, 0.2, -0.1, 0.2}, -- ball left
|
||||||
|
{0.5, -0.5, -0.2, 0.2, -0.1, 0.2}, -- ball left
|
||||||
|
{-0.2, -0.5, 0.5, 0.0, -0.1, 0.2},-- ball back
|
||||||
|
{0.0, -0.5, 0.1, -0.4, -0.1, 0.2},--ball back
|
||||||
|
{-0.2, -0.5, 0.5, -0.4, -0.1, 0.2},-- ball back
|
||||||
|
{-0.2, -0.5, 0.1, -0.4, -0.1, 0.2},-- ball back
|
||||||
|
{-0.2, -0.5, -0.1, -0.4, -0.1, -0.5},
|
||||||
|
{0.0, -0.5, -0.1, -0.4, -0.1, -0.5},
|
||||||
|
|
||||||
|
|
||||||
|
-- side , top , side , side , bottom, side,
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.4, -0.5, -0.5, 0.5, 0.3, 0.5},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BIN
textures/cannon_bronze_cannon_side.png
Normal file
After Width: | Height: | Size: 437 B |
BIN
textures/cannon_bronze_cannon_top.png
Normal file
After Width: | Height: | Size: 524 B |
BIN
textures/cannon_cannon_side.png
Normal file
After Width: | Height: | Size: 378 B |
BIN
textures/cannon_cannon_top.png
Normal file
After Width: | Height: | Size: 463 B |
BIN
textures/canons_bullet - Copy.png
Normal file
After Width: | Height: | Size: 420 B |
BIN
textures/canons_bullet_iron.png
Normal file
After Width: | Height: | Size: 336 B |
BIN
textures/canons_canons_rim.png
Normal file
After Width: | Height: | Size: 254 B |