Compare commits

...

26 Commits

Author SHA1 Message Date
e9061cbc5d Zaktualizuj 'mods/shit_poop/init.lua' 2022-12-05 09:44:54 +00:00
041dfe138a Update README.MD 2022-11-29 23:12:41 -05:00
22bdfba03e Revert "cool"
This reverts commit 2c55301e7e.
2022-11-29 23:10:33 -05:00
2c55301e7e cool 2022-11-29 23:06:59 -05:00
4ae451d15e New map and more 2022-11-22 16:07:09 -05:00
346e410cfd Fixed merge conflicts and made shit a falling node 2022-11-22 15:02:55 -05:00
f5f3af44e4 removed reference to default 2022-11-22 14:56:59 -05:00
ad7931a469 Add a transparent node 2022-11-22 14:44:44 -05:00
59562a6a9c Minor changes to robocops 2022-11-22 14:22:18 -05:00
f607a3c454 Changes to cops 2022-11-22 13:57:14 -05:00
bcfc53e348 WOW 2022-11-22 12:55:44 +01:00
0c97b63c2a he 2022-11-22 12:48:17 +01:00
2fcfe46ba8 he 2022-11-22 12:47:56 +01:00
742042729b Zaktualizuj 'mods/shit_poop/init.lua' 2022-11-22 09:28:35 +00:00
bd677949e0 Zaktualizuj 'mods/shit_robocops/init.lua' 2022-11-22 09:25:07 +00:00
71f7143eab Change LICENSE.TXT 2022-11-21 22:46:14 -05:00
fd6e8ed98a Final changes 2022-11-21 22:32:31 -05:00
889b9f0b59 Added player_api 2022-11-21 21:58:39 -05:00
c77289c9ca namespacing 2022-11-21 21:58:01 -05:00
8c838a9dde (hopefully) Final changes 2022-11-21 19:54:35 -05:00
40b29be85f Update 'mods/poop/init.lua' 2022-11-22 00:32:12 +00:00
4be1ca2850 FINALLLL 2022-11-22 01:26:54 +01:00
34d92ffc2a Merge branch 'master' of http://git.cubesoftware.xyz:20524/kacperks/pooping-simulator 2022-11-22 01:16:26 +01:00
7b277d1784 meh 2022-11-22 01:16:23 +01:00
03b3c9e016 Merge branch 'master' of http://git.cubesoftware.xyz:20524/kacperks/pooping-simulator 2022-11-22 01:02:44 +01:00
6cf29e9bde meh 2022-11-22 01:02:41 +01:00
136 changed files with 551 additions and 257 deletions

View File

@@ -1,9 +1,113 @@
MIT License For the files located in mods/shit_mods_redo and mods/player_api please see the license files in those directories.
Copyright (c) 2022 kacperks, Looki2000, KacpereK, MCL and Lubek All other source code files are under the following license:
Copyright (c) 2022 kacperks, Looki2000, KacpereK, Jakub W., MCL
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: 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 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. 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.
All other media files (that is, sounds, images, schematics, and all other binary files) have been made available under the following license agreement:
Creative Commons Attribution 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
Section 1 Definitions.
Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
Licensor means the individual(s) or entity(ies) granting rights under this Public License.
Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
Section 2 Scope.
License grant.
Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
reproduce and Share the Licensed Material, in whole or in part; and
produce, reproduce, and Share Adapted Material.
Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
Term. The term of this Public License is specified in Section 6(a).
Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
Downstream recipients.
Offer from the Licensor Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
Other rights.
Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
Patent and trademark rights are not licensed under this Public License.
To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
Section 3 License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
Attribution.
If You Share the Licensed Material (including in modified form), You must:
retain the following if it is supplied by the Licensor with the Licensed Material:
identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
a copyright notice;
a notice that refers to this Public License;
a notice that refers to the disclaimer of warranties;
a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
Section 4 Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
Section 5 Disclaimer of Warranties and Limitation of Liability.
Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
Section 6 Term and Termination.
This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
Section 7 Other Terms and Conditions.
The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
Section 8 Interpretation.
For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.

View File

@@ -2,4 +2,4 @@
* Dumb MineTest game made for the MineTest Game Jam 2022 made in less than 1 day on the last day of the jam * Dumb MineTest game made for the MineTest Game Jam 2022 made in less than 1 day on the last day of the jam
* Made by : kacperks, Looki2000, and Kacperek; with the help of Migdyn from MCL Software (XtreemSoft Ltd) * Made by : kacperks, Looki2000, and Kacperek; with the help of Migdyn from MCL Software

