2016-11-02 23:50:22 +01:00
-- Boilerplate to support localized strings if intllib mod is installed.
local S
if minetest.get_modpath ( " intllib " ) then
2016-11-09 02:29:06 +01:00
S = intllib.Getter ( )
2016-11-02 23:50:22 +01:00
else
S = function ( s ) return s end
end
2016-11-02 23:43:30 +01:00
2014-07-20 04:51:15 +02:00
pep = { }
function pep . register_potion ( potiondef )
local on_use
if ( potiondef.effect_type ~= nil ) then
on_use = function ( itemstack , user , pointed_thing )
playereffects.apply_effect_type ( potiondef.effect_type , potiondef.duration , user )
itemstack : take_item ( )
return itemstack
end
else
on_use = function ( itemstack , user , pointed_thing )
itemstack : take_item ( )
return itemstack
end
end
2014-09-28 03:51:54 +02:00
minetest.register_craftitem ( " pep: " .. potiondef.basename , {
2016-11-02 23:50:22 +01:00
description = string.format ( S ( " Glass Bottle (%s) " ) , potiondef.contentstring ) ,
2016-11-16 06:40:02 +01:00
_doc_items_longdesc = potiondef.longdesc ,
_doc_items_usagehelp = S ( " Hold it in your hand, then left-click to drink it. " ) ,
2014-09-28 03:51:54 +02:00
inventory_image = " pep_ " .. potiondef.basename .. " .png " ,
wield_image = " pep_ " .. potiondef.basename .. " .png " ,
2014-07-20 04:51:15 +02:00
on_use = on_use ,
} )
end
2015-02-09 02:45:58 +01:00
pep.moles = { }
function pep . enable_mole_mode ( playername )
pep.moles [ playername ] = true
end
function pep . disable_mole_mode ( playername )
pep.moles [ playername ] = false
end
function pep . yaw_to_vector ( yaw )
local tau = math.pi * 2
yaw = yaw % tau
if yaw < tau / 8 then
return { x = 0 , y = 0 , z = 1 }
elseif yaw < ( 3 / 8 ) * tau then
return { x =- 1 , y = 0 , z = 0 }
elseif yaw < ( 5 / 8 ) * tau then
return { x = 0 , y = 0 , z =- 1 }
elseif yaw < ( 7 / 8 ) * tau then
return { x = 1 , y = 0 , z = 0 }
else
return { x = 0 , y = 0 , z = 1 }
end
end
function pep . moledig ( playername )
local player = minetest.get_player_by_name ( playername )
local yaw = player : get_look_yaw ( )
-- fix stupid oddity of Minetest, adding pi/2 to the actual player's look yaw...
-- TODO: Remove this code as soon as Minetest fixes this.
yaw = yaw - math.pi / 2
local pos = vector.round ( player : getpos ( ) )
local v = pep.yaw_to_vector ( yaw )
local digpos1 = vector.add ( pos , v )
local digpos2 = { x = digpos1.x , y = digpos1.y + 1 , z = digpos1.z }
local try_dig = function ( pos )
local n = minetest.get_node ( pos )
local ndef = minetest.registered_nodes [ n.name ]
if ndef.walkable and ndef.diggable then
if ndef.can_dig ~= nil then
if ndef.can_dig ( ) then
return true
else
return false
end
else
return true
end
else
return false
end
end
local dig = function ( pos )
if try_dig ( pos ) then
local n = minetest.get_node ( pos )
local ndef = minetest.registered_nodes [ n.name ]
if ndef.sounds ~= nil then
minetest.sound_play ( ndef.sounds . dug , { pos = pos } )
end
-- TODO: Replace this code as soon Minetest removes support for this function
local drops = minetest.get_node_drops ( n.name , " default:pick_steel " )
minetest.dig_node ( pos )
local inv = player : get_inventory ( )
local leftovers = { }
for i = 1 , # drops do
table.insert ( leftovers , inv : add_item ( " main " , drops [ i ] ) )
end
for i = 1 , # leftovers do
minetest.add_item ( pos , leftovers [ i ] )
end
end
end
dig ( digpos1 )
dig ( digpos2 )
end
pep.timer = 0
minetest.register_globalstep ( function ( dtime )
pep.timer = pep.timer + dtime
if pep.timer > 0.5 then
for playername , is_mole in pairs ( pep.moles ) do
if is_mole then
pep.moledig ( playername )
end
end
pep.timer = 0
end
end )
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepspeedplus " , S ( " High speed " ) , " pep_speedplus.png " , { " speed " } ,
2014-07-20 04:51:15 +02:00
function ( player )
player : set_physics_override ( { speed = 2 } )
end ,
function ( effect , player )
player : set_physics_override ( { speed = 1 } )
end
)
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepspeedminus " , S ( " Low speed " ) , " pep_speedminus.png " , { " speed " } ,
2014-07-20 04:51:15 +02:00
function ( player )
player : set_physics_override ( { speed = 0.5 } )
end ,
function ( effect , player )
player : set_physics_override ( { speed = 1 } )
end
)
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepspeedreset " , S ( " Speed neutralizer " ) , " pep_speedreset.png " , { " speed " } ,
2014-07-25 12:45:06 +02:00
function ( ) end , function ( ) end )
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepjumpplus " , S ( " High jump " ) , " pep_jumpplus.png " , { " jump " } ,
2014-07-20 04:51:15 +02:00
function ( player )
player : set_physics_override ( { jump = 2 } )
end ,
function ( effect , player )
player : set_physics_override ( { jump = 1 } )
end
)
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepjumpminus " , S ( " Low jump " ) , " pep_jumpminus.png " , { " jump " } ,
2014-07-20 04:51:15 +02:00
function ( player )
player : set_physics_override ( { jump = 0.5 } )
end ,
function ( effect , player )
player : set_physics_override ( { jump = 1 } )
end
)
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepjumpreset " , S ( " Jump height neutralizer " ) , " pep_jumpreset.png " , { " jump " } ,
2014-07-25 12:45:06 +02:00
function ( ) end , function ( ) end )
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepgrav0 " , S ( " No gravity " ) , " pep_grav0.png " , { " gravity " } ,
2014-07-20 04:51:15 +02:00
function ( player )
player : set_physics_override ( { gravity = 0 } )
end ,
function ( effect , player )
player : set_physics_override ( { gravity = 1 } )
end
)
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepgravreset " , S ( " Gravity neutralizer " ) , " pep_gravreset.png " , { " gravity " } ,
2014-07-25 12:45:06 +02:00
function ( ) end , function ( ) end )
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepregen " , S ( " Regeneration " ) , " pep_regen.png " , { " health " } ,
2014-07-20 04:51:15 +02:00
function ( player )
player : set_hp ( player : get_hp ( ) + 1 )
end ,
nil , nil , nil , 2
)
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepregen2 " , S ( " Strong regeneration " ) , " pep_regen2.png " , { " health " } ,
2014-07-20 04:51:15 +02:00
function ( player )
player : set_hp ( player : get_hp ( ) + 2 )
end ,
nil , nil , nil , 1
)
2016-03-09 21:52:14 +01:00
if minetest.get_modpath ( " mana " ) ~= nil then
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepmanaregen " , S ( " Weak mana boost " ) , " pep_manaregen.png " , { " mana " } ,
2016-03-09 21:52:14 +01:00
function ( player )
local name = player : get_player_name ( )
mana.setregen ( name , mana.getregen ( name ) + 0.5 )
end ,
function ( effect , player )
local name = player : get_player_name ( )
mana.setregen ( name , mana.getregen ( name ) - 0.5 )
end
)
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepmanaregen2 " , S ( " Strong mana boost " ) , " pep_manaregen2.png " , { " mana " } ,
2016-03-09 21:52:14 +01:00
function ( player )
local name = player : get_player_name ( )
mana.setregen ( name , mana.getregen ( name ) + 1 )
end ,
function ( effect , player )
local name = player : get_player_name ( )
mana.setregen ( name , mana.getregen ( name ) - 1 )
end
)
end
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepbreath " , S ( " Perfect breath " ) , " pep_breath.png " , { " breath " } ,
2014-07-20 04:51:15 +02:00
function ( player )
player : set_breath ( player : get_breath ( ) + 2 )
end ,
nil , nil , nil , 1
)
2016-11-02 23:50:22 +01:00
playereffects.register_effect_type ( " pepmole " , S ( " Mole mode " ) , " pep_mole.png " , { " autodig " } ,
2015-02-09 02:45:58 +01:00
function ( player )
pep.enable_mole_mode ( player : get_player_name ( ) )
end ,
function ( effect , player )
pep.disable_mole_mode ( player : get_player_name ( ) )
end
)
2014-07-20 04:51:15 +02:00
pep.register_potion ( {
basename = " speedplus " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Running Potion " ) ,
longdesc = S ( " Drinking it will make you run faster for 30 seconds. " ) ,
2014-07-20 04:51:15 +02:00
effect_type = " pepspeedplus " ,
2016-11-02 23:43:30 +01:00
duration = 30 ,
2014-07-20 04:51:15 +02:00
} )
pep.register_potion ( {
basename = " speedminus " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Slug Potion " ) ,
longdesc = S ( " Drinking it will make you walk slower for 30 seconds. " ) ,
2014-07-20 04:51:15 +02:00
effect_type = " pepspeedminus " ,
2016-11-02 23:43:30 +01:00
duration = 30 ,
2014-07-20 04:51:15 +02:00
} )
2014-07-25 12:45:06 +02:00
pep.register_potion ( {
basename = " speedreset " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Speed Neutralizer " ) ,
longdesc = S ( " Drinking it will stop all speed effects you may currently have. " ) ,
2014-07-25 12:45:06 +02:00
effect_type = " pepspeedreset " ,
duration = 0
} )
2014-07-20 04:51:15 +02:00
pep.register_potion ( {
basename = " breath " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Air Potion " ) ,
longdesc = S ( " Drinking it gives you breath underwater for 30 seconds. " ) ,
2014-07-20 04:51:15 +02:00
effect_type = " pepbreath " ,
2014-09-28 03:51:54 +02:00
duration = 30 ,
2014-07-20 04:51:15 +02:00
} )
pep.register_potion ( {
basename = " regen " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Weak Healing Potion " ) ,
longdesc = S ( " Drinking it makes you regenerate health. Every 2 seconds, you get 1 HP, 10 times in total. " ) ,
2014-07-20 04:51:15 +02:00
effect_type = " pepregen " ,
duration = 10 ,
} )
pep.register_potion ( {
basename = " regen2 " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Strong Healing Potion " ) ,
longdesc = S ( " Drinking it makes you regenerate health quickly. Every second you get 2 HP, 10 times in total. " ) ,
2014-07-20 04:51:15 +02:00
effect_type = " pepregen2 " ,
duration = 10 ,
} )
pep.register_potion ( {
2014-07-25 12:29:35 +02:00
basename = " grav0 " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Non-Gravity Potion " ) ,
longdesc = S ( " When you drink this potion, gravity stops affecting you, as if you were in space. The effect lasts for 20 seconds. " ) ,
2014-07-25 12:29:35 +02:00
effect_type = " pepgrav0 " ,
2014-07-20 04:51:15 +02:00
duration = 20 ,
} )
2014-07-25 12:45:06 +02:00
pep.register_potion ( {
basename = " gravreset " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Gravity Neutralizer " ) ,
longdesc = S ( " Drinking it will stop all gravity effects you currently have. " ) ,
2014-07-25 12:45:06 +02:00
effect_type = " pepgravreset " ,
duration = 0 ,
} )
2014-07-20 04:51:15 +02:00
pep.register_potion ( {
basename = " jumpplus " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " High Jumping Potion " ) ,
longdesc = S ( " Drinking it will make you jump higher for 30 seconds. " ) ,
2014-07-20 04:51:15 +02:00
effect_type = " pepjumpplus " ,
duration = 30 ,
} )
pep.register_potion ( {
basename = " jumpminus " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Low Jumping Potion " ) ,
2016-11-03 00:04:34 +01:00
longdesc = S ( " Drinking it will make you jump lower for 30 seconds. " ) ,
2014-07-20 04:51:15 +02:00
effect_type = " pepjumpminus " ,
duration = 30 ,
} )
2014-07-25 12:45:06 +02:00
pep.register_potion ( {
basename = " jumpreset " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Jump Neutralizer " ) ,
longdesc = S ( " Drinking it will stop all jumping effects you may currently have. " ) ,
2014-07-25 12:45:06 +02:00
effect_type = " pepjumpreset " ,
duration = 0 ,
} )
2015-02-09 02:45:58 +01:00
pep.register_potion ( {
basename = " mole " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Mole Potion " ) ,
longdesc = S ( " Drinking it will start an effect which will magically attempt to mine any two blocks in front of you horizontally, as if you were using a steel pickaxe on them. The effect lasts for 18 seconds. " ) ,
2015-02-09 02:45:58 +01:00
effect_type = " pepmole " ,
duration = 18 ,
} )
2016-03-09 21:52:14 +01:00
if ( minetest.get_modpath ( " mana " ) ~= nil ) then
pep.register_potion ( {
basename = " manaregen " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Weak Mana Potion " ) ,
2016-03-09 21:52:14 +01:00
effect_type = " pepmanaregen " ,
duration = 10 ,
2016-11-02 23:50:22 +01:00
longdesc = S ( " Drinking it will increase your mana regeneration rate by 0.5 for 10 seconds. " ) ,
2016-03-09 21:52:14 +01:00
} )
pep.register_potion ( {
basename = " manaregen2 " ,
2016-11-02 23:50:22 +01:00
contentstring = S ( " Strong Mana Potion " ) ,
2016-03-09 21:52:14 +01:00
effect_type = " pepmanaregen2 " ,
duration = 10 ,
2016-11-02 23:50:22 +01:00
longdesc = S ( " Drinking it will increase your mana regeneration rate by 1 for 10 seconds. " ) ,
2016-03-09 21:52:14 +01:00
} )
end
2014-07-20 04:51:15 +02:00
2014-07-25 12:29:35 +02:00
--[=[ register crafts ]=]
--[[ normal potions ]]
2014-09-28 03:51:54 +02:00
if ( minetest.get_modpath ( " vessels " ) ~= nil ) then
if ( minetest.get_modpath ( " default " ) ~= nil ) then
2014-07-20 04:51:15 +02:00
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:breath " ,
2014-09-28 03:51:54 +02:00
recipe = { " default:papyrus " , " default:papyrus " , " default:papyrus " , " default:papyrus " ,
" default:papyrus " , " default:papyrus " , " default:papyrus " , " default:papyrus " , " vessels:glass_bottle " }
2014-07-20 04:51:15 +02:00
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:speedminus " ,
2016-03-09 20:45:01 +01:00
recipe = { " default:dry_grass_1 " , " default:ice " , " vessels:glass_bottle " }
2014-07-20 04:51:15 +02:00
} )
if ( minetest.get_modpath ( " flowers " ) ~= nil ) then
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:jumpplus " ,
2016-03-09 20:45:01 +01:00
recipe = { " flowers:flower_tulip " , " default:grass_1 " , " default:mese_crystal_fragment " ,
" default:mese_crystal_fragment " , " vessels:glass_bottle " }
} )
2016-03-09 21:52:14 +01:00
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:poisoner " ,
recipe = { " flowers:mushroom_red " , " flowers:mushroom_red " , " flowers:mushroom_red " , " vessels:glass_bottle " }
} )
2016-03-09 20:45:01 +01:00
if ( minetest.get_modpath ( " farming " ) ~= nil ) then
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:regen " ,
recipe = { " default:cactus " , " farming:flour " , " flowers:mushroom_brown " , " vessels:glass_bottle " }
} )
end
end
if ( minetest.get_modpath ( " farming " ) ~= nil ) then
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:regen2 " ,
recipe = { " default:gold_lump " , " farming:flour " , " pep:regen " }
2014-07-20 04:51:15 +02:00
} )
2016-03-09 21:52:14 +01:00
if minetest.get_modpath ( " mana " ) ~= nil then
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:manaregen " ,
recipe = { " default:dry_shrub " , " default:dry_shrub " , " farming:seed_cotton " , " default:mese_crystal_fragment " ,
" vessels:glass_bottle " }
} )
end
end
if minetest.get_modpath ( " mana " ) ~= nil then
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:manaregen2 " ,
recipe = { " default:dry_shrub " , " default:dry_shrub " , " default:dry_shrub " , " default:dry_shrub " , " default:junglesapling " ,
" default:acacia_sapling " , " default:mese_crystal_fragment " , " pep:manaregen " }
} )
2014-07-20 04:51:15 +02:00
end
2016-03-09 20:45:01 +01:00
2014-07-20 04:51:15 +02:00
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:jumpminus " ,
2016-03-09 20:45:01 +01:00
recipe = { " default:leaves " , " default:jungleleaves " , " default:iron_lump " , " flowers:dandelion_yellow " , " vessels:glass_bottle " }
2014-07-20 04:51:15 +02:00
} )
minetest.register_craft ( {
type = " shapeless " ,
2014-07-25 12:29:35 +02:00
output = " pep:grav0 " ,
2014-09-28 03:51:54 +02:00
recipe = { " default:mese_crystal " , " vessels:glass_bottle " }
2014-07-20 04:51:15 +02:00
} )
2015-02-09 02:45:58 +01:00
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:mole " ,
recipe = { " default:pick_steel " , " default:shovel_steel " , " vessels:glass_bottle " } ,
} )
2014-07-25 12:29:35 +02:00
minetest.register_craft ( {
type = " shapeless " ,
2016-03-09 20:45:01 +01:00
output = " pep:gravreset " ,
recipe = { " pep:grav0 " , " default:iron_lump " }
2014-07-25 12:29:35 +02:00
} )
end
2016-03-09 20:45:01 +01:00
if ( minetest.get_modpath ( " flowers " ) ~= nil ) then
2014-09-28 03:54:36 +02:00
minetest.register_craft ( {
type = " shapeless " ,
2016-03-09 20:45:01 +01:00
output = " pep:speedplus " ,
recipe = { " default:pine_sapling " , " default:cactus " , " flowers:dandelion_yellow " , " default:junglegrass " , " vessels:glass_bottle " }
2014-09-28 03:54:36 +02:00
} )
end
2016-03-09 20:45:01 +01:00
end
2014-09-28 03:54:36 +02:00
2014-09-28 03:51:54 +02:00
--[[ independent crafts ]]
2014-07-25 12:29:35 +02:00
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:speedreset " ,
recipe = { " pep:speedplus " , " pep:speedminus " }
} )
minetest.register_craft ( {
type = " shapeless " ,
output = " pep:jumpreset " ,
recipe = { " pep:jumpplus " , " pep:jumpminus " }
} )
2016-03-09 20:45:01 +01:00