summaryrefslogtreecommitdiff
path: root/castle
diff options
context:
space:
mode:
Diffstat (limited to 'castle')
-rw-r--r--castle/README.txt38
-rw-r--r--castle/arrowslit.lua6
-rw-r--r--castle/crossbow.lua447
-rw-r--r--castle/init.lua131
-rw-r--r--castle/jailbars.lua5
-rw-r--r--castle/models/LICENSE.txt10
-rw-r--r--castle/models/castle_crossbow_bolt.b3dbin0 -> 21158 bytes
-rw-r--r--castle/models/castle_crossbow_bolt.blendbin0 -> 493796 bytes
-rw-r--r--castle/models/castle_crossbow_bolt_uv.pngbin0 -> 157 bytes
-rw-r--r--castle/murder_hole.lua2
-rw-r--r--castle/pillars.lua6
-rw-r--r--castle/rope.lua2
-rw-r--r--castle/shields_decor.lua3
-rw-r--r--castle/sounds/LICENSE.txt52
-rw-r--r--castle/sounds/castle_birds.oggbin0 -> 14797 bytes
-rw-r--r--castle/sounds/castle_crossbow_bolt.oggbin0 -> 5967 bytes
-rw-r--r--castle/sounds/castle_crossbow_click.oggbin0 -> 7377 bytes
-rw-r--r--castle/sounds/castle_crossbow_shoot.oggbin0 -> 8112 bytes
-rw-r--r--castle/sounds/castle_orbs.oggbin0 -> 17034 bytes
-rw-r--r--castle/sounds/castle_owl.oggbin0 -> 50950 bytes
-rw-r--r--castle/sounds/castle_reload.oggbin0 -> 12213 bytes
-rw-r--r--castle/tapestry.lua236
-rw-r--r--castle/textures/LICENSE.txt26
-rw-r--r--castle/textures/castle_crossbow_bolt_inv.pngbin0 -> 146 bytes
-rw-r--r--castle/textures/castle_crossbow_hit.pngbin0 -> 516 bytes
-rw-r--r--castle/textures/castle_crossbow_inv.pngbin0 -> 280 bytes
-rw-r--r--castle/textures/castle_crossbow_loaded.pngbin0 -> 295 bytes
-rw-r--r--castle/textures/castle_orb_day.pngbin0 -> 112 bytes
-rw-r--r--castle/textures/castle_orb_day_weild.pngbin0 -> 185 bytes
-rw-r--r--castle/textures/castle_orb_night.pngbin0 -> 109 bytes
-rw-r--r--castle/textures/castle_orb_night_weild.pngbin0 -> 184 bytes
-rw-r--r--castle/textures/castle_tapestry_overlay.pngbin0 -> 477 bytes
-rw-r--r--castle/town_item.lua52
33 files changed, 751 insertions, 265 deletions
diff --git a/castle/README.txt b/castle/README.txt
index 9dc3b4a..91cfddd 100644
--- a/castle/README.txt
+++ b/castle/README.txt
@@ -21,15 +21,37 @@ Contains as of now:
--Castlestone Stairs, Slabs, and Pillars
--Jailbars
--Hides
---Arrowslits
---Rubble (for between walls)
+--Arrows and Arrowslits
+--Rubble
--Doors
+--Weapons
+--Chandeliers
+--Tapestries
--and more!
=-=-=-=-=-=-=-=-=-=
-" Although crossbows have been removed, along with arrows, the code is still there.
- To get the crossbows back, look in init.lua. You will see at the top some lines
- with dofile in them. Copy and paste two more of these lines, and change them to
- crossbow.lua and arrow.lua to get them back. "
-
-I, (philipbenr) will take a look at the arrows and crossbows, and see about this.
+
+Big release coming soon. ;) Stay tuned.
+
+Planned features (anything with question mark means that I am either unsure or don't know how to accomplish it ;)
+
+--More/Better weapons
+--More decorations
+--More nodes
+--Redone columns
+--More doors
+--Gatehouse mod
+--Armor
+--More magical items (mana, orbs, potions...)
+--Crowns/capes/player decor
+--Flags
+--Brewery/Liquor (liquor effects is another thing altogether)
+--Tannery?
+--Books? (that is an interesting one... I'll write a post on it later)
+--Guards?
+--Player status (King, queen, etc.)?
+--Foods?
+--Horses/Livestock?
+--Ruins?
+
+--Modpack Configurator
diff --git a/castle/arrowslit.lua b/castle/arrowslit.lua
index 66614eb..275d817 100644
--- a/castle/arrowslit.lua
+++ b/castle/arrowslit.lua
@@ -26,7 +26,7 @@ for _, row in ipairs(arrowslit.types) do
description = desc.." Arrowslit",
tiles = {tile..".png"},
groups = {cracky=3},
- sounds = default.node_sound_defaults(),
+ sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
@@ -50,7 +50,7 @@ for _, row in ipairs(arrowslit.types) do
description = desc.." Arrowslit with Cross",
tiles = {tile..".png"},
groups = {cracky=3},
- sounds = default.node_sound_defaults(),
+ sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
@@ -78,7 +78,7 @@ for _, row in ipairs(arrowslit.types) do
description = desc.." Arrowslit with Hole",
tiles = {tile..".png"},
groups = {cracky=3},
- sounds = default.node_sound_defaults(),
+ sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
diff --git a/castle/crossbow.lua b/castle/crossbow.lua
index 43f033d..c752779 100644
--- a/castle/crossbow.lua
+++ b/castle/crossbow.lua
@@ -1,43 +1,431 @@
-arrows = {
- {"castle:arrow", "castle:arrow_entity"},
+--[[
+Minetest Mod - Simple Shooter [shooter] 0.5.3
+=======================================
+
+License Source Code: 2013 Stuart Jones - LGPL v2.1
+
+License Textures: Stuart Jones - WTFPL
+
+Licence Models: Stuart Jones - CC-BY-SA 3.0
+
+License Sounds: freesound.org
+
+--]]
+local crossbow={}
+
+minetest.register_alias("crossbow", "castle:crossbow")
+minetest.register_alias("bolt", "castle:crossbow_bolt")
+
+CROSSBOW_USES = 300
+CROSSBOW_BOLT_TOOL_CAPS = {damage_groups={fleshy=4}}
+CROSSBOW_BOLT_LIFETIME = 60-- 1 minute
+CROSSBOW_ENABLE_PARTICLE_FX = false
+CROSSBOW_ENABLE_PROTECTION = true
+CROSSBOW_EXPLOSION_TEXTURE = "castle_crossbow_hit.png"
+CROSSBOW_ALLOW_NODES = true
+CROSSBOW_ALLOW_ENTITIES = true
+CROSSBOW_ALLOW_PLAYERS = true
+CROSSBOW_PLAYER_OFFSET = {x=0, y=1, z=0}
+CROSSBOW_ENTITY_OFFSET = {x=0, y=0, z=0}
+CROSSBOW_ENTITIES = {
+"mobs:chicken",
+"mobs:cow",
+"mobs:dirt_monster",
+"mobs:dungeon_master",
+"mobs:goat",
+"mobs:mese_monster",
+"mobs:npc",
+"mobs:oerkki",
+"mobs:pig",
+"mobs:pumba",
+"mobs:rat",
+"mobs:rhino",
+"mobs:sand_monster",
+"mobs:sheep",
+"mobs:spider",
+"mobs:stone_monster",
+"mobs:tree_monster",
}
-local castle_shoot_arrow = function(itemstack, player)
- for _,arrow in ipairs(arrows) do
- if player:get_inventory():get_stack("main", player:get_wield_index()+1):get_name() == arrow[1] then
- if not minetest.setting_getbool("creative_mode") then
- player:get_inventory():remove_item("main", arrow[1])
+if minetest.is_singleplayer() == true then
+ CROSSBOW_ALLOW_ENTITIES = true
+ CROSSBOW_ALLOW_PLAYERS = true
+end
+
+local allowed_entities = {}
+for _,v in ipairs(CROSSBOW_ENTITIES) do
+ allowed_entities[v] = 1
+end
+
+local function get_dot_product(v1, v2)
+ return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
+end
+
+local function get_particle_pos(p, v, d)
+ return vector.add(p, vector.multiply(v, {x=d, y=d, z=d}))
+end
+
+function crossbow:spawn_particles(pos, texture)
+ if CROSSBOW_ENABLE_PARTICLE_FX == true then
+ if type(texture) ~= "string" then
+ texture = CROSSBOW_EXPLOSION_TEXTURE
+ end
+ local spread = {x=0.1, y=0.1, z=0.1}
+ minetest.add_particlespawner(15, 0.3,
+ vector.subtract(pos, spread), vector.add(pos, spread),
+ {x=-1, y=1, z=-1}, {x=1, y=2, z=1},
+ {x=-2, y=-2, z=-2}, {x=2, y=-2, z=2},
+ 0.1, 0.75, 1, 2, false, texture
+ )
+ end
+end
+
+function crossbow:punch_node(pos, def)
+ local node = minetest.get_node(pos)
+ if not node then
+ return
+ end
+ local item = minetest.registered_items[node.name]
+ if not item then
+ return
+ end
+ if CROSSBOW_ENABLE_PROTECTION then
+ if minetest.is_protected(pos, def.name) then
+ return
+ end
+ end
+ if item.groups then
+ for k, v in pairs(def.groups) do
+ local level = item.groups[k] or 0
+ if level >= v then
+ minetest.remove_node(pos)
+ if item.tiles then
+ if item.tiles[1] then
+ crossbow:spawn_particles(pos, item.tiles[1])
+ end
+ end
+ break
end
- local playerpos = player:getpos()
- local obj = minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, arrow[2])
- local dir = player:get_look_dir()
- obj:setvelocity({x=dir.x*19, y=dir.y*19, z=dir.z*19})
- obj:setacceleration({x=dir.x*-3, y=-10, z=dir.z*-3})
- obj:setyaw(player:get_look_yaw()+math.pi)
- minetest.sound_play("castle_sound", {pos=playerpos})
- if obj:get_luaentity().player == "" then
- obj:get_luaentity().player = player
+ end
+ end
+end
+
+function crossbow:is_valid_object(object)
+ if object then
+ if object:is_player() == true then
+ return CROSSBOW_ALLOW_PLAYERS
+ end
+ if CROSSBOW_ALLOW_ENTITIES == true then
+ local luaentity = object:get_luaentity()
+ if luaentity then
+ if luaentity.name then
+ if allowed_entities[luaentity.name] then
+ return true
+ end
+ end
end
- obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name()
- return true
end
end
- return false
end
+
+function crossbow:get_intersect_pos(ray, plane, collisionbox)
+ local v = vector.subtract(ray.pos, plane.pos)
+ local r1 = get_dot_product(v, plane.normal)
+ local r2 = get_dot_product(ray.dir, plane.normal)
+ if r2 ~= 0 then
+ local t = -(r1 / r2)
+ local td = vector.multiply(ray.dir, {x=t, y=t, z=t})
+ local pt = vector.add(ray.pos, td)
+ local pd = vector.subtract(pt, plane.pos)
+ if math.abs(pd.x) < collisionbox[4] and
+ math.abs(pd.y) < collisionbox[5] and
+ math.abs(pd.z) < collisionbox[6] then
+ return pt
+ end
+ end
+end
+
+function crossbow:process_round(round)
+ local target = {object=nil, distance=10000}
+ local p1 = round.pos
+ local v1 = round.ray
+ for _,ref in ipairs(castle.objects) do
+ local p2 = vector.add(ref.pos, ref.offset)
+ if p1 and p2 and ref.name ~= round.name then
+ local d = vector.distance(p1, p2)
+ if d < round.def.step and d < target.distance then
+ local ray = {pos=p1, dir=v1}
+ local plane = {pos=p2, normal={x=-1, y=0, z=-1}}
+ local pos = crossbow:get_intersect_pos(ray, plane, ref.collisionbox)
+ if pos then
+ target.object = ref.object
+ target.pos = pos
+ target.distance = d
+ end
+ end
+ end
+ end
+ if target.object and target.pos then
+ local success, pos = minetest.line_of_sight(p1, target.pos, 1)
+ if success then
+ local user = minetest.get_player_by_name(round.name)
+ if user then
+ target.object:punch(user, nil, round.def.tool_caps, v1)
+ crossbow:spawn_particles(target.pos, CROSSBOW_EXPLOSION_TEXTURE)
+ end
+ return 1
+ elseif pos and CROSSBOW_ALLOW_NODES == true then
+ crossbow:punch_node(pos, round.def)
+ return 1
+ end
+ elseif CROSSBOW_ALLOW_NODES == true then
+ local d = round.def.step
+ local p2 = vector.add(p1, vector.multiply(v1, {x=d, y=d, z=d}))
+ local success, pos = minetest.line_of_sight(p1, p2, 1)
+ if pos then
+ crossbow:punch_node(pos, round.def)
+ return 1
+ end
+ end
+end
+
+local function get_animation_frame(dir)
+ local angle = math.atan(dir.y)
+ local frame = 90 - math.floor(angle * 360 / math.pi)
+ if frame < 1 then
+ frame = 1
+ elseif frame > 180 then
+ frame = 180
+ end
+ return frame
+end
+
+local function get_target_pos(p1, p2, dir, offset)
+ local d = vector.distance(p1, p2) - offset
+ local td = vector.multiply(dir, {x=d, y=d, z=d})
+ return vector.add(p1, td)
+end
+
+local function punch_object(puncher, object)
+ if puncher and crossbow:is_valid_object(object) then
+ if puncher ~= object then
+ local dir = puncher:get_look_dir()
+ local p1 = puncher:getpos()
+ local p2 = object:getpos()
+ local tpos = get_target_pos(p1, p2, dir, 0)
+ crossbow:spawn_particles(tpos, CROSSBOW_EXPLOSION_TEXTURE)
+ object:punch(puncher, nil, CROSSBOW_BOLT_TOOL_CAPS, dir)
+ end
+ end
+end
+
+local function stop_crossbow_bolt(object, pos, stuck)
+ local acceleration = {x=0, y=-10, z=0}
+ if stuck == true then
+ pos = pos or object:getpos()
+ acceleration = {x=0, y=0, z=0}
+ object:moveto(pos)
+ end
+ object:set_properties({
+ physical = true,
+ collisionbox = {-1/8,-1/8,-1/8, 1/8,1/8,1/8},
+ })
+ object:setvelocity({x=0, y=0, z=0})
+ object:setacceleration(acceleration)
+end
+
+minetest.register_craftitem("castle:crossbow_bolt", {
+ description = "Bolt",
+ stack_max = 20,
+ inventory_image = "castle_crossbow_bolt_inv.png",
+})
+
+minetest.register_entity("castle:crossbow_bolt_entity", {
+ physical = false,
+ visual = "mesh",
+ mesh = "castle_crossbow_bolt.b3d",
+ visual_size = {x=1.0, y=1.0},
+ textures = {
+ "castle_crossbow_bolt_uv.png"
+ },
+ timer = 0,
+ lifetime = CROSSBOW_BOLT_LIFETIME,
+ player = nil,
+ state = "init",
+ node_pos = nil,
+ collisionbox = {0,0,0, 0,0,0},
+ on_activate = function(self, staticdata)
+ self.object:set_armor_groups({immortal=1})
+ if staticdata == "expired" then
+ self.object:remove()
+ end
+ end,
+ on_punch = function(self, puncher)
+ if puncher then
+ if puncher:is_player() then
+ local stack = "castle:crossbow_bolt"
+ local inv = puncher:get_inventory()
+ if inv:room_for_item("main", stack) then
+ inv:add_item("main", stack)
+ self.object:remove()
+ end
+ end
+ end
+ end,
+ on_step = function(self, dtime)
+ if self.state == "init" then
+ return
+ end
+ self.timer = self.timer + dtime
+ self.lifetime = self.lifetime - dtime
+ if self.lifetime < 0 then
+ self.object:remove()
+ return
+ elseif self.state == "dropped" then
+ return
+ elseif self.state == "stuck" then
+ if self.timer > 1 then
+ if self.node_pos then
+ local node = minetest.get_node(self.node_pos)
+ if node.name then
+ local item = minetest.registered_items[node.name]
+ if item then
+ if not item.walkable then
+ self.state = "dropped"
+ stop_crossbow_bolt(self.object)
+ return
+ end
+ end
+ end
+ end
+ self.timer = 0
+ end
+ return
+ end
+ if self.timer > 0.2 then
+ local pos = self.object:getpos()
+ local dir = vector.normalize(self.object:getvelocity())
+ local frame = get_animation_frame(dir)
+ self.object:set_animation({x=frame, y=frame}, 0)
+ local objects = minetest.get_objects_inside_radius(pos, 5)
+ for _,obj in ipairs(objects) do
+ if crossbow:is_valid_object(obj) then
+ local collisionbox = {-0.25,-1.0,-0.25, 0.25,0.8,0.25}
+ local offset = CROSSBOW_PLAYER_OFFSET
+ if not obj:is_player() then
+ offset = CROSSBOW_ENTITY_OFFSET
+ local ent = obj:get_luaentity()
+ if ent then
+ local def = minetest.registered_entities[ent.name]
+ collisionbox = def.collisionbox or collisionbox
+ end
+ end
+ local opos = vector.add(obj:getpos(), offset)
+ local ray = {pos=pos, dir=dir}
+ local plane = {pos=opos, normal={x=-1, y=0, z=-1}}
+ local ipos = crossbow:get_intersect_pos(ray, plane, collisionbox)
+ if ipos then
+ punch_object(self.player, obj)
+ end
+ end
+ end
+ local p = vector.add(pos, vector.multiply(dir, {x=5, y=5, z=5}))
+ local _, npos = minetest.line_of_sight(pos, p, 1)
+ if npos then
+ local node = minetest.get_node(npos)
+ local tpos = get_target_pos(pos, npos, dir, 0.66)
+ self.node_pos = npos
+ self.state = "stuck"
+ stop_crossbow_bolt(self.object, tpos, true)
+ minetest.sound_play("castle_crossbow_bolt", {gain = 0.08, max_hear_distance = 2})
+ end
+ self.timer = 0
+ end
+ end,
+ get_staticdata = function(self)
+ return "expired"
+ end,
+})
+
+ minetest.register_tool("castle:crossbow_loaded", {
+ description = "Crossbow",
+ inventory_image = "castle_crossbow_loaded.png",
+ groups = {not_in_creative_inventory=1},
+ on_use = function(itemstack, user, pointed_thing)
+ minetest.sound_play("castle_crossbow_click", {object=user})
+ if not minetest.setting_getbool("creative_mode") then
+ itemstack:add_wear(65535/CROSSBOW_USES)
+ end
+ itemstack = "castle:crossbow 1 "..itemstack:get_wear()
+ local pos = user:getpos()
+ local dir = user:get_look_dir()
+ local yaw = user:get_look_yaw()
+ if pos and dir and yaw then
+ pos.y = pos.y + 1.5
+ local obj = minetest.add_entity(pos, "castle:crossbow_bolt_entity")
+ local ent = nil
+ if obj then
+ ent = obj:get_luaentity()
+ end
+ if ent then
+ obj:set_properties({
+ textures = {"castle_crossbow_bolt_uv.png"}
+ })
+ minetest.sound_play("castle_crossbow_shoot", {object=obj})
+ local frame = get_animation_frame(dir)
+ obj:setyaw(yaw + math.pi)
+ obj:set_animation({x=frame, y=frame}, 0)
+ obj:setvelocity({x=dir.x * 14, y=dir.y * 14, z=dir.z * 14})
+ if pointed_thing.type ~= "nothing" then
+ local ppos = minetest.get_pointed_thing_position(pointed_thing, false)
+ local _, npos = minetest.line_of_sight(pos, ppos, 1)
+ if npos then
+ ppos = npos
+ pointed_thing.type = "node"
+ end
+ if pointed_thing.type == "object" then
+ punch_object(user, pointed_thing.ref)
+ elseif pointed_thing.type == "node" then
+ local node = minetest.get_node(ppos)
+ local tpos = get_target_pos(pos, ppos, dir, 0.66)
+ minetest.after(0.2, function(object, pos, npos)
+ ent.node_pos = npos
+ ent.state = "stuck"
+ stop_crossbow_bolt(object, pos, true)
+ minetest.sound_play("castle_crossbow_bolt", {gain = 0.08, max_hear_distance = 2})
+ end, obj, tpos, ppos)
+ return itemstack
+ end
+ end
+ obj:setacceleration({x=dir.x * -3, y=-5, z=dir.z * -3})
+ ent.player = ent.player or user
+ ent.state = "flight"
+ end
+ end
+ return itemstack
+ end,
+ })
+
minetest.register_tool("castle:crossbow", {
description = "Crossbow",
- inventory_image = "castle_crossbow.png",
- stack_max = 1,
+ inventory_image = "castle_crossbow_inv.png",
on_use = function(itemstack, user, pointed_thing)
- if castle_shoot_arrow(item, user, pointed_thing) then
- if not minetest.setting_getbool("creative_mode") then
- itemstack:add_wear(65535/200)
+ local inv = user:get_inventory()
+if inv:contains_item("main", "castle:crossbow_bolt") then
+ minetest.sound_play("castle_crossbow_reload", {object=user})
+ if not minetest.setting_getbool("creative_mode") then
+ inv:remove_item("main", "castle:crossbow_bolt 1")
+ end
+ return "castle:crossbow_loaded 1 "..itemstack:get_wear()
end
- end
- return itemstack
+ minetest.sound_play("castle_crossbow_click", {object=user})
end,
})
+-----------
+--Crafting
+-----------
+
minetest.register_craft({
output = 'castle:crossbow',
recipe = {
@@ -46,3 +434,10 @@ minetest.register_craft({
{'', 'default:stick', ''},
}
})
+
+minetest.register_craft({
+ output = "castle:crossbow_bolt 6",
+ recipe = {
+ {'default:stick', 'default:stick', 'default:steel_ingot'},
+ }
+}) \ No newline at end of file
diff --git a/castle/init.lua b/castle/init.lua
index 8c56f72..5235d52 100644
--- a/castle/init.lua
+++ b/castle/init.lua
@@ -7,6 +7,7 @@ dofile(minetest.get_modpath("castle").."/shields_decor.lua")
dofile(minetest.get_modpath("castle").."/murder_hole.lua")
dofile(minetest.get_modpath("castle").."/orbs.lua")
dofile(minetest.get_modpath("castle").."/rope.lua")
+dofile(minetest.get_modpath("castle").."/crossbow.lua")
minetest.register_node("castle:stonewall", {
description = "Castle Wall",
@@ -15,6 +16,7 @@ minetest.register_node("castle:stonewall", {
paramtype = "light",
drop = "castle:stonewall",
groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("castle:rubble", {
@@ -23,6 +25,7 @@ minetest.register_node("castle:rubble", {
tiles = {"castle_rubble.png"},
paramtype = "light",
groups = {crumbly=3,falling_node=1},
+ sounds = default.node_sound_gravel_defaults(),
})
minetest.register_craft({
@@ -60,6 +63,7 @@ minetest.register_node("castle:stonewall_corner", {
"castle_stonewall.png",
"castle_corner_stonewall2.png"},
groups = {cracky=3},
+ sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
@@ -83,6 +87,7 @@ minetest.register_node("castle:roofslate", {
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
groups = {cracky=3,attached_node=1},
+ sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("castle:hides", {
@@ -158,38 +163,6 @@ if not (mod_building_blocks or mod_streets) then
end
-stairs.register_stair_and_slab("stonewall", "castle:stonewall",
- {cracky=3},
- {"castle_stonewall.png"},
- "Castle Wall Stair",
- "Castle Wall Slab",
- default.node_sound_stone_defaults())
-
-minetest.register_craft({
- output = "castle:stairs 4",
- recipe = {
- {"castle:stonewall","",""},
- {"castle:stonewall","castle:stonewall",""},
- {"castle:stonewall","castle:stonewall","castle:stonewall"},
- }
-})
-
-minetest.register_craft({
- output = "stairs:stair_stonewall 4",
- recipe = {
- {"","","castle:stonewall"},
- {"","castle:stonewall","castle:stonewall"},
- {"castle:stonewall","castle:stonewall","castle:stonewall"},
- }
-})
-
-minetest.register_craft({
- output = "stairs:slab_stonewall 6",
- recipe = {
- {"castle:stonewall","castle:stonewall","castle:stonewall"},
- }
-})
-
doors.register("castle:oak_door", {
tiles = {{ name = "castle_door_oak.png", backface_culling = true }},
description = "Oak Door",
@@ -232,7 +205,14 @@ function default.get_ironbound_chest_formspec(pos)
end
local function has_ironbound_chest_privilege(meta, player)
- if player:get_player_name() ~= meta:get_string("owner") then
+ local name = ""
+ if player then
+ if minetest.check_player_privs(player, "protection_bypass") then
+ return true
+ end
+ name = player:get_player_name()
+ end
+ if name ~= meta:get_string("owner") then
return false
end
return true
@@ -374,26 +354,10 @@ minetest.register_craft({
})
if minetest.get_modpath("moreblocks") then
- stairsplus:register_all("castle", "dungeon_stone", "castle:dungeon_stone", {
- description = "Dungeon Stone",
- tiles = {"castle_dungeon_stone.png"},
- groups = {cracky=1, not_in_creative_inventory=1},
- sounds = default.node_sound_stone_defaults(),
- sunlight_propagates = true,
- })
-
- stairsplus:register_all("castle", "pavement_brick", "castle:pavement_brick", {
- description = "Pavement Brick",
- tiles = {"castle_pavement_brick.png"},
- groups = {cracky=1, not_in_creative_inventory=1},
- sounds = default.node_sound_stone_defaults(),
- sunlight_propagates = true,
- })
-
stairsplus:register_all("castle", "stonewall", "castle:stonewall", {
description = "Stone Wall",
tiles = {"castle_stonewall.png"},
- groups = {cracky=1, not_in_creative_inventory=1},
+ groups = {cracky=3, not_in_creative_inventory=1},
sounds = default.node_sound_stone_defaults(),
sunlight_propagates = true,
})
@@ -401,54 +365,25 @@ if minetest.get_modpath("moreblocks") then
stairsplus:register_all("castle", "rubble", "castle:rubble", {
description = "Rubble",
tiles = {"castle_rubble.png"},
- groups = {cracky=1, not_in_creative_inventory=1},
- sounds = default.node_sound_stone_defaults(),
+ groups = {cracky=3, not_in_creative_inventory=1},
+ sounds = default.node_sound_gravel_defaults(),
sunlight_propagates = true,
})
-end
-
-stairs.register_stair_and_slab("dungeon_stone", "castle:dungeon_stone",
- {cracky=3},
- {"castle_dungeon_stone.png"},
- "Dungeon Stone Stair",
- "Dungeon Stone Slab",
- default.node_sound_stone_defaults())
-stairs.register_stair_and_slab("castle_pavement_brick", "castle:pavement_brick",
- {cracky=3},
- {"castle_pavement_brick.png"},
- "Castle Pavement Stair",
- "Castle Pavement Slab",
- default.node_sound_stone_defaults())
-
-minetest.register_craft({
- output = "stairs:slab_dungeon_stone 6",
- recipe = {
- {"castle:dungeon_stone","castle:dungeon_stone","castle:dungeon_stone"},
- }
-})
-
-minetest.register_craft({
- output = "stairs:slab_pavement_brick 6",
- recipe = {
- {"castle:pavement_brick","castle:pavement_brick","castle:pavement_brick"},
- }
-})
-
-minetest.register_craft({
- output = "stairs:stair_dungeon_stone 4",
- recipe = {
- {"","","castle:dungeon_stone"},
- {"","castle:dungeon_stone","castle:dungeon_stone"},
- {"castle:dungeon_stone","castle:dungeon_stone","castle:dungeon_stone"},
- }
-})
-
-minetest.register_craft({
- output = "stairs:stair_pavement_brick 4",
- recipe = {
- {"","","castle:pavement_brick"},
- {"","castle:pavement_brick","castle:pavement_brick"},
- {"castle:pavement_brick","castle:pavement_brick","castle:pavement_brick"},
- }
-})
+else
+ stairs.register_stair_and_slab("stonewall", "castle:stonewall",
+ {cracky=3},
+ {"castle_stonewall.png"},
+ "Castle Stonewall Stair",
+ "Castle Stonewall Slab",
+ default.node_sound_stone_defaults()
+ )
+
+ stairs.register_stair_and_slab("rubble", "castle:rubble",
+ {cracky=3},
+ {"castle_rubble.png"},
+ "Castle Rubble Stair",
+ "Castle Rubble Slab",
+ default.node_sound_stone_defaults()
+ )
+end
diff --git a/castle/jailbars.lua b/castle/jailbars.lua
index 504e23f..38490cb 100644
--- a/castle/jailbars.lua
+++ b/castle/jailbars.lua
@@ -14,3 +14,8 @@ if minetest.get_modpath("xpanes") then
{"default:steel_ingot","","default:steel_ingot"}}
})
end
+
+for i = 1, 15 do
+ minetest.register_alias("castle:jailbars_"..i, "xpanes:jailbars_"..i)
+end
+minetest.register_alias("castle:jailbars", "xpanes:jailbars")
diff --git a/castle/models/LICENSE.txt b/castle/models/LICENSE.txt
new file mode 100644
index 0000000..7c019e6
--- /dev/null
+++ b/castle/models/LICENSE.txt
@@ -0,0 +1,10 @@
+License Textures: Stuart Jones - WTFPL
+
+-castle_crossbow_bolt_inv.png
+-castle_crossbow_bolt_uv.png
+-castle_crossbow_hit.png
+
+Licence Models: Stuart Jones - CC-BY-SA 3.0
+
+-castle_crossbow_bolt.b3d
+-castle_crossbow_bolt.blend \ No newline at end of file
diff --git a/castle/models/castle_crossbow_bolt.b3d b/castle/models/castle_crossbow_bolt.b3d
new file mode 100644
index 0000000..d24be3c
--- /dev/null
+++ b/castle/models/castle_crossbow_bolt.b3d
Binary files differ
diff --git a/castle/models/castle_crossbow_bolt.blend b/castle/models/castle_crossbow_bolt.blend
new file mode 100644
index 0000000..4cf5f43
--- /dev/null
+++ b/castle/models/castle_crossbow_bolt.blend
Binary files differ
diff --git a/castle/models/castle_crossbow_bolt_uv.png b/castle/models/castle_crossbow_bolt_uv.png
new file mode 100644
index 0000000..b7d29c5
--- /dev/null
+++ b/castle/models/castle_crossbow_bolt_uv.png
Binary files differ
diff --git a/castle/murder_hole.lua b/castle/murder_hole.lua
index bd0dfb1..672f3b9 100644
--- a/castle/murder_hole.lua
+++ b/castle/murder_hole.lua
@@ -22,7 +22,7 @@ for _, row in ipairs(hole.types) do
description = desc.." Murder Hole",
tiles = {tile..".png"},
groups = {cracky=3},
- sounds = default.node_sound_defaults(),
+ sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
diff --git a/castle/pillars.lua b/castle/pillars.lua
index ac63cb5..40b8143 100644
--- a/castle/pillars.lua
+++ b/castle/pillars.lua
@@ -26,7 +26,7 @@ for _, row in ipairs(pillar.types) do
description = desc.." Pillar Base",
tiles = {tile..".png"},
groups = {cracky=3,attached_node=1},
- sounds = default.node_sound_defaults(),
+ sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
@@ -43,7 +43,7 @@ for _, row in ipairs(pillar.types) do
description = desc.." Pillar Top",
tiles = {tile..".png"},
groups = {cracky=3,attached_node=1},
- sounds = default.node_sound_defaults(),
+ sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
@@ -61,7 +61,7 @@ for _, row in ipairs(pillar.types) do
description = desc.." Pillar Middle",
tiles = {tile..".png"},
groups = {cracky=3,attached_node=1},
- sounds = default.node_sound_defaults(),
+ sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
diff --git a/castle/rope.lua b/castle/rope.lua
index 1141913..8c7b73e 100644
--- a/castle/rope.lua
+++ b/castle/rope.lua
@@ -4,6 +4,7 @@ minetest.register_node("castle:ropes",{
sunlight_propagates = true,
tiles = {"castle_ropes.png"},
groups = {choppy=3,snappy=3,oddly_breakable_by_hand=3,flammable=1},
+ sounds = default.node_sound_defaults(),
paramtype = "light",
climbable = true,
walkable = false,
@@ -73,6 +74,7 @@ minetest.register_node("castle:ropebox", {
paramtype = "light",
paramtype2 = "facedir",
groups = {choppy=3},
+ sounds = default.node_sound_defaults(),
node_box = {
type = "fixed",
fixed = {
diff --git a/castle/shields_decor.lua b/castle/shields_decor.lua
index 354b099..20823f6 100644
--- a/castle/shields_decor.lua
+++ b/castle/shields_decor.lua
@@ -5,6 +5,7 @@ minetest.register_node("castle:shield",{
paramtype2 = "facedir",
paramtype = "light",
groups={cracky=3},
+ sounds = default.node_sound_defaults(),
node_box = {
type = "fixed",
fixed = {
@@ -39,6 +40,7 @@ minetest.register_node("castle:shield_2",{
paramtype2 = "facedir",
paramtype = "light",
groups={cracky=3},
+ sounds = default.node_sound_defaults(),
node_box = {
type = "fixed",
fixed = {
@@ -72,6 +74,7 @@ minetest.register_node("castle:shield_3",{
paramtype2 = "facedir",
paramtype = "light",
groups={cracky=3},
+ sounds = default.node_sound_defaults(),
node_box = {
type = "fixed",
fixed = {
diff --git a/castle/sounds/LICENSE.txt b/castle/sounds/LICENSE.txt
new file mode 100644
index 0000000..d461ac2
--- /dev/null
+++ b/castle/sounds/LICENSE.txt
@@ -0,0 +1,52 @@
+License Sounds
+------------------
+
+(From Simple Shooter mod by Stuart Jones)
+-castle_crossbow_click.ogg
+-castle_crossbow_shoot.ogg
+-castle_reload.ogg
+
+Author : freesound.org
+License : Attribution 3.0 Unported (CC BY 3.0)
+CC0 1.0 Universal (CC0 1.0)
+
+------------------
+
+(From Minetest Game:default mod)
+-default_wood_footstep.1.ogg
+(renamed to : castle_crossbow_bolt.ogg)
+Author : Mito551
+License : (CC BY-SA)
+
+------------------
+
+Author: Brandon Morris
+file: castle_orbs.ogg
+original file : completetask_0.mp3
+http://opengameart.org/content/completion-sound
+License: CC-BY 3.0
+http://creativecommons.org/licenses/by/3.0/
+
+------------------
+
+(From Ambience mod)
+
+Author: Mike Koenig
+file: castle_owl.ogg
+original file : horned_owl.ogg
+http://soundbible.com/1851-Horned-Owl.html
+License: Attribution 3.0
+http://creativecommons.org/licenses/by/3.0/
+
+------------------
+
+(From Ambience mod)
+
+Author: PsychoBird
+file: castle_birds.ogg
+original file : Best Cardinal Bird.ogg
+http://soundbible.com/1515-Best-Cardinal-Bird.html
+License: Attribution 3.0
+http://creativecommons.org/licenses/by/3.0/
+
+------------------ \ No newline at end of file
diff --git a/castle/sounds/castle_birds.ogg b/castle/sounds/castle_birds.ogg
new file mode 100644
index 0000000..4a93395
--- /dev/null
+++ b/castle/sounds/castle_birds.ogg
Binary files differ
diff --git a/castle/sounds/castle_crossbow_bolt.ogg b/castle/sounds/castle_crossbow_bolt.ogg
new file mode 100644
index 0000000..34f63a1
--- /dev/null
+++ b/castle/sounds/castle_crossbow_bolt.ogg
Binary files differ
diff --git a/castle/sounds/castle_crossbow_click.ogg b/castle/sounds/castle_crossbow_click.ogg
new file mode 100644
index 0000000..8e60db8
--- /dev/null
+++ b/castle/sounds/castle_crossbow_click.ogg
Binary files differ
diff --git a/castle/sounds/castle_crossbow_shoot.ogg b/castle/sounds/castle_crossbow_shoot.ogg
new file mode 100644
index 0000000..9ce9176
--- /dev/null
+++ b/castle/sounds/castle_crossbow_shoot.ogg
Binary files differ
diff --git a/castle/sounds/castle_orbs.ogg b/castle/sounds/castle_orbs.ogg
new file mode 100644
index 0000000..c7aa8f8
--- /dev/null
+++ b/castle/sounds/castle_orbs.ogg
Binary files differ
diff --git a/castle/sounds/castle_owl.ogg b/castle/sounds/castle_owl.ogg
new file mode 100644
index 0000000..f30d0b3
--- /dev/null
+++ b/castle/sounds/castle_owl.ogg
Binary files differ
diff --git a/castle/sounds/castle_reload.ogg b/castle/sounds/castle_reload.ogg
new file mode 100644
index 0000000..47f7245
--- /dev/null
+++ b/castle/sounds/castle_reload.ogg
Binary files differ
diff --git a/castle/tapestry.lua b/castle/tapestry.lua
index 3cc3401..8b31bdc 100644
--- a/castle/tapestry.lua
+++ b/castle/tapestry.lua
@@ -2,23 +2,23 @@ local tapestry = {}
minetest.register_node("castle:tapestry_top", {
drawtype = "nodebox",
- description = "Tapestry Top",
+ description = "Tapestry Top",
tiles = {"default_wood.png"},
sunlight_propagates = true,
- groups = {flammable=3,oddly_breakable_by_hand=1},
+ groups = {flammable=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
type = "fixed",
fixed = {
- {-0.600000,-0.500000,0.375000,0.600000,-0.375000,0.500000},
+ {-0.6,-0.5,0.375,0.6,-0.375,0.5},
},
},
selection_box = {
type = "fixed",
fixed = {
- {-0.600000,-0.500000,0.375000,0.600000,-0.375000,0.500000},
+ {-0.6,-0.5,0.375,0.6,-0.375,0.5},
},
},
})
@@ -30,56 +30,60 @@ minetest.register_craft({
})
tapestry.colours = {
- {"white", "White", "white"},
- {"grey", "Grey", "grey"},
- {"black", "Black", "black"},
- {"red", "Red", "red"},
- {"yellow", "Yellow", "yellow"},
- {"green", "Green", "green"},
- {"cyan", "Cyan", "cyan"},
- {"blue", "Blue", "blue"},
- {"magenta", "Magenta", "magenta"},
- {"orange", "Orange", "orange"},
- {"violet", "Violet", "violet"},
- {"dark_grey", "Dark Grey", "dark_grey"},
- {"dark_green", "Dark Green", "dark_green"},
- {"pink", "Pink", "pink"},
- {"brown", "Brown", "brown"},
+ {"white", "White", "white", "#FFFFFF"},
+ {"grey", "Grey", "grey", "#4B4B4B"},
+ {"black", "Black", "black", "#1F1F1F"},
+ {"red", "Red", "red", "#B21414"},
+ {"yellow", "Yellow", "yellow", "#FFD011"},
+ {"green", "Green", "green", "#43A91C"},
+ {"cyan", "Cyan", "cyan", "#00737B"},
+ {"blue", "Blue", "blue", "#003A7E"},
+ {"magenta", "Magenta", "magenta", "#DD0487"},
+ {"orange", "Orange", "orange", "#D55014"},
+ {"violet", "Violet", "violet", "#5D01AC"},
+ {"dark_grey", "Dark Grey", "dark_grey", "#3A3A3A"},
+ {"dark_green", "Dark Green", "dark_green", "#206400"},
+ {"pink", "Pink", "pink", "#FF8383"},
+ {"brown", "Brown", "brown", "#6D3800"},
}
for _, row in ipairs(tapestry.colours) do
local name = row[1]
local desc = row[2]
local craft_color_group = row[3]
+ local defcolor = row[4]
-- Node Definition
- minetest.register_node("castle:tapestry_"..name, {
- drawtype = "nodebox",
- description = desc.." Tapestry",
- tiles = {"wool_"..name..".png"},
- groups = {oddly_breakable_by_hand=3,flammable=3,not_in_creative_inventory=1},
- sounds = default.node_sound_defaults(),
- paramtype = "light",
- paramtype2 = "facedir",
- node_box = {
- type = "fixed",
- fixed = {
- {-0.312500,-0.500000,0.437500,-0.187500,-0.375000,0.500000},
- {0.187500,-0.500000,0.437500,0.312500,-0.375000,0.500000},
- {-0.375000,-0.375000,0.437500,-0.125000,-0.250000,0.500000},
- {0.125000,-0.375000,0.437500,0.375000,-0.250000,0.500000},
- {-0.437500,-0.250000,0.437500,-0.062500,-0.125000,0.500000},
- {0.062500,-0.250000,0.437500,0.437500,-0.125000,0.500000},
- {-0.500000,-0.125000,0.437500,0.000000,0.000000,0.500000},
- {0.000000,-0.125000,0.437500,0.500000,0.000000,0.500000},
- {-0.500000,0.000000,0.437500,0.500000,1.500000,0.500000},
- },
- },
- selection_box = {
- type = "fixed",
- fixed = {
- {-0.500000,-0.500000,0.437500,0.500000,1.500000,0.500000},
- },
- },
+ minetest.register_node("castle:tapestry_"..name, {
+ drawtype = "nodebox",
+ description = desc.." Tapestry",
+ --uses default wool textures for tapestry material
+ tiles = {"wool_"..name..".png^[transformR90"},
+ --uses custom texture for tapestry material
+ --tiles = {"castle_tapestry_overlay.png^[colorize:" .. defcolor ..":205"},
+ groups = {oddly_breakable_by_hand=3,flammable=3},
+ sounds = default.node_sound_defaults(),
+ paramtype = "light",
+ paramtype2 = "facedir",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3125,-0.5,0.4375,-0.1875,-0.375,0.5},
+ {0.1875,-0.5,0.4375,0.3125,-0.375,0.5},
+ {-0.375,-0.375,0.4375,-0.125,-0.25,0.5},
+ {0.125,-0.375,0.4375,0.375,-0.25,0.5},
+ {-0.4375,-0.25,0.4375,-0.0625,-0.125,0.5},
+ {0.0625,-0.25,0.4375,0.4375,-0.125,0.5},
+ {-0.5,-0.125,0.4375,0.0,0.0,0.5},
+ {0.0,-0.125,0.4375,0.5,0.0,0.5},
+ {-0.5,0.0,0.4375,0.5,1.5,0.5},
+ },
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4375,0.5,1.5,0.5},
+ },
+ },
})
if craft_color_group then
-- Crafting from wool and a stick
@@ -92,40 +96,43 @@ for _, row in ipairs(tapestry.colours) do
end
for _, row in ipairs(tapestry.colours) do
- local name = row[1]
- local desc = row[2]
- local craft_color_group = row[3]
- -- Node Definition
- minetest.register_node("castle:long_tapestry_"..name, {
- drawtype = "nodebox",
- description = desc.." Tapestry (Long)",
- tiles = {"wool_"..name..".png"},
- groups = {oddly_breakable_by_hand=3,flammable=3,not_in_creative_inventory=1},
- sounds = default.node_sound_defaults(),
- paramtype = "light",
- paramtype2 = "facedir",
- node_box = {
- type = "fixed",
- fixed = {
- {-0.312500,-0.500000,0.437500,-0.187500,-0.375000,0.500000},
- {0.187500,-0.500000,0.437500,0.312500,-0.375000,0.500000},
- {-0.375000,-0.375000,0.437500,-0.125000,-0.250000,0.500000},
- {0.125000,-0.375000,0.437500,0.375000,-0.250000,0.500000},
- {-0.437500,-0.250000,0.437500,-0.062500,-0.125000,0.500000},
- {0.062500,-0.250000,0.437500,0.437500,-0.125000,0.500000},
- {-0.500000,-0.125000,0.437500,0.000000,0.000000,0.500000},
- {0.000000,-0.125000,0.437500,0.500000,0.000000,0.500000},
- {-0.500000,0.000000,0.437500,0.500000,2.500000,0.500000},
- },
- },
- selection_box = {
- type = "fixed",
- fixed = {
- {-0.500000,-0.500000,0.437500,0.500000,2.500000,0.500000},
- },
- },
+ local name = row[1]
+ local desc = row[2]
+ local craft_color_group = row[3]
+ local defcolor = row[4]
+ -- Node Definition
+ minetest.register_node("castle:long_tapestry_"..name, {
+ drawtype = "nodebox",
+ description = desc.." Tapestry (Long)",
+ --uses default wool textures for tapestry material
+ tiles = {"wool_"..name..".png^[transformR90"},
+ --uses custom texture for tapestry material
+ --tiles = {"castle_tapestry_overlay.png^[colorize:" .. defcolor ..":205"},
+ groups = {oddly_breakable_by_hand=3,flammable=3},
+ sounds = default.node_sound_defaults(),
+ paramtype = "light",
+ paramtype2 = "facedir",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3125,-0.5,0.4375,-0.1875,-0.375,0.5},
+ {0.1875,-0.5,0.4375,0.3125,-0.375,0.5},
+ {-0.375,-0.375,0.4375,-0.125,-0.25,0.5},
+ {0.125,-0.375,0.4375,0.375,-0.25,0.5},
+ {-0.4375,-0.25,0.4375,-0.0625,-0.125,0.5},
+ {0.0625,-0.25,0.4375,0.4375,-0.125,0.5},
+ {-0.5,-0.125,0.4375,0.0,0.0,0.5},
+ {0.0,-0.125,0.4375,0.5,0.0,0.5},
+ {-0.5,0.0,0.4375,0.5,2.5,0.5},
+ },
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4375,0.5,2.5,0.5},
+ },
+ },
})
-
if craft_color_group then
-- Crafting from normal tapestry and wool
minetest.register_craft({
@@ -137,38 +144,42 @@ for _, row in ipairs(tapestry.colours) do
end
for _, row in ipairs(tapestry.colours) do
- local name = row[1]
- local desc = row[2]
- local craft_color_group = row[3]
- -- Node Definition
- minetest.register_node("castle:very_long_tapestry_"..name, {
- drawtype = "nodebox",
- description = desc.." Tapestry (Very Long)",
- tiles = {"wool_"..name..".png"},
- groups = {oddly_breakable_by_hand=3,flammable=3,not_in_creative_inventory=1},
- sounds = default.node_sound_defaults(),
- paramtype = "light",
- paramtype2 = "facedir",
- node_box = {
- type = "fixed",
- fixed = {
- {-0.312500,-0.500000,0.437500,-0.187500,-0.375000,0.500000},
- {0.187500,-0.500000,0.437500,0.312500,-0.375000,0.500000},
- {-0.375000,-0.375000,0.437500,-0.125000,-0.250000,0.500000},
- {0.125000,-0.375000,0.437500,0.375000,-0.250000,0.500000},
- {-0.437500,-0.250000,0.437500,-0.062500,-0.125000,0.500000},
- {0.062500,-0.250000,0.437500,0.437500,-0.125000,0.500000},
- {-0.500000,-0.125000,0.437500,0.000000,0.000000,0.500000},
- {0.000000,-0.125000,0.437500,0.500000,0.000000,0.500000},
- {-0.500000,0.000000,0.437500,0.500000,3.500000,0.500000},
- },
- },
- selection_box = {
- type = "fixed",
- fixed = {
- {-0.500000,-0.500000,0.437500,0.500000,3.500000,0.500000},
- },
- },
+ local name = row[1]
+ local desc = row[2]
+ local craft_color_group = row[3]
+ local defcolor = row[4]
+ -- Node Definition
+ minetest.register_node("castle:very_long_tapestry_"..name, {
+ drawtype = "nodebox",
+ description = desc.." Tapestry (Very Long)",
+ --uses default wool textures for tapestry material
+ tiles = {"wool_"..name..".png^[transformR90"},
+ --uses custom texture for tapestry material
+ --tiles = {"castle_tapestry_overlay.png^[colorize:" .. defcolor ..":205"},
+ groups = {oddly_breakable_by_hand=3,flammable=3},
+ sounds = default.node_sound_defaults(),
+ paramtype = "light",
+ paramtype2 = "facedir",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.3125,-0.5,0.4375,-0.1875,-0.375,0.5},
+ {0.1875,-0.5,0.4375,0.3125,-0.375,0.5},
+ {-0.375,-0.375,0.4375,-0.125,-0.25,0.5},
+ {0.125,-0.375,0.4375,0.375,-0.25,0.5},
+ {-0.4375,-0.25,0.4375,-0.0625,-0.125,0.5},
+ {0.0625,-0.25,0.4375,0.4375,-0.125,0.5},
+ {-0.5,-0.125,0.4375,0.0,0.0,0.5},
+ {0.0,-0.125,0.4375,0.5,0.0,0.5},
+ {-0.5,0.0,0.4375,0.5,3.5,0.5},
+ },
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4375,0.5,3.5,0.5},
+ },
+ },
})
if craft_color_group then
-- Crafting from long tapestry and wool
@@ -179,4 +190,3 @@ for _, row in ipairs(tapestry.colours) do
})
end
end
-
diff --git a/castle/textures/LICENSE.txt b/castle/textures/LICENSE.txt
index e2aefc5..7752294 100644
--- a/castle/textures/LICENSE.txt
+++ b/castle/textures/LICENSE.txt
@@ -1,21 +1,38 @@
--------------------------------------------
-All textures based on
-original textures by: ???
+License Textures: Stuart Jones - WTFPL
+-castle_crossbow_bolt_inv.png
+-castle_crossbow_bolt_uv.png
+-castle_crossbow_hit.png
-License Textures: ???
+Licence Models: Stuart Jones - CC-BY-SA 3.0
+-castle_crossbow_bolt.b3d
+-castle_crossbow_bolt.blend
+
+--------------------------------------------
+
+textures based on Castle mod
+original textures by Philipner ???
+
+License Textures: CC-BY-SA 3.0 ???
--------------------------------------------
License Textures: Napiophelios - CC-BY-SA 3.0
+-castle_battleaxe.png
-castle_corner_stonewall1.png
-castle_corner_stonewall2.png
-castle_crate.png
-castle_crate_top.png
+-castle_crossbow_bolt_inv.png
+-castle_crossbow_hit.png
+-castle_crossbow_inv.png
+-castle_crossbow_loaded.png
-castle_door_jail.png
-castle_door_oak.png
-castle_dungeon_stone.png
+-castle_grey.png
-castle_hide.png
-castle_ironbound_chest_back.png
-castle_ironbound_chest_front.png
@@ -24,6 +41,8 @@ License Textures: Napiophelios - CC-BY-SA 3.0
-castle_jail_door_inv.png
-castle_jailbars.png
-castle_oak_door_inv.png
+-castle_orb_day_weild.png
+-castle_orb_night_weild.png
-castle_pavement_brick.png
-castle_ropebox_side_1.png
-castle_ropebox_side_2.png
@@ -38,6 +57,7 @@ License Textures: Napiophelios - CC-BY-SA 3.0
-castle_shield_side_2.png
-castle_shield_side_3.png
-castle_slate.png
+-castle_space.png
-castle_steel.png
-castle_stonewall.png
-castle_straw_bale.png
diff --git a/castle/textures/castle_crossbow_bolt_inv.png b/castle/textures/castle_crossbow_bolt_inv.png
new file mode 100644
index 0000000..87cd847
--- /dev/null
+++ b/castle/textures/castle_crossbow_bolt_inv.png
Binary files differ
diff --git a/castle/textures/castle_crossbow_hit.png b/castle/textures/castle_crossbow_hit.png
new file mode 100644
index 0000000..0a2b2f3
--- /dev/null
+++ b/castle/textures/castle_crossbow_hit.png
Binary files differ
diff --git a/castle/textures/castle_crossbow_inv.png b/castle/textures/castle_crossbow_inv.png
new file mode 100644
index 0000000..39bcf07
--- /dev/null
+++ b/castle/textures/castle_crossbow_inv.png
Binary files differ
diff --git a/castle/textures/castle_crossbow_loaded.png b/castle/textures/castle_crossbow_loaded.png
new file mode 100644
index 0000000..ca2dca7
--- /dev/null
+++ b/castle/textures/castle_crossbow_loaded.png
Binary files differ
diff --git a/castle/textures/castle_orb_day.png b/castle/textures/castle_orb_day.png
new file mode 100644
index 0000000..3c12896
--- /dev/null
+++ b/castle/textures/castle_orb_day.png
Binary files differ
diff --git a/castle/textures/castle_orb_day_weild.png b/castle/textures/castle_orb_day_weild.png
new file mode 100644
index 0000000..1cfc6df
--- /dev/null
+++ b/castle/textures/castle_orb_day_weild.png
Binary files differ
diff --git a/castle/textures/castle_orb_night.png b/castle/textures/castle_orb_night.png
new file mode 100644
index 0000000..2b062d1
--- /dev/null
+++ b/castle/textures/castle_orb_night.png
Binary files differ
diff --git a/castle/textures/castle_orb_night_weild.png b/castle/textures/castle_orb_night_weild.png
new file mode 100644
index 0000000..ded6e38
--- /dev/null
+++ b/castle/textures/castle_orb_night_weild.png
Binary files differ
diff --git a/castle/textures/castle_tapestry_overlay.png b/castle/textures/castle_tapestry_overlay.png
new file mode 100644
index 0000000..2ec8333
--- /dev/null
+++ b/castle/textures/castle_tapestry_overlay.png
Binary files differ
diff --git a/castle/town_item.lua b/castle/town_item.lua
index 57aeb37..6e2b4f8 100644
--- a/castle/town_item.lua
+++ b/castle/town_item.lua
@@ -13,6 +13,7 @@ minetest.register_node("castle:anvil",{
description = "Anvil",
tiles = {"castle_steel.png"},
groups = {cracky=2,falling_node=1},
+ sounds = default.node_sound_stone_defaults(),
paramtype = "light",
paramtype2 = "facedir",
node_box = {
@@ -42,6 +43,7 @@ minetest.register_node("castle:workbench",{
paramtype2 = "facedir",
paramtype = "light",
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
+ sounds = default.node_sound_wood_defaults(),
drawtype = "normal",
on_construct = function ( pos )
local meta = minetest.get_meta( pos )
@@ -139,7 +141,7 @@ minetest.register_abm( {
action = function ( pos, node )
local meta = minetest.get_meta( pos )
local inv = meta:get_inventory()
- local cresult, newinput, needed
+ local result, newinput, needed
if not inv:is_empty( 'src' ) then
-- Check for a valid recipe and sufficient resources to craft it
needed, newinput, result = get_recipe( inv )
@@ -158,7 +160,6 @@ minetest.register_abm( {
end
} )
-
local function has_locked_chest_privilege(meta, player)
if player:get_player_name() ~= meta:get_string("owner") then
return false
@@ -166,7 +167,6 @@ local function has_locked_chest_privilege(meta, player)
return true
end
-
minetest.register_craft({
output = "castle:workbench",
recipe = {
@@ -182,6 +182,7 @@ minetest.register_node("castle:dungeon_stone", {
tiles = {"castle_dungeon_stone.png"},
groups = {cracky=2},
paramtype = "light",
+ sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
@@ -204,6 +205,7 @@ minetest.register_node("castle:crate", {
drawtype = "normal",
tiles = {"castle_crate_top.png","castle_crate_top.png","castle_crate.png","castle_crate.png","castle_crate.png","castle_crate.png"},
groups = {choppy=3},
+ sounds = default.node_sound_wood_defaults(),
paramtype = "light",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
@@ -237,13 +239,6 @@ minetest.register_node("castle:crate", {
end,
})
-local function has_locked_chest_privilege(meta, player)
- if player:get_player_name() ~= meta:get_string("owner") then
- return false
- end
- return true
-end
-
minetest.register_craft({
output = "castle:crate",
recipe = {
@@ -257,6 +252,7 @@ minetest.register_node("castle:bound_straw", {
drawtype = "normal",
tiles = {"castle_straw_bale.png"},
groups = {choppy=4, flammable=1, oddly_breakable_by_hand=3},
+ sounds = default.node_sound_leaves_defaults(),
paramtype = "light",
})
@@ -273,6 +269,7 @@ minetest.register_node("castle:pavement_brick", {
tiles = {"castle_pavement_brick.png"},
groups = {cracky=2},
paramtype = "light",
+ sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
@@ -290,6 +287,7 @@ minetest.register_node("castle:light",{
light_source = 14,
tiles = {"castle_street_light.png"},
groups = {cracky=2},
+ sounds = default.node_sound_glass_defaults(),
paramtype = "light",
})
@@ -302,3 +300,37 @@ minetest.register_craft({
}
})
+if minetest.get_modpath("moreblocks") then
+ stairsplus:register_all("castle", "dungeon_stone", "castle:dungeon_stone", {
+ description = "Dungeon Stone",
+ tiles = {"castle_dungeon_stone.png"},
+ groups = {cracky=2, not_in_creative_inventory=1},
+ sounds = default.node_sound_stone_defaults(),
+ sunlight_propagates = true,
+ })
+
+ stairsplus:register_all("castle", "pavement_brick", "castle:pavement_brick", {
+ description = "Pavement Brick",
+ tiles = {"castle_pavement_brick.png"},
+ groups = {cracky=2, not_in_creative_inventory=1},
+ sounds = default.node_sound_stone_defaults(),
+ sunlight_propagates = true,
+ })
+
+else
+ stairs.register_stair_and_slab("dungeon_stone", "castle:dungeon_stone",
+ {cracky=2},
+ {"castle_dungeon_stone.png"},
+ "Dungeon Stone Stair",
+ "Dungeon Stone Slab",
+ default.node_sound_stone_defaults()
+ )
+
+ stairs.register_stair_and_slab("pavement_brick", "castle:pavement_brick",
+ {cracky=2},
+ {"castle_pavement_brick.png"},
+ "Castle Pavement Stair",
+ "Castle Pavement Slab",
+ default.node_sound_stone_defaults()
+ )
+end