View File

@@ -1,5 +1,5 @@
title = Shitting Simulator title = Shitting Simulator
description = A game where you shit on the floor and put your feces in boxes. description = A game where you shit on the floor and put your feces in boxes.
allowed_mapgens = singlenode allowed_mapgens = singlenode
disabled_settings = enable_damage disabled_settings = !enable_damage, creative_mode, enable_server
author = kacperks, Looki2000, Kacperek, and MCL author = kacperks, Looki2000, Kacperek, and MCL

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,27 @@
Minetest Game mod: player_api
=============================
See license.txt for license information.
Provides an API to allow multiple mods to set player models and textures.
Also sets the default model, texture, and player flags.
This mod is only for content related to the Player API and the player object.
Authors of source code
----------------------
Originally by celeron55, Perttu Ahola <celeron55@gmail.com> (LGPLv2.1+)
Various Minetest developers and contributors (LGPLv2.1+)
Authors of media (textures, models and sounds)
----------------------------------------------
Original model by MirceaKitsune (CC BY-SA 3.0).
Various alterations and fixes by kilbith, sofar, xunto, Rogier-5, TeTpaAka, Desour,
stujones11, An0n3m0us (CC BY-SA 3.0):
character.b3d
character.blend
Jordach (CC BY-SA 3.0):
character.png
celeron55, Perttu Ahola <celeron55@gmail.com> (CC BY-SA 3.0):
player.png
player_back.png

228
mods/player_api/api.lua Normal file
View File

