poikilos
5 years ago
10 changed files with 1414 additions and 0 deletions
@ -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,372 @@ |
|||
local modname = minetest.get_current_modname() |
|||
local modpath = minetest.get_modpath (modname) |
|||
|
|||
local enable_wonder = minetest.setting_getbool ("enable_wonder") |
|||
unified_hunger = {} |
|||
|
|||
-- HUD statbar values |
|||
unified_hunger.hunger = {} |
|||
unified_hunger.hunger_out = {} |
|||
|
|||
-- HUD item ids |
|||
local hunger_hud = {} |
|||
|
|||
if minetest.setting_getbool ("enable_damage") then |
|||
unified_hunger.enable_damage = true |
|||
else |
|||
unified_hunger.enable_damage = false |
|||
end |
|||
|
|||
HUNGER_HUD_TICK = 0.5 -- 0.1 |
|||
|
|||
--Some hunger settings |
|||
unified_hunger.exhaustion = {} -- Exhaustion is experimental! |
|||
|
|||
-- time in seconds after that 1 hunger point is taken |
|||
|
|||
local HUNGER_TICK_DEFAULT = 180 |
|||
if enable_wonder then |
|||
HUNGER_TICK_DEFAULT = 90 |
|||
end |
|||
|
|||
HUNGER_HUNGER_TICK = tonumber (minetest.setting_get ("hunger_tick")) or HUNGER_TICK_DEFAULT |
|||
if HUNGER_HUNGER_TICK < 10 then HUNGER_HUNGER_TICK = 10 end |
|||
|
|||
HUNGER_EXHAUST_DIG = 1.5 -- exhaustion increased this value after digged node |
|||
HUNGER_EXHAUST_PLACE = 1 -- exhaustion increased this value after placed |
|||
HUNGER_EXHAUST_MOVE = 0.3 -- exhaustion increased this value if player movement detected |
|||
HUNGER_EXHAUST_LVL = 160 -- at what exhaustion player satiation gets lowerd |
|||
|
|||
|
|||
--[[load custom settings |
|||
local set = io.open(minetest.get_modpath("unified_hunger").."/unified_hunger.conf", "r") |
|||
if set then |
|||
dofile(minetest.get_modpath("unified_hunger").."/unified_hunger.conf") |
|||
set:close() |
|||
end--]] |
|||
|
|||
local function custom_hud(player) |
|||
hb.init_hudbar(player, "satiation", unified_hunger.get_hunger(player)) |
|||
end |
|||
|
|||
-- Keep these for backwards compatibility |
|||
|
|||
function unified_hunger.save_hunger(player) |
|||
unified_hunger.set_hunger(player) |
|||
end |
|||
|
|||
function unified_hunger.load_hunger(player) |
|||
unified_hunger.get_hunger(player) |
|||
end |
|||
|
|||
-- Poison player |
|||
local function poisenp(tick, time, time_left, player) |
|||
time_left = time_left + tick |
|||
if time_left < time then |
|||
minetest.after(tick, poisenp, tick, time, time_left, player) |
|||
else |
|||
--reset hud image |
|||
end |
|||
if player:get_hp()-1 > 0 then |
|||
player:set_hp(player:get_hp()-1) |
|||
end |
|||
|
|||
end |
|||
|
|||
function unified_hunger.item_eat (hunger_change, |
|||
replace_with_item, poisen, heal, msg) |
|||
|
|||
return function (itemstack, user, pointed_thing) |
|||
if itemstack:take_item() ~= nil and user ~= nil then |
|||
local name = user:get_player_name() |
|||
local h = tonumber(unified_hunger.hunger[name]) |
|||
local hp = user:get_hp() |
|||
minetest.sound_play("unified_hunger_eat_generic", { |
|||
object = user, |
|||
max_hear_distance = 10, |
|||
gain = 1.0 |
|||
}) |
|||
|
|||
-- Saturation |
|||
if h < 30 and hunger_change then |
|||
h = h + hunger_change |
|||
if h > 30 then h = 30 end |
|||
unified_hunger.hunger[name] = h |
|||
unified_hunger.set_hunger(user) |
|||
end |
|||
-- Healing |
|||
if hp < 20 and heal then |
|||
hp = hp + heal |
|||
if hp > 20 then hp = 20 end |
|||
user:set_hp(hp) |
|||
end |
|||
-- Poison |
|||
if poisen then |
|||
--set hud-img |
|||
poisenp(1.0, poisen, 0, user) |
|||
end |
|||
|
|||
if replace_with_item then |
|||
if itemstack:is_empty() then |
|||
itemstack:add_item(replace_with_item) |
|||
else |
|||
local inv = user:get_inventory() |
|||
if inv:room_for_item("main", {name = replace_with_item}) then |
|||
inv:add_item("main", replace_with_item) |
|||
else |
|||
local pos = user:getpos() |
|||
pos.y = math.floor(pos.y + 0.5) |
|||
core.add_item(pos, replace_with_item) |
|||
end |
|||
end |
|||
end |
|||
|
|||
if msg ~= nil then |
|||
local mt = type (msg) |
|||
local send = nil |
|||
|
|||
if mt == "string" then |
|||
send = msg |
|||
elseif mt == "table" then |
|||
send = msg [math.random (#msg)] |
|||
end |
|||
|
|||
minetest.chat_send_player (name, send) |
|||
end |
|||
end |
|||
return itemstack |
|||
end |
|||
end |
|||
|
|||
unified_hunger.overwrite = function (name, satiate, heal, poison, |
|||
replace, msg) |
|||
|
|||
if not unified_hunger.enable_damage then |
|||
poison = nil |
|||
end |
|||
name = minetest.registered_aliases [name] or name |
|||
|
|||
if minetest.registered_items [name] ~= nil then |
|||
minetest.override_item (name, { |
|||
on_use = unified_hunger.item_eat (satiate, |
|||
replace, poison, heal, msg) |
|||
}) |
|||
end |
|||
end |
|||
|
|||
local overwrite = unified_hunger.overwrite |
|||
|
|||
-- =================================================================== |
|||
|
|||
-- player-action based hunger changes |
|||
function unified_hunger.handle_node_actions(pos, oldnode, player, ext) |
|||
if not player or not player:is_player() then |
|||
return |
|||
end |
|||
local name = player:get_player_name() |
|||
local exhaus = unified_hunger.exhaustion[name] |
|||
if exhaus == nil then return end |
|||
local new = HUNGER_EXHAUST_PLACE |
|||
-- placenode event |
|||
if not ext then |
|||
new = HUNGER_EXHAUST_DIG |
|||
end |
|||
-- assume its send by main timer when movement detected |
|||
if not pos and not oldnode then |
|||
new = HUNGER_EXHAUST_MOVE |
|||
end |
|||
exhaus = exhaus + new |
|||
if exhaus > HUNGER_EXHAUST_LVL then |
|||
exhaus = 0 |
|||
local h = tonumber(unified_hunger.hunger[name]) |
|||
h = h - 1 |
|||
if h < 0 then h = 0 end |
|||
unified_hunger.hunger[name] = h |
|||
unified_hunger.set_hunger(player) |
|||
end |
|||
unified_hunger.exhaustion[name] = exhaus |
|||
end |
|||
|
|||
--minetest.register_on_placenode(unified_hunger.handle_node_actions) |
|||
minetest.register_on_dignode(unified_hunger.handle_node_actions) |
|||
|
|||
-- register satiation hudbar |
|||
hb.register_hudbar( |
|||
"satiation", 0xFFFFFF, "Satiation", |
|||
{ |
|||
icon = "unified_hunger_icon.png", |
|||
bgicon = "unified_hunger_bgicon.png", |
|||
bar = "unified_hunger_bar.png" |
|||
}, |
|||
20, 30, false |
|||
) |
|||
|
|||
-- update hud elemtents if value has changed |
|||
local function update_hud(player) |
|||
local name = player:get_player_name() |
|||
local h_out = tonumber(unified_hunger.hunger_out[name]) |
|||
local h = tonumber(unified_hunger.hunger[name]) |
|||
if h_out ~= h then |
|||
unified_hunger.hunger_out[name] = h |
|||
hb.change_hudbar(player, "satiation", h) |
|||
end |
|||
end |
|||
|
|||
unified_hunger.get_hunger = function(player) |
|||
local inv = player:get_inventory() |
|||
if not inv then return nil end |
|||
local hgp = inv:get_stack("hunger", 1):get_count() |
|||
if hgp == 0 then |
|||
hgp = 21 |
|||
inv:set_stack("hunger", 1, ItemStack({name = ":", count = hgp})) |
|||
else |
|||
hgp = hgp |
|||
end |
|||
return hgp - 1 |
|||
end |
|||
|
|||
unified_hunger.set_hunger = function(player) |
|||
local inv = player:get_inventory() |
|||
local name = player:get_player_name() |
|||
local value = unified_hunger.hunger[name] |
|||
if not inv or not value then return nil end |
|||
if value > 30 then value = 30 end |
|||
if value < 0 then value = 0 end |
|||
inv:set_stack("hunger", 1, ItemStack({name = ":", count = value + 1})) |
|||
return true |
|||
end |
|||
|
|||
minetest.register_on_joinplayer(function(player) |
|||
local name = player:get_player_name() |
|||
local inv = player:get_inventory() |
|||
inv:set_size("hunger", 1) |
|||
unified_hunger.hunger[name] = unified_hunger.get_hunger(player) |
|||
unified_hunger.hunger_out[name] = unified_hunger.hunger[name] |
|||
unified_hunger.exhaustion[name] = 0 |
|||
custom_hud(player) |
|||
unified_hunger.set_hunger(player) |
|||
end) |
|||
|
|||
minetest.register_on_respawnplayer(function(player) |
|||
-- reset hunger (and save) |
|||
local name = player:get_player_name() |
|||
unified_hunger.hunger[name] = 20 |
|||
unified_hunger.set_hunger(player) |
|||
unified_hunger.exhaustion[name] = 0 |
|||
end) |
|||
|
|||
-- =================================================================== |
|||
|
|||
local param_starve = { |
|||
description = "Be hungry" , |
|||
params = "" , |
|||
privs = {} , |
|||
|
|||
func = function (plname, params) |
|||
local player = minetest.env:get_player_by_name (plname) |
|||
unified_hunger.hunger [plname] = 5 |
|||
unified_hunger.set_hunger (player) |
|||
minetest.chat_send_player (plname, "O.K. you're hungry") |
|||
|
|||
end |
|||
} |
|||
|
|||
minetest.register_chatcommand ("starve", param_starve) |
|||
|
|||
-- =================================================================== |
|||
|
|||
minetest.register_privilege ("satiate", { |
|||
description = "satiate administration" , |
|||
give_to_singleplayer = false , |
|||
}) |
|||
|
|||
local param_satiate = { |
|||
description = "Be satiated" , |
|||
params = "" , |
|||
privs = { satiate=true } , |
|||
|
|||
func = function (plname, params) |
|||
local player = minetest.env:get_player_by_name (plname) |
|||
unified_hunger.hunger [plname] = 20 |
|||
unified_hunger.set_hunger (player) |
|||
minetest.chat_send_player (plname, "O.K. you're satiated") |
|||
|
|||
end |
|||
} |
|||
|
|||
minetest.register_chatcommand ("satiate", param_satiate) |
|||
|
|||
-- =================================================================== |
|||
|
|||
if unified_hunger.enable_damage then |
|||
local main_timer = 0 |
|||
local timer = 0 |
|||
local timer2 = 0 |
|||
|
|||
minetest.register_globalstep(function(dtime) |
|||
main_timer = main_timer + dtime |
|||
timer = timer + dtime |
|||
timer2 = timer2 + dtime |
|||
|
|||
if main_timer > HUNGER_HUD_TICK |
|||
or timer > 4 |
|||
or timer2 > HUNGER_HUNGER_TICK then |
|||
|
|||
if main_timer > HUNGER_HUD_TICK then |
|||
main_timer = 0 |
|||
end |
|||
|
|||
for _,player in pairs(minetest.get_connected_players()) do |
|||
|
|||
local name = player:get_player_name() |
|||
local h = tonumber(unified_hunger.hunger[name]) |
|||
local hp = player:get_hp() |
|||
|
|||
if timer > 4 then |
|||
|
|||
-- heal player by 1 hp if not dead and satiation is > 15 |
|||
if h > 15 |
|||
and hp > 0 |
|||
and player:get_breath() > 0 then |
|||
player:set_hp(hp + 1) |
|||
-- or damage player by 1 hp if satiation is < 2 |
|||
elseif h <= 1 then |
|||
if hp - 1 >= 0 then |
|||
player:set_hp(hp - 1) |
|||
end |
|||
end |
|||
end |
|||
|
|||
-- lower satiation by 1 point after xx seconds |
|||
if timer2 > HUNGER_HUNGER_TICK then |
|||
if h > 0 then |
|||
h = h - 1 |
|||
unified_hunger.hunger[name] = h |
|||
unified_hunger.set_hunger(player) |
|||
end |
|||
end |
|||
|
|||
-- update hud elements |
|||
update_hud(player) |
|||
|
|||
-- Determine if player is walking |
|||
local controls = player:get_player_control() |
|||
if controls.up |
|||
or controls.down |
|||
or controls.left |
|||
or controls.right then |
|||
unified_hunger.handle_node_actions(nil, nil, player) |
|||
end |
|||
|
|||
end |
|||
end |
|||
|
|||
if timer > 4 then |
|||
timer = 0 |
|||
end |
|||
|
|||
if timer2 > HUNGER_HUNGER_TICK then |
|||
timer2 = 0 |
|||
end |
|||
end) |
|||
end -- end if damage enabled |
@ -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,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,372 @@ |
|||
local modname = minetest.get_current_modname() |
|||
local modpath = minetest.get_modpath (modname) |
|||
|
|||
local enable_wonder = minetest.setting_getbool ("enable_wonder") |
|||
unified_hunger = {} |
|||
|
|||
-- HUD statbar values |
|||
unified_hunger.hunger = {} |
|||
unified_hunger.hunger_out = {} |
|||
|
|||
-- HUD item ids |
|||
local hunger_hud = {} |
|||
|
|||
if minetest.setting_getbool ("enable_damage") then |
|||
unified_hunger.enable_damage = true |
|||
else |
|||
unified_hunger.enable_damage = false |
|||
end |
|||
|
|||
HUNGER_HUD_TICK = 0.5 -- 0.1 |
|||
|
|||
--Some hunger settings |
|||
unified_hunger.exhaustion = {} -- Exhaustion is experimental! |
|||
|
|||
-- time in seconds after that 1 hunger point is taken |
|||
|
|||
local HUNGER_TICK_DEFAULT = 180 |
|||
if enable_wonder then |
|||
HUNGER_TICK_DEFAULT = 90 |
|||
end |
|||
|
|||
HUNGER_HUNGER_TICK = tonumber (minetest.setting_get ("hunger_tick")) or HUNGER_TICK_DEFAULT |
|||
if HUNGER_HUNGER_TICK < 10 then HUNGER_HUNGER_TICK = 10 end |
|||
|
|||
HUNGER_EXHAUST_DIG = 1.5 -- exhaustion increased this value after digged node |
|||
HUNGER_EXHAUST_PLACE = 1 -- exhaustion increased this value after placed |
|||
HUNGER_EXHAUST_MOVE = 0.3 -- exhaustion increased this value if player movement detected |
|||
HUNGER_EXHAUST_LVL = 160 -- at what exhaustion player satiation gets lowerd |
|||
|
|||
|
|||
--[[load custom settings |
|||
local set = io.open(minetest.get_modpath("unified_hunger").."/unified_hunger.conf", "r") |
|||
if set then |
|||
dofile(minetest.get_modpath("unified_hunger").."/unified_hunger.conf") |
|||
set:close() |
|||
end--]] |
|||
|
|||
local function custom_hud(player) |
|||
hb.init_hudbar(player, "satiation", unified_hunger.get_hunger(player)) |
|||
end |
|||
|
|||
-- Keep these for backwards compatibility |
|||
|
|||
function unified_hunger.save_hunger(player) |
|||
unified_hunger.set_hunger(player) |
|||
end |
|||
|
|||
function unified_hunger.load_hunger(player) |
|||
unified_hunger.get_hunger(player) |
|||
end |
|||
|
|||
-- Poison player |
|||
local function poisenp(tick, time, time_left, player) |
|||
time_left = time_left + tick |
|||
if time_left < time then |
|||
minetest.after(tick, poisenp, tick, time, time_left, player) |
|||
else |
|||
--reset hud image |
|||
end |
|||
if player:get_hp()-1 > 0 then |
|||
player:set_hp(player:get_hp()-1) |
|||
end |
|||
|
|||
end |
|||
|
|||
function unified_hunger.item_eat (hunger_change, |
|||
replace_with_item, poisen, heal, msg) |
|||
|
|||
return function (itemstack, user, pointed_thing) |
|||
if itemstack:take_item() ~= nil and user ~= nil then |
|||
local name = user:get_player_name() |
|||
local h = tonumber(unified_hunger.hunger[name]) |
|||
local hp = user:get_hp() |
|||
minetest.sound_play("unified_hunger_eat_generic", { |
|||
object = user, |
|||
max_hear_distance = 10, |
|||
gain = 1.0 |
|||
}) |
|||
|
|||
-- Saturation |
|||
if h < 30 and hunger_change then |
|||
h = h + hunger_change |
|||
if h > 30 then h = 30 end |
|||
unified_hunger.hunger[name] = h |
|||
unified_hunger.set_hunger(user) |
|||
end |
|||
-- Healing |
|||
if hp < 20 and heal then |
|||
hp = hp + heal |
|||
if hp > 20 then hp = 20 end |
|||
user:set_hp(hp) |
|||
end |
|||
-- Poison |
|||
if poisen then |
|||
--set hud-img |
|||
poisenp(1.0, poisen, 0, user) |
|||
end |
|||
|
|||
if replace_with_item then |
|||
if itemstack:is_empty() then |
|||
itemstack:add_item(replace_with_item) |
|||
else |
|||
local inv = user:get_inventory() |
|||
if inv:room_for_item("main", {name = replace_with_item}) then |
|||
inv:add_item("main", replace_with_item) |
|||
else |
|||
local pos = user:getpos() |
|||
pos.y = math.floor(pos.y + 0.5) |
|||
core.add_item(pos, replace_with_item) |
|||
end |
|||
end |
|||
end |
|||
|
|||
if msg ~= nil then |
|||
local mt = type (msg) |
|||
local send = nil |
|||
|
|||
if mt == "string" then |
|||
send = msg |
|||
elseif mt == "table" then |
|||
send = msg [math.random (#msg)] |
|||
end |
|||
|
|||
minetest.chat_send_player (name, send) |
|||
end |
|||
end |
|||
return itemstack |
|||
end |
|||
end |
|||
|
|||
unified_hunger.overwrite = function (name, satiate, heal, poison, |
|||
replace, msg) |
|||
|
|||
if not unified_hunger.enable_damage then |
|||
poison = nil |
|||
end |
|||
name = minetest.registered_aliases [name] or name |
|||
|
|||
if minetest.registered_items [name] ~= nil then |
|||
minetest.override_item (name, { |
|||
on_use = unified_hunger.item_eat (satiate, |
|||
replace, poison, heal, msg) |
|||
}) |
|||
end |
|||
end |
|||
|
|||
local overwrite = unified_hunger.overwrite |
|||
|
|||
-- =================================================================== |
|||
|
|||
-- player-action based hunger changes |
|||
function unified_hunger.handle_node_actions(pos, oldnode, player, ext) |
|||
if not player or not player:is_player() then |
|||
return |
|||
end |
|||
local name = player:get_player_name() |
|||
local exhaus = unified_hunger.exhaustion[name] |
|||
if exhaus == nil then return end |
|||
local new = HUNGER_EXHAUST_PLACE |
|||
-- placenode event |
|||
if not ext then |
|||
new = HUNGER_EXHAUST_DIG |
|||
end |
|||
-- assume its send by main timer when movement detected |
|||
if not pos and not oldnode then |
|||
new = HUNGER_EXHAUST_MOVE |
|||
end |
|||
exhaus = exhaus + new |
|||
if exhaus > HUNGER_EXHAUST_LVL then |
|||
exhaus = 0 |
|||
local h = tonumber(unified_hunger.hunger[name]) |
|||
h = h - 1 |
|||
if h < 0 then h = 0 end |
|||
unified_hunger.hunger[name] = h |
|||
unified_hunger.set_hunger(player) |
|||
end |
|||
unified_hunger.exhaustion[name] = exhaus |
|||
end |
|||
|
|||
--minetest.register_on_placenode(unified_hunger.handle_node_actions) |
|||
minetest.register_on_dignode(unified_hunger.handle_node_actions) |
|||
|
|||
-- register satiation hudbar |
|||
hb.register_hudbar( |
|||
"satiation", 0xFFFFFF, "Satiation", |
|||
{ |
|||
icon = "unified_hunger_icon.png", |
|||
bgicon = "unified_hunger_bgicon.png", |
|||
bar = "unified_hunger_bar.png" |
|||
}, |
|||
20, 30, false |
|||
) |
|||
|
|||
-- update hud elemtents if value has changed |
|||
local function update_hud(player) |
|||
local name = player:get_player_name() |
|||
local h_out = tonumber(unified_hunger.hunger_out[name]) |
|||
local h = tonumber(unified_hunger.hunger[name]) |
|||
if h_out ~= h then |
|||
unified_hunger.hunger_out[name] = h |
|||
hb.change_hudbar(player, "satiation", h) |
|||
end |
|||
end |
|||
|
|||
unified_hunger.get_hunger = function(player) |
|||
local inv = player:get_inventory() |
|||
if not inv then return nil end |
|||
local hgp = inv:get_stack("hunger", 1):get_count() |
|||
if hgp == 0 then |
|||
hgp = 21 |
|||
inv:set_stack("hunger", 1, ItemStack({name = ":", count = hgp})) |
|||
else |
|||
hgp = hgp |
|||
end |
|||
return hgp - 1 |
|||
end |
|||
|
|||
unified_hunger.set_hunger = function(player) |
|||
local inv = player:get_inventory() |
|||
local name = player:get_player_name() |
|||
local value = unified_hunger.hunger[name] |
|||
if not inv or not value then return nil end |
|||
if value > 30 then value = 30 end |
|||
if value < 0 then value = 0 end |
|||
inv:set_stack("hunger", 1, ItemStack({name = ":", count = value + 1})) |
|||
return true |
|||
end |
|||
|
|||
minetest.register_on_joinplayer(function(player) |
|||
local name = player:get_player_name() |
|||
local inv = player:get_inventory() |
|||
inv:set_size("hunger", 1) |
|||
unified_hunger.hunger[name] = unified_hunger.get_hunger(player) |
|||
unified_hunger.hunger_out[name] = unified_hunger.hunger[name] |
|||
unified_hunger.exhaustion[name] = 0 |
|||
custom_hud(player) |
|||
unified_hunger.set_hunger(player) |
|||
end) |
|||
|
|||
minetest.register_on_respawnplayer(function(player) |
|||
-- reset hunger (and save) |
|||
local name = player:get_player_name() |
|||
unified_hunger.hunger[name] = 20 |
|||
unified_hunger.set_hunger(player) |
|||
unified_hunger.exhaustion[name] = 0 |
|||
end) |
|||
|
|||
-- =================================================================== |
|||
|
|||
local param_starve = { |
|||
description = "Be hungry" , |
|||
params = "" , |
|||
privs = {} , |
|||
|
|||
func = function (plname, params) |
|||
local player = minetest.env:get_player_by_name (plname) |
|||
unified_hunger.hunger [plname] = 5 |
|||
unified_hunger.set_hunger (player) |
|||
minetest.chat_send_player (plname, "O.K. you're hungry") |
|||
|
|||
end |
|||
} |
|||
|
|||
minetest.register_chatcommand ("starve", param_starve) |
|||
|
|||
-- =================================================================== |
|||
|
|||
minetest.register_privilege ("satiate", { |
|||
description = "satiate administration" , |
|||
give_to_singleplayer = false , |
|||
}) |
|||
|
|||
local param_satiate = { |
|||
description = "Be satiated" , |
|||
params = "" , |
|||
privs = { satiate=true } , |
|||
|
|||
func = function (plname, params) |
|||
local player = minetest.env:get_player_by_name (plname) |
|||
unified_hunger.hunger [plname] = 20 |
|||
unified_hunger.set_hunger (player) |
|||
minetest.chat_send_player (plname, "O.K. you're satiated") |
|||
|
|||
end |
|||
} |
|||
|
|||
minetest.register_chatcommand ("satiate", param_satiate) |
|||
|
|||
-- =================================================================== |
|||
|
|||
if unified_hunger.enable_damage then |
|||
local main_timer = 0 |
|||
local timer = 0 |
|||
local timer2 = 0 |
|||
|
|||
minetest.register_globalstep(function(dtime) |
|||
main_timer = main_timer + dtime |
|||
timer = timer + dtime |
|||
timer2 = timer2 + dtime |
|||
|
|||
if main_timer > HUNGER_HUD_TICK |
|||
or timer > 4 |
|||
or timer2 > HUNGER_HUNGER_TICK then |
|||
|
|||
if main_timer > HUNGER_HUD_TICK then |
|||
main_timer = 0 |
|||
end |
|||
|
|||
for _,player in pairs(minetest.get_connected_players()) do |
|||
|
|||
local name = player:get_player_name() |
|||
local h = tonumber(unified_hunger.hunger[name]) |
|||
local hp = player:get_hp() |
|||
|
|||
if timer > 4 then |
|||
|
|||
-- heal player by 1 hp if not dead and satiation is > 15 |
|||
if h > 15 |
|||
and hp > 0 |
|||
and player:get_breath() > 0 then |
|||
player:set_hp(hp + 1) |
|||
-- or damage player by 1 hp if satiation is < 2 |
|||
elseif h <= 1 then |
|||
if hp - 1 >= 0 then |
|||
player:set_hp(hp - 1) |
|||
end |
|||
end |
|||
end |
|||
|
|||
-- lower satiation by 1 point after xx seconds |
|||
if timer2 > HUNGER_HUNGER_TICK then |
|||
if h > 0 then |
|||
h = h - 1 |
|||
unified_hunger.hunger[name] = h |
|||
unified_hunger.set_hunger(player) |
|||
end |
|||
end |
|||
|
|||
-- update hud elements |
|||
update_hud(player) |
|||
|
|||
-- Determine if player is walking |
|||
local controls = player:get_player_control() |
|||
if controls.up |
|||
or controls.down |
|||
or controls.left |
|||
or controls.right then |
|||
unified_hunger.handle_node_actions(nil, nil, player) |
|||
end |
|||
|
|||
end |
|||
end |
|||
|
|||
if timer > 4 then |
|||
timer = 0 |
|||
end |
|||
|
|||
if timer2 > HUNGER_HUNGER_TICK then |
|||
timer2 = 0 |
|||
end |
|||
end) |
|||
end -- end if damage enabled |
@ -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. |
Loading…
Reference in new issue