ShittingSimulator/mods/poop/init.lua
2022-11-21 23:48:09 +01:00

431 lines
13 KiB
Lua

currentPage = 1
minetest.register_item(":", { -- Hand
type = "none",
wield_image = "Poop.png",
wield_scale = {x=1.5,y=2,z=4.5},
range = 5,
tool_capabilities = {
max_drop_level = 0,
full_punch_interval = 0.4,
groupcaps =
{
oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0},
snappy = {times={[3]=0, [2]=0, [1]=0}, uses=0, maxlevel=3},
crumbly = {times={[1]=0, [2]=0, [3]=0}, uses=0, maxlevel=3},
cracky = {times={[1]=0, [2]=0, [3]=0}, uses=0, maxlevel=3},
choppy = {times={[1]=0, [2]=0, [3]=0}, uses=0, maxlevel=3},
},
damage_groups = {fleshy = 3, snappy = 2},
}
})
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "story:story_formspec" then
return
end
if formname == "story:story_formspec" then
if fields.next then
if currentPage >= 4 then
minetest.close_formspec(player:get_player_name(), "story:story_formspec")
-- teleport player to 10 9.5 18
player:setpos({x=10, y=9.5, z=18})
return
end
currentPage = currentPage + 1 -- Fuck Lua and its lack of arithmetic assignment operators
minetest.show_formspec(player:get_player_name(), "story:story_formspec", table.concat(getStoryFormspec(currentPage), "\n"))
elseif fields.back and currentPage >= 0 then
currentPage = currentPage - 1 -- Fuck Lua and its lack of arithmetic assignment operators
minetest.show_formspec(player:get_player_name(), "story:story_formspec", table.concat(getStoryFormspec(currentPage), "\n"))
elseif fields.exit then
--minetest.kick_player(player:get_player_name(), "Fuck you in particular")
minetest.request_shutdown("The game has crashed due to the citizen's neglience.\n This incident will be reported.")
elseif fields.quit then
minetest.after(0.2, function() minetest.show_formspec(player:get_player_name(), "story:story_formspec", table.concat(getStoryFormspec(currentPage), "\n")) end)
end
end
end)
storyText = {}
storyText[0] = "Click next to continue. Do NOT close the formspec by pressing the Escape key, or the game may break. To my knowledge, this is impossible to solve with the current Lua API."
storyText[1] = "Welcome To ShittingSim! Very Advanced, Educational, and Cultural Minetest Game!"
storyText[2] = "So the story is simple. You are eating so many pickles and beans and drinking milk then you feel heavly that you have to take a shit."
storyText[3] = "You accidently use your flux capacitor and time travel to the future city where you are shitting all over the place."
storyText[4] = "You have to run from future robocops and pack 100 shits into boxes! Good Luck!"
function getStoryFormspec(number)
storyFormspec =
{
"formspec_version[4]",
"size[18, 16]",
"bgcolor[brown]",
"position[0.5, 0.5]",
"style_type[button;bgcolor=yellow;textcolor=green]",
"hypertext[1, 12.5; 12, 5;;<global halign=center color=black size=20 font=Regular>" .. storyText[number] .. "]\n",
"image[1, .2; 16, 12;" .. number .. ".png]",
"button[13, 12.3; 4, 1;back;Back]",
"button[13, 13.6; 4, 1;next;Next]",
"button[13, 14.9; 4, 1;exit;Quit]"
}
return storyFormspec
end
is_game_started = false
is_game_finished = false
function ending()
end
function begining()
end
destruction_counter = {}
destruction_counter.nodesDestroyed = 0
local nodesDestroyedByHand = 0
local idText
local idMeter
minetest.register_item(":", { -- Hand
type = "none",
wield_image = "Poop.png",
wield_scale = {x=1.5,y=2,z=4.5},
range = 5,
tool_capabilities = {
max_drop_level = 0,
full_punch_interval = 0.4,
groupcaps =
{
oddly_breakable_by_hand = {times={[1]=3.50,[2]=2.00,[3]=0.70}, uses=0},
snappy = {times={[3]=0, [2]=0, [1]=0}, uses=0, maxlevel=3},
crumbly = {times={[1]=0, [2]=0, [3]=0}, uses=0, maxlevel=3},
cracky = {times={[1]=0, [2]=0, [3]=0}, uses=0, maxlevel=3},
choppy = {times={[1]=0, [2]=0, [3]=0}, uses=0, maxlevel=3},
},
damage_groups = {fleshy = 3, snappy = 2},
}
})
minetest.register_on_joinplayer(function(player)
meta = player:get_meta()
idText = player:hud_add({
hud_elem_type = "text",
position = {x = .5, y = .5},
offset = {x = 0, y = 0},
text = nodesDestroyed,
alignment = {x = 0, y = 0}, -- center aligned
scale = {x = 100, y = 100}, -- covered later
})
player:hud_add({
hud_elem_type = "image",
position = {x = 1, y = .5},
offset = {x = -515, y = 23},
text = "destruction_counter_meter_empty.png",
scale = {x = 4, y = 4},
alignment = {x = 1, y = 0},
})
idMeter = player:hud_add({
hud_elem_type = "image",
position = {x = 1, y = .5},
offset = {x = -510, y = 23},
text = "destruction_counter_meter_full.png",
scale = {x = 0, y = 4},
alignment = {x = 1, y = 0},
})
end)
function destruction_counter.updateCounter(player)
if not player then
return
end
local totalDestruction = destruction_counter.nodesDestroyed + math.floor(nodesDestroyedByHand / 10)
local percentage = (totalDestruction / 100 * 4)
if percentage > 100 then
percentage = 100
end
player:hud_change(idText, "text", "Shitting & Packing Meter: " .. totalDestruction)
player:hud_change(idMeter, "scale", {x = percentage, y = 4})
end
function sraj_dzwiek()
--make random sound
local sounds = {
"shitting1",
"shitting2",
"shitting3"}
local sound = sounds[math.random(1, #sounds)]
minetest.sound_play(sound, {pos = pos, gain = 2.0, max_hear_distance = 10})
end
function pakuj_guwno()
local sounds = {
"shit_packing1",
"shit_packing2",
"shit_packing3"}
local sound = sounds[math.random(1, #sounds)]
minetest.sound_play(sound, {pos = pos, gain = 2.0, max_hear_distance = 10})
end
minetest.register_node("poop:box", {
description = "cardboard box",
tiles = {"box_top_closed.png","box_top_closed.png", "box_long_side.png", "box_long_side.png", "box_long_side.png", "box_long_side.png"},
drop = 'poop:box',
legacy_mineral = true,
drawtype = "nodebox",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{-0.3125, -0.5, -0.375, 0.3125, -0.0625, 0.375}, -- NodeBox1
}
}
})
minetest.register_node("poop:ladder_steel", {
description = "Ladder",
drawtype = "signlike",
tiles = {"ladder.png"},
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
climbable = true,
is_ground_content = false,
selection_box = {
type = "wallmounted",
--wall_top = = <default>
--wall_bottom = = <default>
--wall_side = = <default>
},
groups = {cracky = 2},
})
-- make a tool called flashlight that can be used to light up the world
minetest.register_tool("poop:flashlight", {
description = "Flashlight",
inventory_image = "flashlight.png",
wield_image = "flashlight.png",
wield_scale = {x=1,y=1,z=1},
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=0,
groupcaps={
cracky = {times={[1]=3.00, [2]=0.70, [3]=0.40}, uses=20, maxlevel=1},
},
damage_groups = {fleshy=2},
},
light_source = 14,
})
minetest.register_tool("poop:tool", {
description = "My Tool",
inventory_image = "flux_capacitor.png",
tool_capabilities = {
full_punch_interval = 1.5,
max_drop_level = 1,
groupcaps = {
crumbly = {
maxlevel = 2,
uses = 20,
times = { [1]=1.60, [2]=1.20, [3]=0.80 }
},
},
damage_groups = {fleshy=2},
},
})
minetest.register_node("poop:floor", {
description = "Floor",
tiles = {"floor.png"},
drop = 'poop:floor',
legacy_mineral = true, groups = {cracky=3, stone=1},
})
minetest.register_node("poop:Poop", {
description = "Just Shit",
tiles = {"Poop.png"},
drop = 'poop:PoopItem', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:tv", {
description = "CRT TV",
tiles = {"PC2.png", "PC2.png","PC2.png","PC.png","PC2.png","PC2.png"},
drop = 'poop:Poop', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:bricks", {
description = "Bricks",
tiles = {"Bricks.png"},
drop = 'poop:grey_bricks', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:grey_bricks", {
description = "Bricks 2",
tiles = {"Bricks2.png"}, groups = {cracky=3, stone=1},
drop = 'poop:grey_bricks', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:planks", {
description = "Planks",
tiles = {"Planks.png"},
drop = 'poop:planks', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:purpleblock", {
description = "Purple Block",
tiles = {"purpleblock.png"},
drop = 'poop:purpleblock', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:purpleblock", {
description = "Purple Block",
tiles = {"purpleblock.png"},
drop = 'poop:purpleblock', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:redblock", {
description = "Red Block",
tiles = {"redblock.png"},
drop = 'poop:redblock', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:aquablock", {
description = "Aqua Block",
tiles = {"aquablock.png"},
drop = 'poop:aquablock', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:glass", {
description = "Glass",
tiles = {"glass.png"},
drop = 'poop:glass', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:Poop2", {
description = "Poop with more density",
tiles = {"sraka.png"},
drop = 'poop:Poop', groups = {cracky=3, stone=1},
})
minetest.register_node("poop:glowing_block", {
description = "Glowing Block",
tiles = {"glowing_block.png"},
drop = 'poop:glowing_block', groups = {cracky=3, stone=1},
light_source = 14
})
minetest.register_node("poop:flux_capacitor", {
description = "Flux Capacitor from Back to the Future",
tiles = {"fluxcap2.png", "fluxcap2.png","fluxcap2.png","fluxcap.png","fluxcap2.png","fluxcap2.png"},
drop = 'poop:Poop', groups = {cracky=3, stone=1},
})
minetest.register_alias("mapgen_stone", "poop:floor")
local pooped_things = 0
minetest.register_craftitem("poop:plumba", {
description = "Plumba",
inventory_image = "plumba.png",
on_use = function(itemstack, user, pointed_thing)
-- check if pointing at a node
if pointed_thing.type ~= "node" then
return
end
if pooped_things >= 100 then
is_game_finished = true
return
end
-- get node at pointed thing position
local node = minetest.get_node(pointed_thing.under)
-- check if node is poop
if node.name == "poop:Poop" then
minetest.remove_node(pointed_thing.under)
minetest.add_node(pointed_thing.under, {name="poop:box"})
minetest.chat_send_player(user:get_player_name(), "You packed "..pooped_things.." shits!")
pooped_things = pooped_things + 1
destruction_counter.nodesDestroyed = pooped_things
destruction_counter.updateCounter(user)
pakuj_guwno()
return itemstack
else if node.name == "poop:Poop2" then
minetest.remove_node(pointed_thing.under)
minetest.add_node(pointed_thing.under, {name="poop:box"})
minetest.chat_send_player(user:get_player_name(), "You packed "..pooped_things.." shits!")
pakuj_guwno()
pooped_things = pooped_things + 1
destruction_counter.nodesDestroyed = pooped_things
destruction_counter.updateCounter(user)
return itemstack
end
end
end
})
minetest.register_craftitem("poop:pooper", {
description = "Pooper",
inventory_image = "SHITitem.png",
on_use = function(itemstack, user, pointed_thing)
-- check if pointing at a node
if pointed_thing.type ~= "node" then
return
end
-- make a random number between 1 and 10
local random_number = math.random(1, 10)
if random_number < 5 then
local node = minetest.get_node(pointed_thing.above)
if node.name == "air" then
minetest.add_node(pointed_thing.above, {name="poop:Poop"})
else
minetest.add_node(pointed_thing.under, {name="poop:Poop"})
end
else
local node = minetest.get_node(pointed_thing.above)
if node.name == "air" then
minetest.add_node(pointed_thing.above, {name="poop:Poop2"})
else
minetest.add_node(pointed_thing.under, {name="poop:Poop2"})
end
end
sraj_dzwiek()
return itemstack
end,
})
minetest.register_on_joinplayer(function(player)
-- teleport to 0,0,0
player:setpos({x=0, y=0, z=0})
minetest.show_formspec(player:get_player_name(), "story:story_formspec", table.concat(getStoryFormspec(1), "\n"))
player:get_inventory():set_list("main", {})
-- set time to day
minetest.set_timeofday(0.5)
minetest.sound_play("pooping_together", {
gain = 1,
pitch = 1,
loop = true,
})
player:get_inventory():add_item("main", "poop:plumba")
player:get_inventory():add_item("main", "poop:pooper")
begining()
end)