@@ -0,0 +1,228 @@
player_api = {}
-- Player animation blending
-- Note: This is currently broken due to a bug in Irrlicht, leave at 0
local animation_blend = 0
player_api.registered_models = {}
-- Local for speed.
local models = player_api.registered_models
local function collisionbox_equals(collisionbox, other_collisionbox)
if collisionbox == other_collisionbox then
return true
end
for index = 1, 6 do
if collisionbox[index] ~= other_collisionbox[index] then
return false
end
end
return true
end
function player_api.register_model(name, def)
models[name] = def
def.visual_size = def.visual_size or {x = 1, y = 1}
def.collisionbox = def.collisionbox or {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}
def.stepheight = def.stepheight or 0.6
def.eye_height = def.eye_height or 1.47
-- Sort animations into property classes:
-- Animations with same properties have the same _equals value
for animation_name, animation in pairs(def.animations) do
animation.eye_height = animation.eye_height or def.eye_height
animation.collisionbox = animation.collisionbox or def.collisionbox
animation.override_local = animation.override_local or false
for _, other_animation in pairs(def.animations) do
if other_animation._equals then
if collisionbox_equals(animation.collisionbox, other_animation.collisionbox)
and animation.eye_height == other_animation.eye_height then
animation._equals = other_animation._equals
break
end
end
end
animation._equals = animation._equals or animation_name
end
end
-- Player stats and animations
-- model, textures, animation
local players = {}
player_api.player_attached = {}
local function get_player_data(player)
return assert(players[player:get_player_name()])
end
function player_api.get_animation(player)
return get_player_data(player)
end
-- Called when a player's appearance needs to be updated
function player_api.set_model(player, model_name)
local player_data = get_player_data(player)
if player_data.model == model_name then
return
end
player_data.model = model_name
local model = models[model_name]
if model then
player:set_properties({
mesh = model_name,
textures = player_data.textures or model.textures,
visual = "mesh",
visual_size = model.visual_size,
stepheight = model.stepheight
})
-- sets local_animation, collisionbox & eye_height
player_api.set_animation(player, "stand")
else
player:set_properties({
textures = {"player.png", "player_back.png"},
visual = "upright_sprite",
visual_size = {x = 1, y = 2},
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.75, 0.3},
stepheight = 0.6,
eye_height = 1.625,
})
end
end
function player_api.get_textures(player)
local player_data = get_player_data(player)
local model = models[player_data.model]
return assert(player_data.textures or (model and model.textures))
end
function player_api.set_textures(player, textures)
local player_data = get_player_data(player)
local model = models[player_data.model]
local new_textures = assert(textures or (model and model.textures))
player_data.textures = new_textures
player:set_properties({textures = new_textures})
end
function player_api.set_texture(player, index, texture)
local textures = table.copy(player_api.get_textures(player))
textures[index] = texture
player_api.set_textures(player, textures)
end
function player_api.set_animation(player, anim_name, speed)
local player_data = get_player_data(player)
local model = models[player_data.model]
if not (model and model.animations[anim_name]) then
return
end
speed = speed or model.animation_speed
if player_data.animation == anim_name and player_data.animation_speed == speed then
return
end
local previous_anim = model.animations[player_data.animation] or {}
local anim = model.animations[anim_name]
player_data.animation = anim_name
player_data.animation_speed = speed
-- If necessary change the local animation (only seen by the client of *that* player)
-- `override_local` <=> suspend local animations while this one is active
-- (this is basically a hack, proper engine feature needed...)
if anim.override_local ~= previous_anim.override_local then
if anim.override_local then
local none = {x=0, y=0}
player:set_local_animation(none, none, none, none, 1)
else
local a = model.animations -- (not specific to the animation being set)
player:set_local_animation(
a.stand, a.walk, a.mine, a.walk_mine,
model.animation_speed or 30
)
end
end
-- Set the animation seen by everyone else
player:set_animation(anim, speed, animation_blend)
-- Update related properties if they changed
if anim._equals ~= previous_anim._equals then
player:set_properties({
collisionbox = anim.collisionbox,
eye_height = anim.eye_height
})
end
end
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
players[name] = {}
player_api.player_attached[name] = false
end)
minetest.register_on_leaveplayer(function(player)
local name = player:get_player_name()
players[name] = nil
player_api.player_attached[name] = nil
end)
-- Localize for better performance.
local player_set_animation = player_api.set_animation
local player_attached = player_api.player_attached
-- Prevent knockback for attached players
local old_calculate_knockback = minetest.calculate_knockback
function minetest.calculate_knockback(player, ...)
if player_attached[player:get_player_name()] then
return 0
end
return old_calculate_knockback(player, ...)
end
-- Check each player and apply animations
function player_api.globalstep()
for _, player in ipairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local player_data = players[name]
local model = player_data and models[player_data.model]
if model and not player_attached[name] then
local controls = player:get_player_control()
local animation_speed_mod = model.animation_speed or 30
-- Determine if the player is sneaking, and reduce animation speed if so
if controls.sneak then
animation_speed_mod = animation_speed_mod / 2
end
-- Apply animations based on what the player is doing
if player:get_hp() == 0 then
player_set_animation(player, "lay")
elseif controls.up or controls.down or controls.left or controls.right then
if controls.LMB or controls.RMB then
player_set_animation(player, "walk_mine", animation_speed_mod)
else
player_set_animation(player, "walk", animation_speed_mod)
end
elseif controls.LMB or controls.RMB then
player_set_animation(player, "mine", animation_speed_mod)
else
player_set_animation(player, "stand", animation_speed_mod)
end
end
end
end
-- Mods can modify the globalstep by overriding player_api.globalstep
minetest.register_globalstep(function(...)
player_api.globalstep(...)
end)
for _, api_function in pairs({"get_animation", "set_animation", "set_model", "set_textures"}) do
local original_function = player_api[api_function]
player_api[api_function] = function(player, ...)
if not players[player:get_player_name()] then
-- HACK for keeping backwards compatibility
minetest.log("warning", api_function .. " called on offline player")
return
end
return original_function(player, ...)
end
end

26
mods/player_api/init.lua Normal file
View File

@@ -0,0 +1,26 @@
dofile(minetest.get_modpath("player_api") .. "/api.lua")
-- Default player appearance
player_api.register_model("character.b3d", {
animation_speed = 30,
textures = {"character.png"},
animations = {
-- Standard animations.
stand = {x = 0, y = 79},
lay = {x = 162, y = 166, eye_height = 0.3, override_local = true,
collisionbox = {-0.6, 0.0, -0.6, 0.6, 0.3, 0.6}},
walk = {x = 168, y = 187},
mine = {x = 189, y = 198},
walk_mine = {x = 200, y = 219},
sit = {x = 81, y = 160, eye_height = 0.8, override_local = true,
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.0, 0.3}}
},
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3},
stepheight = 0.6,
eye_height = 1.47,
})
-- Update appearance when the player joins
minetest.register_on_joinplayer(function(player)
player_api.set_model(player, "character.b3d")
end)

View File

