@ -0,0 +1,12 @@ |
|||||
|
For license information, see the following files, where they exist, in |
||||
|
each modpack or mod: |
||||
|
|
||||
|
oldcoder.txt |
||||
|
LICENSE |
||||
|
LICENSE.txt |
||||
|
license.txt |
||||
|
README.md |
||||
|
README.txt |
||||
|
readme.txt |
||||
|
|
||||
|
and/or files with similar names. |
@ -0,0 +1,23 @@ |
|||||
|
Name: coderfood |
||||
|
Source: New modpack based on various mods and/or modpacks |
||||
|
License: See "license-modpack.txt" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. The "food" and "food_basic" mods were extracted from the following |
||||
|
modpack: |
||||
|
|
||||
|
https://github.com/rubenwardy/food.git |
||||
|
|
||||
|
modpack-level documentation files were moved into a new subdirectory |
||||
|
of the "food" mod named "rwfooddoc". |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. Additions to that starting point: |
||||
|
|
||||
|
2a. Added the OldCoder mod "coderfruit". |
||||
|
|
||||
|
2b. Added Milan's forks of the mods "hbhunger" and "hudbars". |
||||
|
|
||||
|
2c. Added the files "00README" and "oldcoder.txt" (this file). |
@ -0,0 +1,63 @@ |
|||||
|
Unified Foods Licenses |
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. OldCoder Unified Foods includes a food registration system and a |
||||
|
hunger system. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. The food registration system is original code. The license for the |
||||
|
code in question is: |
||||
|
|
||||
|
(c) 2015-2020 and CC BY-NC-SA 4.0 International: OldCoder (Robert Kir- |
||||
|
aly) |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
3. The hunger system is descended from a MT mod named "hbhunger". The |
||||
|
license for "hbhunger" code is LGPL v2.1. The license for "hbhunger" |
||||
|
textures is MIT. |
||||
|
|
||||
|
One "hbhunger" sound file is used: |
||||
|
|
||||
|
better_hunger_eat_generic.ogg |
||||
|
|
||||
|
The license for that file is CC BY 3.0 with attribution to: |
||||
|
|
||||
|
https://freesound.org/people/xtrgamr/sounds/253619/ |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
4. The licenses for other files are as follows: |
||||
|
|
||||
|
* ufoods_*.png: WTFPL except for "ufoods_glass_*". |
||||
|
|
||||
|
* ufoods_glass_*.png: These textures are presently based on a version |
||||
|
of "mobs_glass_milk.png" that is licensed as follows: |
||||
|
|
||||
|
The MIT License (MIT) |
||||
|
Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1 |
||||
|
|
||||
|
* farming_*.png: See "farming" mod license file. |
||||
|
|
||||
|
* mobs_*.png: See "mobs" mod license file. |
||||
|
|
||||
|
* mtfoods_*.png: |
||||
|
|
||||
|
License: (c) 2014-2020 and CC BY-NC-SA 4.0 International: Philip Rob- |
||||
|
inson. |
||||
|
|
||||
|
* misc_baked_potato.png: WTFPL. |
||||
|
|
||||
|
* coderfruit_*.png: |
||||
|
|
||||
|
License: (c) 2019 and CC BY-NC-SA 4.0 International: OldCoder (Robert |
||||
|
Kiraly). |
||||
|
|
||||
|
* moono_*.png: |
||||
|
License: (c) 2015-2020 and CC BY-SA 4.0 International: Moono. |
||||
|
|
||||
|
* dessert_*.png and food_*.png: |
||||
|
License: (c) 2013-2010 and CC-BY-SA 3.0 Rubenwardy. |
||||
|
|
||||
|
(end of document) |
@ -0,0 +1,208 @@ |
|||||
|
-- =================================================================== |
||||
|
-- "ufoods" common header. |
||||
|
|
||||
|
local S |
||||
|
if minetest.get_modpath ("intllib") then |
||||
|
S = intllib.Getter() |
||||
|
else |
||||
|
S = function (s) return s end |
||||
|
end |
||||
|
|
||||
|
local item_eat = unified_foods.item_eat |
||||
|
local keep_vessels = unified_foods.keep_vessels |
||||
|
local mra = minetest.registered_aliases |
||||
|
local mri = minetest.registered_items |
||||
|
|
||||
|
local reg_alias = ocutil.safe_register_alias |
||||
|
local reg_craft = minetest.register_craft |
||||
|
local reg_food = unified_foods.register_food |
||||
|
local reg_item = ocutil.safe_register_item |
||||
|
local reg_juice = unified_foods.register_juice |
||||
|
|
||||
|
local needitem |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("juicer", |
||||
|
{ |
||||
|
description = "Juicer" , |
||||
|
external_items = "farming:juicer" , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
output = neednode , |
||||
|
recipe = { |
||||
|
{ "" , "default:stone" , "" } , |
||||
|
{ "default:stone" , "" , "default:stone" } , |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("sugar", |
||||
|
{ |
||||
|
description = "Sugar" , |
||||
|
|
||||
|
external_items = { |
||||
|
"farming:sugar" , "jkfarming:sugar" , |
||||
|
"bushes:sugar" , "mtfoods:sugar" , |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
if ocutil.thing_exists ("default:papyrus") then |
||||
|
reg_craft ({ |
||||
|
output = needitem .. " 20" , |
||||
|
recipe = { |
||||
|
{ "default:papyrus" } , |
||||
|
} |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
-- Note: The fallback definition provided here isn't fully functional. |
||||
|
-- However, the expectation is that "bucket" is usually present, so |
||||
|
-- the fallback usually shouldn't be needed. |
||||
|
|
||||
|
needitem = reg_food ("bucket_water", |
||||
|
{ |
||||
|
description = "Bucket of water" , |
||||
|
extra_groups = { bucket_water=1 } , |
||||
|
external_items = "bucket:bucket_water" , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("bucket:bucket_water", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("salt", |
||||
|
{ |
||||
|
description = "Salt" , |
||||
|
satiate = 0 , |
||||
|
external_items = "farming:salt" , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
type = "cooking" , |
||||
|
cooktime = 15 , |
||||
|
output = needitem , |
||||
|
recipe = "group:bucket_water" , |
||||
|
replacements = keep_vessels , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("farming:salt", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("wheat", |
||||
|
{ |
||||
|
description = "Wheat" , |
||||
|
|
||||
|
external_items = { |
||||
|
"farming:wheat", "plantlib:wheat" |
||||
|
} , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
output = needitem , |
||||
|
recipe = { |
||||
|
{ "default:dry_shrub" } , |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("farming:wheat", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("flour", |
||||
|
{ |
||||
|
description = "Flour" , |
||||
|
external_items = "farming:flour" , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
output = needitem , |
||||
|
recipe = { |
||||
|
{ "group:food_wheat" } , |
||||
|
{ "group:food_wheat" } , |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("farming:flour", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("bread", |
||||
|
{ |
||||
|
description = "Bread" , |
||||
|
stack_max = 3 , |
||||
|
satiate = 5 , |
||||
|
external_items = "farming:bread" , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
type = "cooking" , |
||||
|
cooktime = 15 , |
||||
|
output = needitem , |
||||
|
recipe = "group:food_flour" , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("farming:bread", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("egg", |
||||
|
{ |
||||
|
description = "Egg" , |
||||
|
stack_max = 10 , |
||||
|
satiate = 1 , |
||||
|
|
||||
|
external_items = { |
||||
|
"mobs:egg" , "animalmaterials:egg" , |
||||
|
"animalmaterials:egg_big" , "jkanimals:egg" , |
||||
|
} , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("mobs:egg", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("meat_raw", |
||||
|
{ |
||||
|
description = "Raw meat" , |
||||
|
stack_max = 25 , |
||||
|
satiate = 1 , |
||||
|
|
||||
|
extra_groups = { meat=1 } , |
||||
|
external_items = { |
||||
|
"mobs:meat_raw", "animalmaterials:meat_raw" |
||||
|
} , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("mobs:meat_raw", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("meat", |
||||
|
{ |
||||
|
description = "Cooked Meat" , |
||||
|
satiate = 3 , |
||||
|
extra_groups = { meat=1 } , |
||||
|
|
||||
|
external_items = { |
||||
|
"mobs:meat" , "jkanimals:meat" , |
||||
|
"mobs:chicken_cooked" , "mobfcooking:cooked_pork" , |
||||
|
"mobfcooking:cooked_beef" , "mobfcooking:cooked_chicken" , |
||||
|
"mobfcooking:cooked_lamb" , "mobfcooking:cooked_venison" , |
||||
|
} , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
type = "cooking" , |
||||
|
output = needitem , |
||||
|
recipe = "group:food_meat_raw" , |
||||
|
cooktime = 30 , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,237 @@ |
|||||
|
Name: unified_foods |
||||
|
Source: Original mod except for some "hbhunger" code |
||||
|
License: See "LICENSE" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. "unified_foods" is a largely original mod that provides a combined |
||||
|
food registration and hunger system. |
||||
|
|
||||
|
The hunger system is based on a fork of "hbhunger". |
||||
|
|
||||
|
This mod supersedes the following mods, though it doesn't replace all |
||||
|
of the foods defined in the mods: |
||||
|
|
||||
|
food, food_basic, dessert, hbhunger, extra, mtfoods |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. Overview of features. |
||||
|
|
||||
|
2.1. Unified Foods supports satiation, healing, poison, and replace- |
||||
|
ment items as "hbhunger" did. It also offers numerous extra features. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.2. You don't need to explicitly hook foods any longer to support |
||||
|
basic operation. |
||||
|
|
||||
|
Unified Foods intercepts calls to "minetest.item_eat". This means that |
||||
|
satiation and replacement items are supported automatically for normal |
||||
|
foods out of the box. |
||||
|
|
||||
|
You can still hook foods to modify existing parameters or to set new |
||||
|
ones. However, this is optional. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.3. Unified Foods can merge similar items. |
||||
|
|
||||
|
If there are, for example, three types of hamburgers, Unified Foods |
||||
|
retains all of the items or nodes, but it optionally assigns a similar |
||||
|
image and food parameters to all of them. |
||||
|
|
||||
|
No permanent conversion is done. Just a temporary merge to promote the |
||||
|
sense of smoother operation. However, permanent conversion could be |
||||
|
added as another feature. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.4. Eating a particular food can optionally produce a specified mes- |
||||
|
sage to the user. Lists of messages are supported. If a list is speci- |
||||
|
fied, a random message is chosen from the list. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.5. "hbhunger" had a bug which prevented it from properly registering |
||||
|
items that didn't set "on_use". Unified Foods supports items of that |
||||
|
type. This means that, for example, you can make arbitrary items eata- |
||||
|
ble. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.6. Eating works whether or not damage is enabled. |
||||
|
|
||||
|
If hunger is enabled and damage is disabled, the hunger time loop is |
||||
|
stopped and poison does no damage at the Unified Foods level. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.7. Two new commands "/starve" and "/satiate" have been added. |
||||
|
"/starve" makes the user hungry. "/satiate" makes him or her satiated |
||||
|
instead. These commands are useful for debugging purposes. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.8. It's easy to add juices to Unified Foods. |
||||
|
|
||||
|
You can create a new juice, including merges with existing objects, |
||||
|
crafting recipes, and aliases, using just one simple statement. For |
||||
|
example, this statement: |
||||
|
|
||||
|
reg_juice ("apple", |
||||
|
{ color = "#FFC929" } , { "mtfoods:apple_juice" }) |
||||
|
|
||||
|
sets up and/or performs all of these steps: |
||||
|
|
||||
|
* Create a glass of juice named "food:apple_juice" |
||||
|
* Alias the glass to "mtfoods:apple_juice" if that item exists |
||||
|
* Set "mtfoods:apple_juice" to new juice's image and satiation |
||||
|
* Add a crafting recipe for new juice |
||||
|
* Create aliases "apple_juice" and "applejuice" |
||||
|
* If the player drinks the juice, replace it with empty glass |
||||
|
|
||||
|
If a juice is a uniform color, the API is able to create an appropri- |
||||
|
ate juice image at runtime. So, it's possible to have numerous juices |
||||
|
without the need for numerous image files. |
||||
|
|
||||
|
However, juice image files may be specified as well. This allows spe- |
||||
|
cial cases such as rainbow juice or worm juice to be handled. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.9. Unified Foods allows craft-item foods to be placed. Two modes are |
||||
|
supported: |
||||
|
|
||||
|
Craft-items may be placed as static 2D sprites that always face the |
||||
|
caller. |
||||
|
|
||||
|
This often looks better than the "plantlike" or "torchlike" drawing |
||||
|
modes that MT "_games" usually use when 2D objects are placed. |
||||
|
|
||||
|
Or craft-items may be placed as dynamic 2D sprites that work the same |
||||
|
way but are "alive". For example, placed hamburgers may attempt to run |
||||
|
away from hungry players. |
||||
|
|
||||
|
Craft-items may also be placed in "plantlike" or "torchlike" mode if a |
||||
|
world developer prefers this. |
||||
|
|
||||
|
The mode in which craft-items are to be placed can be specified glob- |
||||
|
ally in "world.conf" or on a per-item basis in the mod source code for |
||||
|
individual items. |
||||
|
|
||||
|
For more detailed documentation, see the comments preceding "register_ |
||||
|
food" in "foodcore.lua". |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
3. This mod requires only "default" and "hud", but "bucket" and "farm- |
||||
|
ing" are strongly recommended. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
4. This mod replaces the complicated API used by "food" v2 with an API |
||||
|
that's easier to use. |
||||
|
|
||||
|
In particular, in Unified Foods, one subroutine call, in one place, is |
||||
|
typically enough to set up a food. Two calls, if a juice variation of |
||||
|
the food is desired. |
||||
|
|
||||
|
Additionally, this mod restores some of the foods that were discarded |
||||
|
in "food" v2. |
||||
|
|
||||
|
Historical note: The last pre-v2 commit to "food" was: |
||||
|
|
||||
|
22be9b83c3087e15eea8878c5aef9be0f12d6158 |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
5. Unified Foods creates food and utensils in the "food:" namespace. |
||||
|
|
||||
|
Most of these objects are original items that fall back to existing |
||||
|
items where possible. |
||||
|
|
||||
|
For example, if "farming" is installed, "food:bread" becomes an alias |
||||
|
for "farming:bread". Otherwise, it's defined as a new and independent |
||||
|
item. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
6. If "drawtype" is set to "sprite" or "mob" for an item, "vsize" may |
||||
|
set, as well, to scale the size of the item up or down. |
||||
|
|
||||
|
vsize = 0.50 will, for example, scale the item to half size. vsize = |
||||
|
2.00 will scale it to twice normal size. |
||||
|
|
||||
|
The code adjusts collision boxes and vertical positions for items ap- |
||||
|
propriately. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Appendix A. Partial list of objects supported. |
||||
|
|
||||
|
Fruits: |
||||
|
|
||||
|
Apple, Banana, Cherry, Orange, Pineapple, and Strawberry. Plus the |
||||
|
associated juices. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Misc.: |
||||
|
|
||||
|
Hamburger. Hamburger juice. Rainbow and worm juices. OBOE (Open Blade |
||||
|
of Exile) potions in multiple colors. Taco. |
||||
|
|
||||
|
Raw and cooked pasta. A couple of types of breakfast cereal. Dog |
||||
|
treats. |
||||
|
|
||||
|
Glass of Romulan Ale. Glass of Ginger Ale. Bottle of apple cider. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Vegetables: |
||||
|
|
||||
|
Onion, onion rings, onion slices. |
||||
|
|
||||
|
Potato, potato juice, baked potato, potato slices, french fries, pota- |
||||
|
to chips. |
||||
|
|
||||
|
Carrot, corn, rhubarb, and tomato. Plus most of the associated juices. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Dairy: |
||||
|
|
||||
|
Glass or bucket of milk. Butter. Cheese. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Chocolate: |
||||
|
|
||||
|
Cocoa bean, chocolate powder, dark chocolate, milk chocolate, and cup |
||||
|
or mug of chocolate milk. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Coffee: |
||||
|
|
||||
|
Raw coffee beans, roasted coffee beans, and cup or mug of coffee. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Dessert: |
||||
|
|
||||
|
Snackcake, blueberry muffin, raw tart base, tart base, and strawberry |
||||
|
tart. |
||||
|
|
||||
|
Banana split, shortbread, cream, strawberry shortcake, and cupcake. |
||||
|
|
||||
|
Moono desserts: Butterscotch Dillybar, Butterscotch Sundae, Heart on a |
||||
|
Stick, Strawberry Bar, Strawberry Icecream, and Strawberry Star. |
||||
|
|
||||
|
There are also some cakes, but we encourage people to use the cakes |
||||
|
and pies from the "cakepie" mod instead. The cakes in this mod are |
||||
|
provided primarily for legacy support purposes. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
End of file. |
@ -0,0 +1,275 @@ |
|||||
|
All of the files involved are used and distributed under FOSS licens- |
||||
|
es. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
License: CC0 aka CC Public Domain |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/publicdomain/zero/1.0/ |
||||
|
|
||||
|
License: CC BY-SA 4.0 |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/licenses/by-sa/4.0/ |
||||
|
|
||||
|
License: CC BY-SA 3.0 |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/licenses/by-sa/3.0/ |
||||
|
|
||||
|
License: CC BY-NC-SA 4.0 |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/licenses/by-nc-sa/4.0/ |
||||
|
|
||||
|
License: CC BY-NC-SA 3.0 |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/licenses/by-nc-sa/3.0/ |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Original components which are not covered under other copyrights and |
||||
|
licenses are copyright and licensed as follows: |
||||
|
|
||||
|
(c) 2019 and CC BY-NC-SA 4.0: OldCoder (Robert Kiraly). |
||||
|
|
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Additional meats: |
||||
|
- codermobs_beef.png |
||||
|
- codermobs_beef_raw.png |
||||
|
- codermobs_ostrich_meat.png |
||||
|
- codermobs_ostrich_meat_raw.png |
||||
|
- codermobs_venison.png |
||||
|
- codermobs_venison_raw.png |
||||
|
|
||||
|
(c) 2021 Poikilos CC BY-SA 4.0 |
||||
|
|
||||
|
|
||||
|
Spider Meat: |
||||
|
- Edited by Poikilos, based on model and texture by AspireMint according to |
||||
|
<https://forums.minetest.org/viewtopic.php?f=9&t=9301> and |
||||
|
possibly implied by |
||||
|
<https://git.minetest.org/minetest-LOTR/Lord-of-the-Test/src/branch/master/README.md>. |
||||
|
- codermobs_lott_spider_meat_raw.png |
||||
|
- codermobs_lott_spider_meat.png |
||||
|
|
||||
|
(c) ~2014 AspireMint and 2021 Poikilos (edited by) CC BY-SA 3.0 |
||||
|
- history: <https://git.minetest.org/minetest-LOTR/Lord-of-the-Test/commits/branch/master/mods/lottmobs/textures/lottmobs_spider.png> |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
More Creeps and Weirdos for Mobs Redo |
||||
|
https://github.com/22i/amcaw |
||||
|
(Poikilos fork: https://github.com/poikilos/amcaw) |
||||
|
includes: baby, blorp, bubblescum, camel, castle critter, castle guard, |
||||
|
castle king, cavelady, caveman, desert lizard, digibug, discomole, |
||||
|
flobmothership, floob, g, googoat, growbotgreg, guineapig, hippo, |
||||
|
hotdog, hunchback, lawyer, loliman, mandog, oldlady, ponie, ponygirl, |
||||
|
ragingbull, ratman, robotted, robottod, rocketgirafe, rockmonster, |
||||
|
sneaky sal, snowdevil and zebra. |
||||
|
|
||||
|
(c) Astromojang, RickWeek84, amcaw CC BY-SA 3.0 |
||||
|
|
||||
|
except: |
||||
|
- codermobs_oldlady_sea_hag_mesh.png |
||||
|
(c) Astromojang, RickWeek84, amcaw and 2021 Poikilos (edited by) |
||||
|
CC BY-SA 3.0 |
||||
|
|
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
|
||||
|
Skeletons: |
||||
|
|
||||
|
mdskeleton model: |
||||
|
Mdoege |
||||
|
|
||||
|
mdskeleton texture (replaced 2019): |
||||
|
(c) 2019 Poikilos CC BY-SA 4.0 |
||||
|
|
||||
|
mdskeleton sounds (replaced 2019): |
||||
|
(c) 2019 Poikilos CC BY-SA 4.0 |
||||
|
|
||||
|
--------------------------------------------------------------------- |
||||
|
|
||||
|
Models and mesh textures for "baby_chick", "bom", and "icebom": |
||||
|
|
||||
|
(c) 2019 and CC-BY-NC-SA 4.0: Poikilos. OldCoder as well for the "ice- |
||||
|
bom" mesh texture. |
||||
|
|
||||
|
For sound-file information, see the Lua files. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Denny code and media: |
||||
|
See "denny.lua" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Improved Spider/Bug Sounds: |
||||
|
codermobs_damage_giant_exoskeleton, codermobs_death_giant_bug, |
||||
|
codermobs_use_giant_exoskeleton |
||||
|
(c) 2019 and CC BY-SA 4.0: Poikilos |
||||
|
|
||||
|
Improved Particles: |
||||
|
codermobs_blood, codermobs_damage_stone, codermobs_lott_spider_blood |
||||
|
(c) 2019 and CC BY-SA 4.0: Poikilos |
||||
|
|
||||
|
codermobs_fireball: |
||||
|
(c) 2012 to 2019 and CC-BY-SA 3.0: Sapier, Poikilos |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Media for "animal_materials", "deer", "elk", and "ostrich": |
||||
|
|
||||
|
See the 5 associated Lua source files. In general, the media is: |
||||
|
(c) 2012 to 2019 and CC-BY-SA 3.0: Sapier and Poikilos. |
||||
|
|
||||
|
The "ostrich" texture is as described above but also attribution: Old- |
||||
|
Coder. |
||||
|
|
||||
|
Code for "animal_materials": Same as media. The other 4 mobs listed |
||||
|
here use new code. |
||||
|
|
||||
|
More about the Elk: |
||||
|
|
||||
|
Pixel Art Elk texture: |
||||
|
(c) 2012 to 2019 and CC BY-SA 3.0: Sapier, Polikilos (skinned by) |
||||
|
|
||||
|
HD (video-based) and Lo-fi (16-color video-based) Elk Textures: |
||||
|
based on Elk video "Elk.webm.360p.vp9" (CC BY 2.0 Generic) |
||||
|
Stephen Baker [BLM/Oregon](blm.gov/yg5c).jpg, Poikilos (skinned by) |
||||
|
|
||||
|
Additionally, "chicken.lua" uses Sapier's 3D egg. See that Lua source |
||||
|
file as well. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Egg texture: |
||||
|
MIT License |
||||
|
(c) 2016-2019 TenPlus1 and Poikilos |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Car model: |
||||
|
(c) 2015 and CC-BY-NC-SA 3.0: Melkor. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
mdoege code and/or media |
||||
|
----------------------------- |
||||
|
WTFPL |
||||
|
|
||||
|
PilzAdam code and/or media |
||||
|
----------------------------- |
||||
|
WTFPL |
||||
|
|
||||
|
Bat |
||||
|
----------------------------- |
||||
|
Code: GPL |
||||
|
Model and texture: CC BY-SA 3.0. Attribution: Defense Subgame. |
||||
|
Sound file: WTFPL |
||||
|
|
||||
|
Birds |
||||
|
----------------------------- |
||||
|
(c) 2012-2019 and CC-BY-SA 3.0: Sapier, Poikilos. Sapier created |
||||
|
the original models. Poikilos derived new models from them and created |
||||
|
new textures. |
||||
|
|
||||
|
Butterfly |
||||
|
----------------------------- |
||||
|
(c) 2012 to 2019 and CC BY-SA 3.0: AspireMint. |
||||
|
|
||||
|
Realistic Milk Bucket |
||||
|
----------------------------- |
||||
|
(c) 2015-2019 and CC BY-SA 3.0: ElementW, Poikilos (modified by). |
||||
|
|
||||
|
D00Med code |
||||
|
----------------------------- |
||||
|
GNU Lesser General Public License 2.1 |
||||
|
|
||||
|
D00Med models and/or textures |
||||
|
----------------------------- |
||||
|
Originals: CC BY-SA 3.0 Unported. Attribution: D00Med. |
||||
|
New panda texture: CC BY SA 3.0 2016 D00Med and 2021 Poikilos |
||||
|
|
||||
|
Mr. Goat |
||||
|
----------------------------- |
||||
|
(c) 2016 to 2019 and CC BY-SA 3.0: Don Batman. OldCoder worked on the |
||||
|
eyes. |
||||
|
|
||||
|
NSSM components |
||||
|
----------------------------- |
||||
|
No NSSM are believed presently to be used. If they're used in the |
||||
|
future, the applicable license will be GPL3. |
||||
|
|
||||
|
Sapier components |
||||
|
----------------------------- |
||||
|
(c) 2012-2019 and CC-BY-SA 3.0: Sapier. |
||||
|
|
||||
|
"mobs_mc" components |
||||
|
----------------------------- |
||||
|
Code and models: GNU GPL V3 |
||||
|
|
||||
|
Other "mobs_mc" Polar Bear media: CC BY-SA 4.0. Attribution: "mobs_mc" |
||||
|
team. |
||||
|
|
||||
|
Skandarella components |
||||
|
----------------------------- |
||||
|
For snail, kangaroo, tiger, and T-Rex media license information, see: |
||||
|
license-skandarella.txt |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Krupnov Pavel and TenPlus1 components: |
||||
|
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
(c) 2014 Krupnov Pavel -- bugs, kpgmobs, pmobs |
||||
|
(c) 2014 Krupnov Pavel and 2016 TenPlus1 -- mobs_animal |
||||
|
(c) 2016 TenPlus1 -- mobs_monster and mobs_npc |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining |
||||
|
a copy of this software and associated documentation files (the |
||||
|
"Software"), to deal in the Software without restriction, including |
||||
|
without limitation the rights to use, copy, modify, merge, publish, |
||||
|
distribute, sublicense, and/or sell copies of the Software, and to |
||||
|
permit persons to whom the Software is furnished to do so, subject to |
||||
|
the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be |
||||
|
included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Blockmen components: |
||||
|
|
||||
|
(c) 2015-2016 BlockMen <blockmen2015@gmail.com> |
||||
|
|
||||
|
This software is provided 'as-is', without any express or implied |
||||
|
warranty. In no event will the authors be held liable for any damages |
||||
|
arising from the use of this software. |
||||
|
|
||||
|
Permission is granted to anyone to use this software for any purpose, |
||||
|
including commercial applications, and to alter it and redistribute it |
||||
|
freely, subject to the following restrictions: |
||||
|
|
||||
|
1. The origin of this software must not be misrepresented; you must |
||||
|
not claim that you wrote the original software. If you use this |
||||
|
software in a product, an acknowledgment in the product documentation |
||||
|
is required. |
||||
|
|
||||
|
2. Altered source versions must be plainly marked as such, and must |
||||
|
not be misrepresented as being the original software. |
||||
|
|
||||
|
3. This notice may not be removed or altered from any source |
||||
|
distribution. |
||||
|
|
||||
|
(end of document) |
@ -0,0 +1,347 @@ |
|||||
|
-- =================================================================== |
||||
|
-- Code and media license. |
||||
|
-- |
||||
|
-- You may copy, use, modify or do nearly anything but remove this |
||||
|
-- copyright notice. Of course, you're not allowed to pretend you've |
||||
|
-- created or written the Sapier or Poikilos pieces. |
||||
|
-- |
||||
|
-- CC-BY-SA 3.0. Attribution: Sapier and Poikilos. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
-- Boilerplate to support localized strings if intllib mod is install- |
||||
|
-- ed. |
||||
|
|
||||
|
local S |
||||
|
if (minetest.get_modpath("intllib")) then |
||||
|
dofile(minetest.get_modpath("intllib").."/intllib.lua") |
||||
|
S = intllib.Getter(minetest.get_current_modname()) |
||||
|
else |
||||
|
S = function ( s ) return s end |
||||
|
end |
||||
|
|
||||
|
core.log("action","MOD: animal_materials loading ...") |
||||
|
local version = "0.1.3" |
||||
|
|
||||
|
animal_materialsdata = {} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Node definitions |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Item definitions |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- deamondeath sword |
||||
|
|
||||
|
minetest.register_tool(":animal_materials:sword_deamondeath", { |
||||
|
description = S("Sword (Deamondeath)"), |
||||
|
inventory_image = "default_tool_steelsword.png", |
||||
|
tool_capabilities = { |
||||
|
full_punch_interval = 0.50, |
||||
|
max_drop_level=1, |
||||
|
groupcaps={ |
||||
|
fleshy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=10, maxlevel=1}, |
||||
|
snappy={times={[2]=0.70, [3]=0.30}, uses=40, maxlevel=1}, |
||||
|
choppy={times={[3]=0.70}, uses=40, maxlevel=0}, |
||||
|
deamon={times={[1]=0.25, [2]=0.10, [3]=0.05}, uses=20, maxlevel=3}, |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- scissors |
||||
|
-- |
||||
|
|
||||
|
minetest.register_tool(":animal_materials:scissors", { |
||||
|
description = S("Scissors"), |
||||
|
inventory_image = "animal_materials_scissors.png", |
||||
|
tool_capabilities = { |
||||
|
max_drop_level=0, |
||||
|
groupcaps={ |
||||
|
wool = {uses=40,maxlevel=1} |
||||
|
} |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- lasso |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:lasso", { |
||||
|
description = S("Lasso"), |
||||
|
image = "animal_materials_lasso.png", |
||||
|
stack_max=10, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- net |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:net", { |
||||
|
description = S("Net"), |
||||
|
image = "animal_materials_net.png", |
||||
|
stack_max=10, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- saddle |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:saddle", { |
||||
|
description = S("Saddle"), |
||||
|
image = "animal_materials_saddle.png", |
||||
|
stack_max=1 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- contract |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:contract", { |
||||
|
description = S("Contract"), |
||||
|
image = "animal_materials_contract.png", |
||||
|
stack_max=10, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- meat |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_raw", { |
||||
|
description = S("Raw meat"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_pork", { |
||||
|
description = S("Pork (raw)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_beef", { |
||||
|
description = S("Beef (raw)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_chicken", { |
||||
|
description = S("Chicken (raw)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_lamb", { |
||||
|
description = S("Lamb (raw)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_venison", { |
||||
|
description = S("Venison (raw)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_undead", { |
||||
|
description = S("Meat (not quite dead)"), |
||||
|
image = "animal_materials_meat_undead_raw.png", |
||||
|
on_use = minetest.item_eat(-2), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_toxic", { |
||||
|
description = S("Toxic Meat"), |
||||
|
image = "animal_materials_meat_toxic_raw.png", |
||||
|
on_use = minetest.item_eat(-5), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_ostrich", { |
||||
|
description = S("Ostrich Meat"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(3), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:pork_raw", { |
||||
|
description = S("Pork"), |
||||
|
image = "animal_materials_pork_raw.png", |
||||
|
on_use = minetest.item_eat(4), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:fish_bluewhite", { |
||||
|
description = S("Fish (bluewhite)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:fish_clownfish", { |
||||
|
description = S("Fish (clownfish)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- feather |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:feather", { |
||||
|
description = S("Feather"), |
||||
|
image = "animal_materials_feather.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- milk |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:milk", { |
||||
|
description = S("Milk"), |
||||
|
image = "animal_materials_milk.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { eatable=1 }, |
||||
|
stack_max=10 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- egg |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:egg", { |
||||
|
description = S("Egg"), |
||||
|
image = "animal_materials_egg.png", |
||||
|
stack_max=10 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:egg_big", { |
||||
|
description = S("Egg (big)"), |
||||
|
image = "animal_materials_egg_big.png", |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
animal_materialsdata["animal_materials_egg"] = { |
||||
|
graphics_3d = { |
||||
|
visual = "mesh", |
||||
|
mesh = "animal_materials_egg_ent.b3d", |
||||
|
textures = { "animal_materials_egg_ent_mesh.png" }, |
||||
|
collisionbox = { -0.12,-0.125,-0.12,0.12,0.125,0.12 }, |
||||
|
visual_size = {x=1,y=1,z=1}, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
animal_materialsdata["animal_materials_egg_big"] = { |
||||
|
graphics_3d = { |
||||
|
visual = "mesh", |
||||
|
mesh = "animal_materials_egg_ent.b3d", |
||||
|
textures = { "animal_materials_egg_ent_mesh.png" }, |
||||
|
collisionbox = { -0.24,-0.25,-0.24,0.24,0.25,0.24 }, |
||||
|
visual_size = {x=2,y=2,z=2}, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- bone |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:bone", { |
||||
|
description = S("Bone"), |
||||
|
image = "animal_materials_bone.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- furs |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:fur", { |
||||
|
description = S("Fur"), |
||||
|
image = "animal_materials_fur.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:fur_deer", { |
||||
|
description = S("Deer fur"), |
||||
|
image = "animal_materials_deer_fur.png", |
||||
|
stack_max=10 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:coat_cattle", { |
||||
|
description = S("Cattle coat"), |
||||
|
image = "animal_materials_cattle_coat.png", |
||||
|
stack_max=10 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- horns |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:antlers", { |
||||
|
description = S("Antlers"), |
||||
|
image = "animal_materials_antlers.png", |
||||
|
stack_max=20 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:ivory", { |
||||
|
description = S("Ivory"), |
||||
|
image = "animal_materials_ivory.png", |
||||
|
stack_max=20 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- scale |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:scale_golden", { |
||||
|
description = S("Scale (golden)"), |
||||
|
image = "animal_materials_scale_golden.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:scale_white", { |
||||
|
description = S("Scale (white)"), |
||||
|
image = "animal_materials_scale_white.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:scale_grey", { |
||||
|
description = S("Scale (grey)"), |
||||
|
image = "animal_materials_scale_grey.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:scale_blue", { |
||||
|
description = S("Scale (blue)"), |
||||
|
image = "animal_materials_scale_blue.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- recipes |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "wool:white", |
||||
|
recipe = { |
||||
|
{"animal_materials:feather","animal_materials:feather","animal_materials:feather"}, |
||||
|
{"animal_materials:feather", "animal_materials:feather","animal_materials:feather"}, |
||||
|
{"animal_materials:feather","animal_materials:feather","animal_materials:feather"}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "animal_materials:contract", |
||||
|
recipe = { |
||||
|
{"default:paper"}, |
||||
|
{"default:paper"}, |
||||
|
} |
||||
|
}) |
@ -0,0 +1,463 @@ |
|||||
|
-- Hen. Descended from "Farlands" version. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- License information for Sapier's 3D-egg media. |
||||
|
-- |
||||
|
-- You may copy, use, modify or do nearly anything but remove this |
||||
|
-- copyright notice. Of course, you're not allowed to pretend you've |
||||
|
-- created or written the Sapier pieces. |
||||
|
-- |
||||
|
-- CC-BY-SA 3.0. Attribution: Sapier. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local numset = codermobs.numset_if_any |
||||
|
|
||||
|
local codermobs_egg_time_delay = |
||||
|
numset ("codermobs_egg_time_delay" ) or 120 |
||||
|
if codermobs_egg_time_delay < 3 then |
||||
|
codermobs_egg_time_delay = 3 |
||||
|
end |
||||
|
|
||||
|
local codermobs_egg_hatch_chance = |
||||
|
numset ("codermobs_egg_hatch_chance" ) or 3 |
||||
|
|
||||
|
local EGG_UNFERTILIZED = 1 |
||||
|
local EGG_FERTILIZED = 2 |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "chicken" |
||||
|
local ucname = "Chicken" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- This mob is a special case |
||||
|
local obj_hen = "codermobs:hen" |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = "hen" , |
||||
|
ucname = "Hen" , |
||||
|
obj_name = "codermobs:hen" , |
||||
|
|
||||
|
aoc = 4 , |
||||
|
spawn_chance = 20000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 5 , |
||||
|
max_light = 30 , |
||||
|
min_height = -31000 , |
||||
|
max_height = 31000 , |
||||
|
|
||||
|
spawn_type = "animal" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"default:dirt_with_dry_grass" , |
||||
|
"default:dirt_with_grass" , |
||||
|
"earthgen:dirt_with_dry_grass" , |
||||
|
"ethereal:bamboo_dirt" , |
||||
|
"ethereal:green_dirt" , |
||||
|
"ethereal:green_dirt_top" , |
||||
|
"ethereal:grove_dirt" , |
||||
|
"mg:dirt_with_dry_grass" , |
||||
|
"noisegrid:grass" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = true , |
||||
|
egg_image = "wool_brown.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local msname_cooked = msname .. "_cooked" |
||||
|
local msname_raw = msname .. "_raw" |
||||
|
|
||||
|
local msname_img = msname .. ".png" |
||||
|
local msname_cooked_img = msname_cooked .. ".png" |
||||
|
local msname_raw_img = msname_raw .. ".png" |
||||
|
|
||||
|
local msname_egg = msname .. "_egg" |
||||
|
local msname_egg_fried = msname_egg .. "_fried" |
||||
|
local msname_egg_img = msname_egg .. ".png" |
||||
|
local msname_egg_fried_img = msname_egg_fried .. ".png" |
||||
|
|
||||
|
local obj_name_cooked = obj_name .. "_cooked" |
||||
|
local obj_name_raw = obj_name .. "_raw" |
||||
|
|
||||
|
local obj_name_egg = obj_name .. "_egg" |
||||
|
local obj_name_egg_entity = obj_name_egg .. "_entity" |
||||
|
local obj_name_egg_fried = obj_name_egg .. "_fried" |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local do_breed = function (self) |
||||
|
local pos = self.object:getpos() |
||||
|
local objs = minetest.get_objects_inside_radius (pos, 12) |
||||
|
local egg_status = EGG_UNFERTILIZED |
||||
|
|
||||
|
for n = 1, #objs do |
||||
|
if not objs [n]:is_player() then |
||||
|
local obj = objs [n]:get_luaentity() |
||||
|
if obj and obj.name == "codermobs:rooster" then |
||||
|
egg_status = EGG_FERTILIZED |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
minetest.set_node (pos, |
||||
|
{ name = obj_name_egg, param2 = egg_status }) |
||||
|
|
||||
|
minetest.sound_play ("chicken_lay_egg", { |
||||
|
pos = pos, gain = 1.0, max_hear_distance = 5, |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
makes_footstep_sound = true , |
||||
|
|
||||
|
-- Most behavior/sight/battle |
||||
|
armor = 200 , |
||||
|
attack_type = "dogfight" , |
||||
|
damage = 1 , |
||||
|
hp_max = 10 , |
||||
|
hp_min = 5 , |
||||
|
passive = false , |
||||
|
reach = 1 , |
||||
|
runaway = true , |
||||
|
view_range = 5 , |
||||
|
|
||||
|
-- Velocities |
||||
|
run_velocity = 3 , |
||||
|
walk_velocity = 1 , |
||||
|
|
||||
|
-- Step/jump/fall parameters |
||||
|
fall_damage = 0 , |
||||
|
fall_speed = -8 , |
||||
|
fear_height = 5 , |
||||
|
jump = false , |
||||
|
jump_height = 0 , |
||||
|
stepheight = 1.2 , |
||||
|
|
||||
|
-- Environment damage |
||||
|
lava_damage = 5 , |
||||
|
light_damage = 0 , |
||||
|
water_damage = 1 , |
||||
|
|
||||
|
-- Misc. parameters |
||||
|
floats = 0 , |
||||
|
|
||||
|
-- Too small: |
||||
|
-- collisionbox = {-0.2, 0, -0.2, 0.2, 0.45, 0.2}, |
||||
|
|
||||
|
-- Too large: |
||||
|
-- collisionbox = {-0.4, 0, -0.4, 0.4, 0.90, 0.4}, |
||||
|
-- visual_size = { x=2, y=2 }, |
||||
|
|
||||
|
collisionbox = { -0.30, -0.01 , -0.30, 0.30, 0.66, 0.30 } , |
||||
|
mesh = msname .. ".b3d" , |
||||
|
textures = {{ "codermobs_hen_mesh.png" }} , |
||||
|
visual = "mesh" , |
||||
|
visual_size = { x=1.5, y=1.5 } , |
||||
|
|
||||
|
animation = { |
||||
|
stand_start = 0 , |
||||
|
stand_end = 20 , |
||||
|
walk_start = 25 , |
||||
|
walk_end = 45 , |
||||
|
speed_normal = 15 , |
||||
|
} , |
||||
|
|
||||
|
drops = { |
||||
|
{ name=obj_name_raw, chance=1, min=2, max=2 } , |
||||
|
} , |
||||
|
|
||||
|
follow = { |
||||
|
"farming:seed_wheat", "farming:seed_cotton" |
||||
|
} , |
||||
|
|
||||
|
sounds = { random = msname } , |
||||
|
|
||||
|
specific_attack = codermobs.make_mob_list ({ |
||||
|
"bug", "beetle" |
||||
|
}) , |
||||
|
|
||||
|
on_rightclick = function (self, clicker) |
||||
|
if mobs:feed_tame (self, clicker, 8, true, true) then |
||||
|
return |
||||
|
end |
||||
|
mobs:protect (self, clicker) |
||||
|
mobs:capture_mob (self, clicker, 30, 50, 80, false, nil) |
||||
|
end, |
||||
|
|
||||
|
do_custom = function (self) |
||||
|
if self.child or math.random (1, 4000) > 1 then return end |
||||
|
do_breed (self) |
||||
|
end , |
||||
|
|
||||
|
-- Poikilos June 2019: false here prevents the creation of a mini- |
||||
|
-- chicken based on the adult mesh. |
||||
|
|
||||
|
on_breed = function (self, ent) |
||||
|
do_breed (self) |
||||
|
return false |
||||
|
end , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
|
||||
|
mobs:alias_mob ("codermobs:chicken" , obj_hen) |
||||
|
mobs:alias_mob ("codermobs:chook" , obj_hen) |
||||
|
mobs:alias_mob ("mobs:chicken" , obj_hen) |
||||
|
mobs:alias_mob ("mobs_animal:chicken" , obj_hen) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg throwing item |
||||
|
|
||||
|
local egg_GRAVITY = 9 |
||||
|
local egg_VELOCITY = 19 |
||||
|
|
||||
|
-- shoot egg |
||||
|
local mobs_shoot_egg = function (item, player, pointed_thing) |
||||
|
|
||||
|
local playerpos = player:getpos() |
||||
|
|
||||
|
minetest.sound_play("default_place_node_hard", { |
||||
|
pos = playerpos, |
||||
|
gain = 1.0, |
||||
|
max_hear_distance = 5, |
||||
|
}) |
||||
|
|
||||
|
local obj = minetest.add_entity({ |
||||
|
x = playerpos.x, |
||||
|
y = playerpos.y +1.5, |
||||
|
z = playerpos.z |
||||
|
}, obj_name_egg_entity) |
||||
|
|
||||
|
local ent = obj:get_luaentity() |
||||
|
local dir = player:get_look_dir() |
||||
|
|
||||
|
ent.velocity = egg_VELOCITY -- needed for api internal timing |
||||
|
ent.switch = 1 -- needed so that egg doesn't despawn straight away |
||||
|
|
||||
|
obj:setvelocity({ |
||||
|
x = dir.x * egg_VELOCITY, |
||||
|
y = dir.y * egg_VELOCITY, |
||||
|
z = dir.z * egg_VELOCITY |
||||
|
}) |
||||
|
|
||||
|
obj:setacceleration({ |
||||
|
x = dir.x * -3, |
||||
|
y = -egg_GRAVITY, |
||||
|
z = dir.z * -3 |
||||
|
}) |
||||
|
|
||||
|
-- pass player name to egg for chick ownership |
||||
|
local ent2 = obj:get_luaentity() |
||||
|
ent2.playername = player:get_player_name() |
||||
|
item:take_item() |
||||
|
return item |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg. |
||||
|
|
||||
|
minetest.register_node (obj_name_egg, { |
||||
|
description = ucname .. " Egg", |
||||
|
inventory_image = msname_egg_img , |
||||
|
wield_image = msname_egg_img , |
||||
|
paramtype = "light", |
||||
|
walkable = false, |
||||
|
is_ground_content = true, |
||||
|
sunlight_propagates = true, |
||||
|
|
||||
|
-- This draws the new 3D chicken egg: |
||||
|
-- |
||||
|
drawtype = "mesh" , |
||||
|
mesh = "codermobs_chicken_egg.b3d" , |
||||
|
tiles = { "animal_materials_egg_ent_mesh.png" } , |
||||
|
selection_box = { |
||||
|
type = "fixed" , |
||||
|
fixed = { -0.12,-0.425,-0.12,0.12,-0.175,0.12 } , |
||||
|
} , |
||||
|
visual_scale = 0.12 , |
||||
|
|
||||
|
groups = {snappy = 2, dig_immediate = 3}, |
||||
|
|
||||
|
after_place_node = function(pos, placer, itemstack) |
||||
|
if placer:is_player() then |
||||
|
minetest.set_node(pos, |
||||
|
{ name = obj_name_egg, param2 = EGG_UNFERTILIZED }) |
||||
|
end |
||||
|
end, |
||||
|
|
||||
|
on_construct = function (pos) |
||||
|
minetest.get_node_timer (pos):start (codermobs_egg_time_delay) |
||||
|
end , |
||||
|
|
||||
|
on_use = mobs_shoot_egg , |
||||
|
|
||||
|
on_timer = function (pos, elapsed) |
||||
|
local self = minetest.get_node (pos) |
||||
|
local sp2 = self.param2 |
||||
|
|
||||
|
minetest.remove_node (pos) |
||||
|
|
||||
|
if sp2 ~= nil and sp2 == EGG_FERTILIZED then |
||||
|
local num = math.random (1, codermobs_egg_hatch_chance) |
||||
|
if num == 1 then |
||||
|
minetest.add_entity (pos, "codermobs:baby_chick") |
||||
|
end |
||||
|
end |
||||
|
end , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("codermobs:egg" , obj_name_egg) |
||||
|
minetest.register_alias ("mobs:egg" , obj_name_egg) |
||||
|
minetest.register_alias ("egg" , obj_name_egg) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg entity |
||||
|
|
||||
|
mobs:register_arrow (obj_name_egg_entity, { |
||||
|
visual = "sprite", |
||||
|
visual_size = {x=.5, y=.5}, |
||||
|
textures = { msname_egg_img } , |
||||
|
velocity = 6, |
||||
|
|
||||
|
hit_player = function(self, player) |
||||
|
player:punch(self.object, 1.0, { |
||||
|
full_punch_interval = 1.0, |
||||
|
damage_groups = {fleshy = 1}, |
||||
|
}, nil) |
||||
|
end, |
||||
|
|
||||
|
hit_mob = function(self, player) |
||||
|
player:punch(self.object, 1.0, { |
||||
|
full_punch_interval = 1.0, |
||||
|
damage_groups = {fleshy = 1}, |
||||
|
}, nil) |
||||
|
end, |
||||
|
|
||||
|
hit_node = function(self, pos, node) |
||||
|
local num = math.random(1, 10) |
||||
|
|
||||
|
-- RJK 191223: This code is disabled for now because it'll presently |
||||
|
-- crash if it's used. |
||||
|
|
||||
|
if false and num == 1 then |
||||
|
pos.y = pos.y + 1 |
||||
|
local nod = minetest.get_node_or_nil(pos) |
||||
|
|
||||
|
if not nod |
||||
|
or not minetest.registered_nodes[nod.name] |
||||
|
or minetest.registered_nodes[nod.name].walkable == true then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
local mob = minetest.add_entity (pos, obj_name) |
||||
|
local ent2 = mob:get_luaentity() |
||||
|
|
||||
|
mob:set_properties({ |
||||
|
textures = ent2.child_texture[1], |
||||
|
visual_size = { |
||||
|
x = ent2.base_size.x / 2, |
||||
|
y = ent2.base_size.y / 2 |
||||
|
}, |
||||
|
collisionbox = { |
||||
|
ent2.base_colbox[1] / 2, |
||||
|
ent2.base_colbox[2] / 2, |
||||
|
ent2.base_colbox[3] / 2, |
||||
|
ent2.base_colbox[4] / 2, |
||||
|
ent2.base_colbox[5] / 2, |
||||
|
ent2.base_colbox[6] / 2 |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
ent2.child = true |
||||
|
ent2.tamed = true |
||||
|
ent2.owner = self.playername |
||||
|
end |
||||
|
end |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Fried egg. |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_egg_fried, { |
||||
|
description = "Fried " .. ucname .. " Egg" , |
||||
|
inventory_image = msname_egg_fried_img , |
||||
|
on_use = minetest.item_eat (2) , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("mobs:chicken_egg_fried", |
||||
|
obj_name_egg_fried) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
recipe = obj_name_egg , |
||||
|
output = obj_name_egg_fried , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Raw bird. |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_raw, { |
||||
|
description = "Raw " .. ucname , |
||||
|
inventory_image = msname_raw_img , |
||||
|
|
||||
|
on_use = function (itemstack, player, pointed_thing) |
||||
|
local name = player:get_player_name() |
||||
|
local msg = name .. " ate raw " .. ucname .. ". Salmonella!" |
||||
|
minetest.chat_send_all (msg) |
||||
|
player:set_hp (player:get_hp() - 2) |
||||
|
end , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("mobs:chicken_raw", obj_name_raw) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Cooked bird. |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_cooked, { |
||||
|
description = "Cooked " .. ucname , |
||||
|
inventory_image = msname_cooked_img , |
||||
|
on_use = minetest.item_eat (6) , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("mobs:chicken_cooked", |
||||
|
obj_name_cooked) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
recipe = obj_name_raw , |
||||
|
output = obj_name_cooked , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Chicken feather. |
||||
|
|
||||
|
minetest.register_craftitem ("codermobs:chicken_feather", { |
||||
|
description = "Feather" , |
||||
|
inventory_image = "codermobs_chicken_feather.png" , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("mobs:chicken_feather", |
||||
|
"codermobs:chicken_feather") |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,128 @@ |
|||||
|
-- Giant Spider. Descended from LOTT version. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "lott_spider" |
||||
|
local ucname = "LOTT Spider" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = lcname , |
||||
|
ucname = ucname , |
||||
|
obj_name = obj_name , |
||||
|
|
||||
|
aoc = -1 , |
||||
|
spawn_chance = 120000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 0 , |
||||
|
max_light = 30 , |
||||
|
min_height = -31000 , |
||||
|
max_height = 31000 , |
||||
|
|
||||
|
spawn_type = "npc" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"default:junglegrass" , |
||||
|
"default:jungleleaves" , |
||||
|
"default:jungletree" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = true , |
||||
|
egg_image = "default_stone.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
minetest.register_craftitem (obj_name .. "_meat", { |
||||
|
description = "Cooked Meat", |
||||
|
inventory_image = msname .. "_meat.png", |
||||
|
on_use = minetest.item_eat (4), |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem (obj_name .. "_meat_raw", { |
||||
|
description = "Raw Meat", |
||||
|
inventory_image = msname .. "_meat_raw.png", |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking", |
||||
|
output = obj_name .. "_meat", |
||||
|
recipe = obj_name .. "_meat_raw", |
||||
|
}) |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
passive = false, |
||||
|
attacks_monsters = true, |
||||
|
hp_min = 15, |
||||
|
hp_max = 30, |
||||
|
collisionbox = {-0.9, -0.01, -0.7, 0.7, 0.6, 0.7}, |
||||
|
textures = { msname .. ".png"} , |
||||
|
visual_size = {x=7,y=7}, |
||||
|
visual = "mesh", |
||||
|
mesh = msname .. ".x", |
||||
|
makes_footstep_sound = true, |
||||
|
view_range = 15, |
||||
|
walk_velocity = 1, |
||||
|
run_velocity = 3, |
||||
|
armor = 200, |
||||
|
damage = 3, |
||||
|
stepheight = 1.2 , |
||||
|
jump_height = 0 , |
||||
|
jump = false , |
||||
|
|
||||
|
drops = { |
||||
|
{ name = "farming:string" , |
||||
|
chance = 2, min = 1, max = 3 } , |
||||
|
{ name = obj_name .. "_meat_raw" , |
||||
|
chance = 4, min = 1, max = 2 } , |
||||
|
} , |
||||
|
|
||||
|
light_resistant = true, |
||||
|
drawtype = "front", |
||||
|
water_damage = 5, |
||||
|
floats = 0, |
||||
|
runaway = true, |
||||
|
lava_damage = 5, |
||||
|
light_damage = 0, |
||||
|
on_rightclick = nil, |
||||
|
attack_type = "dogfight", |
||||
|
|
||||
|
animation = { |
||||
|
speed_normal = 15, |
||||
|
speed_run = 15, |
||||
|
stand_start = 1, |
||||
|
stand_end = 1, |
||||
|
walk_start = 20, |
||||
|
walk_end = 40, |
||||
|
run_start = 20, |
||||
|
run_end = 40, |
||||
|
punch_start = 50, |
||||
|
punch_end = 90, |
||||
|
}, |
||||
|
blood_texture = msname .. "_blood.png", |
||||
|
|
||||
|
sounds = { |
||||
|
war_cry = "codermobs_eerie" , |
||||
|
damage = "codermobs_damage_giant_exoskeleton" , |
||||
|
death = "codermobs_death_giant_bug" , |
||||
|
attack = "codermobs_use_giant_exoskeleton" , |
||||
|
}, |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
mobs:alias_mob ("mobs_monster:spider" , obj_name) |
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,19 @@ |
|||||
|
Name: codermobs |
||||
|
Source: New mod using existing media files |
||||
|
License: See "LICENSE" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. This is a new mod which implements a number of Final Minetest 3D |
||||
|
mobs. |
||||
|
|
||||
|
For general information, see the "_game" documentation, which covers |
||||
|
this mod and the associated modpack in detail. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. The code is largely new, but it includes elements from existing |
||||
|
mods. The media files, in most cases, have been extracted from the |
||||
|
same or similar mods. |
||||
|
|
||||
|
For license information, see "LICENSE". |
@ -0,0 +1,355 @@ |
|||||
|
-- Ostrich. Descended from Sapier version. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Media license. Applies to model and associated texture. |
||||
|
-- |
||||
|
-- You may copy, use, modify or do nearly anything but remove this |
||||
|
-- copyright notice. Of course, you're not allowed to pretend you've |
||||
|
-- created or written the Sapier, Poikilos, or OldCoder pieces. |
||||
|
-- |
||||
|
-- CC-BY-SA 3.0. Attribution: Sapier, Poikilos, and OldCoder. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "ostrich" |
||||
|
local ucname = "Ostrich" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = lcname , |
||||
|
ucname = ucname , |
||||
|
obj_name = obj_name , |
||||
|
|
||||
|
aoc = -1 , |
||||
|
spawn_chance = 80000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 14 , |
||||
|
max_light = 20 , |
||||
|
min_height = 0 , |
||||
|
max_height = 200 , |
||||
|
|
||||
|
spawn_type = "animal" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"default:dirt_with_dry_grass" , |
||||
|
"ethereal:mushroom_dirt" , |
||||
|
} , |
||||
|
|
||||
|
spawn_by = { |
||||
|
"group:dry_grass" , |
||||
|
"group:grass" , |
||||
|
"flowers:mushroom_brown" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = true , |
||||
|
egg_image = "wool_pink.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
-- Chicken-based images stand in for ostrich-based images in some |
||||
|
-- cases. |
||||
|
|
||||
|
local mcname = "codermobs_chicken" |
||||
|
|
||||
|
local msname_cooked = mcname .. "_cooked" |
||||
|
local msname_raw = mcname .. "_raw" |
||||
|
|
||||
|
local msname_img = mcname .. ".png" |
||||
|
local msname_cooked_img = msname_cooked .. ".png" |
||||
|
local msname_raw_img = msname_raw .. ".png" |
||||
|
|
||||
|
local msname_egg = mcname .. "_egg" |
||||
|
local msname_egg_fried = msname_egg .. "_fried" |
||||
|
local msname_egg_fried_img = msname_egg_fried .. ".png" |
||||
|
local msname_egg_img = msname_egg .. ".png" |
||||
|
|
||||
|
local obj_name_cooked = obj_name .. "_cooked" |
||||
|
local obj_name_raw = obj_name .. "_raw" |
||||
|
|
||||
|
local obj_name_egg = obj_name .. "_egg" |
||||
|
local obj_name_egg_entity = obj_name_egg .. "_entity" |
||||
|
local obj_name_egg_fried = obj_name_egg .. "_fried" |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
makes_footstep_sound = true , |
||||
|
|
||||
|
armor = 200 , |
||||
|
attack_npcs = false , |
||||
|
attack_type = "dogfight" , |
||||
|
damage = 2 , |
||||
|
fear_height = 3 , |
||||
|
floats = 0 , |
||||
|
group_attack = true , |
||||
|
hp_max = 15 , |
||||
|
hp_min = 5 , |
||||
|
stepheight = 1.2 , |
||||
|
jump_height = 0 , |
||||
|
jump = false , |
||||
|
owner_loyal = true , |
||||
|
passive = false , |
||||
|
pushable = true , |
||||
|
reach = 2 , |
||||
|
run_velocity = 3 , |
||||
|
runaway = true , |
||||
|
type = "animal" , |
||||
|
view_range = 10 , |
||||
|
walk_velocity = 2 , |
||||
|
|
||||
|
lava_damage = 5 , |
||||
|
light_damage = 0 , |
||||
|
water_damage = 1 , |
||||
|
|
||||
|
collisionbox = { -0.50, -0.85, -0.50, 0.50, 0.60, 0.50 } , |
||||
|
mesh = "codermobs_ostrich.b3d" , |
||||
|
rotate = 270 , |
||||
|
textures = { "codermobs_ostrich_mesh.png" } , |
||||
|
visual = "mesh" , |
||||
|
|
||||
|
sounds = { |
||||
|
} , |
||||
|
|
||||
|
follow = { "default:apple", "farming:potato" } , |
||||
|
|
||||
|
drops = { |
||||
|
{ |
||||
|
name="animal_materials:meat_ostrich", |
||||
|
chance=1, min=1, max=3 |
||||
|
} , |
||||
|
} , |
||||
|
|
||||
|
specific_attack = codermobs.make_mob_list ({ |
||||
|
"chicken", "bunny", |
||||
|
}) , |
||||
|
|
||||
|
|
||||
|
animation = { |
||||
|
speed_normal = 10 , |
||||
|
stand_start = 1 , |
||||
|
stand_end = 40 , |
||||
|
walk_start = 41 , |
||||
|
walk_end = 81 , |
||||
|
}, |
||||
|
|
||||
|
on_rightclick = function (self, clicker) |
||||
|
if mobs:feed_tame(self, clicker, 8, true, true) then return end |
||||
|
if mobs:protect(self, clicker) then return end |
||||
|
|
||||
|
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then |
||||
|
return |
||||
|
end |
||||
|
end, |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg-throwing item |
||||
|
|
||||
|
local egg_GRAVITY = 9 |
||||
|
local egg_VELOCITY = 19 |
||||
|
|
||||
|
-- Shoot egg |
||||
|
local mobs_shoot_egg = function (item, player, pointed_thing) |
||||
|
|
||||
|
local playerpos = player:getpos() |
||||
|
|
||||
|
minetest.sound_play ("default_place_node_hard", { |
||||
|
pos = playerpos, |
||||
|
gain = 1.0, |
||||
|
max_hear_distance = 5, |
||||
|
}) |
||||
|
|
||||
|
local obj = minetest.add_entity({ |
||||
|
x = playerpos.x, |
||||
|
y = playerpos.y +1.5, |
||||
|
z = playerpos.z |
||||
|
}, obj_name_egg_entity) |
||||
|
|
||||
|
local ent = obj:get_luaentity() |
||||
|
local dir = player:get_look_dir() |
||||
|
|
||||
|
ent.velocity = egg_VELOCITY -- needed for api internal timing |
||||
|
ent.switch = 1 -- needed so that egg doesn't despawn straight away |
||||
|
|
||||
|
obj:setvelocity({ |
||||
|
x = dir.x * egg_VELOCITY, |
||||
|
y = dir.y * egg_VELOCITY, |
||||
|
z = dir.z * egg_VELOCITY |
||||
|
}) |
||||
|
|
||||
|
obj:setacceleration({ |
||||
|
x = dir.x * -3, |
||||
|
y = -egg_GRAVITY, |
||||
|
z = dir.z * -3 |
||||
|
}) |
||||
|
|
||||
|
-- pass player name to egg for chick ownership |
||||
|
local ent2 = obj:get_luaentity() |
||||
|
ent2.playername = player:get_player_name() |
||||
|
item:take_item() |
||||
|
return item |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg. |
||||
|
|
||||
|
minetest.register_node (obj_name_egg, { |
||||
|
description = ucname .. " Egg", |
||||
|
inventory_image = msname_egg_img , |
||||
|
wield_image = msname_egg_img , |
||||
|
paramtype = "light", |
||||
|
walkable = false, |
||||
|
is_ground_content = true, |
||||
|
sunlight_propagates = true, |
||||
|
|
||||
|
drawtype = "mesh" , |
||||
|
mesh = "animal-materials-egg.b3d" , |
||||
|
tiles = { "animal_materials_egg_ent_mesh.png" } , |
||||
|
visual_scale = 0.24 , |
||||
|
|
||||
|
selection_box = { |
||||
|
type = "fixed" , |
||||
|
fixed = { -0.25, -0.25, -0.25, 0.25, 0.25, 0.24 } , |
||||
|
} , |
||||
|
|
||||
|
groups = {snappy = 2, dig_immediate = 3}, |
||||
|
|
||||
|
after_place_node = function(pos, placer, itemstack) |
||||
|
if placer:is_player() then |
||||
|
minetest.set_node(pos, {name = obj_name_egg, param2 = 1}) |
||||
|
end |
||||
|
end , |
||||
|
|
||||
|
on_use = mobs_shoot_egg , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg entity. |
||||
|
|
||||
|
mobs:register_arrow (obj_name_egg_entity, { |
||||
|
visual = "sprite", |
||||
|
visual_size = {x=.5, y=.5}, |
||||
|
textures = { msname_egg_img } , |
||||
|
velocity = 6, |
||||
|
|
||||
|
hit_player = function(self, player) |
||||
|
player:punch(self.object, 1.0, { |
||||
|
full_punch_interval = 1.0, |
||||
|
damage_groups = {fleshy = 1}, |
||||
|
}, nil) |
||||
|
end, |
||||
|
|
||||
|
hit_mob = function(self, player) |
||||
|
player:punch(self.object, 1.0, { |
||||
|
full_punch_interval = 1.0, |
||||
|
damage_groups = {fleshy = 1}, |
||||
|
}, nil) |
||||
|
end, |
||||
|
|
||||
|
hit_node = function (self, pos, node) |
||||
|
local num = math.random (1, 10) |
||||
|
|
||||
|
-- RJK 191223: This code is disabled for now because it'll presently |
||||
|
-- crash if it's used. |
||||
|
|
||||
|
if false and num == 1 then |
||||
|
pos.y = pos.y + 1 |
||||
|
local nod = minetest.get_node_or_nil(pos) |
||||
|
|
||||
|
if not nod |
||||
|
or not minetest.registered_nodes[nod.name] |
||||
|
or minetest.registered_nodes[nod.name].walkable == true then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
local mob = minetest.add_entity (pos, obj_name) |
||||
|
local ent2 = mob:get_luaentity() |
||||
|
|
||||
|
mob:set_properties({ |
||||
|
textures = ent2.child_texture[1], |
||||
|
visual_size = { |
||||
|
x = ent2.base_size.x / 2, |
||||
|
y = ent2.base_size.y / 2 |
||||
|
}, |
||||
|
collisionbox = { |
||||
|
ent2.base_colbox[1] / 2, |
||||
|
ent2.base_colbox[2] / 2, |
||||
|
ent2.base_colbox[3] / 2, |
||||
|
ent2.base_colbox[4] / 2, |
||||
|
ent2.base_colbox[5] / 2, |
||||
|
ent2.base_colbox[6] / 2 |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
ent2.child = true |
||||
|
ent2.tamed = true |
||||
|
ent2.owner = self.playername |
||||
|
end |
||||
|
end |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Fried egg. |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_egg_fried, { |
||||
|
description = "Fried " .. ucname .. " Egg" , |
||||
|
inventory_image = msname_egg_fried_img , |
||||
|
on_use = minetest.item_eat (3) , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
recipe = obj_name_egg , |
||||
|
output = obj_name_egg_fried , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Raw bird. |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_raw, { |
||||
|
description = "Raw " .. ucname , |
||||
|
inventory_image = msname_raw_img , |
||||
|
|
||||
|
on_use = function (itemstack, player, pointed_thing) |
||||
|
local name = player:get_player_name() |
||||
|
local msg = name .. " ate raw " .. ucname .. ". Salmonella!" |
||||
|
minetest.chat_send_all (msg) |
||||
|
player:set_hp (player:get_hp() - 2) |
||||
|
end , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Cooked bird. |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_cooked, { |
||||
|
description = "Cooked " .. ucname , |
||||
|
inventory_image = msname_cooked_img , |
||||
|
on_use = minetest.item_eat (6) , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
recipe = obj_name_raw , |
||||
|
output = obj_name_cooked , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,118 @@ |
|||||
|
-- Better Rat. Descended from Melkor version. |
||||
|
|
||||
|
-- Note: Should be loaded *after* regular rat. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "rat_better" |
||||
|
local ucname = "Rat_Better" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = lcname , |
||||
|
ucname = ucname , |
||||
|
obj_name = obj_name , |
||||
|
|
||||
|
aoc = 2 , |
||||
|
spawn_chance = 150000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 10 , |
||||
|
max_light = 20 , |
||||
|
min_height = -31000 , |
||||
|
max_height = 31000 , |
||||
|
|
||||
|
scale = 1.5 , |
||||
|
spawn_type = "animal" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"darkage:silt" , |
||||
|
"default:desert_sand" , |
||||
|
"default:dirt_with_dry_grass" , |
||||
|
"default:dirt_with_grass" , |
||||
|
"default:silver_sand" , |
||||
|
"default:stone" , |
||||
|
"earthgen:dirt_with_dry_grass" , |
||||
|
"ethereal:green_dirt" , |
||||
|
"ethereal:green_dirt_top" , |
||||
|
"ethereal:grove_dirt" , |
||||
|
"ethereal:mushroom_dirt" , |
||||
|
"loud_walking:polluted_dirt" , |
||||
|
"mg:dirt_with_dry_grass" , |
||||
|
"noisegrid:grass" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = false , |
||||
|
egg_image = msname .. "_inv.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
visual = "mesh" , |
||||
|
mesh = msname .. ".b3d" , |
||||
|
rotate = 180, |
||||
|
|
||||
|
textures = { |
||||
|
{ msname .. "_black.png" } , |
||||
|
{ msname .. "_brown.png" } , |
||||
|
{ msname .. "_gray.png" } , |
||||
|
{ msname .. "_white.png" } , |
||||
|
}, |
||||
|
|
||||
|
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.2, 0.2}, |
||||
|
hp_min= 2, |
||||
|
hp_max = 5, |
||||
|
armor = 80, |
||||
|
knock_back = 2, |
||||
|
blood_amount = 1, |
||||
|
stepheight = 1.2 , |
||||
|
jump_height = 0 , |
||||
|
jump = false , |
||||
|
water_damage = 1, |
||||
|
floats = 0, |
||||
|
runaway = true, |
||||
|
lava_damage = 5, |
||||
|
fall_damage = 0, |
||||
|
damage = 1, |
||||
|
attack_type = "dogfight", |
||||
|
group_attack = true, |
||||
|
|
||||
|
drops = { |
||||
|
{ name="mobs:cheese", chance=1, min=1, max=2 } , |
||||
|
} , |
||||
|
|
||||
|
follow = { "mobs:cheese" , } , |
||||
|
replace_rate = 50, |
||||
|
replace_what = { "mobs:cheese" , "mobs:cheeseblock" , } , |
||||
|
replace_with = "air", |
||||
|
view_range = 8, |
||||
|
|
||||
|
on_rightclick = function (self, clicker) |
||||
|
mobs:capture_mob (self, clicker, 25, 80, 0, true, nil) |
||||
|
end , |
||||
|
} |
||||
|
|
||||
|
-- cooked rat, yummy! |
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
output = "codermobs:rat_standard_cooked" , |
||||
|
recipe = obj_name , |
||||
|
cooktime = 5, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,154 @@ |
|||||
|
-- Warthog. Descended from KrupnoPavel version. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "warthog" |
||||
|
local ucname = "Warthog" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = lcname , |
||||
|
ucname = ucname , |
||||
|
obj_name = obj_name , |
||||
|
|
||||
|
aoc = -1 , |
||||
|
spawn_chance = 80000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 14 , |
||||
|
max_light = 20 , |
||||
|
min_height = 0 , |
||||
|
max_height = 200 , |
||||
|
|
||||
|
spawn_type = "animal" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"default:dirt_with_dry_grass" , |
||||
|
"ethereal:mushroom_dirt" , |
||||
|
} , |
||||
|
|
||||
|
spawn_by = { |
||||
|
"group:dry_grass" , |
||||
|
"group:grass" , |
||||
|
"flowers:mushroom_brown" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = true , |
||||
|
egg_image = "wool_pink.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
makes_footstep_sound = true , |
||||
|
|
||||
|
armor = 200 , |
||||
|
attack_npcs = false , |
||||
|
attack_type = "dogfight" , |
||||
|
damage = 2 , |
||||
|
fear_height = 2 , |
||||
|
floats = 0 , |
||||
|
group_attack = true , |
||||
|
hp_max = 15 , |
||||
|
hp_min = 5 , |
||||
|
stepheight = 1.2 , |
||||
|
jump_height = 0 , |
||||
|
jump = false , |
||||
|
owner_loyal = true , |
||||
|
passive = false , |
||||
|
pushable = true , |
||||
|
reach = 2 , |
||||
|
run_velocity = 3 , |
||||
|
runaway = true , |
||||
|
type = "animal" , |
||||
|
view_range = 10 , |
||||
|
walk_velocity = 2 , |
||||
|
|
||||
|
lava_damage = 5 , |
||||
|
light_damage = 0 , |
||||
|
water_damage = 1 , |
||||
|
|
||||
|
collisionbox = { -0.40, -0.01, -0.40, 0.40, 0.95, 0.40 } , |
||||
|
mesh = msname .. ".x" , |
||||
|
textures = {{ msname .. ".png" }} , |
||||
|
visual = "mesh" , |
||||
|
|
||||
|
animation = { |
||||
|
stand_start = 25 , |
||||
|
stand_end = 55 , |
||||
|
punch_start = 70 , |
||||
|
punch_end = 100 , |
||||
|
walk_start = 70 , |
||||
|
walk_end = 100 , |
||||
|
speed_normal = 15 , |
||||
|
} , |
||||
|
|
||||
|
sounds = { |
||||
|
random = "mobs_pig", |
||||
|
attack = "mobs_pig_angry", |
||||
|
} , |
||||
|
|
||||
|
follow = { "default:apple", "farming:potato" } , |
||||
|
|
||||
|
drops = { |
||||
|
{ name="mobs:pork_raw", chance=1, min=1, max=3 } , |
||||
|
} , |
||||
|
|
||||
|
specific_attack = codermobs.make_mob_list ({ |
||||
|
"rat" , "rat_better", "chicken", |
||||
|
}) , |
||||
|
|
||||
|
on_rightclick = function (self, clicker) |
||||
|
if mobs:feed_tame(self, clicker, 8, true, true) then return end |
||||
|
if mobs:protect(self, clicker) then return end |
||||
|
|
||||
|
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then |
||||
|
return |
||||
|
end |
||||
|
end, |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
-- raw porkchop |
||||
|
minetest.register_craftitem(":mobs:pork_raw", { |
||||
|
description = "Raw Porkchop" , |
||||
|
inventory_image = "codermobs_pork_raw.png", |
||||
|
on_use = minetest.item_eat(4), |
||||
|
groups = {food_meat_raw = 1, food_pork_raw = 1, flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
-- cooked porkchop |
||||
|
minetest.register_craftitem(":mobs:pork_cooked", { |
||||
|
description = "Cooked Porkchop" , |
||||
|
inventory_image = "codermobs_pork_cooked.png", |
||||
|
|
||||
|
on_use = minetest.item_eat(8), |
||||
|
groups = {food_meat = 1, food_pork = 1, flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "cooking", |
||||
|
output = "mobs:pork_cooked", |
||||
|
recipe = "mobs:pork_raw", |
||||
|
cooktime = 5, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
mobs:alias_mob ("mobs:pumba" , obj_name) |
||||
|
mobs:alias_mob ("mobs:warthog" , obj_name) |
||||
|
mobs:alias_mob ("mobs_animal:pumba" , obj_name) |
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,324 @@ |
|||||
|
|
||||
|
local S = mobs.intllib |
||||
|
|
||||
|
-- name tag |
||||
|
minetest.register_craftitem("mobs:nametag", { |
||||
|
description = S("Name Tag"), |
||||
|
inventory_image = "mobs_nametag.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
if minetest.get_modpath("dye") and minetest.get_modpath("farming") then |
||||
|
minetest.register_craft({ |
||||
|
type = "shapeless", |
||||
|
output = "mobs:nametag", |
||||
|
recipe = {"default:paper", "dye:black", "farming:string"}, |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
-- leather |
||||
|
minetest.register_craftitem("mobs:leather", { |
||||
|
description = S("Leather"), |
||||
|
inventory_image = "mobs_leather.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
-- raw meat |
||||
|
minetest.register_craftitem("mobs:meat_raw", { |
||||
|
description = S("Raw Meat"), |
||||
|
inventory_image = "mobs_meat_raw.png", |
||||
|
on_use = minetest.item_eat(3), |
||||
|
groups = {food_meat_raw = 1, flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
-- cooked meat |
||||
|
minetest.register_craftitem("mobs:meat", { |
||||
|
description = S("Meat"), |
||||
|
inventory_image = "mobs_meat.png", |
||||
|
on_use = minetest.item_eat(8), |
||||
|
groups = {food_meat = 1, flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "cooking", |
||||
|
output = "mobs:meat", |
||||
|
recipe = "mobs:meat_raw", |
||||
|
cooktime = 5, |
||||
|
}) |
||||
|
|
||||
|
-- lasso |
||||
|
minetest.register_tool("mobs:lasso", { |
||||
|
description = S("Lasso (right-click animal to put in inventory)"), |
||||
|
inventory_image = "mobs_magic_lasso.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
if minetest.get_modpath("farming") then |
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:lasso", |
||||
|
recipe = { |
||||
|
{"farming:string", "", "farming:string"}, |
||||
|
{"", "default:diamond", ""}, |
||||
|
{"farming:string", "", "farming:string"}, |
||||
|
} |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
minetest.register_alias("mobs:magic_lasso", "mobs:lasso") |
||||
|
|
||||
|
-- net |
||||
|
minetest.register_tool("mobs:net", { |
||||
|
description = S("Net (right-click animal to put in inventory)"), |
||||
|
inventory_image = "mobs_net.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
if minetest.get_modpath("farming") then |
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:net", |
||||
|
recipe = { |
||||
|
{"group:stick", "", "group:stick"}, |
||||
|
{"group:stick", "", "group:stick"}, |
||||
|
{"farming:string", "group:stick", "farming:string"}, |
||||
|
} |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
-- shears (right click to shear animal) |
||||
|
minetest.register_tool("mobs:shears", { |
||||
|
description = S("Steel Shears (right-click to shear)"), |
||||
|
inventory_image = "mobs_shears.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = 'mobs:shears', |
||||
|
recipe = { |
||||
|
{'', 'default:steel_ingot', ''}, |
||||
|
{'', 'group:stick', 'default:steel_ingot'}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- protection rune |
||||
|
minetest.register_craftitem("mobs:protector", { |
||||
|
description = S("Mob Protection Rune"), |
||||
|
inventory_image = "mobs_protector.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:protector", |
||||
|
recipe = { |
||||
|
{"default:stone", "default:stone", "default:stone"}, |
||||
|
{"default:stone", "default:goldblock", "default:stone"}, |
||||
|
{"default:stone", "default:stone", "default:stone"}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- saddle |
||||
|
minetest.register_craftitem ("mobs:saddle", { |
||||
|
description = S("Saddle") , |
||||
|
inventory_image = "mobs_saddle.png", |
||||
|
groups = { flammable=2 } , |
||||
|
stack_max = 1 , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:saddle", |
||||
|
recipe = { |
||||
|
{"mobs:leather", "mobs:leather", "mobs:leather"}, |
||||
|
{"mobs:leather", "default:steel_ingot", "mobs:leather"}, |
||||
|
{"mobs:leather", "default:steel_ingot", "mobs:leather"}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- mob fence (looks like normal fence but collision is 2 high) |
||||
|
default.register_fence("mobs:fence_wood", { |
||||
|
description = S("Mob Fence"), |
||||
|
texture = "default_wood.png", |
||||
|
material = "default:fence_wood", |
||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, |
||||
|
sounds = default.node_sound_wood_defaults(), |
||||
|
collision_box = { |
||||
|
type = "fixed", |
||||
|
fixed = { |
||||
|
{-0.5, -0.5, -0.5, 0.5, 1.9, 0.5}, |
||||
|
}, |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
-- mob fence top (has enlarged collisionbox to stop mobs getting over) |
||||
|
minetest.register_node("mobs:fence_top", { |
||||
|
description = S("Mob Fence Top"), |
||||
|
drawtype = "nodebox", |
||||
|
tiles = {"default_wood.png"}, |
||||
|
paramtype = "light", |
||||
|
is_ground_content = false, |
||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, |
||||
|
sounds = default.node_sound_wood_defaults(), |
||||
|
node_box = { |
||||
|
type = "fixed", |
||||
|
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, |
||||
|
}, |
||||
|
collision_box = { |
||||
|
type = "fixed", |
||||
|
fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4}, |
||||
|
}, |
||||
|
selection_box = { |
||||
|
type = "fixed", |
||||
|
fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4}, |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:fence_top 12", |
||||
|
recipe = { |
||||
|
{"group:wood", "group:wood", "group:wood"}, |
||||
|
{"", "default:fence_wood", ""}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- items that can be used as fuel |
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:nametag", |
||||
|
burntime = 3, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:lasso", |
||||
|
burntime = 7, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:net", |
||||
|
burntime = 8, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:leather", |
||||
|
burntime = 4, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:saddle", |
||||
|
burntime = 7, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:fence_wood", |
||||
|
burntime = 7, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:fence_top", |
||||
|
burntime = 2, |
||||
|
}) |
||||
|
|
||||
|
-- this tool spawns same mob and adds owner, protected, nametag info |
||||
|
-- then removes original entity, this is used for fixing any issues. |
||||
|
|
||||
|
local tex_obj |
||||
|
|
||||
|
minetest.register_tool(":mobs:mob_reset_stick", { |
||||
|
description = "Mob Reset Stick", |
||||
|
inventory_image = "default_stick.png^[colorize:#ff000050", |
||||
|
stack_max = 1, |
||||
|
groups = {not_in_creative_inventory = 1}, |
||||
|
|
||||
|
on_use = function(itemstack, user, pointed_thing) |
||||
|
|
||||
|
if pointed_thing.type ~= "object" then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
local obj = pointed_thing.ref |
||||
|
|
||||
|
local control = user:get_player_control() |
||||
|
local sneak = control and control.sneak |
||||
|
|
||||
|
if obj and not sneak then |
||||
|
|
||||
|
local self = obj:get_luaentity() |
||||
|
local obj2 = minetest.add_entity(obj:get_pos(), self.name) |
||||
|
|
||||
|
if obj2 then |
||||
|
|
||||
|
local ent2 = obj2:get_luaentity() |
||||
|
|
||||
|
ent2.protected = self.protected |
||||
|
ent2.owner = self.owner |
||||
|
ent2.nametag = self.nametag |
||||
|
ent2.gotten = self.gotten |
||||
|
ent2.tamed = self.tamed |
||||
|
ent2.health = self.health |
||||
|
ent2.order = self.order |
||||
|
|
||||
|
if self.child then |
||||
|
obj2:set_velocity({x = 0, y = self.jump_height, z = 0}) |
||||
|
end |
||||
|
|
||||
|
obj2:set_properties({nametag = self.nametag}) |
||||
|
|
||||
|
obj:remove() |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
if obj and sneak then |
||||
|
|
||||
|
tex_obj = obj |
||||
|
|
||||
|
local name = user:get_player_name() |
||||
|
local tex = "" |
||||
|
|
||||
|
minetest.show_formspec(name, "mobs_texture", "size[8,4]" |
||||
|
.. "field[0.5,1;7.5,0;name;" |
||||
|
.. minetest.formspec_escape(S("Enter texture:")) .. ";" .. tex .. "]" |
||||
|
.. "button_exit[2.5,3.5;3,1;mob_texture_change;" |
||||
|
.. minetest.formspec_escape(S("Change")) .. "]") |
||||
|
end |
||||
|
end, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_on_player_receive_fields(function(player, formname, fields) |
||||
|
|
||||
|
-- right-clicked with nametag and name entered? |
||||
|
if formname == "mobs_texture" |
||||
|
and fields.name |
||||
|
and fields.name ~= "" then |
||||
|
|
||||
|
local name = player:get_player_name() |
||||
|
|
||||
|
if not tex_obj then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
-- make sure nametag is being used to name mob |
||||
|
local item = player:get_wielded_item() |
||||
|
|
||||
|
if item:get_name() ~= "mobs:mob_reset_stick" then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
-- limit name entered to 64 characters long |
||||
|
if string.len(fields.name) > 64 then |
||||
|
fields.name = string.sub(fields.name, 1, 64) |
||||
|
end |
||||
|
|
||||
|
-- update texture |
||||
|
local self = tex_obj:get_luaentity() |
||||
|
|
||||
|
self.base_texture = {fields.name} |
||||
|
|
||||
|
tex_obj:set_properties({textures = {fields.name}}) |
||||
|
|
||||
|
-- reset external variable |
||||
|
tex_obj = nil |
||||
|
end |
||||
|
end) |
@ -0,0 +1,51 @@ |
|||||
|
Copyright and license for new code and/or media not covered below: |
||||
|
(c) 2019 and CC BY-NC-SA 4.0 International: OldCoder (Robert Kiraly). |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
New Poikilos textures: |
||||
|
|
||||
|
mobs_damage_blood_big.png |
||||
|
mobs_damage_blood.png |
||||
|
mobs_damage_bug_big.png |
||||
|
mobs_damage_bug.png |
||||
|
mobs_damage_stone_big.png |
||||
|
mobs_damage_stone.png |
||||
|
mobs_damage_sweat_big.png |
||||
|
mobs_damage_sweat.png |
||||
|
|
||||
|
(c) 2019 and CC BY-SA 4.0 International: Poikilos. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Additional changes: |
||||
|
|
||||
|
mobs_chicken_egg.png |
||||
|
mobs_chicken_egg_overlay.png |
||||
|
|
||||
|
(c) 2016-2019 and MIT License: TenPlus1, Poikilos. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2016 TenPlus1 |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining |
||||
|
a copy of this software and associated documentation files (the |
||||
|
"Software"), to deal in the Software without restriction, including |
||||
|
without limitation the rights to use, copy, modify, merge, publish, |
||||
|
distribute, sublicense, and/or sell copies of the Software, and to |
||||
|
permit persons to whom the Software is furnished to do so, subject to |
||||
|
the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be |
||||
|
included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,50 @@ |
|||||
|
Name: mods |
||||
|
Source: For of upstream mod - Do not replace |
||||
|
License: See "license.txt" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. This is a fork of an upstream mod. Don't attempt to update or re- |
||||
|
place it. |
||||
|
|
||||
|
To be documented. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. Partial list of changes: |
||||
|
|
||||
|
* Multiple bug fixes related to old models that are rotated relative |
||||
|
to today's standard. |
||||
|
|
||||
|
* Bug fix related to behavior of mobs at the edge of cliffs. |
||||
|
|
||||
|
* Mobs that are sensitive to light can now optionally be configured to |
||||
|
burst into flames when light damage occurs. |
||||
|
|
||||
|
* Fix failure of API code to pass riding/driving parameters specified |
||||
|
by higher levels to riding/driving code. |
||||
|
|
||||
|
* Add support for more sophisticated approach to assessing mob densi- |
||||
|
ty. |
||||
|
|
||||
|
* Improve support for amphibious mobs. |
||||
|
|
||||
|
* Better TNT smoke texture. |
||||
|
|
||||
|
* Fix failure in riding/driving code to handle missing parameters. |
||||
|
|
||||
|
* Add support for steering both ground vehicles and aircraft using |
||||
|
the keyboard as well as the mouse. Note: These are separate features. |
||||
|
|
||||
|
* Talking mobs. Multiple languages are supported. |
||||
|
|
||||
|
* New damage-related textures by Poikilos: |
||||
|
|
||||
|
mobs_damage_blood_big.png |
||||
|
mobs_damage_blood.png |
||||
|
mobs_damage_stone_big.png |
||||
|
mobs_damage_stone.png |
||||
|
mobs_damage_sweat_big.png |
||||
|
mobs_damage_sweat.png |
||||
|
|
||||
|
* Add section to "license.txt" to cover new code and media. |
@ -0,0 +1,13 @@ |
|||||
|
Name: codermobs |
||||
|
Source: New modpack mixing original and forked mods |
||||
|
License: See notes below |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
The full documentation for "codermobs" is presently merged into the |
||||
|
"_game" documentation. |
||||
|
|
||||
|
Media files are derived, in general, from older mods. The code mixes |
||||
|
old and new pieces. |
||||
|
|
||||
|
License files are present in the individual mod directories. |
@ -0,0 +1,26 @@ |
|||||
|
Krupnov Pavel and TenPlus1 components: |
||||
|
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2014 Krupnov Pavel -- bugs, kpgmobs, pmobs |
||||
|
Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1 -- mobs_animal |
||||
|
Copyright (c) 2016 TenPlus1 -- mobs_monster and mobs_npc |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining |
||||
|
a copy of this software and associated documentation files (the |
||||
|
"Software"), to deal in the Software without restriction, including |
||||
|
without limitation the rights to use, copy, modify, merge, publish, |
||||
|
distribute, sublicense, and/or sell copies of the Software, and to |
||||
|
permit persons to whom the Software is furnished to do so, subject to |
||||
|
the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be |
||||
|
included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,19 @@ |
|||||
|
dofile (minetest.get_modpath ("whinny").."/api.lua" ) |
||||
|
dofile (minetest.get_modpath ("whinny").."/horse.lua" ) |
||||
|
|
||||
|
minetest.register_craftitem ("whinny:meat", { |
||||
|
description = "Cooked Meat", |
||||
|
inventory_image = "whinny_meat.png", |
||||
|
on_use = minetest.item_eat(4), |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem ("whinny:meat_raw", { |
||||
|
description = "Raw Meat", |
||||
|
inventory_image = "whinny_meat_raw.png", |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking", |
||||
|
output = "whinny:meat", |
||||
|
recipe = "whinny:meat_raw", |
||||
|
}) |
@ -0,0 +1,7 @@ |
|||||
|
Name: whinny |
||||
|
Source: Fork of an upstream mod (do not replace) |
||||
|
License: See "LICENSE" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
To be documented. |
@ -0,0 +1,92 @@ |
|||||
|
#!/bin/bash |
||||
|
SOURCE_MP="$HOME/git/animalmaterials" |
||||
|
# ^ the source modpack |
||||
|
cd "$SOURCE_MP" |
||||
|
|
||||
|
if [ ! -d "$SOURCE_MP/animalmaterials/textures" ]; then |
||||
|
printf "Error: SOURCE_MP \"$SOURCE_MP\" doesn't seem to be the animalmaterials modpack directory. Make sure you run this script from animalmaterials" |
||||
|
if [ -d "$SOURCE_MP/textures" ]; then |
||||
|
printf " (SOURCE_MP seems to be animalmaterials/animalmaterials--or some other mod directory--since it contains a textures directory)" |
||||
|
fi |
||||
|
echo "." |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
patchFileOrFail(){ |
||||
|
src="$1" |
||||
|
if [ ! -f "$src" ]; then |
||||
|
src="$SOURCE_MP/$1" |
||||
|
fi |
||||
|
if [ ! -f "$src" ]; then |
||||
|
echo " Error: The source file $src doesn't exist. The script refuses to continue." |
||||
|
exit 1 |
||||
|
fi |
||||
|
dst="$2" |
||||
|
if [ ! -f "$dst" ]; then |
||||
|
echo " Error: The destination file $dst doesn't exist. This script refuses to continue unless the destination is recognized." |
||||
|
exit 1 |
||||
|
fi |
||||
|
echo " * $dst" |
||||
|
cp "$src" "$dst" |
||||
|
} |
||||
|
|
||||
|
patchBucketGame(){ |
||||
|
BUCKET_GAME="$1" |
||||
|
if [ ! -d "$BUCKET_GAME/mods" ]; then |
||||
|
echo "Error: \"$BUCKET_GAME\" doesn't seem to be a game because it doesn't contain a mods directory." |
||||
|
exit 1 |
||||
|
fi |
||||
|
echo "* patching \"$BUCKET_GAME\"..." |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_meat_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/animal_materials_meat_raw.png |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_meat_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_meat_raw.png |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_meat_raw.png $BUCKET_GAME/mods/coderfood/unified_foods/textures/mobs_meat_raw.png |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_meat_raw.png $BUCKET_GAME/mods/codermobs/mobs/textures/mobs_meat_raw.png |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_meat_toxic_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/animal_materials_meat_toxic_raw.png |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_meat_undead_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/animal_materials_meat_undead_raw.png |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_pork_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/animal_materials_pork_raw.png |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_pork_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_pork_raw.png |
||||
|
patchFileOrFail animalmaterials/textures/animalmaterials_egg_big.png $BUCKET_GAME/mods/codermobs/codermobs/textures/animal_materials_egg_big.png |
||||
|
patchFileOrFail cooking/textures/cooking_cooked_meat.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_meat.png |
||||
|
patchFileOrFail cooking/textures/cooking_cooked_meat.png $BUCKET_GAME/mods/codermobs/mobs/textures/mobs_meat.png |
||||
|
patchFileOrFail cooking/textures/cooking_cooked_meat.png $BUCKET_GAME/mods/coderfood/unified_foods/textures/mobs_meat.png |
||||
|
patchFileOrFail cooking/textures/cooking_pork_cooked.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_pork_cooked.png |
||||
|
|
||||
|
# These were added in an earlier patch but renamed due to code-only changes in this page |
||||
|
# (See TODO manually further down) |
||||
|
# patchFileOrFail animalmaterials/textures/cooking_ostrich.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_raw.png |
||||
|
# patchFileOrFail cooking/textures/cooking_ostrich_cooked.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_cooked.png |
||||
|
# patchFileOrFail animalmaterials/textures/cooking_beef_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_beef_raw.png |
||||
|
# patchFileOrFail animalmaterials/textures/cooking_venison_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_venison_raw.png |
||||
|
# patchFileOrFail cooking/textures/cooking_beef_cooked.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_beef.png |
||||
|
# patchFileOrFail cooking/textures/cooking_venison_cooked.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_venison.png |
||||
|
echo " * done" |
||||
|
} |
||||
|
|
||||
|
patchBucketGame ~/minetest/games/bucket_game |
||||
|
patchBucketGame ~/git/EnlivenMinetest/Bucket_Game-branches/distinguish_meats-vs-211114a |
||||
|
|
||||
|
cat >/dev/null <<END |
||||
|
TODO: |
||||
|
|
||||
|
Sources: |
||||
|
|
||||
|
Destinations: |
||||
|
# See https://github.com/poikilos/EnlivenMinetest |
||||
|
# (EnlivenMinetest/patches/distinguish_meats-vs-211114a) |
||||
|
patchFileOrFail ? $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_chicken_cooked.png |
||||
|
patchFileOrFail ? $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_chicken_raw.png |
||||
|
patchFileOrFail ? $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_cooked_rat.png |
||||
|
patchFileOrFail ? $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_rat_better_inv.png |
||||
|
patchFileOrFail ? $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_rat_cooked.png |
||||
|
patchFileOrFail ? $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_rat_inventory.png |
||||
|
|
||||
|
# See https://github.com/poikilos/whinny: |
||||
|
patchFileOrFail ? $BUCKET_GAME/mods/codermobs/whinny/textures/whinny_meat.png |
||||
|
patchFileOrFail ? $BUCKET_GAME/mods/codermobs/whinny/textures/whinny_meat_raw.png |
||||
|
END |
||||
|
|
||||
|
cat <<END |
||||
|
TODO manually: |
||||
|
mv $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_meat_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_raw.png |
||||
|
mv $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_meat_cooked.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_cooked.png |
||||
|
END |
@ -0,0 +1,15 @@ |
|||||
|
After editing /home/owner/git/EnlivenMinetest/Bucket_Game-branches/distinguish_meats-vs-211114a/mods/codermobs/codermobs/textures/animal_materials_egg_big.png, then create a patch by running: |
||||
|
diff -u /home/owner/git/EnlivenMinetest/Bucket_Game-base/distinguish_meats-vs-211114a/mods/codermobs/codermobs/textures/animal_materials_egg_big.png /home/owner/git/EnlivenMinetest/Bucket_Game-branches/distinguish_meats-vs-211114a/mods/codermobs/codermobs/textures/animal_materials_egg_big.png > /home/owner/git/EnlivenMinetest/bucket_game-211114a-20211118-animal_materials_egg_big.png.patch |
||||
|
|
||||
|
* getting parent of /home/owner/minetest/bucket_game-211114a/mods/codermobs/codermobs/textures/animal_materials_egg_big.png... |
||||
|
* updating /home/owner/git/EnlivenMinetest/Bucket_Game-base/distinguish_meats-vs-211114a/mods/codermobs/codermobs/textures/animal_materials_egg_big.png |
||||
|
* creating /home/owner/git/EnlivenMinetest/Bucket_Game-branches/distinguish_meats-vs-211114a/mods/codermobs/codermobs/textures/animal_materials_egg_big.png |
||||
|
* updating LICENSE '/home/owner/git/EnlivenMinetest/Bucket_Game-base/distinguish_meats-vs-211114a/mods/codermobs/codermobs/LICENSE'... |
||||
|
* updating LICENSE '/home/owner/git/EnlivenMinetest/Bucket_Game-base/distinguish_meats-vs-211114a/mods/codermobs/codermobs/oldcoder.txt'... |
||||
|
* updating '/home/owner/git/EnlivenMinetest/Bucket_Game-base/distinguish_meats-vs-211114a/mods/codermobs/oldcoder.txt'... |
||||
|
Done. |
||||
|
|
||||
|
To apply, set BUCKET_GAME then: |
||||
|
cd EnlivenMinetest && git pull && rsync -rt Bucket_Game-branches/distinguish_meats-vs-211114a/ $BUCKET_GAME |
||||
|
mv $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_meat_raw.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_raw.png |
||||
|
mv $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_meat_cooked.png $BUCKET_GAME/mods/codermobs/codermobs/textures/codermobs_ostrich_cooked.png |
@ -0,0 +1,12 @@ |
|||||
|
For license information, see the following files, where they exist, in |
||||
|
each modpack or mod: |
||||
|
|
||||
|
oldcoder.txt |
||||
|
LICENSE |
||||
|
LICENSE.txt |
||||
|
license.txt |
||||
|
README.md |
||||
|
README.txt |
||||
|
readme.txt |
||||
|
|
||||
|
and/or files with similar names. |
@ -0,0 +1,23 @@ |
|||||
|
Name: coderfood |
||||
|
Source: New modpack based on various mods and/or modpacks |
||||
|
License: See "license-modpack.txt" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. The "food" and "food_basic" mods were extracted from the following |
||||
|
modpack: |
||||
|
|
||||
|
https://github.com/rubenwardy/food.git |
||||
|
|
||||
|
modpack-level documentation files were moved into a new subdirectory |
||||
|
of the "food" mod named "rwfooddoc". |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. Additions to that starting point: |
||||
|
|
||||
|
2a. Added the OldCoder mod "coderfruit". |
||||
|
|
||||
|
2b. Added Milan's forks of the mods "hbhunger" and "hudbars". |
||||
|
|
||||
|
2c. Added the files "00README" and "oldcoder.txt" (this file). |
@ -0,0 +1,63 @@ |
|||||
|
Unified Foods Licenses |
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. OldCoder Unified Foods includes a food registration system and a |
||||
|
hunger system. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. The food registration system is original code. The license for the |
||||
|
code in question is: |
||||
|
|
||||
|
(c) 2015-2020 and CC BY-NC-SA 4.0 International: OldCoder (Robert Kir- |
||||
|
aly) |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
3. The hunger system is descended from a MT mod named "hbhunger". The |
||||
|
license for "hbhunger" code is LGPL v2.1. The license for "hbhunger" |
||||
|
textures is MIT. |
||||
|
|
||||
|
One "hbhunger" sound file is used: |
||||
|
|
||||
|
better_hunger_eat_generic.ogg |
||||
|
|
||||
|
The license for that file is CC BY 3.0 with attribution to: |
||||
|
|
||||
|
https://freesound.org/people/xtrgamr/sounds/253619/ |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
4. The licenses for other files are as follows: |
||||
|
|
||||
|
* ufoods_*.png: WTFPL except for "ufoods_glass_*". |
||||
|
|
||||
|
* ufoods_glass_*.png: These textures are presently based on a version |
||||
|
of "mobs_glass_milk.png" that is licensed as follows: |
||||
|
|
||||
|
The MIT License (MIT) |
||||
|
Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1 |
||||
|
|
||||
|
* farming_*.png: See "farming" mod license file. |
||||
|
|
||||
|
* mobs_*.png: See "mobs" mod license file. |
||||
|
|
||||
|
* mtfoods_*.png: |
||||
|
|
||||
|
License: (c) 2014-2020 and CC BY-NC-SA 4.0 International: Philip Rob- |
||||
|
inson. |
||||
|
|
||||
|
* misc_baked_potato.png: WTFPL. |
||||
|
|
||||
|
* coderfruit_*.png: |
||||
|
|
||||
|
License: (c) 2019 and CC BY-NC-SA 4.0 International: OldCoder (Robert |
||||
|
Kiraly). |
||||
|
|
||||
|
* moono_*.png: |
||||
|
License: (c) 2015-2020 and CC BY-SA 4.0 International: Moono. |
||||
|
|
||||
|
* dessert_*.png and food_*.png: |
||||
|
License: (c) 2013-2010 and CC-BY-SA 3.0 Rubenwardy. |
||||
|
|
||||
|
(end of document) |
@ -0,0 +1,208 @@ |
|||||
|
-- =================================================================== |
||||
|
-- "ufoods" common header. |
||||
|
|
||||
|
local S |
||||
|
if minetest.get_modpath ("intllib") then |
||||
|
S = intllib.Getter() |
||||
|
else |
||||
|
S = function (s) return s end |
||||
|
end |
||||
|
|
||||
|
local item_eat = unified_foods.item_eat |
||||
|
local keep_vessels = unified_foods.keep_vessels |
||||
|
local mra = minetest.registered_aliases |
||||
|
local mri = minetest.registered_items |
||||
|
|
||||
|
local reg_alias = ocutil.safe_register_alias |
||||
|
local reg_craft = minetest.register_craft |
||||
|
local reg_food = unified_foods.register_food |
||||
|
local reg_item = ocutil.safe_register_item |
||||
|
local reg_juice = unified_foods.register_juice |
||||
|
|
||||
|
local needitem |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("juicer", |
||||
|
{ |
||||
|
description = "Juicer" , |
||||
|
external_items = "farming:juicer" , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
output = neednode , |
||||
|
recipe = { |
||||
|
{ "" , "default:stone" , "" } , |
||||
|
{ "default:stone" , "" , "default:stone" } , |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("sugar", |
||||
|
{ |
||||
|
description = "Sugar" , |
||||
|
|
||||
|
external_items = { |
||||
|
"farming:sugar" , "jkfarming:sugar" , |
||||
|
"bushes:sugar" , "mtfoods:sugar" , |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
if ocutil.thing_exists ("default:papyrus") then |
||||
|
reg_craft ({ |
||||
|
output = needitem .. " 20" , |
||||
|
recipe = { |
||||
|
{ "default:papyrus" } , |
||||
|
} |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
-- Note: The fallback definition provided here isn't fully functional. |
||||
|
-- However, the expectation is that "bucket" is usually present, so |
||||
|
-- the fallback usually shouldn't be needed. |
||||
|
|
||||
|
needitem = reg_food ("bucket_water", |
||||
|
{ |
||||
|
description = "Bucket of water" , |
||||
|
extra_groups = { bucket_water=1 } , |
||||
|
external_items = "bucket:bucket_water" , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("bucket:bucket_water", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("salt", |
||||
|
{ |
||||
|
description = "Salt" , |
||||
|
satiate = 0 , |
||||
|
external_items = "farming:salt" , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
type = "cooking" , |
||||
|
cooktime = 15 , |
||||
|
output = needitem , |
||||
|
recipe = "group:bucket_water" , |
||||
|
replacements = keep_vessels , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("farming:salt", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("wheat", |
||||
|
{ |
||||
|
description = "Wheat" , |
||||
|
|
||||
|
external_items = { |
||||
|
"farming:wheat", "plantlib:wheat" |
||||
|
} , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
output = needitem , |
||||
|
recipe = { |
||||
|
{ "default:dry_shrub" } , |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("farming:wheat", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("flour", |
||||
|
{ |
||||
|
description = "Flour" , |
||||
|
external_items = "farming:flour" , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
output = needitem , |
||||
|
recipe = { |
||||
|
{ "group:food_wheat" } , |
||||
|
{ "group:food_wheat" } , |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("farming:flour", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("bread", |
||||
|
{ |
||||
|
description = "Bread" , |
||||
|
stack_max = 3 , |
||||
|
satiate = 5 , |
||||
|
external_items = "farming:bread" , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
type = "cooking" , |
||||
|
cooktime = 15 , |
||||
|
output = needitem , |
||||
|
recipe = "group:food_flour" , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("farming:bread", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("egg", |
||||
|
{ |
||||
|
description = "Egg" , |
||||
|
stack_max = 10 , |
||||
|
satiate = 1 , |
||||
|
|
||||
|
external_items = { |
||||
|
"mobs:egg" , "animalmaterials:egg" , |
||||
|
"animalmaterials:egg_big" , "jkanimals:egg" , |
||||
|
} , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("mobs:egg", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("meat_raw", |
||||
|
{ |
||||
|
description = "Raw Meat" , |
||||
|
stack_max = 25 , |
||||
|
satiate = 1 , |
||||
|
|
||||
|
extra_groups = { meat=1 } , |
||||
|
external_items = { |
||||
|
"mobs:meat_raw", "animalmaterials:meat_raw" |
||||
|
} , |
||||
|
}) |
||||
|
|
||||
|
reg_alias ("mobs:meat_raw", needitem) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
needitem = reg_food ("meat", |
||||
|
{ |
||||
|
description = "Cooked Meat" , |
||||
|
satiate = 6 , |
||||
|
extra_groups = { meat=1 } , |
||||
|
|
||||
|
external_items = { |
||||
|
"mobs:meat" , "jkanimals:meat" , |
||||
|
"mobfcooking:cooked_pork" , |
||||
|
"mobfcooking:cooked_beef" , "mobfcooking:cooked_chicken" , |
||||
|
"mobfcooking:cooked_lamb" , "mobfcooking:cooked_venison" , |
||||
|
} , |
||||
|
}) |
||||
|
|
||||
|
reg_craft ({ |
||||
|
type = "cooking" , |
||||
|
output = needitem , |
||||
|
recipe = "group:food_meat_raw" , |
||||
|
cooktime = 30 , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,237 @@ |
|||||
|
Name: unified_foods |
||||
|
Source: Original mod except for some "hbhunger" code |
||||
|
License: See "LICENSE" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. "unified_foods" is a largely original mod that provides a combined |
||||
|
food registration and hunger system. |
||||
|
|
||||
|
The hunger system is based on a fork of "hbhunger". |
||||
|
|
||||
|
This mod supersedes the following mods, though it doesn't replace all |
||||
|
of the foods defined in the mods: |
||||
|
|
||||
|
food, food_basic, dessert, hbhunger, extra, mtfoods |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. Overview of features. |
||||
|
|
||||
|
2.1. Unified Foods supports satiation, healing, poison, and replace- |
||||
|
ment items as "hbhunger" did. It also offers numerous extra features. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.2. You don't need to explicitly hook foods any longer to support |
||||
|
basic operation. |
||||
|
|
||||
|
Unified Foods intercepts calls to "minetest.item_eat". This means that |
||||
|
satiation and replacement items are supported automatically for normal |
||||
|
foods out of the box. |
||||
|
|
||||
|
You can still hook foods to modify existing parameters or to set new |
||||
|
ones. However, this is optional. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.3. Unified Foods can merge similar items. |
||||
|
|
||||
|
If there are, for example, three types of hamburgers, Unified Foods |
||||
|
retains all of the items or nodes, but it optionally assigns a similar |
||||
|
image and food parameters to all of them. |
||||
|
|
||||
|
No permanent conversion is done. Just a temporary merge to promote the |
||||
|
sense of smoother operation. However, permanent conversion could be |
||||
|
added as another feature. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.4. Eating a particular food can optionally produce a specified mes- |
||||
|
sage to the user. Lists of messages are supported. If a list is speci- |
||||
|
fied, a random message is chosen from the list. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.5. "hbhunger" had a bug which prevented it from properly registering |
||||
|
items that didn't set "on_use". Unified Foods supports items of that |
||||
|
type. This means that, for example, you can make arbitrary items eata- |
||||
|
ble. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.6. Eating works whether or not damage is enabled. |
||||
|
|
||||
|
If hunger is enabled and damage is disabled, the hunger time loop is |
||||
|
stopped and poison does no damage at the Unified Foods level. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.7. Two new commands "/starve" and "/satiate" have been added. |
||||
|
"/starve" makes the user hungry. "/satiate" makes him or her satiated |
||||
|
instead. These commands are useful for debugging purposes. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.8. It's easy to add juices to Unified Foods. |
||||
|
|
||||
|
You can create a new juice, including merges with existing objects, |
||||
|
crafting recipes, and aliases, using just one simple statement. For |
||||
|
example, this statement: |
||||
|
|
||||
|
reg_juice ("apple", |
||||
|
{ color = "#FFC929" } , { "mtfoods:apple_juice" }) |
||||
|
|
||||
|
sets up and/or performs all of these steps: |
||||
|
|
||||
|
* Create a glass of juice named "food:apple_juice" |
||||
|
* Alias the glass to "mtfoods:apple_juice" if that item exists |
||||
|
* Set "mtfoods:apple_juice" to new juice's image and satiation |
||||
|
* Add a crafting recipe for new juice |
||||
|
* Create aliases "apple_juice" and "applejuice" |
||||
|
* If the player drinks the juice, replace it with empty glass |
||||
|
|
||||
|
If a juice is a uniform color, the API is able to create an appropri- |
||||
|
ate juice image at runtime. So, it's possible to have numerous juices |
||||
|
without the need for numerous image files. |
||||
|
|
||||
|
However, juice image files may be specified as well. This allows spe- |
||||
|
cial cases such as rainbow juice or worm juice to be handled. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2.9. Unified Foods allows craft-item foods to be placed. Two modes are |
||||
|
supported: |
||||
|
|
||||
|
Craft-items may be placed as static 2D sprites that always face the |
||||
|
caller. |
||||
|
|
||||
|
This often looks better than the "plantlike" or "torchlike" drawing |
||||
|
modes that MT "_games" usually use when 2D objects are placed. |
||||
|
|
||||
|
Or craft-items may be placed as dynamic 2D sprites that work the same |
||||
|
way but are "alive". For example, placed hamburgers may attempt to run |
||||
|
away from hungry players. |
||||
|
|
||||
|
Craft-items may also be placed in "plantlike" or "torchlike" mode if a |
||||
|
world developer prefers this. |
||||
|
|
||||
|
The mode in which craft-items are to be placed can be specified glob- |
||||
|
ally in "world.conf" or on a per-item basis in the mod source code for |
||||
|
individual items. |
||||
|
|
||||
|
For more detailed documentation, see the comments preceding "register_ |
||||
|
food" in "foodcore.lua". |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
3. This mod requires only "default" and "hud", but "bucket" and "farm- |
||||
|
ing" are strongly recommended. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
4. This mod replaces the complicated API used by "food" v2 with an API |
||||
|
that's easier to use. |
||||
|
|
||||
|
In particular, in Unified Foods, one subroutine call, in one place, is |
||||
|
typically enough to set up a food. Two calls, if a juice variation of |
||||
|
the food is desired. |
||||
|
|
||||
|
Additionally, this mod restores some of the foods that were discarded |
||||
|
in "food" v2. |
||||
|
|
||||
|
Historical note: The last pre-v2 commit to "food" was: |
||||
|
|
||||
|
22be9b83c3087e15eea8878c5aef9be0f12d6158 |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
5. Unified Foods creates food and utensils in the "food:" namespace. |
||||
|
|
||||
|
Most of these objects are original items that fall back to existing |
||||
|
items where possible. |
||||
|
|
||||
|
For example, if "farming" is installed, "food:bread" becomes an alias |
||||
|
for "farming:bread". Otherwise, it's defined as a new and independent |
||||
|
item. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
6. If "drawtype" is set to "sprite" or "mob" for an item, "vsize" may |
||||
|
set, as well, to scale the size of the item up or down. |
||||
|
|
||||
|
vsize = 0.50 will, for example, scale the item to half size. vsize = |
||||
|
2.00 will scale it to twice normal size. |
||||
|
|
||||
|
The code adjusts collision boxes and vertical positions for items ap- |
||||
|
propriately. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Appendix A. Partial list of objects supported. |
||||
|
|
||||
|
Fruits: |
||||
|
|
||||
|
Apple, Banana, Cherry, Orange, Pineapple, and Strawberry. Plus the |
||||
|
associated juices. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Misc.: |
||||
|
|
||||
|
Hamburger. Hamburger juice. Rainbow and worm juices. OBOE (Open Blade |
||||
|
of Exile) potions in multiple colors. Taco. |
||||
|
|
||||
|
Raw and cooked pasta. A couple of types of breakfast cereal. Dog |
||||
|
treats. |
||||
|
|
||||
|
Glass of Romulan Ale. Glass of Ginger Ale. Bottle of apple cider. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Vegetables: |
||||
|
|
||||
|
Onion, onion rings, onion slices. |
||||
|
|
||||
|
Potato, potato juice, baked potato, potato slices, french fries, pota- |
||||
|
to chips. |
||||
|
|
||||
|
Carrot, corn, rhubarb, and tomato. Plus most of the associated juices. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Dairy: |
||||
|
|
||||
|
Glass or bucket of milk. Butter. Cheese. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Chocolate: |
||||
|
|
||||
|
Cocoa bean, chocolate powder, dark chocolate, milk chocolate, and cup |
||||
|
or mug of chocolate milk. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Coffee: |
||||
|
|
||||
|
Raw coffee beans, roasted coffee beans, and cup or mug of coffee. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Dessert: |
||||
|
|
||||
|
Snackcake, blueberry muffin, raw tart base, tart base, and strawberry |
||||
|
tart. |
||||
|
|
||||
|
Banana split, shortbread, cream, strawberry shortcake, and cupcake. |
||||
|
|
||||
|
Moono desserts: Butterscotch Dillybar, Butterscotch Sundae, Heart on a |
||||
|
Stick, Strawberry Bar, Strawberry Icecream, and Strawberry Star. |
||||
|
|
||||
|
There are also some cakes, but we encourage people to use the cakes |
||||
|
and pies from the "cakepie" mod instead. The cakes in this mod are |
||||
|
provided primarily for legacy support purposes. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
End of file. |
After Width: | Height: | Size: 889 B |
After Width: | Height: | Size: 447 B |
@ -0,0 +1,299 @@ |
|||||
|
All of the files involved are used and distributed under FOSS licens- |
||||
|
es. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
License: CC0 aka CC Public Domain |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/publicdomain/zero/1.0/ |
||||
|
|
||||
|
License: CC BY-SA 4.0 |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/licenses/by-sa/4.0/ |
||||
|
|
||||
|
License: CC BY-SA 3.0 |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/licenses/by-sa/3.0/ |
||||
|
|
||||
|
License: CC BY-NC-SA 4.0 |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/licenses/by-nc-sa/4.0/ |
||||
|
|
||||
|
License: CC BY-NC-SA 3.0 |
||||
|
is, or was, described by: |
||||
|
https://creativecommons.org/licenses/by-nc-sa/3.0/ |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Original components which are not covered under other copyrights and |
||||
|
licenses are copyright and licensed as follows: |
||||
|
|
||||
|
(c) 2019 and CC BY-NC-SA 4.0: OldCoder (Robert Kiraly). |
||||
|
|
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Additional meats: |
||||
|
- codermobs_beef.png |
||||
|
- codermobs_beef_raw.png |
||||
|
- codermobs_ostrich_cooked.png |
||||
|
- codermobs_ostrich_raw.png |
||||
|
- codermobs_venison.png |
||||
|
- codermobs_venison_raw.png |
||||
|
- codermobs_lamb_raw.png |
||||
|
- codermobs_lamb_cooked.png |
||||
|
|
||||
|
(c) 2021 Poikilos CC BY-SA 4.0 |
||||
|
|
||||
|
Redrawn mobs meats and animal materials: |
||||
|
- codermobs_pork_cooked.png |
||||
|
- codermobs_pork_raw.png |
||||
|
- animal_materials_pork_raw.png |
||||
|
|
||||
|
(c) 2021 Poikilos CC BY-SA 4.0 |
||||
|
|
||||
|
Improved or adapted mobs meats and animal materials |
||||
|
(based on image of same name unless specified): |
||||
|
- animal_materials_egg_big.png (improved) |
||||
|
- codermobs_ostrich_*.png (based on raw and cooked chicken **) |
||||
|
- codermobs_ostrich_egg.png (based on sapier egg) |
||||
|
- codermobs_egg_big_fried.* (based on fried egg **) |
||||
|
- codermobs_ostrich_egg_fried.png (based on fried egg **) |
||||
|
- codermobs_chicken_*.png (improved) ** |
||||
|
|
||||
|
(c) 2011 sapier, 2021 Poikilos CC BY-SA 4.0 |
||||
|
|
||||
|
`**` The author is assumed to be sapier due to context, but correct the author later if found. |
||||
|
|
||||
|
Spider Meat: |
||||
|
- Edited by Poikilos, based on model and texture by AspireMint according to |
||||
|
<https://forums.minetest.org/viewtopic.php?f=9&t=9301> and |
||||
|
possibly implied by |
||||
|
<https://git.minetest.org/minetest-LOTR/Lord-of-the-Test/src/branch/master/README.md>. |
||||
|
- codermobs_lott_spider_meat_raw.png |
||||
|
- codermobs_lott_spider_meat.png |
||||
|
|
||||
|
(c) ~2014 AspireMint and 2021 Poikilos (edited by) CC BY-SA 3.0 |
||||
|
- history: <https://git.minetest.org/minetest-LOTR/Lord-of-the-Test/commits/branch/master/mods/lottmobs/textures/lottmobs_spider.png> |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
More Creeps and Weirdos for Mobs Redo |
||||
|
https://github.com/22i/amcaw |
||||
|
(Poikilos fork: https://github.com/poikilos/amcaw) |
||||
|
includes: baby, blorp, bubblescum, camel, castle critter, castle guard, |
||||
|
castle king, cavelady, caveman, desert lizard, digibug, discomole, |
||||
|
flobmothership, floob, g, googoat, growbotgreg, guineapig, hippo, |
||||
|
hotdog, hunchback, lawyer, loliman, mandog, oldlady, ponie, ponygirl, |
||||
|
ragingbull, ratman, robotted, robottod, rocketgirafe, rockmonster, |
||||
|
sneaky sal, snowdevil and zebra. |
||||
|
|
||||
|
(c) Astromojang, RickWeek84, amcaw CC BY-SA 3.0 |
||||
|
|
||||
|
except: |
||||
|
- codermobs_oldlady_sea_hag_mesh.png |
||||
|
(c) Astromojang, RickWeek84, amcaw and 2021 Poikilos (edited by) |
||||
|
CC BY-SA 3.0 |
||||
|
|
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
|
||||
|
Skeletons: |
||||
|
|
||||
|
mdskeleton model: |
||||
|
Mdoege |
||||
|
|
||||
|
mdskeleton texture (replaced 2019): |
||||
|
(c) 2019 Poikilos CC BY-SA 4.0 |
||||
|
|
||||
|
mdskeleton sounds (replaced 2019): |
||||
|
(c) 2019 Poikilos CC BY-SA 4.0 |
||||
|
|
||||
|
--------------------------------------------------------------------- |
||||
|
|
||||
|
Models and mesh textures for "baby_chick", "bom", and "icebom": |
||||
|
|
||||
|
(c) 2019 and CC-BY-NC-SA 4.0: Poikilos. OldCoder as well for the "ice- |
||||
|
bom" mesh texture. |
||||
|
|
||||
|
For sound-file information, see the Lua files. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Denny code and media: |
||||
|
See "denny.lua" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Improved Spider/Bug Sounds: |
||||
|
codermobs_damage_giant_exoskeleton, codermobs_death_giant_bug, |
||||
|
codermobs_use_giant_exoskeleton |
||||
|
(c) 2019 and CC BY-SA 4.0: Poikilos |
||||
|
|
||||
|
Improved Particles: |
||||
|
codermobs_blood, codermobs_damage_stone, codermobs_lott_spider_blood |
||||
|
(c) 2019 and CC BY-SA 4.0: Poikilos |
||||
|
|
||||
|
codermobs_fireball: |
||||
|
(c) 2012 to 2019 and CC-BY-SA 3.0: Sapier, Poikilos |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Media for "animal_materials", "deer", "elk", and "ostrich": |
||||
|
|
||||
|
See the 5 associated Lua source files. In general, the media is: |
||||
|
(c) 2012 to 2019 and CC-BY-SA 3.0: Sapier and Poikilos. |
||||
|
|
||||
|
The "ostrich" texture is as described above but also attribution: Old- |
||||
|
Coder. |
||||
|
|
||||
|
Code for "animal_materials": Same as media. The other 4 mobs listed |
||||
|
here use new code. |
||||
|
|
||||
|
More about the Elk: |
||||
|
|
||||
|
Pixel Art Elk texture: |
||||
|
(c) 2012 to 2019 and CC BY-SA 3.0: Sapier, Polikilos (skinned by) |
||||
|
|
||||
|
HD (video-based) and Lo-fi (16-color video-based) Elk Textures: |
||||
|
based on Elk video "Elk.webm.360p.vp9" (CC BY 2.0 Generic) |
||||
|
Stephen Baker [BLM/Oregon](blm.gov/yg5c).jpg, Poikilos (skinned by) |
||||
|
|
||||
|
Additionally, "chicken.lua" uses Sapier's 3D egg. See that Lua source |
||||
|
file as well. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Egg texture: |
||||
|
MIT License |
||||
|
(c) 2016-2019 TenPlus1 and Poikilos |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Car model: |
||||
|
(c) 2015 and CC-BY-NC-SA 3.0: Melkor. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
mdoege code and/or media |
||||
|
----------------------------- |
||||
|
WTFPL |
||||
|
|
||||
|
PilzAdam code and/or media |
||||
|
----------------------------- |
||||
|
WTFPL |
||||
|
|
||||
|
Bat |
||||
|
----------------------------- |
||||
|
Code: GPL |
||||
|
Model and texture: CC BY-SA 3.0. Attribution: Defense Subgame. |
||||
|
Sound file: WTFPL |
||||
|
|
||||
|
Birds |
||||
|
----------------------------- |
||||
|
(c) 2012-2019 and CC-BY-SA 3.0: Sapier, Poikilos. Sapier created |
||||
|
the original models. Poikilos derived new models from them and created |
||||
|
new textures. |
||||
|
|
||||
|
Butterfly |
||||
|
----------------------------- |
||||
|
(c) 2012 to 2019 and CC BY-SA 3.0: AspireMint. |
||||
|
|
||||
|
Realistic Milk Bucket |
||||
|
----------------------------- |
||||
|
(c) 2015-2019 and CC BY-SA 3.0: ElementW, Poikilos (modified by). |
||||
|
|
||||
|
D00Med code |
||||
|
----------------------------- |
||||
|
GNU Lesser General Public License 2.1 |
||||
|
|
||||
|
D00Med models and/or textures |
||||
|
----------------------------- |
||||
|
Originals: CC BY-SA 3.0 Unported. Attribution: D00Med. |
||||
|
New panda texture: CC BY SA 3.0 2016 D00Med and 2021 Poikilos |
||||
|
|
||||
|
Mr. Goat |
||||
|
----------------------------- |
||||
|
(c) 2016 to 2019 and CC BY-SA 3.0: Don Batman. OldCoder worked on the |
||||
|
eyes. |
||||
|
|
||||
|
NSSM components |
||||
|
----------------------------- |
||||
|
No NSSM are believed presently to be used. If they're used in the |
||||
|
future, the applicable license will be GPL3. |
||||
|
|
||||
|
Sapier components |
||||
|
----------------------------- |
||||
|
(c) 2012-2019 and CC-BY-SA 3.0: Sapier. |
||||
|
|
||||
|
"mobs_mc" components |
||||
|
----------------------------- |
||||
|
Code and models: GNU GPL V3 |
||||
|
|
||||
|
Other "mobs_mc" Polar Bear media: CC BY-SA 4.0. Attribution: "mobs_mc" |
||||
|
team. |
||||
|
|
||||
|
Skandarella components |
||||
|
----------------------------- |
||||
|
For snail, kangaroo, tiger, and T-Rex media license information, see: |
||||
|
license-skandarella.txt |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Krupnov Pavel and TenPlus1 components: |
||||
|
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
(c) 2014 Krupnov Pavel -- bugs, kpgmobs, pmobs |
||||
|
(c) 2014 Krupnov Pavel and 2016 TenPlus1 -- mobs_animal (deer mesh, |
||||
|
dungeon master (hunched version), small rat, sand monster / |
||||
|
as mummy, sheep, stone monster / as dirt monster, treant) |
||||
|
(c) 2011 sapier, 2021 Poikilos (redraw meats) -- animalmaterials |
||||
|
(c) 2016 TenPlus1 -- mobs_monster and mobs_npc |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining |
||||
|
a copy of this software and associated documentation files (the |
||||
|
"Software"), to deal in the Software without restriction, including |
||||
|
without limitation the rights to use, copy, modify, merge, publish, |
||||
|
distribute, sublicense, and/or sell copies of the Software, and to |
||||
|
permit persons to whom the Software is furnished to do so, subject to |
||||
|
the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be |
||||
|
included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Blockmen components: |
||||
|
|
||||
|
(c) 2015-2016 BlockMen <blockmen2015@gmail.com> |
||||
|
|
||||
|
This software is provided 'as-is', without any express or implied |
||||
|
warranty. In no event will the authors be held liable for any damages |
||||
|
arising from the use of this software. |
||||
|
|
||||
|
Permission is granted to anyone to use this software for any purpose, |
||||
|
including commercial applications, and to alter it and redistribute it |
||||
|
freely, subject to the following restrictions: |
||||
|
|
||||
|
1. The origin of this software must not be misrepresented; you must |
||||
|
not claim that you wrote the original software. If you use this |
||||
|
software in a product, an acknowledgment in the product documentation |
||||
|
is required. |
||||
|
|
||||
|
2. Altered source versions must be plainly marked as such, and must |
||||
|
not be misrepresented as being the original software. |
||||
|
|
||||
|
3. This notice may not be removed or altered from any source |
||||
|
distribution. |
||||
|
|
||||
|
(end of document) |
@ -0,0 +1,386 @@ |
|||||
|
-- =================================================================== |
||||
|
-- Code and media license. |
||||
|
-- |
||||
|
-- You may copy, use, modify or do nearly anything but remove this |
||||
|
-- copyright notice. Of course, you're not allowed to pretend you've |
||||
|
-- created or written the Sapier or Poikilos pieces. |
||||
|
-- |
||||
|
-- CC-BY-SA 3.0. Attribution: Sapier and Poikilos. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
-- Boilerplate to support localized strings if intllib mod is install- |
||||
|
-- ed. |
||||
|
|
||||
|
local S |
||||
|
if (minetest.get_modpath("intllib")) then |
||||
|
dofile(minetest.get_modpath("intllib").."/intllib.lua") |
||||
|
S = intllib.Getter(minetest.get_current_modname()) |
||||
|
else |
||||
|
S = function ( s ) return s end |
||||
|
end |
||||
|
|
||||
|
core.log("action","MOD: animal_materials loading ...") |
||||
|
local version = "0.1.3" |
||||
|
|
||||
|
animal_materialsdata = {} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Node definitions |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Item definitions |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- deamondeath sword |
||||
|
|
||||
|
minetest.register_tool(":animal_materials:sword_deamondeath", { |
||||
|
description = S("Sword (Deamondeath)"), |
||||
|
inventory_image = "default_tool_steelsword.png", |
||||
|
tool_capabilities = { |
||||
|
full_punch_interval = 0.50, |
||||
|
max_drop_level=1, |
||||
|
groupcaps={ |
||||
|
fleshy={times={[1]=2.00, [2]=0.80, [3]=0.40}, uses=10, maxlevel=1}, |
||||
|
snappy={times={[2]=0.70, [3]=0.30}, uses=40, maxlevel=1}, |
||||
|
choppy={times={[3]=0.70}, uses=40, maxlevel=0}, |
||||
|
deamon={times={[1]=0.25, [2]=0.10, [3]=0.05}, uses=20, maxlevel=3}, |
||||
|
} |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- scissors |
||||
|
-- |
||||
|
|
||||
|
minetest.register_tool(":animal_materials:scissors", { |
||||
|
description = S("Scissors"), |
||||
|
inventory_image = "animal_materials_scissors.png", |
||||
|
tool_capabilities = { |
||||
|
max_drop_level=0, |
||||
|
groupcaps={ |
||||
|
wool = {uses=40,maxlevel=1} |
||||
|
} |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- lasso |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:lasso", { |
||||
|
description = S("Lasso"), |
||||
|
image = "animal_materials_lasso.png", |
||||
|
stack_max=10, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- net |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:net", { |
||||
|
description = S("Net"), |
||||
|
image = "animal_materials_net.png", |
||||
|
stack_max=10, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- saddle |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:saddle", { |
||||
|
description = S("Saddle"), |
||||
|
image = "animal_materials_saddle.png", |
||||
|
stack_max=1 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- contract |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:contract", { |
||||
|
description = S("Contract"), |
||||
|
image = "animal_materials_contract.png", |
||||
|
stack_max=10, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- meat |
||||
|
|
||||
|
local dep_meat_raw = nil |
||||
|
if minetest.registered_items["mobs:meat"] then |
||||
|
dep_meat_raw = "mobs:meat" |
||||
|
elseif minetest.registered_items["animalmaterials:meat"] then |
||||
|
dep_meat_raw = "animalmaterials:meat" |
||||
|
end |
||||
|
|
||||
|
if not dep_meat_raw then |
||||
|
minetest.register_craftitem(":animal_materials:meat_raw", { |
||||
|
description = S("Raw Meat"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
else |
||||
|
minetest.register_alias("animal_materials:meat_raw", dep_meat_raw) |
||||
|
end |
||||
|
|
||||
|
local dep_pork_raw = nil |
||||
|
if minetest.registered_items["mobs:pork_raw"] then |
||||
|
dep_pork_raw = "mobs:pork_raw" |
||||
|
elseif minetest.registered_items["animalmaterials:meat_pork"] then |
||||
|
dep_pork_raw = "animalmaterials:meat_pork" |
||||
|
end |
||||
|
|
||||
|
if not dep_pork_raw then |
||||
|
minetest.register_craftitem(":animal_materials:meat_pork", { |
||||
|
description = S("Raw Pork"), |
||||
|
image = "codermobs_pork_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias("animal_materials:pork_raw", "animal_materials:meat_pork") |
||||
|
else |
||||
|
minetest.register_alias("animal_materials:pork_raw", dep_pork_raw) |
||||
|
minetest.register_alias("animal_materials:meat_pork", dep_pork_raw) |
||||
|
end |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_beef", { |
||||
|
description = S("Raw Beef"), |
||||
|
image = "codermobs_beef_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
local dep_chicken_raw = nil |
||||
|
if minetest.registered_items["animalmaterials:meat_chicken"] then |
||||
|
dep_chicken_raw = "animalmaterials:meat_chicken" |
||||
|
end |
||||
|
|
||||
|
if not dep_chicken_raw then |
||||
|
minetest.register_craftitem(":animal_materials:meat_chicken", { |
||||
|
description = S("Raw Chicken"), |
||||
|
image = "codermobs_chicken_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
else |
||||
|
minetest.register_alias("animalmaterials:meat_chicken", dep_chicken_raw) |
||||
|
-- ^ The alias is only necessary for older versions of bucket_game-- |
||||
|
-- as long as new ones always use the latter craftitem everywhere else, |
||||
|
-- they don't need the alias for any other reason. |
||||
|
end |
||||
|
|
||||
|
local dep_lamb_raw = nil |
||||
|
if minetest.registered_items["animalmaterials:meat_lamb"] then |
||||
|
dep_lamb_raw = "animalmaterials:meat_lamb" |
||||
|
end |
||||
|
|
||||
|
if not dep_lamb_raw then |
||||
|
minetest.register_craftitem(":animal_materials:meat_lamb", { |
||||
|
description = S("Raw Lamb"), |
||||
|
image = "codermobs_lamb_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
else |
||||
|
minetest.register_alias("animal_materials:meat_lamb", dep_lamb_raw) |
||||
|
end |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_venison", { |
||||
|
description = S("Raw Venison"), |
||||
|
image = "codermobs_venison_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_undead", { |
||||
|
description = S("Meat (not quite dead)"), |
||||
|
image = "animal_materials_meat_undead_raw.png", |
||||
|
on_use = minetest.item_eat(-2), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_toxic", { |
||||
|
description = S("Toxic Meat"), |
||||
|
image = "animal_materials_meat_toxic_raw.png", |
||||
|
on_use = minetest.item_eat(-5), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:meat_ostrich", { |
||||
|
description = S("Raw Ostrich"), |
||||
|
image = "animal_materials_ostrich_meat_raw.png", |
||||
|
on_use = minetest.item_eat(3), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:fish_bluewhite", { |
||||
|
description = S("Fish (bluewhite)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:fish_clownfish", { |
||||
|
description = S("Fish (clownfish)"), |
||||
|
image = "animal_materials_meat_raw.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { meat=1, eatable=1 }, |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- feather |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:feather", { |
||||
|
description = S("Feather"), |
||||
|
image = "animal_materials_feather.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- milk |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:milk", { |
||||
|
description = S("Milk"), |
||||
|
image = "animal_materials_milk.png", |
||||
|
on_use = minetest.item_eat(1), |
||||
|
groups = { eatable=1 }, |
||||
|
stack_max=10 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- egg |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:egg", { |
||||
|
description = S("Egg"), |
||||
|
image = "animal_materials_egg.png", |
||||
|
stack_max=10 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:egg_big", { |
||||
|
description = S("Big Egg"), |
||||
|
image = "animal_materials_egg_big.png", |
||||
|
stack_max=5 |
||||
|
}) |
||||
|
|
||||
|
animal_materialsdata["animal_materials_egg"] = { |
||||
|
graphics_3d = { |
||||
|
visual = "mesh", |
||||
|
mesh = "animal_materials_egg_ent.b3d", |
||||
|
textures = { "animal_materials_egg_ent_mesh.png" }, |
||||
|
collisionbox = { -0.12,-0.125,-0.12,0.12,0.125,0.12 }, |
||||
|
visual_size = {x=1,y=1,z=1}, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
animal_materialsdata["animal_materials_egg_big"] = { |
||||
|
graphics_3d = { |
||||
|
visual = "mesh", |
||||
|
mesh = "animal_materials_egg_ent.b3d", |
||||
|
textures = { "animal_materials_egg_ent_mesh.png" }, |
||||
|
collisionbox = { -0.24,-0.25,-0.24,0.24,0.25,0.24 }, |
||||
|
visual_size = {x=2,y=2,z=2}, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- bone |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:bone", { |
||||
|
description = S("Bone"), |
||||
|
image = "animal_materials_bone.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- furs |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:fur", { |
||||
|
description = S("Fur"), |
||||
|
image = "animal_materials_fur.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:fur_deer", { |
||||
|
description = S("Deer fur"), |
||||
|
image = "animal_materials_deer_fur.png", |
||||
|
stack_max=10 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:coat_cattle", { |
||||
|
description = S("Cattle coat"), |
||||
|
image = "animal_materials_cattle_coat.png", |
||||
|
stack_max=10 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- horns |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:antlers", { |
||||
|
description = S("Antlers"), |
||||
|
image = "animal_materials_antlers.png", |
||||
|
stack_max=20 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:ivory", { |
||||
|
description = S("Ivory"), |
||||
|
image = "animal_materials_ivory.png", |
||||
|
stack_max=20 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- scale |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:scale_golden", { |
||||
|
description = S("Scale (golden)"), |
||||
|
image = "animal_materials_scale_golden.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:scale_white", { |
||||
|
description = S("Scale (white)"), |
||||
|
image = "animal_materials_scale_white.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:scale_grey", { |
||||
|
description = S("Scale (grey)"), |
||||
|
image = "animal_materials_scale_grey.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem(":animal_materials:scale_blue", { |
||||
|
description = S("Scale (blue)"), |
||||
|
image = "animal_materials_scale_blue.png", |
||||
|
stack_max=25 |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- recipes |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "wool:white", |
||||
|
recipe = { |
||||
|
{"animal_materials:feather","animal_materials:feather","animal_materials:feather"}, |
||||
|
{"animal_materials:feather", "animal_materials:feather","animal_materials:feather"}, |
||||
|
{"animal_materials:feather","animal_materials:feather","animal_materials:feather"}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "animal_materials:contract", |
||||
|
recipe = { |
||||
|
{"default:paper"}, |
||||
|
{"default:paper"}, |
||||
|
} |
||||
|
}) |
@ -0,0 +1,483 @@ |
|||||
|
-- Hen. Descended from "Farlands" version. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- License information for Sapier's 3D-egg media. |
||||
|
-- |
||||
|
-- You may copy, use, modify or do nearly anything but remove this |
||||
|
-- copyright notice. Of course, you're not allowed to pretend you've |
||||
|
-- created or written the Sapier pieces. |
||||
|
-- |
||||
|
-- CC-BY-SA 3.0. Attribution: Sapier. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local numset = codermobs.numset_if_any |
||||
|
|
||||
|
local codermobs_egg_time_delay = |
||||
|
numset ("codermobs_egg_time_delay" ) or 120 |
||||
|
if codermobs_egg_time_delay < 3 then |
||||
|
codermobs_egg_time_delay = 3 |
||||
|
end |
||||
|
|
||||
|
local codermobs_egg_hatch_chance = |
||||
|
numset ("codermobs_egg_hatch_chance" ) or 3 |
||||
|
|
||||
|
local EGG_UNFERTILIZED = 1 |
||||
|
local EGG_FERTILIZED = 2 |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "chicken" |
||||
|
local ucname = "Chicken" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- This mob is a special case |
||||
|
local obj_hen = "codermobs:hen" |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = "hen" , |
||||
|
ucname = "Hen" , |
||||
|
obj_name = "codermobs:hen" , |
||||
|
|
||||
|
aoc = 4 , |
||||
|
spawn_chance = 20000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 5 , |
||||
|
max_light = 30 , |
||||
|
min_height = -31000 , |
||||
|
max_height = 31000 , |
||||
|
|
||||
|
spawn_type = "animal" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"default:dirt_with_dry_grass" , |
||||
|
"default:dirt_with_grass" , |
||||
|
"earthgen:dirt_with_dry_grass" , |
||||
|
"ethereal:bamboo_dirt" , |
||||
|
"ethereal:green_dirt" , |
||||
|
"ethereal:green_dirt_top" , |
||||
|
"ethereal:grove_dirt" , |
||||
|
"mg:dirt_with_dry_grass" , |
||||
|
"noisegrid:grass" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = true , |
||||
|
egg_image = "wool_brown.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local msname_cooked = msname .. "_cooked" |
||||
|
local msname_raw = msname .. "_raw" |
||||
|
|
||||
|
local msname_img = msname .. ".png" |
||||
|
local msname_cooked_img = msname_cooked .. ".png" |
||||
|
local msname_raw_img = msname_raw .. ".png" |
||||
|
|
||||
|
local msname_egg = msname .. "_egg" |
||||
|
local msname_egg_fried = msname_egg .. "_fried" |
||||
|
local msname_egg_img = msname_egg .. ".png" |
||||
|
local msname_egg_fried_img = msname_egg_fried .. ".png" |
||||
|
|
||||
|
local obj_name_cooked = obj_name .. "_cooked" |
||||
|
local obj_name_raw = obj_name .. "_raw" |
||||
|
|
||||
|
local obj_name_egg = obj_name .. "_egg" |
||||
|
local obj_name_egg_entity = obj_name_egg .. "_entity" |
||||
|
local obj_name_egg_fried = obj_name_egg .. "_fried" |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local do_breed = function (self) |
||||
|
local pos = self.object:getpos() |
||||
|
local objs = minetest.get_objects_inside_radius (pos, 12) |
||||
|
local egg_status = EGG_UNFERTILIZED |
||||
|
|
||||
|
for n = 1, #objs do |
||||
|
if not objs [n]:is_player() then |
||||
|
local obj = objs [n]:get_luaentity() |
||||
|
if obj and obj.name == "codermobs:rooster" then |
||||
|
egg_status = EGG_FERTILIZED |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
minetest.set_node (pos, |
||||
|
{ name = obj_name_egg, param2 = egg_status }) |
||||
|
|
||||
|
minetest.sound_play ("chicken_lay_egg", { |
||||
|
pos = pos, gain = 1.0, max_hear_distance = 5, |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
makes_footstep_sound = true , |
||||
|
|
||||
|
-- Most behavior/sight/battle |
||||
|
armor = 200 , |
||||
|
attack_type = "dogfight" , |
||||
|
damage = 1 , |
||||
|
hp_max = 10 , |
||||
|
hp_min = 5 , |
||||
|
passive = false , |
||||
|
reach = 1 , |
||||
|
runaway = true , |
||||
|
view_range = 5 , |
||||
|
|
||||
|
-- Velocities |
||||
|
run_velocity = 3 , |
||||
|
walk_velocity = 1 , |
||||
|
|
||||
|
-- Step/jump/fall parameters |
||||
|
fall_damage = 0 , |
||||
|
fall_speed = -8 , |
||||
|
fear_height = 5 , |
||||
|
jump = false , |
||||
|
jump_height = 0 , |
||||
|
stepheight = 1.2 , |
||||
|
|
||||
|
-- Environment damage |
||||
|
lava_damage = 5 , |
||||
|
light_damage = 0 , |
||||
|
water_damage = 1 , |
||||
|
|
||||
|
-- Misc. parameters |
||||
|
floats = 0 , |
||||
|
|
||||
|
-- Too small: |
||||
|
-- collisionbox = {-0.2, 0, -0.2, 0.2, 0.45, 0.2}, |
||||
|
|
||||
|
-- Too large: |
||||
|
-- collisionbox = {-0.4, 0, -0.4, 0.4, 0.90, 0.4}, |
||||
|
-- visual_size = { x=2, y=2 }, |
||||
|
|
||||
|
collisionbox = { -0.30, -0.01 , -0.30, 0.30, 0.66, 0.30 } , |
||||
|
mesh = msname .. ".b3d" , |
||||
|
textures = {{ "codermobs_hen_mesh.png" }} , |
||||
|
visual = "mesh" , |
||||
|
visual_size = { x=1.5, y=1.5 } , |
||||
|
|
||||
|
animation = { |
||||
|
stand_start = 0 , |
||||
|
stand_end = 20 , |
||||
|
walk_start = 25 , |
||||
|
walk_end = 45 , |
||||
|
speed_normal = 15 , |
||||
|
} , |
||||
|
|
||||
|
drops = { |
||||
|
{ name=obj_name_raw, chance=1, min=2, max=2 } , |
||||
|
} , |
||||
|
|
||||
|
follow = { |
||||
|
"farming:seed_wheat", "farming:seed_cotton" |
||||
|
} , |
||||
|
|
||||
|
sounds = { random = msname } , |
||||
|
|
||||
|
specific_attack = codermobs.make_mob_list ({ |
||||
|
"bug", "beetle" |
||||
|
}) , |
||||
|
|
||||
|
on_rightclick = function (self, clicker) |
||||
|
if mobs:feed_tame (self, clicker, 8, true, true) then |
||||
|
return |
||||
|
end |
||||
|
mobs:protect (self, clicker) |
||||
|
mobs:capture_mob (self, clicker, 30, 50, 80, false, nil) |
||||
|
end, |
||||
|
|
||||
|
do_custom = function (self) |
||||
|
if self.child or math.random (1, 4000) > 1 then return end |
||||
|
do_breed (self) |
||||
|
end , |
||||
|
|
||||
|
-- Poikilos June 2019: false here prevents the creation of a mini- |
||||
|
-- chicken based on the adult mesh. |
||||
|
|
||||
|
on_breed = function (self, ent) |
||||
|
do_breed (self) |
||||
|
return false |
||||
|
end , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
|
||||
|
mobs:alias_mob ("codermobs:chicken" , obj_hen) |
||||
|
mobs:alias_mob ("codermobs:chook" , obj_hen) |
||||
|
mobs:alias_mob ("mobs:chicken" , obj_hen) |
||||
|
mobs:alias_mob ("mobs_animal:chicken" , obj_hen) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg throwing item |
||||
|
|
||||
|
local egg_GRAVITY = 9 |
||||
|
local egg_VELOCITY = 19 |
||||
|
|
||||
|
-- shoot egg |
||||
|
local mobs_shoot_egg = function (item, player, pointed_thing) |
||||
|
|
||||
|
local playerpos = player:getpos() |
||||
|
|
||||
|
minetest.sound_play("default_place_node_hard", { |
||||
|
pos = playerpos, |
||||
|
gain = 1.0, |
||||
|
max_hear_distance = 5, |
||||
|
}) |
||||
|
|
||||
|
local obj = minetest.add_entity({ |
||||
|
x = playerpos.x, |
||||
|
y = playerpos.y +1.5, |
||||
|
z = playerpos.z |
||||
|
}, obj_name_egg_entity) |
||||
|
|
||||
|
local ent = obj:get_luaentity() |
||||
|
local dir = player:get_look_dir() |
||||
|
|
||||
|
ent.velocity = egg_VELOCITY -- needed for api internal timing |
||||
|
ent.switch = 1 -- needed so that egg doesn't despawn straight away |
||||
|
|
||||
|
obj:setvelocity({ |
||||
|
x = dir.x * egg_VELOCITY, |
||||
|
y = dir.y * egg_VELOCITY, |
||||
|
z = dir.z * egg_VELOCITY |
||||
|
}) |
||||
|
|
||||
|
obj:setacceleration({ |
||||
|
x = dir.x * -3, |
||||
|
y = -egg_GRAVITY, |
||||
|
z = dir.z * -3 |
||||
|
}) |
||||
|
|
||||
|
-- pass player name to egg for chick ownership |
||||
|
local ent2 = obj:get_luaentity() |
||||
|
ent2.playername = player:get_player_name() |
||||
|
item:take_item() |
||||
|
return item |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg. |
||||
|
|
||||
|
minetest.register_node (obj_name_egg, { |
||||
|
description = ucname .. " Egg", |
||||
|
inventory_image = msname_egg_img , |
||||
|
wield_image = msname_egg_img , |
||||
|
paramtype = "light", |
||||
|
walkable = false, |
||||
|
is_ground_content = true, |
||||
|
sunlight_propagates = true, |
||||
|
|
||||
|
-- This draws the new 3D chicken egg: |
||||
|
-- |
||||
|
drawtype = "mesh" , |
||||
|
mesh = "codermobs_chicken_egg.b3d" , |
||||
|
tiles = { "animal_materials_egg_ent_mesh.png" } , |
||||
|
selection_box = { |
||||
|
type = "fixed" , |
||||
|
fixed = { -0.12,-0.425,-0.12,0.12,-0.175,0.12 } , |
||||
|
} , |
||||
|
visual_scale = 0.12 , |
||||
|
|
||||
|
groups = {snappy = 2, dig_immediate = 3}, |
||||
|
|
||||
|
after_place_node = function(pos, placer, itemstack) |
||||
|
if placer:is_player() then |
||||
|
minetest.set_node(pos, |
||||
|
{ name = obj_name_egg, param2 = EGG_UNFERTILIZED }) |
||||
|
end |
||||
|
end, |
||||
|
|
||||
|
on_construct = function (pos) |
||||
|
minetest.get_node_timer (pos):start (codermobs_egg_time_delay) |
||||
|
end , |
||||
|
|
||||
|
on_use = mobs_shoot_egg , |
||||
|
|
||||
|
on_timer = function (pos, elapsed) |
||||
|
local self = minetest.get_node (pos) |
||||
|
local sp2 = self.param2 |
||||
|
|
||||
|
minetest.remove_node (pos) |
||||
|
|
||||
|
if sp2 ~= nil and sp2 == EGG_FERTILIZED then |
||||
|
local num = math.random (1, codermobs_egg_hatch_chance) |
||||
|
if num == 1 then |
||||
|
minetest.add_entity (pos, "codermobs:baby_chick") |
||||
|
end |
||||
|
end |
||||
|
end , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("codermobs:egg" , obj_name_egg) |
||||
|
minetest.register_alias ("mobs:egg" , obj_name_egg) |
||||
|
minetest.register_alias ("egg" , obj_name_egg) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg entity |
||||
|
|
||||
|
mobs:register_arrow (obj_name_egg_entity, { |
||||
|
visual = "sprite", |
||||
|
visual_size = {x=.5, y=.5}, |
||||
|
textures = { msname_egg_img } , |
||||
|
velocity = 6, |
||||
|
|
||||
|
hit_player = function(self, player) |
||||
|
player:punch(self.object, 1.0, { |
||||
|
full_punch_interval = 1.0, |
||||
|
damage_groups = {fleshy = 1}, |
||||
|
}, nil) |
||||
|
end, |
||||
|
|
||||
|
hit_mob = function(self, player) |
||||
|
player:punch(self.object, 1.0, { |
||||
|
full_punch_interval = 1.0, |
||||
|
damage_groups = {fleshy = 1}, |
||||
|
}, nil) |
||||
|
end, |
||||
|
|
||||
|
hit_node = function(self, pos, node) |
||||
|
local num = math.random(1, 10) |
||||
|
|
||||
|
-- RJK 191223: This code is disabled for now because it'll presently |
||||
|
-- crash if it's used. |
||||
|
|
||||
|
if false and num == 1 then |
||||
|
pos.y = pos.y + 1 |
||||
|
local nod = minetest.get_node_or_nil(pos) |
||||
|
|
||||
|
if not nod |
||||
|
or not minetest.registered_nodes[nod.name] |
||||
|
or minetest.registered_nodes[nod.name].walkable == true then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
local mob = minetest.add_entity (pos, obj_name) |
||||
|
local ent2 = mob:get_luaentity() |
||||
|
|
||||
|
mob:set_properties({ |
||||
|
textures = ent2.child_texture[1], |
||||
|
visual_size = { |
||||
|
x = ent2.base_size.x / 2, |
||||
|
y = ent2.base_size.y / 2 |
||||
|
}, |
||||
|
collisionbox = { |
||||
|
ent2.base_colbox[1] / 2, |
||||
|
ent2.base_colbox[2] / 2, |
||||
|
ent2.base_colbox[3] / 2, |
||||
|
ent2.base_colbox[4] / 2, |
||||
|
ent2.base_colbox[5] / 2, |
||||
|
ent2.base_colbox[6] / 2 |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
ent2.child = true |
||||
|
ent2.tamed = true |
||||
|
ent2.owner = self.playername |
||||
|
end |
||||
|
end |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Fried egg. |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_egg_fried, { |
||||
|
description = "Fried " .. ucname .. " Egg" , |
||||
|
inventory_image = msname_egg_fried_img , |
||||
|
on_use = minetest.item_eat (2) , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("mobs:chicken_egg_fried", |
||||
|
obj_name_egg_fried) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
recipe = obj_name_egg , |
||||
|
output = obj_name_egg_fried , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Raw bird. |
||||
|
local dep_chicken_raw = nil |
||||
|
if minetest.registered_items["animal_materials:meat_chicken"] then |
||||
|
dep_chicken_raw = "animal_materials:meat_chicken" |
||||
|
elseif minetest.registered_items["animalmaterials:meat_chicken"] then |
||||
|
dep_chicken_raw = "animalmaterials:meat_chicken" |
||||
|
end |
||||
|
if not dep_chicken_raw then |
||||
|
minetest.register_craftitem (obj_name_raw, { |
||||
|
description = "Raw " .. ucname , |
||||
|
inventory_image = msname_raw_img , |
||||
|
|
||||
|
on_use = function (itemstack, player, pointed_thing) |
||||
|
local name = player:get_player_name() |
||||
|
local msg = name .. " ate raw " .. ucname .. ". Salmonella!" |
||||
|
minetest.chat_send_all (msg) |
||||
|
player:set_hp (player:get_hp() - 2) |
||||
|
end , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("mobs:chicken_raw", obj_name_raw) |
||||
|
else |
||||
|
minetest.register_alias ("mobs:chicken_raw", dep_chicken_raw) |
||||
|
minetest.register_alias (obj_name_raw, dep_chicken_raw) |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Cooked bird. |
||||
|
|
||||
|
local dep_chicken_cooked = nil |
||||
|
if minetest.registered_items["cooking:meat_chicken_cooked"] then |
||||
|
dep_chicken_cooked = "cooking:meat_chicken_cooked" |
||||
|
end |
||||
|
|
||||
|
if not dep_chicken_cooked then |
||||
|
minetest.register_craftitem (obj_name_cooked, { |
||||
|
description = "Cooked " .. ucname , |
||||
|
inventory_image = msname_cooked_img , |
||||
|
on_use = minetest.item_eat (6) , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("mobs:chicken_cooked", |
||||
|
obj_name_cooked) |
||||
|
else |
||||
|
minetest.register_alias ("mobs:chicken_cooked", dep_chicken_cooked) |
||||
|
minetest.register_alias (obj_name_cooked, dep_chicken_cooked) |
||||
|
end |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
recipe = obj_name_raw , |
||||
|
output = obj_name_cooked , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Chicken feather. |
||||
|
|
||||
|
minetest.register_craftitem ("codermobs:chicken_feather", { |
||||
|
description = "Feather" , |
||||
|
inventory_image = "codermobs_chicken_feather.png" , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_alias ("mobs:chicken_feather", |
||||
|
"codermobs:chicken_feather") |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,128 @@ |
|||||
|
-- Giant Spider. Descended from LOTT version. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "lott_spider" |
||||
|
local ucname = "LOTT Spider" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = lcname , |
||||
|
ucname = ucname , |
||||
|
obj_name = obj_name , |
||||
|
|
||||
|
aoc = -1 , |
||||
|
spawn_chance = 120000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 0 , |
||||
|
max_light = 30 , |
||||
|
min_height = -31000 , |
||||
|
max_height = 31000 , |
||||
|
|
||||
|
spawn_type = "npc" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"default:junglegrass" , |
||||
|
"default:jungleleaves" , |
||||
|
"default:jungletree" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = true , |
||||
|
egg_image = "default_stone.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
minetest.register_craftitem (obj_name .. "_meat", { |
||||
|
description = "Cooked Spider", |
||||
|
inventory_image = msname .. "_meat.png", |
||||
|
on_use = minetest.item_eat (4), |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem (obj_name .. "_meat_raw", { |
||||
|
description = "Raw Spider", |
||||
|
inventory_image = msname .. "_meat_raw.png", |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking", |
||||
|
output = obj_name .. "_meat", |
||||
|
recipe = obj_name .. "_meat_raw", |
||||
|
}) |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
passive = false, |
||||
|
attacks_monsters = true, |
||||
|
hp_min = 15, |
||||
|
hp_max = 30, |
||||
|
collisionbox = {-0.9, -0.01, -0.7, 0.7, 0.6, 0.7}, |
||||
|
textures = { msname .. ".png"} , |
||||
|
visual_size = {x=7,y=7}, |
||||
|
visual = "mesh", |
||||
|
mesh = msname .. ".x", |
||||
|
makes_footstep_sound = true, |
||||
|
view_range = 15, |
||||
|
walk_velocity = 1, |
||||
|
run_velocity = 3, |
||||
|
armor = 200, |
||||
|
damage = 3, |
||||
|
stepheight = 1.2 , |
||||
|
jump_height = 0 , |
||||
|
jump = false , |
||||
|
|
||||
|
drops = { |
||||
|
{ name = "farming:string" , |
||||
|
chance = 2, min = 1, max = 3 } , |
||||
|
{ name = obj_name .. "_meat_raw" , |
||||
|
chance = 4, min = 1, max = 2 } , |
||||
|
} , |
||||
|
|
||||
|
light_resistant = true, |
||||
|
drawtype = "front", |
||||
|
water_damage = 5, |
||||
|
floats = 0, |
||||
|
runaway = true, |
||||
|
lava_damage = 5, |
||||
|
light_damage = 0, |
||||
|
on_rightclick = nil, |
||||
|
attack_type = "dogfight", |
||||
|
|
||||
|
animation = { |
||||
|
speed_normal = 15, |
||||
|
speed_run = 15, |
||||
|
stand_start = 1, |
||||
|
stand_end = 1, |
||||
|
walk_start = 20, |
||||
|
walk_end = 40, |
||||
|
run_start = 20, |
||||
|
run_end = 40, |
||||
|
punch_start = 50, |
||||
|
punch_end = 90, |
||||
|
}, |
||||
|
blood_texture = msname .. "_blood.png", |
||||
|
|
||||
|
sounds = { |
||||
|
war_cry = "codermobs_eerie" , |
||||
|
damage = "codermobs_damage_giant_exoskeleton" , |
||||
|
death = "codermobs_death_giant_bug" , |
||||
|
attack = "codermobs_use_giant_exoskeleton" , |
||||
|
}, |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
mobs:alias_mob ("mobs_monster:spider" , obj_name) |
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,19 @@ |
|||||
|
Name: codermobs |
||||
|
Source: New mod using existing media files |
||||
|
License: See "LICENSE" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. This is a new mod which implements a number of Final Minetest 3D |
||||
|
mobs. |
||||
|
|
||||
|
For general information, see the "_game" documentation, which covers |
||||
|
this mod and the associated modpack in detail. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. The code is largely new, but it includes elements from existing |
||||
|
mods. The media files, in most cases, have been extracted from the |
||||
|
same or similar mods. |
||||
|
|
||||
|
For license information, see "LICENSE". |
@ -0,0 +1,371 @@ |
|||||
|
-- Ostrich. Descended from Sapier version. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Media license. Applies to model and associated texture. |
||||
|
-- |
||||
|
-- You may copy, use, modify or do nearly anything but remove this |
||||
|
-- copyright notice. Of course, you're not allowed to pretend you've |
||||
|
-- created or written the Sapier, Poikilos, or OldCoder pieces. |
||||
|
-- |
||||
|
-- CC-BY-SA 3.0. Attribution: Sapier, Poikilos, and OldCoder. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "ostrich" |
||||
|
local ucname = "Ostrich" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = lcname , |
||||
|
ucname = ucname , |
||||
|
obj_name = obj_name , |
||||
|
|
||||
|
aoc = -1 , |
||||
|
spawn_chance = 80000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 14 , |
||||
|
max_light = 20 , |
||||
|
min_height = 0 , |
||||
|
max_height = 200 , |
||||
|
|
||||
|
spawn_type = "animal" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"default:dirt_with_dry_grass" , |
||||
|
"ethereal:mushroom_dirt" , |
||||
|
} , |
||||
|
|
||||
|
spawn_by = { |
||||
|
"group:dry_grass" , |
||||
|
"group:grass" , |
||||
|
"flowers:mushroom_brown" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = true , |
||||
|
egg_image = "wool_pink.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
-- local mcname = "codermobs_chicken" |
||||
|
local mcname = "codermobs_ostrich" |
||||
|
|
||||
|
local msname_cooked = mcname .. "_cooked" |
||||
|
local msname_raw = mcname .. "_raw" |
||||
|
|
||||
|
local msname_img = mcname .. ".png" |
||||
|
local msname_cooked_img = msname_cooked .. ".png" |
||||
|
-- local msname_raw_img = msname_raw .. ".png" |
||||
|
local msname_raw_img = "animal_materials_ostrich_meat_raw.png" |
||||
|
|
||||
|
local msname_egg = mcname .. "_egg" |
||||
|
local msname_egg_fried = msname_egg .. "_fried" |
||||
|
-- local msname_egg_fried_img = "animal_materials_egg_big_fried.png" |
||||
|
-- ^ by Poikilos (no upstream) |
||||
|
-- local msname_egg_img = "animal_materials_egg_big.png" |
||||
|
-- ^ upstream name is animalmaterials_egg_big.png (brown, but real ostrich eggs are offwhite) |
||||
|
local msname_egg_fried_img = msname_egg_fried .. ".png" |
||||
|
local msname_egg_img = msname_egg .. ".png" |
||||
|
|
||||
|
local obj_name_cooked = obj_name .. "_cooked" |
||||
|
-- local obj_name_raw = obj_name .. "_raw" |
||||
|
-- ^ formerly codermobs:ostrich_raw (dup of animal_materials, see alias below) |
||||
|
local obj_name_raw = ":animal_materials:meat_ostrich" |
||||
|
|
||||
|
local obj_name_egg = obj_name .. "_egg" |
||||
|
local obj_name_egg_entity = obj_name_egg .. "_entity" |
||||
|
local obj_name_egg_fried = obj_name_egg .. "_fried" |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
makes_footstep_sound = true , |
||||
|
|
||||
|
armor = 200 , |
||||
|
attack_npcs = false , |
||||
|
attack_type = "dogfight" , |
||||
|
damage = 2 , |
||||
|
fear_height = 3 , |
||||
|
floats = 0 , |
||||
|
group_attack = true , |
||||
|
hp_max = 15 , |
||||
|
hp_min = 5 , |
||||
|
stepheight = 1.2 , |
||||
|
jump_height = 0 , |
||||
|
jump = false , |
||||
|
owner_loyal = true , |
||||
|
passive = false , |
||||
|
pushable = true , |
||||
|
reach = 2 , |
||||
|
run_velocity = 3 , |
||||
|
runaway = true , |
||||
|
type = "animal" , |
||||
|
view_range = 10 , |
||||
|
walk_velocity = 2 , |
||||
|
|
||||
|
lava_damage = 5 , |
||||
|
light_damage = 0 , |
||||
|
water_damage = 1 , |
||||
|
|
||||
|
collisionbox = { -0.50, -0.85, -0.50, 0.50, 0.60, 0.50 } , |
||||
|
mesh = "codermobs_ostrich.b3d" , |
||||
|
rotate = 270 , |
||||
|
textures = { "codermobs_ostrich_mesh.png" } , |
||||
|
visual = "mesh" , |
||||
|
|
||||
|
sounds = { |
||||
|
} , |
||||
|
|
||||
|
follow = { "default:apple", "farming:potato" } , |
||||
|
|
||||
|
drops = { |
||||
|
{ |
||||
|
name="animal_materials:meat_ostrich", |
||||
|
chance=1, min=1, max=3 |
||||
|
} , |
||||
|
} , |
||||
|
|
||||
|
specific_attack = codermobs.make_mob_list ({ |
||||
|
"chicken", "bunny", |
||||
|
}) , |
||||
|
|
||||
|
|
||||
|
animation = { |
||||
|
speed_normal = 10 , |
||||
|
stand_start = 1 , |
||||
|
stand_end = 40 , |
||||
|
walk_start = 41 , |
||||
|
walk_end = 81 , |
||||
|
}, |
||||
|
|
||||
|
on_rightclick = function (self, clicker) |
||||
|
if mobs:feed_tame(self, clicker, 8, true, true) then return end |
||||
|
if mobs:protect(self, clicker) then return end |
||||
|
|
||||
|
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then |
||||
|
return |
||||
|
end |
||||
|
end, |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg-throwing item |
||||
|
|
||||
|
local egg_GRAVITY = 9 |
||||
|
local egg_VELOCITY = 19 |
||||
|
|
||||
|
-- Shoot egg |
||||
|
local mobs_shoot_egg = function (item, player, pointed_thing) |
||||
|
|
||||
|
local playerpos = player:getpos() |
||||
|
|
||||
|
minetest.sound_play ("default_place_node_hard", { |
||||
|
pos = playerpos, |
||||
|
gain = 1.0, |
||||
|
max_hear_distance = 5, |
||||
|
}) |
||||
|
|
||||
|
local obj = minetest.add_entity({ |
||||
|
x = playerpos.x, |
||||
|
y = playerpos.y +1.5, |
||||
|
z = playerpos.z |
||||
|
}, obj_name_egg_entity) |
||||
|
|
||||
|
local ent = obj:get_luaentity() |
||||
|
local dir = player:get_look_dir() |
||||
|
|
||||
|
ent.velocity = egg_VELOCITY -- needed for api internal timing |
||||
|
ent.switch = 1 -- needed so that egg doesn't despawn straight away |
||||
|
|
||||
|
obj:setvelocity({ |
||||
|
x = dir.x * egg_VELOCITY, |
||||
|
y = dir.y * egg_VELOCITY, |
||||
|
z = dir.z * egg_VELOCITY |
||||
|
}) |
||||
|
|
||||
|
obj:setacceleration({ |
||||
|
x = dir.x * -3, |
||||
|
y = -egg_GRAVITY, |
||||
|
z = dir.z * -3 |
||||
|
}) |
||||
|
|
||||
|
-- pass player name to egg for chick ownership |
||||
|
local ent2 = obj:get_luaentity() |
||||
|
ent2.playername = player:get_player_name() |
||||
|
item:take_item() |
||||
|
return item |
||||
|
end |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg. |
||||
|
|
||||
|
minetest.register_node (obj_name_egg, { |
||||
|
description = ucname .. " Egg", |
||||
|
inventory_image = msname_egg_img , |
||||
|
wield_image = msname_egg_img , |
||||
|
paramtype = "light", |
||||
|
walkable = false, |
||||
|
is_ground_content = true, |
||||
|
sunlight_propagates = true, |
||||
|
|
||||
|
drawtype = "mesh" , |
||||
|
mesh = "animal-materials-egg.b3d" , |
||||
|
tiles = { "animal_materials_egg_ent_mesh.png" } , |
||||
|
visual_scale = 0.24 , |
||||
|
|
||||
|
selection_box = { |
||||
|
type = "fixed" , |
||||
|
fixed = { -0.25, -0.25, -0.25, 0.25, 0.25, 0.24 } , |
||||
|
} , |
||||
|
|
||||
|
groups = {snappy = 2, dig_immediate = 3}, |
||||
|
|
||||
|
after_place_node = function(pos, placer, itemstack) |
||||
|
if placer:is_player() then |
||||
|
minetest.set_node(pos, {name = obj_name_egg, param2 = 1}) |
||||
|
end |
||||
|
end , |
||||
|
|
||||
|
on_use = mobs_shoot_egg , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Egg entity. |
||||
|
|
||||
|
mobs:register_arrow (obj_name_egg_entity, { |
||||
|
visual = "sprite", |
||||
|
visual_size = {x=.5, y=.5}, |
||||
|
textures = { msname_egg_img } , |
||||
|
velocity = 6, |
||||
|
|
||||
|
hit_player = function(self, player) |
||||
|
player:punch(self.object, 1.0, { |
||||
|
full_punch_interval = 1.0, |
||||
|
damage_groups = {fleshy = 1}, |
||||
|
}, nil) |
||||
|
end, |
||||
|
|
||||
|
hit_mob = function(self, player) |
||||
|
player:punch(self.object, 1.0, { |
||||
|
full_punch_interval = 1.0, |
||||
|
damage_groups = {fleshy = 1}, |
||||
|
}, nil) |
||||
|
end, |
||||
|
|
||||
|
hit_node = function (self, pos, node) |
||||
|
local num = math.random (1, 10) |
||||
|
|
||||
|
-- RJK 191223: This code is disabled for now because it'll presently |
||||
|
-- crash if it's used. |
||||
|
|
||||
|
if false and num == 1 then |
||||
|
pos.y = pos.y + 1 |
||||
|
local nod = minetest.get_node_or_nil(pos) |
||||
|
|
||||
|
if not nod |
||||
|
or not minetest.registered_nodes[nod.name] |
||||
|
or minetest.registered_nodes[nod.name].walkable == true then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
local mob = minetest.add_entity (pos, obj_name) |
||||
|
local ent2 = mob:get_luaentity() |
||||
|
|
||||
|
mob:set_properties({ |
||||
|
textures = ent2.child_texture[1], |
||||
|
visual_size = { |
||||
|
x = ent2.base_size.x / 2, |
||||
|
y = ent2.base_size.y / 2 |
||||
|
}, |
||||
|
collisionbox = { |
||||
|
ent2.base_colbox[1] / 2, |
||||
|
ent2.base_colbox[2] / 2, |
||||
|
ent2.base_colbox[3] / 2, |
||||
|
ent2.base_colbox[4] / 2, |
||||
|
ent2.base_colbox[5] / 2, |
||||
|
ent2.base_colbox[6] / 2 |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
ent2.child = true |
||||
|
ent2.tamed = true |
||||
|
ent2.owner = self.playername |
||||
|
end |
||||
|
end |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Fried egg. |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_egg_fried, { |
||||
|
description = "Fried " .. ucname .. " Egg" , |
||||
|
inventory_image = msname_egg_fried_img , |
||||
|
on_use = minetest.item_eat (3) , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
recipe = obj_name_egg , |
||||
|
output = obj_name_egg_fried , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Raw bird. |
||||
|
if not minetest.registered_items[obj_name_raw] then |
||||
|
minetest.register_craftitem (obj_name_raw, { |
||||
|
description = "Raw " .. ucname , |
||||
|
inventory_image = msname_raw_img , |
||||
|
|
||||
|
on_use = function (itemstack, player, pointed_thing) |
||||
|
local name = player:get_player_name() |
||||
|
local msg = name .. " ate raw " .. ucname .. ". Salmonella!" |
||||
|
minetest.chat_send_all (msg) |
||||
|
player:set_hp (player:get_hp() - 2) |
||||
|
end , |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
minetest.register_alias("codermobs:ostrich_raw", "animal_materials:meat_ostrich") |
||||
|
-- ^ only necessary for old versions of codermobs |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- Cooked bird. |
||||
|
|
||||
|
-- For the register_craftitem and register_craft calls below, |
||||
|
-- the cooking mod from the animals_modpack or animalmaterials modpacks |
||||
|
-- do the same as below except for with ostrich: |
||||
|
-- - raw craftitems are in the animalmaterials namespace, |
||||
|
-- - cooked versions are in the cooking namespace |
||||
|
-- - but cooking doesn't have ostrich |
||||
|
|
||||
|
minetest.register_craftitem (obj_name_cooked, { |
||||
|
description = "Cooked " .. ucname , |
||||
|
inventory_image = msname_cooked_img , |
||||
|
on_use = minetest.item_eat (6) , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
recipe = obj_name_raw , |
||||
|
output = obj_name_cooked , |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,118 @@ |
|||||
|
-- Better Rat. Descended from Melkor version. |
||||
|
|
||||
|
-- Note: Should be loaded *after* regular rat. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "rat_better" |
||||
|
local ucname = "Better Rat" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = lcname , |
||||
|
ucname = ucname , |
||||
|
obj_name = obj_name , |
||||
|
|
||||
|
aoc = 2 , |
||||
|
spawn_chance = 150000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 10 , |
||||
|
max_light = 20 , |
||||
|
min_height = -31000 , |
||||
|
max_height = 31000 , |
||||
|
|
||||
|
scale = 1.5 , |
||||
|
spawn_type = "animal" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"darkage:silt" , |
||||
|
"default:desert_sand" , |
||||
|
"default:dirt_with_dry_grass" , |
||||
|
"default:dirt_with_grass" , |
||||
|
"default:silver_sand" , |
||||
|
"default:stone" , |
||||
|
"earthgen:dirt_with_dry_grass" , |
||||
|
"ethereal:green_dirt" , |
||||
|
"ethereal:green_dirt_top" , |
||||
|
"ethereal:grove_dirt" , |
||||
|
"ethereal:mushroom_dirt" , |
||||
|
"loud_walking:polluted_dirt" , |
||||
|
"mg:dirt_with_dry_grass" , |
||||
|
"noisegrid:grass" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = false , |
||||
|
egg_image = msname .. "_inv.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
visual = "mesh" , |
||||
|
mesh = msname .. ".b3d" , |
||||
|
rotate = 180, |
||||
|
|
||||
|
textures = { |
||||
|
{ msname .. "_black.png" } , |
||||
|
{ msname .. "_brown.png" } , |
||||
|
{ msname .. "_gray.png" } , |
||||
|
{ msname .. "_white.png" } , |
||||
|
}, |
||||
|
|
||||
|
collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.2, 0.2}, |
||||
|
hp_min= 2, |
||||
|
hp_max = 5, |
||||
|
armor = 80, |
||||
|
knock_back = 2, |
||||
|
blood_amount = 1, |
||||
|
stepheight = 1.2 , |
||||
|
jump_height = 0 , |
||||
|
jump = false , |
||||
|
water_damage = 1, |
||||
|
floats = 0, |
||||
|
runaway = true, |
||||
|
lava_damage = 5, |
||||
|
fall_damage = 0, |
||||
|
damage = 1, |
||||
|
attack_type = "dogfight", |
||||
|
group_attack = true, |
||||
|
|
||||
|
drops = { |
||||
|
{ name="mobs:cheese", chance=1, min=1, max=2 } , |
||||
|
} , |
||||
|
|
||||
|
follow = { "mobs:cheese" , } , |
||||
|
replace_rate = 50, |
||||
|
replace_what = { "mobs:cheese" , "mobs:cheeseblock" , } , |
||||
|
replace_with = "air", |
||||
|
view_range = 8, |
||||
|
|
||||
|
on_rightclick = function (self, clicker) |
||||
|
mobs:capture_mob (self, clicker, 25, 80, 0, true, nil) |
||||
|
end , |
||||
|
} |
||||
|
|
||||
|
-- cooked rat, yummy! |
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking" , |
||||
|
output = "codermobs:rat_standard_cooked" , |
||||
|
recipe = obj_name , |
||||
|
cooktime = 5, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 447 B |
After Width: | Height: | Size: 444 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 960 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 688 B |
After Width: | Height: | Size: 829 B |
After Width: | Height: | Size: 355 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 889 B |
After Width: | Height: | Size: 447 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 670 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 352 B |
After Width: | Height: | Size: 960 B |
After Width: | Height: | Size: 527 B |
After Width: | Height: | Size: 829 B |
After Width: | Height: | Size: 432 B |
@ -0,0 +1,164 @@ |
|||||
|
-- Warthog. Descended from KrupnoPavel version. |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
local lcname = "warthog" |
||||
|
local ucname = "Warthog" |
||||
|
local msname = "codermobs_" .. lcname |
||||
|
local obj_name = "codermobs:" .. lcname |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param = { |
||||
|
lcname = lcname , |
||||
|
ucname = ucname , |
||||
|
obj_name = obj_name , |
||||
|
|
||||
|
aoc = -1 , |
||||
|
spawn_chance = 80000 , |
||||
|
|
||||
|
day_mode = true , |
||||
|
min_light = 14 , |
||||
|
max_light = 20 , |
||||
|
min_height = 0 , |
||||
|
max_height = 200 , |
||||
|
|
||||
|
spawn_type = "animal" , |
||||
|
|
||||
|
spawn_nodes = { |
||||
|
"default:dirt_with_dry_grass" , |
||||
|
"ethereal:mushroom_dirt" , |
||||
|
} , |
||||
|
|
||||
|
spawn_by = { |
||||
|
"group:dry_grass" , |
||||
|
"group:grass" , |
||||
|
"flowers:mushroom_brown" , |
||||
|
} , |
||||
|
|
||||
|
add_egg = true , |
||||
|
egg_image = "wool_pink.png" , |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.adjust_param() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
mobs_param.core_param = { |
||||
|
type = mobs_param.spawn_type , |
||||
|
makes_footstep_sound = true , |
||||
|
|
||||
|
armor = 200 , |
||||
|
attack_npcs = false , |
||||
|
attack_type = "dogfight" , |
||||
|
damage = 2 , |
||||
|
fear_height = 2 , |
||||
|
floats = 0 , |
||||
|
group_attack = true , |
||||
|
hp_max = 15 , |
||||
|
hp_min = 5 , |
||||
|
stepheight = 1.2 , |
||||
|
jump_height = 0 , |
||||
|
jump = false , |
||||
|
owner_loyal = true , |
||||
|
passive = false , |
||||
|
pushable = true , |
||||
|
reach = 2 , |
||||
|
run_velocity = 3 , |
||||
|
runaway = true , |
||||
|
type = "animal" , |
||||
|
view_range = 10 , |
||||
|
walk_velocity = 2 , |
||||
|
|
||||
|
lava_damage = 5 , |
||||
|
light_damage = 0 , |
||||
|
water_damage = 1 , |
||||
|
|
||||
|
collisionbox = { -0.40, -0.01, -0.40, 0.40, 0.95, 0.40 } , |
||||
|
mesh = msname .. ".x" , |
||||
|
textures = {{ msname .. ".png" }} , |
||||
|
visual = "mesh" , |
||||
|
|
||||
|
animation = { |
||||
|
stand_start = 25 , |
||||
|
stand_end = 55 , |
||||
|
punch_start = 70 , |
||||
|
punch_end = 100 , |
||||
|
walk_start = 70 , |
||||
|
walk_end = 100 , |
||||
|
speed_normal = 15 , |
||||
|
} , |
||||
|
|
||||
|
sounds = { |
||||
|
random = "mobs_pig", |
||||
|
attack = "mobs_pig_angry", |
||||
|
} , |
||||
|
|
||||
|
follow = { "default:apple", "farming:potato" } , |
||||
|
|
||||
|
drops = { |
||||
|
{ name="mobs:pork_raw", chance=1, min=1, max=3 } , |
||||
|
} , |
||||
|
|
||||
|
specific_attack = codermobs.make_mob_list ({ |
||||
|
"rat" , "rat_better", "chicken", |
||||
|
}) , |
||||
|
|
||||
|
on_rightclick = function (self, clicker) |
||||
|
if mobs:feed_tame(self, clicker, 8, true, true) then return end |
||||
|
if mobs:protect(self, clicker) then return end |
||||
|
|
||||
|
if mobs:capture_mob(self, clicker, 0, 5, 50, false, nil) then |
||||
|
return |
||||
|
end |
||||
|
end, |
||||
|
} |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
-- raw porkchop |
||||
|
local dep_pork_raw = nil |
||||
|
if minetest.registered_items["animal_materials:meat_pork"] then |
||||
|
dep_pork_raw = "animal_materials:meat_pork" |
||||
|
elseif minetest.registered_items["animalmaterials:meat_pork"] then |
||||
|
dep_pork_raw = "animalmaterials:meat_pork" |
||||
|
end |
||||
|
if not dep_pork_raw then |
||||
|
minetest.register_craftitem(":mobs:pork_raw", { |
||||
|
description = "Raw Porkchop" , |
||||
|
inventory_image = "codermobs_pork_raw.png", |
||||
|
on_use = minetest.item_eat(4), |
||||
|
groups = {food_meat_raw = 1, food_pork_raw = 1, flammable = 2}, |
||||
|
}) |
||||
|
else |
||||
|
minetest.register_alias("mobs:pork_raw", dep_pork_raw) |
||||
|
end |
||||
|
|
||||
|
-- cooked porkchop |
||||
|
minetest.register_craftitem(":mobs:pork_cooked", { |
||||
|
description = "Cooked Porkchop" , |
||||
|
inventory_image = "codermobs_pork_cooked.png", |
||||
|
|
||||
|
on_use = minetest.item_eat(8), |
||||
|
groups = {food_meat = 1, food_pork = 1, flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "cooking", |
||||
|
output = "mobs:pork_cooked", |
||||
|
recipe = "mobs:pork_raw", |
||||
|
cooktime = 5, |
||||
|
}) |
||||
|
|
||||
|
-- =================================================================== |
||||
|
|
||||
|
codermobs.setup_mob() |
||||
|
mobs:alias_mob ("mobs:pumba" , obj_name) |
||||
|
mobs:alias_mob ("mobs:warthog" , obj_name) |
||||
|
mobs:alias_mob ("mobs_animal:pumba" , obj_name) |
||||
|
codermobs.log_done() |
||||
|
|
||||
|
-- =================================================================== |
||||
|
-- End of file. |
@ -0,0 +1,345 @@ |
|||||
|
|
||||
|
local S = mobs.intllib |
||||
|
|
||||
|
-- name tag |
||||
|
minetest.register_craftitem("mobs:nametag", { |
||||
|
description = S("Name Tag"), |
||||
|
inventory_image = "mobs_nametag.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
if minetest.get_modpath("dye") and minetest.get_modpath("farming") then |
||||
|
minetest.register_craft({ |
||||
|
type = "shapeless", |
||||
|
output = "mobs:nametag", |
||||
|
recipe = {"default:paper", "dye:black", "farming:string"}, |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
-- leather |
||||
|
minetest.register_craftitem("mobs:leather", { |
||||
|
description = S("Leather"), |
||||
|
inventory_image = "mobs_leather.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
|
||||
|
local dep_meat_raw = nil |
||||
|
if minetest.registered_items["animal_materials:meat_raw"] then |
||||
|
dep_meat_raw = "animal_materials:meat_raw" |
||||
|
elseif minetest.registered_items["animalmaterials:meat_raw"] then |
||||
|
dep_meat_raw = "animalmaterials:meat_raw" |
||||
|
end |
||||
|
|
||||
|
if not dep_meat_raw then |
||||
|
-- raw meat |
||||
|
minetest.register_craftitem("mobs:meat_raw", { |
||||
|
description = S("Raw Meat"), |
||||
|
inventory_image = "mobs_meat_raw.png", |
||||
|
on_use = minetest.item_eat(3), |
||||
|
groups = {food_meat_raw = 1, flammable = 2}, |
||||
|
}) |
||||
|
else |
||||
|
minetest.register_alias("mobs:meat_raw", dep_meat_raw) |
||||
|
end |
||||
|
|
||||
|
local dep_meat_cooked = nil |
||||
|
if minetest.registered_items["cooking:meat_cooked"] then |
||||
|
dep_meat_cooked = "cooking:meat_cooked" |
||||
|
end |
||||
|
|
||||
|
if not dep_meat_cooked then |
||||
|
-- cooked meat |
||||
|
minetest.register_craftitem("mobs:meat", { |
||||
|
description = S("Meat"), |
||||
|
inventory_image = "mobs_meat.png", |
||||
|
on_use = minetest.item_eat(8), |
||||
|
groups = {food_meat = 1, flammable = 2}, |
||||
|
}) |
||||
|
else |
||||
|
minetest.register_alias("mobs:meat", dep_meat_cooked) |
||||
|
end |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "cooking", |
||||
|
output = "mobs:meat", |
||||
|
recipe = "mobs:meat_raw", |
||||
|
cooktime = 5, |
||||
|
}) |
||||
|
|
||||
|
-- lasso |
||||
|
minetest.register_tool("mobs:lasso", { |
||||
|
description = S("Lasso (right-click animal to put in inventory)"), |
||||
|
inventory_image = "mobs_magic_lasso.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
if minetest.get_modpath("farming") then |
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:lasso", |
||||
|
recipe = { |
||||
|
{"farming:string", "", "farming:string"}, |
||||
|
{"", "default:diamond", ""}, |
||||
|
{"farming:string", "", "farming:string"}, |
||||
|
} |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
minetest.register_alias("mobs:magic_lasso", "mobs:lasso") |
||||
|
|
||||
|
-- net |
||||
|
minetest.register_tool("mobs:net", { |
||||
|
description = S("Net (right-click animal to put in inventory)"), |
||||
|
inventory_image = "mobs_net.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
if minetest.get_modpath("farming") then |
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:net", |
||||
|
recipe = { |
||||
|
{"group:stick", "", "group:stick"}, |
||||
|
{"group:stick", "", "group:stick"}, |
||||
|
{"farming:string", "group:stick", "farming:string"}, |
||||
|
} |
||||
|
}) |
||||
|
end |
||||
|
|
||||
|
-- shears (right click to shear animal) |
||||
|
minetest.register_tool("mobs:shears", { |
||||
|
description = S("Steel Shears (right-click to shear)"), |
||||
|
inventory_image = "mobs_shears.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = 'mobs:shears', |
||||
|
recipe = { |
||||
|
{'', 'default:steel_ingot', ''}, |
||||
|
{'', 'group:stick', 'default:steel_ingot'}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- protection rune |
||||
|
minetest.register_craftitem("mobs:protector", { |
||||
|
description = S("Mob Protection Rune"), |
||||
|
inventory_image = "mobs_protector.png", |
||||
|
groups = {flammable = 2}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:protector", |
||||
|
recipe = { |
||||
|
{"default:stone", "default:stone", "default:stone"}, |
||||
|
{"default:stone", "default:goldblock", "default:stone"}, |
||||
|
{"default:stone", "default:stone", "default:stone"}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- saddle |
||||
|
minetest.register_craftitem ("mobs:saddle", { |
||||
|
description = S("Saddle") , |
||||
|
inventory_image = "mobs_saddle.png", |
||||
|
groups = { flammable=2 } , |
||||
|
stack_max = 1 , |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:saddle", |
||||
|
recipe = { |
||||
|
{"mobs:leather", "mobs:leather", "mobs:leather"}, |
||||
|
{"mobs:leather", "default:steel_ingot", "mobs:leather"}, |
||||
|
{"mobs:leather", "default:steel_ingot", "mobs:leather"}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- mob fence (looks like normal fence but collision is 2 high) |
||||
|
default.register_fence("mobs:fence_wood", { |
||||
|
description = S("Mob Fence"), |
||||
|
texture = "default_wood.png", |
||||
|
material = "default:fence_wood", |
||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, |
||||
|
sounds = default.node_sound_wood_defaults(), |
||||
|
collision_box = { |
||||
|
type = "fixed", |
||||
|
fixed = { |
||||
|
{-0.5, -0.5, -0.5, 0.5, 1.9, 0.5}, |
||||
|
}, |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
-- mob fence top (has enlarged collisionbox to stop mobs getting over) |
||||
|
minetest.register_node("mobs:fence_top", { |
||||
|
description = S("Mob Fence Top"), |
||||
|
drawtype = "nodebox", |
||||
|
tiles = {"default_wood.png"}, |
||||
|
paramtype = "light", |
||||
|
is_ground_content = false, |
||||
|
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, |
||||
|
sounds = default.node_sound_wood_defaults(), |
||||
|
node_box = { |
||||
|
type = "fixed", |
||||
|
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}, |
||||
|
}, |
||||
|
collision_box = { |
||||
|
type = "fixed", |
||||
|
fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4}, |
||||
|
}, |
||||
|
selection_box = { |
||||
|
type = "fixed", |
||||
|
fixed = {-0.4, -1.5, -0.4, 0.4, 0, 0.4}, |
||||
|
}, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
output = "mobs:fence_top 12", |
||||
|
recipe = { |
||||
|
{"group:wood", "group:wood", "group:wood"}, |
||||
|
{"", "default:fence_wood", ""}, |
||||
|
} |
||||
|
}) |
||||
|
|
||||
|
-- items that can be used as fuel |
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:nametag", |
||||
|
burntime = 3, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:lasso", |
||||
|
burntime = 7, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:net", |
||||
|
burntime = 8, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:leather", |
||||
|
burntime = 4, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:saddle", |
||||
|
burntime = 7, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:fence_wood", |
||||
|
burntime = 7, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft({ |
||||
|
type = "fuel", |
||||
|
recipe = "mobs:fence_top", |
||||
|
burntime = 2, |
||||
|
}) |
||||
|
|
||||
|
-- this tool spawns same mob and adds owner, protected, nametag info |
||||
|
-- then removes original entity, this is used for fixing any issues. |
||||
|
|
||||
|
local tex_obj |
||||
|
|
||||
|
minetest.register_tool(":mobs:mob_reset_stick", { |
||||
|
description = "Mob Reset Stick", |
||||
|
inventory_image = "default_stick.png^[colorize:#ff000050", |
||||
|
stack_max = 1, |
||||
|
groups = {not_in_creative_inventory = 1}, |
||||
|
|
||||
|
on_use = function(itemstack, user, pointed_thing) |
||||
|
|
||||
|
if pointed_thing.type ~= "object" then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
local obj = pointed_thing.ref |
||||
|
|
||||
|
local control = user:get_player_control() |
||||
|
local sneak = control and control.sneak |
||||
|
|
||||
|
if obj and not sneak then |
||||
|
|
||||
|
local self = obj:get_luaentity() |
||||
|
local obj2 = minetest.add_entity(obj:get_pos(), self.name) |
||||
|
|
||||
|
if obj2 then |
||||
|
|
||||
|
local ent2 = obj2:get_luaentity() |
||||
|
|
||||
|
ent2.protected = self.protected |
||||
|
ent2.owner = self.owner |
||||
|
ent2.nametag = self.nametag |
||||
|
ent2.gotten = self.gotten |
||||
|
ent2.tamed = self.tamed |
||||
|
ent2.health = self.health |
||||
|
ent2.order = self.order |
||||
|
|
||||
|
if self.child then |
||||
|
obj2:set_velocity({x = 0, y = self.jump_height, z = 0}) |
||||
|
end |
||||
|
|
||||
|
obj2:set_properties({nametag = self.nametag}) |
||||
|
|
||||
|
obj:remove() |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
if obj and sneak then |
||||
|
|
||||
|
tex_obj = obj |
||||
|
|
||||
|
local name = user:get_player_name() |
||||
|
local tex = "" |
||||
|
|
||||
|
minetest.show_formspec(name, "mobs_texture", "size[8,4]" |
||||
|
.. "field[0.5,1;7.5,0;name;" |
||||
|
.. minetest.formspec_escape(S("Enter texture:")) .. ";" .. tex .. "]" |
||||
|
.. "button_exit[2.5,3.5;3,1;mob_texture_change;" |
||||
|
.. minetest.formspec_escape(S("Change")) .. "]") |
||||
|
end |
||||
|
end, |
||||
|
}) |
||||
|
|
||||
|
minetest.register_on_player_receive_fields(function(player, formname, fields) |
||||
|
|
||||
|
-- right-clicked with nametag and name entered? |
||||
|
if formname == "mobs_texture" |
||||
|
and fields.name |
||||
|
and fields.name ~= "" then |
||||
|
|
||||
|
local name = player:get_player_name() |
||||
|
|
||||
|
if not tex_obj then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
-- make sure nametag is being used to name mob |
||||
|
local item = player:get_wielded_item() |
||||
|
|
||||
|
if item:get_name() ~= "mobs:mob_reset_stick" then |
||||
|
return |
||||
|
end |
||||
|
|
||||
|
-- limit name entered to 64 characters long |
||||
|
if string.len(fields.name) > 64 then |
||||
|
fields.name = string.sub(fields.name, 1, 64) |
||||
|
end |
||||
|
|
||||
|
-- update texture |
||||
|
local self = tex_obj:get_luaentity() |
||||
|
|
||||
|
self.base_texture = {fields.name} |
||||
|
|
||||
|
tex_obj:set_properties({textures = {fields.name}}) |
||||
|
|
||||
|
-- reset external variable |
||||
|
tex_obj = nil |
||||
|
end |
||||
|
end) |
@ -0,0 +1,51 @@ |
|||||
|
Copyright and license for new code and/or media not covered below: |
||||
|
(c) 2019 and CC BY-NC-SA 4.0 International: OldCoder (Robert Kiraly). |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
New Poikilos textures: |
||||
|
|
||||
|
mobs_damage_blood_big.png |
||||
|
mobs_damage_blood.png |
||||
|
mobs_damage_bug_big.png |
||||
|
mobs_damage_bug.png |
||||
|
mobs_damage_stone_big.png |
||||
|
mobs_damage_stone.png |
||||
|
mobs_damage_sweat_big.png |
||||
|
mobs_damage_sweat.png |
||||
|
|
||||
|
(c) 2019 and CC BY-SA 4.0 International: Poikilos. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
Additional changes: |
||||
|
|
||||
|
mobs_chicken_egg.png |
||||
|
mobs_chicken_egg_overlay.png |
||||
|
|
||||
|
(c) 2016-2019 and MIT License: TenPlus1, Poikilos. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2016 TenPlus1 |
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining |
||||
|
a copy of this software and associated documentation files (the |
||||
|
"Software"), to deal in the Software without restriction, including |
||||
|
without limitation the rights to use, copy, modify, merge, publish, |
||||
|
distribute, sublicense, and/or sell copies of the Software, and to |
||||
|
permit persons to whom the Software is furnished to do so, subject to |
||||
|
the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be |
||||
|
included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,50 @@ |
|||||
|
Name: mods |
||||
|
Source: For of upstream mod - Do not replace |
||||
|
License: See "license.txt" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
1. This is a fork of an upstream mod. Don't attempt to update or re- |
||||
|
place it. |
||||
|
|
||||
|
To be documented. |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
2. Partial list of changes: |
||||
|
|
||||
|
* Multiple bug fixes related to old models that are rotated relative |
||||
|
to today's standard. |
||||
|
|
||||
|
* Bug fix related to behavior of mobs at the edge of cliffs. |
||||
|
|
||||
|
* Mobs that are sensitive to light can now optionally be configured to |
||||
|
burst into flames when light damage occurs. |
||||
|
|
||||
|
* Fix failure of API code to pass riding/driving parameters specified |
||||
|
by higher levels to riding/driving code. |
||||
|
|
||||
|
* Add support for more sophisticated approach to assessing mob densi- |
||||
|
ty. |
||||
|
|
||||
|
* Improve support for amphibious mobs. |
||||
|
|
||||
|
* Better TNT smoke texture. |
||||
|
|
||||
|
* Fix failure in riding/driving code to handle missing parameters. |
||||
|
|
||||
|
* Add support for steering both ground vehicles and aircraft using |
||||
|
the keyboard as well as the mouse. Note: These are separate features. |
||||
|
|
||||
|
* Talking mobs. Multiple languages are supported. |
||||
|
|
||||
|
* New damage-related textures by Poikilos: |
||||
|
|
||||
|
mobs_damage_blood_big.png |
||||
|
mobs_damage_blood.png |
||||
|
mobs_damage_stone_big.png |
||||
|
mobs_damage_stone.png |
||||
|
mobs_damage_sweat_big.png |
||||
|
mobs_damage_sweat.png |
||||
|
|
||||
|
* Add section to "license.txt" to cover new code and media. |
After Width: | Height: | Size: 889 B |
After Width: | Height: | Size: 447 B |
@ -0,0 +1,13 @@ |
|||||
|
Name: codermobs |
||||
|
Source: New modpack mixing original and forked mods |
||||
|
License: See notes below |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
The full documentation for "codermobs" is presently merged into the |
||||
|
"_game" documentation. |
||||
|
|
||||
|
Media files are derived, in general, from older mods. The code mixes |
||||
|
old and new pieces. |
||||
|
|
||||
|
License files are present in the individual mod directories. |
@ -0,0 +1,28 @@ |
|||||
|
Krupnov Pavel and TenPlus1 components: |
||||
|
|
||||
|
The MIT License (MIT) |
||||
|
|
||||
|
Copyright (c) 2014 Krupnov Pavel -- bugs, kpgmobs, pmobs |
||||
|
Copyright (c) 2014 Krupnov Pavel and 2016 TenPlus1 -- mobs_animal |
||||
|
Copyright (c) 2016 TenPlus1 -- mobs_monster and mobs_npc |
||||
|
Copyright (c) 2021 Poikilos -- whinny meats (redone from scratch at 32x32) |
||||
|
|
||||
|
|
||||
|
Permission is hereby granted, free of charge, to any person obtaining |
||||
|
a copy of this software and associated documentation files (the |
||||
|
"Software"), to deal in the Software without restriction, including |
||||
|
without limitation the rights to use, copy, modify, merge, publish, |
||||
|
distribute, sublicense, and/or sell copies of the Software, and to |
||||
|
permit persons to whom the Software is furnished to do so, subject to |
||||
|
the following conditions: |
||||
|
|
||||
|
The above copyright notice and this permission notice shall be |
||||
|
included in all copies or substantial portions of the Software. |
||||
|
|
||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,19 @@ |
|||||
|
dofile (minetest.get_modpath ("whinny").."/api.lua" ) |
||||
|
dofile (minetest.get_modpath ("whinny").."/horse.lua" ) |
||||
|
|
||||
|
minetest.register_craftitem ("whinny:meat", { |
||||
|
description = "Cooked Horsemeat", |
||||
|
inventory_image = "whinny_meat.png", |
||||
|
on_use = minetest.item_eat(4), |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craftitem ("whinny:meat_raw", { |
||||
|
description = "Raw Horsemeat", |
||||
|
inventory_image = "whinny_meat_raw.png", |
||||
|
}) |
||||
|
|
||||
|
minetest.register_craft ({ |
||||
|
type = "cooking", |
||||
|
output = "whinny:meat", |
||||
|
recipe = "whinny:meat_raw", |
||||
|
}) |
@ -0,0 +1,7 @@ |
|||||
|
Name: whinny |
||||
|
Source: Fork of an upstream mod (do not replace) |
||||
|
License: See "LICENSE" |
||||
|
|
||||
|
---------------------------------------------------------------------- |
||||
|
|
||||
|
To be documented. |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.1 KiB |