diff --git a/sheep/README.txt b/sheep/README.txt index 3864be2..054894b 100644 --- a/sheep/README.txt +++ b/sheep/README.txt @@ -1,12 +1,13 @@ Sheep for Creatures MOB-Engine ============================== -Copyright (c) 2015 BlockMen +Copyright (c) 2015-2016 BlockMen -Version: 2.0 Beta +Version: 2.1 Adds sheep to Minetest (requires Creatures MOB-Engine). Sheep spawn only at day-time and are friendly and remain around 5 minutes in the world. +There are four different wool colors: white, grey, brown and black. You can tame them by feading them with wheat. If there is grass they eat the grass and regrow wool that way. They will follow you if you have Wheat in your hand. Sheep have 8 HP and drop 1-2 wool when punched or 1-3 wool when using shears. @@ -20,11 +21,11 @@ ingot stick License: ~~~~~~~~ Code: -(c) Copyright 2015 BlockMen; modified zlib-License +(c) Copyright 2015-2016 BlockMen; modified zlib-License see "LICENSE.txt" for details. Media(textures and meshes/models): -(c) Copyright (2014-2015) BlockMen; CC-BY-SA 3.0 +(c) Copyright (2014-2016) BlockMen; CC-BY-SA 3.0 Sounds: - creatures_sheep.1.ogg, confusion_music(https://freesound.org/people/confusion_music) CC-BY 3.0 diff --git a/sheep/init.lua b/sheep/init.lua index 76b691b..2872b32 100644 --- a/sheep/init.lua +++ b/sheep/init.lua @@ -1,5 +1,5 @@ --= Sheep for Creatures MOB-Engine (cme) =-- --- Copyright (c) 2015 BlockMen +-- Copyright (c) 2015-2016 BlockMen -- -- init.lua -- @@ -34,163 +34,182 @@ core.register_craft({ } }) -local function shear(self, drop_count, sound) - if self.has_wool == true then - self.has_wool = false - local pos = self.object:getpos() - if sound then - core.sound_play("creatures_shears", {pos = pos, gain = 1, max_hear_distance = 10}) - end - self.object:set_properties({textures = {"creatures_sheep.png"}}) - creatures.dropItems(pos, {{"wool:white", drop_count}}) - end +local function setColor(self) + if self and self.object then + local ext = ".png" + if self.has_wool ~= true then + ext = ".png^(creatures_sheep_shaved.png^[colorize:" .. self.wool_color:gsub("grey", "gray") .. ":50)" + end + self.object:set_properties({textures = {"creatures_sheep.png^creatures_sheep_" .. self.wool_color .. ext}}) + end end +local function shear(self, drop_count, sound) + if self.has_wool == true then + self.has_wool = false + local pos = self.object:getpos() + if sound then + core.sound_play("creatures_shears", {pos = pos, gain = 1, max_hear_distance = 10}) + end + + setColor(self) + creatures.dropItems(pos, {{"wool:" .. self.wool_color, drop_count}}) + end +end + + +-- white, grey, brown, black (see wool colors as reference) +local colors = {"white", "grey", "brown", "black"} + local def = { - name = "creatures:sheep", - stats = { - hp = 8, - lifetime = 450, -- 7,5 Minutes - can_jump = 1, - can_swim = true, - can_burn = true, - can_panic = true, - has_falldamage = true, - has_kockback = true, - }, + name = "creatures:sheep", + stats = { + hp = 8, + lifetime = 450, -- 7,5 Minutes + can_jump = 1, + can_swim = true, + can_burn = true, + can_panic = true, + has_falldamage = true, + has_kockback = true, + }, - model = { - mesh = "creatures_sheep.b3d", - textures = {"creatures_sheep.png^creatures_sheep_white.png"}, - collisionbox = {-0.5, -0.01, -0.55, 0.5, 1.1, 0.55}, - rotation = -90.0, - animations = { - idle = {start = 1, stop = 60, speed = 15}, - walk = {start = 81, stop = 101, speed = 18}, - walk_long = {start = 81, stop = 101, speed = 18}, - eat = {start = 107, stop = 170, speed = 12, loop = false}, - follow = {start = 81, stop = 101, speed = 15}, - death = {start = 171, stop = 191, speed = 32, loop = false, duration = 2.52}, - }, - }, + model = { + mesh = "creatures_sheep.b3d", + textures = {"creatures_sheep.png^creatures_sheep_white.png"}, + collisionbox = {-0.5, -0.01, -0.55, 0.5, 1.1, 0.55}, + rotation = -90.0, + animations = { + idle = {start = 1, stop = 60, speed = 15}, + walk = {start = 81, stop = 101, speed = 18}, + walk_long = {start = 81, stop = 101, speed = 18}, + eat = {start = 107, stop = 170, speed = 12, loop = false}, + follow = {start = 81, stop = 101, speed = 15}, + death = {start = 171, stop = 191, speed = 32, loop = false, duration = 2.52}, + }, + }, - sounds = { - on_damage = {name = "creatures_sheep", gain = 1.0, distance = 10}, - on_death = {name = "creatures_sheep", gain = 1.0, distance = 10}, - swim = {name = "creatures_splash", gain = 1.0, distance = 10,}, - random = { - idle = {name = "creatures_sheep", gain = 0.6, distance = 10, time_min = 23}, - }, - }, + sounds = { + on_damage = {name = "creatures_sheep", gain = 1.0, distance = 10}, + on_death = {name = "creatures_sheep", gain = 1.0, distance = 10}, + swim = {name = "creatures_splash", gain = 1.0, distance = 10,}, + random = { + idle = {name = "creatures_sheep", gain = 0.6, distance = 10, time_min = 23}, + }, + }, - modes = { - idle = {chance = 0.5, duration = 10, update_yaw = 8}, - walk = {chance = 0.14, duration = 4.5, moving_speed = 1.3}, - walk_long = {chance = 0.11, duration = 8, moving_speed = 1.3, update_yaw = 5}, - -- special modes - follow = {chance = 0, duration = 20, radius = 4, timer = 5, moving_speed = 1, items = {"farming:wheat"}}, - eat = {chance = 0.25, - duration = 4, - nodes = { - "default:grass_1", "default:grass_2", "default:grass_3", - "default:grass_4", "default:grass_5", "default:dirt_with_grass" - } - }, - }, + modes = { + idle = {chance = 0.5, duration = 10, update_yaw = 8}, + walk = {chance = 0.14, duration = 4.5, moving_speed = 1.3}, + walk_long = {chance = 0.11, duration = 8, moving_speed = 1.3, update_yaw = 5}, + -- special modes + follow = {chance = 0, duration = 20, radius = 4, timer = 5, moving_speed = 1, items = {"farming:wheat"}}, + eat = { chance = 0.25, + duration = 4, + nodes = { + "default:grass_1", "default:grass_2", "default:grass_3", + "default:grass_4", "default:grass_5", "default:dirt_with_grass" + } + }, + }, - drops = function(self) - local items = {{"creatures:flesh"}} - if self.has_wool then - table.insert(items, {"wool:white", {min = 1, max = 2}}) - end - creatures.dropItems(self.object:getpos(), items) - end, + drops = function(self) + local items = {{"creatures:flesh"}} + if self.has_wool then + table.insert(items, {"wool:" .. self.wool_color, {min = 1, max = 2}}) + end + creatures.dropItems(self.object:getpos(), items) + end, - spawning = { - abm_nodes = { - spawn_on = {"default:dirt_with_grass"}, - }, - abm_interval = 55, - abm_chance = 7800, - max_number = 1, - number = {min = 1, max = 3}, - time_range = {min = 5100, max = 18300}, - light = {min = 10, max = 15}, - height_limit = {min = 0, max = 25}, + spawning = { + abm_nodes = { + spawn_on = {"default:dirt_with_grass"}, + }, + abm_interval = 55, + abm_chance = 7800, + max_number = 1, + number = {min = 1, max = 3}, + time_range = {min = 5100, max = 18300}, + light = {min = 10, max = 15}, + height_limit = {min = 0, max = 25}, - spawn_egg = { - description = "Sheep Spawn-Egg", - texture = "creatures_egg_sheep.png", - }, + spawn_egg = { + description = "Sheep Spawn-Egg", + texture = "creatures_egg_sheep.png", + }, - spawner = { - description = "Sheep Spawner", - range = 8, - player_range = 20, - number = 6, - } - }, + spawner = { + description = "Sheep Spawner", + range = 8, + player_range = 20, + number = 6, + } + }, - on_punch = function(self, puncher) - shear(self) - end, + on_punch = function(self, puncher) + shear(self) + end, - get_staticdata = function(self) - return { - has_wool = self.has_wool - } - end, + get_staticdata = function(self) + return { + has_wool = self.has_wool, + wool_color = self.wool_color, + } + end, - on_activate = function(self, staticdata) - if self.has_wool == false then - self.object:set_properties({textures = {"creatures_sheep.png"}}) - end - end, + on_activate = function(self, staticdata) + if self.has_wool == nil then + self.has_wool = true + end - on_rightclick = function(self, clicker) - local item = clicker:get_wielded_item() - if item then - local name = item:get_name() - if name == "farming:wheat" then - self.target = clicker - self.mode = "follow" - self.modetimer = 0 + if not self.wool_color then + self.wool_color = colors[math.random(1, #colors)] + end + -- update fur + setColor(self) + end, - if not self.tamed then - self.fed_cnt = (self.fed_cnt or 0) + 1 - end - -- play eat sound? - item:take_item() - elseif name == "creatures:shears" and self.has_wool then - shear(self, math.random(2, 3), true) - item:add_wear(65535/100) - end - if not core.setting_getbool("creative_mode") then - clicker:set_wielded_item(item) - end - end + on_rightclick = function(self, clicker) + local item = clicker:get_wielded_item() + if item then + local name = item:get_name() + if name == "farming:wheat" then + self.target = clicker + self.mode = "follow" + self.modetimer = 0 - return true - end, + if not self.tamed then + self.fed_cnt = (self.fed_cnt or 0) + 1 + end - on_step = function(self, dtime) - if self.has_wool == nil then - self.has_wool = true - end - if self.mode == "eat" and self.eat_node then - self.regrow_wool = true - end - if self.last_mode == "eat" and (self.modetimer and self.modetimer == 0) and self.regrow_wool then - self.has_wool = true - self.regrow_wool = nil - self.object:set_properties({textures = {"creatures_sheep.png^creatures_sheep_white.png"}}) - end - if self.fed_cnt and self.fed_cnt > 4 then - self.tamed = true - self.fed_cnt = nil - end - end + -- play eat sound? + item:take_item() + elseif name == "creatures:shears" and self.has_wool then + shear(self, math.random(2, 3), true) + item:add_wear(65535/100) + end + if not core.setting_getbool("creative_mode") then + clicker:set_wielded_item(item) + end + end + return true + end, + + on_step = function(self, dtime) + if self.mode == "eat" and self.eat_node then + self.regrow_wool = true + end + if self.last_mode == "eat" and (self.modetimer and self.modetimer == 0) and self.regrow_wool then + self.has_wool = true + self.regrow_wool = nil + setColor(self) + end + if self.fed_cnt and self.fed_cnt > 4 then + self.tamed = true + self.fed_cnt = nil + end + end } creatures.register_mob(def) diff --git a/sheep/textures/creatures_sheep_black.png b/sheep/textures/creatures_sheep_black.png new file mode 100644 index 0000000..cdd8120 Binary files /dev/null and b/sheep/textures/creatures_sheep_black.png differ diff --git a/sheep/textures/creatures_sheep_brown.png b/sheep/textures/creatures_sheep_brown.png new file mode 100644 index 0000000..90bfd86 Binary files /dev/null and b/sheep/textures/creatures_sheep_brown.png differ diff --git a/sheep/textures/creatures_sheep_grey.png b/sheep/textures/creatures_sheep_grey.png new file mode 100644 index 0000000..89da4df Binary files /dev/null and b/sheep/textures/creatures_sheep_grey.png differ diff --git a/sheep/textures/creatures_sheep_shaved.png b/sheep/textures/creatures_sheep_shaved.png index 8a930a5..20df9b3 100644 Binary files a/sheep/textures/creatures_sheep_shaved.png and b/sheep/textures/creatures_sheep_shaved.png differ