@@ -0,0 +1,60 @@
License of source code
----------------------
GNU Lesser General Public License, version 2.1
Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2011 Various Minetest developers and contributors
This program is free software; you can redistribute it and/or modify it under the terms
of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 2.1 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details:
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
Licenses of media (textures, models and sounds)
-----------------------------------------------
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com>
Copyright (C) 2012 MirceaKitsune
Copyright (C) 2012 Jordach
Copyright (C) 2015 kilbith
Copyright (C) 2016 sofar
Copyright (C) 2016 xunto
Copyright (C) 2016 Rogier-5
Copyright (C) 2017 TeTpaAka
Copyright (C) 2017 Desour
Copyright (C) 2018 stujones11
Copyright (C) 2019 An0n3m0us
You are free to:
Share — copy and redistribute the material in any medium or format.
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
Under the following terms:
Attribution — You must give appropriate credit, provide a link to the license, and
indicate if changes were made. You may do so in any reasonable manner, but not in any way
that suggests the licensor endorses you or your use.
ShareAlike — If you remix, transform, or build upon the material, you must distribute
your contributions under the same license as the original.
No additional restrictions — You may not apply legal terms or technological measures that
legally restrict others from doing anything the license permits.
Notices:
You do not have to comply with the license for elements of the material in the public
domain or where your use is permitted by an applicable exception or limitation.
No warranties are given. The license may not give you all of the permissions necessary
for your intended use. For example, other rights such as publicity, privacy, or moral
rights may limit how you use the material.
For more details:
http://creativecommons.org/licenses/by-sa/3.0/

2
mods/player_api/mod.conf Normal file
View File

@@ -0,0 +1,2 @@
name = player_api
description = Minetest Game mod: Manages player visuals

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

41
mods/pn/.gitignore vendored
View File

@@ -1,41 +0,0 @@
# Compiled Lua sources
luac.out
# luarocks build files
*.src.rock
*.zip
*.tar.gz
# Object files
*.o
*.os
*.ko
*.obj
*.elf
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
*.def
*.exp
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
*.hex

View File

@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020 Emojigit
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.

View File

@@ -1,9 +0,0 @@
This mod add `setblock` and `place` command
## Commands
### /setblock x y z modname:foobar_node & /place x y z modname:foobar_node
Place a block at x,y,z (setblock call `minetest.set_node`, and place call `minetest.place_node`)
### /setblock_heremodname:foobar_node & /place_here modname:foobar_node
Place a block at your pos (setblock call `minetest.set_node`, and place call `minetest.place_node`)

View File

@@ -1,103 +0,0 @@
minetest.register_privilege("setblock", {
description = "Player can use place and setblock command.",
give_to_singleplayer= false,
})
local function split (inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={}
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
table.insert(t, str)
end
return t
end
minetest.register_chatcommand("place", {
params = "<x> <y> <x> <nodename>",
description = "Place block",
privs = {setblock = true},
func = function(name, param)
splited = split(param," ")
if not(tonumber(splited[1]) and tonumber(splited[2]) and tonumber(splited[3])) then
return false, "Pos error: please give int!"
end
x,y,z,node = tonumber(splited[1]),tonumber(splited[2]),tonumber(splited[3]),splited[4]
if node == "ignore" then
return false, "You can't place \"ignore\"!"
end
if minetest.registered_nodes[node] then
minetest.place_node({x=x, y=y, z=z}, {name=node})
return true, "Setted node "..node.." at "..tostring(x)..tostring(y)..tostring(z)
else
return false, "Cannot place a unknown node."
end
end,
})
minetest.register_chatcommand("place_here", {
params = "<node>",
privs = {setblock = true},
description = "Place block at player's pos",
func = function(name, param)
local player = minetest.get_player_by_name(name)
if not player then
return false, "Player is not online."
end
if param == "ignore" then
return false, "You can't place \"ignore\"!"
end
if minetest.registered_nodes[param] then
minetest.place_node(player:get_pos(), {name=param})
return true, "Placed node "..param.." at "..tostring(math.floor(player:get_pos().x))..","..tostring(math.floor(player:get_pos().y))..","..tostring(math.floor(player:get_pos().z))
else
return false, "Cannot place a unknown node."
end
end,
})
-- minetest.set_node
minetest.register_chatcommand("setblock", {
params = "<x> <y> <x> <nodename>",
privs = {setblock = true},
description = "Set a block",
func = function(name, param)
splited = split(param," ")
if not(tonumber(splited[1]) and tonumber(splited[2]) and tonumber(splited[3])) then
return false, "Pos error: please give int!"
end
x,y,z,node = tonumber(splited[1]),tonumber(splited[2]),tonumber(splited[3]),splited[4]
if node == "ignore" then
return false, "You can't set \"ignore\"!"
end
if minetest.registered_nodes[node] then
minetest.set_node({x=x, y=y, z=z}, {name=node})
return true, "Setted node "..node.." at "..tostring(x)..tostring(y)..tostring(z)
else
return false, "Cannot set a unknown node."
end
end,
})
minetest.register_chatcommand("setblock_here", {
params = "<node>",
privs = {setblock = true},
description = "Set a block at player's pos",
func = function(name, param)
local player = minetest.get_player_by_name(name)
if not player then
return false, "Player is not online."
end
if param == "ignore" then
return false, "You can't set \"ignore\"!"
end
if minetest.registered_nodes[param] then
minetest.set_node(player:get_pos(), {name=param})
return true, "Setted node "..param.." at "..tostring(math.floor(player:get_pos().x))..","..tostring(math.floor(player:get_pos().y))..","..tostring(math.floor(player:get_pos().z))
else
return false, "Cannot set a unknown node."
end
end,
})

View File

@@ -1,2 +0,0 @@
name = place_node
description = Add `setblock` and `place` command to the game

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 B

View File

@@ -2794,6 +2794,8 @@ local tr = minetest.get_modpath("toolranks")
-- deal damage and effects when mob punched -- deal damage and effects when mob punched
function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage) function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
self.health = self.health - 3
-- mob health check -- mob health check
if self.health <= 0 then if self.health <= 0 then
return true return true
@@ -2898,8 +2900,8 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir, damage)
-- healing -- healing
if damage <= -1 then if damage <= -1 then
self.health = self.health - floor(damage) self.health = self.health - 3
return true return true
end end

