@ -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 |