View File

Before

Width:  |  Height:  |  Size: 108 B

After

Width:  |  Height:  |  Size: 108 B

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 702 B

After

Width:  |  Height:  |  Size: 702 B

View File

Before

Width:  |  Height:  |  Size: 235 B

After

Width:  |  Height:  |  Size: 235 B

View File

Before

Width:  |  Height:  |  Size: 191 B

After

Width:  |  Height:  |  Size: 191 B

View File

Before

Width:  |  Height:  |  Size: 196 B

After

Width:  |  Height:  |  Size: 196 B

View File

Before

Width:  |  Height:  |  Size: 176 B

After

Width:  |  Height:  |  Size: 176 B

View File

Before

Width:  |  Height:  |  Size: 411 B

After

Width:  |  Height:  |  Size: 411 B

View File

Before

Width:  |  Height:  |  Size: 253 B

After

Width:  |  Height:  |  Size: 253 B

View File

Before

Width:  |  Height:  |  Size: 426 B

After

Width:  |  Height:  |  Size: 426 B

View File

Before

Width:  |  Height:  |  Size: 271 B

After

Width:  |  Height:  |  Size: 271 B

View File

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 287 B

View File

Before

Width:  |  Height:  |  Size: 247 B

After

Width:  |  Height:  |  Size: 247 B

View File

Before

Width:  |  Height:  |  Size: 195 B

After

Width:  |  Height:  |  Size: 195 B

View File

Before

Width:  |  Height:  |  Size: 165 B

After

Width:  |  Height:  |  Size: 165 B

View File

Before

Width:  |  Height:  |  Size: 117 B

After

Width:  |  Height:  |  Size: 117 B

View File

Before

Width:  |  Height:  |  Size: 164 B

After

Width:  |  Height:  |  Size: 164 B

View File

Before

Width:  |  Height:  |  Size: 164 B

After

Width:  |  Height:  |  Size: 164 B

View File

Before

Width:  |  Height:  |  Size: 166 B

After

Width:  |  Height:  |  Size: 166 B

View File

Before

Width:  |  Height:  |  Size: 224 B

After

Width:  |  Height:  |  Size: 224 B

View File

Before

Width:  |  Height:  |  Size: 202 B

After

Width:  |  Height:  |  Size: 202 B

View File

@@ -1,3 +1,7 @@
x_p = 15
y_p = 27
z_p = 15
currentPage = 1 currentPage = 1
function game_over() function game_over()
@@ -16,6 +20,7 @@ function you_win(player)
"position[0.5, 0.5]", "position[0.5, 0.5]",
"style_type[button;bgcolor=yellow;textcolor=green]", "style_type[button;bgcolor=yellow;textcolor=green]",
"hypertext[1, 12.5; 12, 5;;<global halign=center color=black size=20 font=Regular>" .. thanks .. "]\n", "hypertext[1, 12.5; 12, 5;;<global halign=center color=black size=20 font=Regular>" .. thanks .. "]\n",
"image[1, .2; 16, 12; thanks.png]",
"button[13, 14.9; 4, 1;exit;Quit]" "button[13, 14.9; 4, 1;exit;Quit]"
} }
minetest.show_formspec(player:get_player_name(), "poop:story", table.concat(storyFormspec, "")) minetest.show_formspec(player:get_player_name(), "poop:story", table.concat(storyFormspec, ""))
@@ -24,58 +29,50 @@ end
minetest.register_item(":", { -- Hand minetest.register_item(":", { -- Hand
type = "none", type = "none",
wield_image = "Poop.png", wield_image = "Poop.png",
wield_scale = {x=1.5,y=2,z=4.5}, wield_scale = {x=.3,y=2,z=2.5},
range = 5, range = 5,
tool_capabilities = { tool_capabilities = {
max_drop_level = 0, max_drop_level = 0,
full_punch_interval = 0.4, full_punch_interval = 0.4,
groupcaps =
{ damage_groups = {fleshy = 8, snappy = 8, cracky = 8},
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) minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= "story:story_formspec" then if formname ~= "poop:cutscene" then
return return
end end
if formname == "story:story_formspec" then if formname == "poop:cutscene" then
if fields.next then if fields.next then
if currentPage >= 4 then if currentPage >= 4 then
minetest.close_formspec(player:get_player_name(), "story:story_formspec") minetest.close_formspec(player:get_player_name(), "poop:cutscene")
-- teleport player to 10 9.5 18 -- teleport player to 10 9.5 18
player:setpos({x=10, y=9.5, z=18}) player:set_pos({x = 32, y = 13, z = 34})
return return
end end
currentPage = currentPage + 1 -- Fuck Lua and its lack of arithmetic assignment operators currentPage = currentPage + 1
minetest.show_formspec(player:get_player_name(), "story:story_formspec", table.concat(getStoryFormspec(currentPage), "\n")) minetest.show_formspec(player:get_player_name(), "poop:cutscene", table.concat(getStoryFormspec(currentPage), "\n"))
elseif fields.back and currentPage >= 0 then elseif fields.back and currentPage >= 0 then
currentPage = currentPage - 1 -- Fuck Lua and its lack of arithmetic assignment operators currentPage = currentPage - 1
minetest.show_formspec(player:get_player_name(), "story:story_formspec", table.concat(getStoryFormspec(currentPage), "\n")) minetest.show_formspec(player:get_player_name(), "poop:cutscene", table.concat(getStoryFormspec(currentPage), "\n"))
elseif fields.exit then elseif fields.exit then
--minetest.kick_player(player:get_player_name(), "Fuck you in particular") minetest.kick_player(player:get_player_name(), "")
minetest.request_shutdown("The game has crashed due to the citizen's neglience.\n This incident will be reported.")
elseif fields.quit then 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) minetest.after(0.2, function() minetest.show_formspec(player:get_player_name(), "poop:cutscene", table.concat(getStoryFormspec(currentPage), "\n")) end)
end end
end end
end) end)
storyText = {} 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 the state-of-the-art Shitting Simulator! A very advanced, educational, and culturally significant Minetest Game!" storyText[1] = "Welcome to the state-of-the-art Shitting Simulator! A very advanced, educational, and culturally significant Minetest Game!"
storyText[2] = "So the story is simple: You've eaten so many pickles and beans and drank so much milk that your rectum will burst if you don't take a shit in the next two minutes." storyText[2] = "So the story is simple: You've eaten so many pickles and beans and drank so much milk that your rectum will burst if you don't take a shit in the next two minutes."
storyText[3] = "You accidently use your flux capacitor and travel in time to the far future, where you find yourself in a city where you are shitting all over the place." storyText[3] = "You accidently use your flux capacitor and travel in time to the far future, where you find yourself in a city where you are shitting all over the place."
storyText[4] = "You have to run from the robocops and pack 100 pieces of shit into boxes! Good luck!" storyText[4] = "You have to run from the robocops and pack 200 pieces of shit into boxes! Good luck!"
function getStoryFormspec(number) function getStoryFormspec(number)
storyFormspec = storyFormspec =
@@ -97,17 +94,30 @@ end
is_game_started = false is_game_started = false
is_game_finished = false is_game_finished = false
minetest.register_on_respawnplayer(function(ObjectRef)
minetest.after(1, function() ObjectRef:set_pos({x = 42, y = 13, z = 46})end)
end)
minetest.register_on_newplayer(function(ObjectRef) minetest.register_on_newplayer(function(ObjectRef)
minetest.place_schematic({x = 0, y = 0, z = 0}, minetest.get_modpath("poop") .. "/map.mts", "0", nil, true) minetest.set_node({x = 32, y = 12, z = 34}, {name = "poop:floor"})
ObjectRef:set_pos({x = 15, y = 11, z = 15}) ObjectRef:set_pos({x = 32, y = 15, z = 34})
minetest.after(1, function()
minetest.place_schematic({x = 0, y = 0, z = 0}, minetest.get_modpath("poop") .. "/map.mts", "0", nil, true)
minetest.fix_light({x = 0, y = 0, z = 0}, {x = 100, y = 100, z = 100}) end)
end) end)
function ending() function ending()
end end
function begining() function beginning()
minetest.place_schematic({x = 0, y = 0, z = 0}, minetest.get_modpath("poop") .. "/map.mts", "0", nil, true)
minetest.fix_light({x = 0, y = 0, z = 0}, {x = 100, y = 100, z = 100})
end end
destruction_counter = {} destruction_counter = {}
@@ -118,26 +128,6 @@ local idText
local idMeter 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},
}
})
@@ -167,7 +157,7 @@ minetest.register_on_joinplayer(function(player)
hud_elem_type = "image", hud_elem_type = "image",
position = {x = 1, y = .5}, position = {x = 1, y = .5},
offset = {x = -510, y = 23}, offset = {x = -510, y = 23},
text = "destruction_counter_meter_full.png", text = "P.png",
scale = {x = 0, y = 4}, scale = {x = 0, y = 4},
alignment = {x = 1, y = 0}, alignment = {x = 1, y = 0},
}) })
@@ -285,7 +275,7 @@ minetest.register_node("poop:floor", {
minetest.register_node("poop:Poop", { minetest.register_node("poop:Poop", {
description = "Just Shit", description = "Just Shit",
tiles = {"Poop.png"}, tiles = {"Poop.png"},
drop = 'poop:PoopItem', groups = {cracky=3, stone=1}, drop = 'poop:PoopItem', groups = {falling_node = 1, cracky=3, stone=1},
}) })
minetest.register_node("poop:tv", { minetest.register_node("poop:tv", {
@@ -352,10 +342,10 @@ minetest.register_node("poop:glass", {
drop = 'poop:glass', groups = {cracky=3, stone=1}, drop = 'poop:glass', groups = {cracky=3, stone=1},
}) })
minetest.register_node("poop:Poop2", { minetest.register_node("poop:Poop2", {
description = "Poop with more density", description = "Diarrhea",
tiles = {"sraka.png"}, tiles = {"sraka.png"},
drop = 'poop:Poop', groups = {cracky=3, stone=1}, drop = 'poop:Poop', groups = {falling_node = 1, cracky=3, stone=1},
}) })
minetest.register_node("poop:glowing_block", { minetest.register_node("poop:glowing_block", {
@@ -372,19 +362,37 @@ minetest.register_node("poop:flux_capacitor", {
drop = 'poop:Poop', groups = {cracky=3, stone=1}, drop = 'poop:Poop', groups = {cracky=3, stone=1},
}) })
minetest.register_node("poop:transparent", {
description = "Transparent",
drawtype = "glasslike",
tiles = {"transparent.png"},
paramtype = "light",
is_ground_content = false,
sunlight_propagates = true,
groups = {cracky=3,oddly_breakable_by_hand=3},
})
minetest.register_alias("mapgen_stone", "poop:floor") minetest.register_alias("mapgen_stone", "poop:floor")
local pooped_things = 0 local pooped_things = 0
local b = false
minetest.register_craftitem("poop:plumba", { minetest.register_craftitem("poop:plumba", {
type = "tool",
description = "Plumba", description = "Plumba",
inventory_image = "plumba.png", inventory_image = "plumba.png",
tool_capabilities = {
max_drop_level = 0,
full_punch_interval = 0.4,
damage_groups = {fleshy = 8, snappy = 8}
},
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)
-- check if pointing at a node -- check if pointing at a node
if pointed_thing.type ~= "node" then if pointed_thing.type ~= "node" then
return return
end end
if pooped_things >= 100 then if pooped_things >= 200 then
is_game_finished = true is_game_finished = true
you_win(user) you_win(user)
return return
@@ -393,12 +401,15 @@ minetest.register_craftitem("poop:plumba", {
local node = minetest.get_node(pointed_thing.under) local node = minetest.get_node(pointed_thing.under)
-- check if node is poop -- check if node is poop
if node.name == "poop:Poop" then if node.name == "poop:Poop" then
pooped_things = pooped_things + 1
destruction_counter.nodesDestroyed = pooped_things
destruction_counter.updateCounter(user)
minetest.remove_node(pointed_thing.under) minetest.remove_node(pointed_thing.under)
minetest.add_node(pointed_thing.under, {name="poop:box"}) minetest.add_node(pointed_thing.under, {name="poop:box"})
minetest.chat_send_player(user:get_player_name(), "You packed "..pooped_things.." shits!") minetest.chat_send_player(user:get_player_name(), "You packed "..pooped_things.."/200 shits!")
pooped_things = pooped_things + 1
if pooped_things == 100 then if pooped_things >= 100 then
if(b == false)then
-- stop first music loop -- stop first music loop
minetest.sound_stop(first_music) minetest.sound_stop(first_music)
-- play second music loop -- play second music loop
@@ -407,21 +418,22 @@ minetest.register_craftitem("poop:plumba", {
pitch = 1, pitch = 1,
loop = true, loop = true,
}) })
b= true
end
end end
destruction_counter.nodesDestroyed = pooped_things
destruction_counter.updateCounter(user)
pakuj_guwno() pakuj_guwno()
return itemstack return itemstack
else if node.name == "poop:Poop2" then else if node.name == "poop:Poop2" then
pooped_things = pooped_things + 1
destruction_counter.nodesDestroyed = pooped_things
destruction_counter.updateCounter(user)
minetest.remove_node(pointed_thing.under) minetest.remove_node(pointed_thing.under)
minetest.add_node(pointed_thing.under, {name="poop:box"}) minetest.add_node(pointed_thing.under, {name="poop:box"})
minetest.chat_send_player(user:get_player_name(), "You packed "..pooped_things.." shits!") minetest.chat_send_player(user:get_player_name(), "You packed "..pooped_things.." shits!")
pakuj_guwno() pakuj_guwno()
pooped_things = pooped_things + 1
destruction_counter.nodesDestroyed = pooped_things
destruction_counter.updateCounter(user)
return itemstack return itemstack
end end
@@ -444,15 +456,19 @@ minetest.register_craftitem("poop:pooper", {
local node = minetest.get_node(pointed_thing.above) local node = minetest.get_node(pointed_thing.above)
if node.name == "air" then if node.name == "air" then
minetest.add_node(pointed_thing.above, {name="poop:Poop"}) minetest.add_node(pointed_thing.above, {name="poop:Poop"})
minetest.check_for_falling(pointed_thing.above)
else else
minetest.add_node(pointed_thing.under, {name="poop:Poop"}) minetest.add_node(pointed_thing.under, {name="poop:Poop"})
minetest.check_for_falling(pointed_thing.under)
end end
else else
local node = minetest.get_node(pointed_thing.above) local node = minetest.get_node(pointed_thing.above)
if node.name == "air" then if node.name == "air" then
minetest.add_node(pointed_thing.above, {name="poop:Poop2"}) minetest.add_node(pointed_thing.above, {name="poop:Poop2"})
minetest.check_for_falling(pointed_thing.above)
else else
minetest.add_node(pointed_thing.under, {name="poop:Poop2"}) minetest.add_node(pointed_thing.under, {name="poop:Poop2"})
minetest.check_for_falling(pointed_thing.under)
end end
end end
sraj_dzwiek() sraj_dzwiek()
@@ -461,9 +477,8 @@ minetest.register_craftitem("poop:pooper", {
}) })
minetest.register_on_joinplayer(function(player) 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(), "poop:cutscene", table.concat(getStoryFormspec(1), "\n"))
minetest.show_formspec(player:get_player_name(), "story:story_formspec", table.concat(getStoryFormspec(1), "\n"))
player:get_inventory():set_list("main", {}) player:get_inventory():set_list("main", {})
-- set time to day -- set time to day
minetest.set_timeofday(0.5) minetest.set_timeofday(0.5)
@@ -479,5 +494,4 @@ minetest.register_on_joinplayer(function(player)
minetest.setting_set("time_speed", 0) minetest.setting_set("time_speed", 0)
minetest.set_timeofday(0) minetest.set_timeofday(0)
begining()
end) end)

BIN
mods/shit_poop/map.mts Normal file

Binary file not shown.

1
mods/shit_poop/mod.conf Normal file
View File

@@ -0,0 +1 @@
name = poop

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Some files were not shown because too many files have changed in this diff Show More