Transform into a modpack
|
@ -1,11 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local dofile
|
|
||||||
= dofile
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
return {
|
|
||||||
user = "Kimapr",
|
|
||||||
pkg = "nodecore-skyblock",
|
|
||||||
min = "5.0",
|
|
||||||
version = dofile("./mods/nc_api/version.lua")
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
version.lua export-subst
|
|
||||||
.git* export-ignore
|
|
||||||
.lua* export-ignore
|
|
||||||
docs export-ignore
|
|
||||||
src export-ignore
|
|
|
@ -1,3 +0,0 @@
|
||||||
globals = {"minetest", "ItemStack", "VoxelArea", "vector", "nodecore", "include", "SecureRandom"}
|
|
||||||
color = false
|
|
||||||
quiet = 1
|
|
|
@ -1,8 +0,0 @@
|
||||||
~print
|
|
||||||
minetest
|
|
||||||
ItemStack
|
|
||||||
VoxelArea
|
|
||||||
vector
|
|
||||||
nodecore
|
|
||||||
include
|
|
||||||
SecureRandom
|
|
50
CONTRIBUTING
|
@ -1,50 +0,0 @@
|
||||||
========================================================================
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
For your contribution to be included in this project, you must
|
|
||||||
understand and agree to the terms in this document at the time of
|
|
||||||
contribution.
|
|
||||||
|
|
||||||
- A "contribution" consists of all files, patches and changes, source
|
|
||||||
control commits, comments and other metadata submitted to the project
|
|
||||||
maintainer(s) for inclusion or other use in the project.
|
|
||||||
|
|
||||||
- All contributions must consist only of your own original work, to
|
|
||||||
which you retain copyright, or to which copyright is not applicable.
|
|
||||||
|
|
||||||
- All copyrightable portions must be non-exclusively, perpetually and
|
|
||||||
irrevocably licensed under the same license terms as the overall
|
|
||||||
project.
|
|
||||||
|
|
||||||
- You will receive attribution in the project's license, in the form of
|
|
||||||
"Portions (C) ...", which shall cover all portions of all
|
|
||||||
contributions. You agree that this constitutes adequate attribution
|
|
||||||
under the terms of the license.
|
|
||||||
|
|
||||||
- You may request to be attributed pseudonymously at the time of
|
|
||||||
submission. Unless otherwise specified, source control metadata
|
|
||||||
will be used for attribution.
|
|
||||||
|
|
||||||
........................................................................
|
|
||||||
|
|
||||||
Other Guidelines:
|
|
||||||
|
|
||||||
- Non-included contributions to the project, such as hosting or other
|
|
||||||
services, content such as videos/streams, screenshots/galleries,
|
|
||||||
reviews, stories and other publicity do not need to follow the
|
|
||||||
guidelines above unless they are intended to also be eligible for
|
|
||||||
inclusion directly in the project.
|
|
||||||
|
|
||||||
- Keep original media source files that are not directly used by the
|
|
||||||
game engine (e.g. *.blend, *.xcf, *.svg) in folders named "src" in the
|
|
||||||
appropriate mod/area. These will NOT be distributed with the source
|
|
||||||
repo, but will not be packaged by ContentDB to keep download sizes
|
|
||||||
minimal.
|
|
||||||
|
|
||||||
- Lua code indentation style is based on this script:
|
|
||||||
http://notebook.kulchenko.com/programming/lua-beautifier-in-55-lines-of-perl
|
|
||||||
(except with INDENT set to "\t" for tabs instead of spaces)
|
|
||||||
This is very similar to the style used by ZeroBrane Studio.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
========================================================================
|
|
24
LICENSE
|
@ -1,24 +0,0 @@
|
||||||
Copyright (C)2018-2019 Aaron Suen <warr1024@gmail.com>
|
|
||||||
Portions Copyright (C)2019 LoneWolfHT <lonewolf04361@gmail.com>
|
|
||||||
Portions Copyright (C)2019 Magik Eh
|
|
||||||
Portions Copyright (C)2019 Terifo <terifo1590@gmail.com>
|
|
||||||
Portions Copyright (C)2019 GreenXenith
|
|
||||||
|
|
||||||
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.
|
|
66
README
|
@ -1,66 +0,0 @@
|
||||||
========================================================================
|
|
||||||
|
|
||||||
\ /\
|
|
||||||
\ / \
|
|
||||||
/\ \ /\ |\ / / \ /\ |\ /
|
|
||||||
| \ | / \ | \ / | / \ | \ /
|
|
||||||
| \ | | | | | |__ | | | | / |__
|
|
||||||
\ \/ | | | | | \ / | | |/ |
|
|
||||||
\ \ / | / \ \ / \ / |\ \
|
|
||||||
\ \/ |/ \ \/ \/ | \ \
|
|
||||||
|
|
||||||
========================================================================
|
|
||||||
NodeCore - An original, immersive puzzle/adventure game for Minetest
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
NodeCore is a major reconstruction of survival gameplay from the ground
|
|
||||||
up. Relearn much of what you thought you knew about Minetest!
|
|
||||||
|
|
||||||
Features:
|
|
||||||
|
|
||||||
- Immersive gameplay. Zero in-game pop-up GUIs. Minimal HUDs.
|
|
||||||
All interactions take place in continuous first-person perspective.
|
|
||||||
Nothing gets between you and the game world.
|
|
||||||
|
|
||||||
- Nearly everything is on the grid. Item stacks settle onto the grid
|
|
||||||
and persist. Complex machines (e.g. furnaces, storage) are built
|
|
||||||
in-world and can be designed, customized, optimized.
|
|
||||||
|
|
||||||
- In-world crafting. Assemble more complex recipes directly on the grid
|
|
||||||
or in-place. Learn how to "pummel" nodes to hammer things together
|
|
||||||
or break things apart.
|
|
||||||
|
|
||||||
- Built-in player guide and hint system provides low-spoiler guidance.
|
|
||||||
|
|
||||||
- Rich and subtle interactions. Some materials dig and transform in
|
|
||||||
stages. Some materials slump into repose when stacked high. Some
|
|
||||||
things transform if conditions are met, but transform faster based
|
|
||||||
on environment. Experiment and see what effects what!
|
|
||||||
|
|
||||||
- Build complex in-game systems. Design your own furnace. Construct
|
|
||||||
digital logic circuits. Build gears and rotary machinery. Assemble
|
|
||||||
portable storage containers.
|
|
||||||
|
|
||||||
- Eggcorns!
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
NodeCore is (C)2018-2019 by Aaron Suen <warr1024@gmail.com>
|
|
||||||
MIT License (http://www.opensource.org/licenses/MIT)
|
|
||||||
See included LICENSE file for full details and credits
|
|
||||||
|
|
||||||
Minetest ContentDB Listing:
|
|
||||||
https://content.minetest.net/packages/Warr1024/nodecore/
|
|
||||||
|
|
||||||
GitLab:
|
|
||||||
https://gitlab.com/sztest/nodecore
|
|
||||||
|
|
||||||
Discord:
|
|
||||||
https://discord.gg/SHq2tkb
|
|
||||||
|
|
||||||
IRC:
|
|
||||||
#nodecore on chat.freenode.net
|
|
||||||
(bridged to Discord)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
========================================================================
|
|
51
WISHLIST
|
@ -1,51 +0,0 @@
|
||||||
========================================================================
|
|
||||||
-----===== PUBLIC CONTRIBUTION WISHLIST =====-----
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
Remember, check out the CONTRIBUTING file for guidelines on contributing
|
|
||||||
to the project!
|
|
||||||
|
|
||||||
- Translations:
|
|
||||||
- NodeCore is running Weblate:
|
|
||||||
https://nodecore.mine.nu/trans/projects/nodecore/core/
|
|
||||||
- Contact the NodeCore Developer(s) to get an account if you
|
|
||||||
want to contribute translations.
|
|
||||||
|
|
||||||
- Help (PRs and/or advocacy) with Minetest engine issues:
|
|
||||||
- >5.0.1 Release: Improvements already in the development branch
|
|
||||||
of the engine are expected to benefit NodeCore, e.g. #8701.
|
|
||||||
- #7245: This is blocking making navigation challenges and
|
|
||||||
distinguishing nodes with similar appearance into gameplay
|
|
||||||
elements.
|
|
||||||
- #8952: This causes hidden bases and other items to be visible
|
|
||||||
through walls and other terrain in our MP server.
|
|
||||||
- #8141: We want cleaner player name labels, and to move
|
|
||||||
the touchtip from screen-space into node-space.
|
|
||||||
- #7020: This bug requires NodeCore to maintain a workaround for
|
|
||||||
the engine in its own code.
|
|
||||||
|
|
||||||
- Publicity and player content:
|
|
||||||
- Help spread NodeCore! Share your experiences, screenshots,
|
|
||||||
videos and streams!
|
|
||||||
- Let the developers know if you have shared something about
|
|
||||||
NodeCore, or would like guidance creating something to share.
|
|
||||||
|
|
||||||
- Player model enhancements
|
|
||||||
- Check that UV maps are consistent with existing skins,
|
|
||||||
e.g. MTG Sam or MC Steve, for TP authors to more easily
|
|
||||||
adapt existing skins.
|
|
||||||
|
|
||||||
- Improved versions of any art assets (sounds, textures).
|
|
||||||
- All textures for base inclusion should be 16x (keep
|
|
||||||
high-def textures to texture packs).
|
|
||||||
- It must be practical to maintain a consistent style for
|
|
||||||
other assets, including future related ones.
|
|
||||||
- Animated fluid textures (especially both stationary and
|
|
||||||
flowing water) would be especially appreciated.
|
|
||||||
|
|
||||||
- Help maintaining the hint system.
|
|
||||||
- Development of hints often lags behind development of new
|
|
||||||
features, sometimes significantly.
|
|
||||||
- Hint organization and content is subject to improvement.
|
|
||||||
|
|
||||||
........................................................................
|
|
||||||
========================================================================
|
|
|
@ -1,31 +0,0 @@
|
||||||
========================================================================
|
|
||||||
CORE DESIGN PRINCIPLES
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
- Do as much in node-space in the world as possible.
|
|
||||||
- Minimize use of off-grid entities.
|
|
||||||
- Avoid encapsulating things in inventories, machines, GUIs.
|
|
||||||
- Crafting and transforming in-world.
|
|
||||||
- Minimal set of primitive composable functions.
|
|
||||||
- Each node should do one job (or one part of a job).
|
|
||||||
- Only include the most primitive, fungible components.
|
|
||||||
- Avoid redundant functionality, include fewest possible
|
|
||||||
different elements.
|
|
||||||
- Complex emergent gameplay by combining simple nodes.
|
|
||||||
- Challenging and constrained gameplay.
|
|
||||||
- Limited inventories, very restricted item storage, e.g. one
|
|
||||||
stack per node.
|
|
||||||
- Large, complex machines to design and build for resource
|
|
||||||
transformations.
|
|
||||||
- Subtle environmental hazards, like deadfalls and pestilence.
|
|
||||||
- Rich, subtle interactions.
|
|
||||||
- Digging, placing, punching and battering.
|
|
||||||
- Different effects from different tools (including empty hand).
|
|
||||||
- Different faces of node may have different effects.
|
|
||||||
- Focus on puzzle-oriented single-player/cooperative gameplay.
|
|
||||||
- Avoid dependence on action, combat, PvP.
|
|
||||||
- Slow-moving hazards, players have a chance to think and plan.
|
|
||||||
- Acessible for slow reflexes, slow networks, mobile devices.
|
|
||||||
|
|
||||||
........................................................................
|
|
||||||
========================================================================
|
|
|
@ -1,57 +0,0 @@
|
||||||
========================================================================
|
|
||||||
ICEBOX: Low-Priority Ideas
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#### ##### #### # # ###### ##### ####
|
|
||||||
# # # # # # # # # # #
|
|
||||||
#### # # # # # # ##### # # ####
|
|
||||||
# ##### # # # # # ##### #
|
|
||||||
# # # # # # # # # # # #
|
|
||||||
#### # #### # ###### ###### # # ####
|
|
||||||
|
|
||||||
- Release an official beta pack/edition.
|
|
||||||
- Modpack of experimental features vs. alternate game by branch?
|
|
||||||
|
|
||||||
- Flammable/igniter ABM should be reversed, so we scan over few igniters
|
|
||||||
instead of many flammables?
|
|
||||||
|
|
||||||
- Wandering fluids API for concrete, glass?
|
|
||||||
|
|
||||||
- AStMs: Active Stack Modifiers.
|
|
||||||
- Operate on all visinv nodes.
|
|
||||||
- Possibly operate on player inventories?
|
|
||||||
|
|
||||||
- Make separate walkable/non-walkable stack nodes.
|
|
||||||
- Should sticks and eggcorns be non-walkable?
|
|
||||||
|
|
||||||
- Code Quality.
|
|
||||||
- Scripts to validate dependency graph.
|
|
||||||
- Tag deps directly in code at place of use.
|
|
||||||
- Auto-generate mod.conf / depends.txt
|
|
||||||
- Scripts for automatic metapackage mods?
|
|
||||||
- Git hooks (and git hook setup scripts)?
|
|
||||||
|
|
||||||
- API Cleanup
|
|
||||||
- Utils
|
|
||||||
- Box mueller (and repeated box mueller sum) and exporand
|
|
||||||
- Break up the nc_api monstrosity.
|
|
||||||
- nc_api_base to create _G.nodecore and include for all.
|
|
||||||
- nc_api metamod that just depends on ALL other api's.
|
|
||||||
- nc_all metamod for 3rd party mod authors...?
|
|
||||||
- Heat API
|
|
||||||
- Unified heating/cooling number from env.
|
|
||||||
- Proper API for burning up items
|
|
||||||
- on_burn? burns_to?
|
|
||||||
- Unify heat transformations into recipe system with
|
|
||||||
cooking recipes?
|
|
||||||
- Unify nc_items and visinv API.
|
|
||||||
- Stack nodes are "special", get first-class support.
|
|
||||||
|
|
||||||
- Make neighbor/distance calcs consistent.
|
|
||||||
- We're using scan_flood in some places, face checks in others,
|
|
||||||
and find_nodes_in_area (cuboid) in others.
|
|
||||||
- Diamond shape would be most consistent.
|
|
||||||
- Should require face touching, not diagonal.
|
|
||||||
|
|
||||||
........................................................................
|
|
||||||
========================================================================
|
|
|
@ -1,37 +0,0 @@
|
||||||
========================================================================
|
|
||||||
ISSUES: Bugs, Cleanup and Refinements
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#### ##### #### # # ###### ##### ####
|
|
||||||
# # # # # # # # # # #
|
|
||||||
#### # # # # # # ##### # # ####
|
|
||||||
# ##### # # # # # ##### #
|
|
||||||
# # # # # # # # # # # #
|
|
||||||
#### # #### # ###### ###### # # ####
|
|
||||||
|
|
||||||
- Design principles doc is badly out of date, needs to reflect lessons
|
|
||||||
learned and things observed about where the game is headed.
|
|
||||||
|
|
||||||
- Less cumbersome scaling controls.
|
|
||||||
- Use loitering or staring, or some other passive input
|
|
||||||
instead of a pummel recipe.
|
|
||||||
- Should hopefully make the process feel more natural.
|
|
||||||
- Need multiple handholds (i.e. ceil+wall version) since
|
|
||||||
player no longer picks the surface.
|
|
||||||
- With no death/respawn, and no fast-travel, we need to
|
|
||||||
buff player movement to balance that out.
|
|
||||||
|
|
||||||
- Hint system updates.
|
|
||||||
- Need a "witness" system for spontaneous in-world processes,
|
|
||||||
such as tree growth or lode cooling. Credit players within
|
|
||||||
a certain distance and line-of-sight.
|
|
||||||
- Feedback/issues URL?
|
|
||||||
- Look for new URL buttons in 5.0+
|
|
||||||
|
|
||||||
- Reinstate and update toolbelt once engine PR #8701 is released
|
|
||||||
- Alternative item strategy with dedicated slots for each
|
|
||||||
inventory space, which can be empty if in hand instead.
|
|
||||||
- Consider a "backpack" approach as opposed to toolbelt.
|
|
||||||
|
|
||||||
........................................................................
|
|
||||||
========================================================================
|
|
175
docs/roadmap.txt
|
@ -1,175 +0,0 @@
|
||||||
========================================================================
|
|
||||||
ROADMAP: Large New Development Projects
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#### ##### #### # # ###### ##### ####
|
|
||||||
# # # # # # # # # # #
|
|
||||||
#### # # # # # # ##### # # ####
|
|
||||||
# ##### # # # # # ##### #
|
|
||||||
# # # # # # # # # # # #
|
|
||||||
#### # #### # ###### ###### # # ####
|
|
||||||
|
|
||||||
- Split this doc into "core gameplay" and "side quest" forks?
|
|
||||||
|
|
||||||
- Lux Ore
|
|
||||||
- Reconsider mapgen depth; push downwards?
|
|
||||||
- Players accumulate radiation.
|
|
||||||
- Player health API to allow registering multiple reasons
|
|
||||||
for player health loss (injury, radiation)
|
|
||||||
- Radiation fades, washes off faster with water.
|
|
||||||
- Stacks also radioactive. Tools too but less so.
|
|
||||||
- Infuse other materials
|
|
||||||
- Infuse clear glass to make "smoked" glass.
|
|
||||||
- Does not transmit light.
|
|
||||||
- See-thru only from one side.
|
|
||||||
- Infuse chromatic glass to make piezo glass.
|
|
||||||
- Step on it or punch it to emit light.
|
|
||||||
- Button/touchplate for optics.
|
|
||||||
|
|
||||||
- Trees/logs.
|
|
||||||
- Tree trunks as falling nodes, dig as logs.
|
|
||||||
- Logs as non-falling nodes, facedir.
|
|
||||||
|
|
||||||
- Sand renewability.
|
|
||||||
- Dirt turns to sand if left near water.
|
|
||||||
- Stronger near more water.
|
|
||||||
- Stronger near flowing water.
|
|
||||||
|
|
||||||
- Torches
|
|
||||||
- Burning nodes with ash parts, to display torch lifetime
|
|
||||||
- Create a "strike-anywhere match" by adding other
|
|
||||||
materials (sand, and something to react with like
|
|
||||||
gravel or lux infusion) to instantly light on
|
|
||||||
punching a solid enough surface.
|
|
||||||
|
|
||||||
- Advanced Tools
|
|
||||||
- Sickle / kopesh, choppy + snappy, recursive harvesting.
|
|
||||||
- Mop/broom for mass stack pickup.
|
|
||||||
- Sponge on a staff for a mop, thatch on a staff for broom.
|
|
||||||
- Broom recipe feels more right, but requires more work...
|
|
||||||
|
|
||||||
- Tinted glass: can see thru only one way and not others, does not
|
|
||||||
transmit light? Infuse non-chromatic glass w/ lux?
|
|
||||||
|
|
||||||
- Player knockback coming in 5.1+?
|
|
||||||
- Allow players to push others around by punching?
|
|
||||||
- Use for door conveyors?
|
|
||||||
|
|
||||||
- Doors
|
|
||||||
- Automation via laser ablation propulsion.
|
|
||||||
- Some materials cannot be operated by hand?
|
|
||||||
- Stirling engine using light gradient?
|
|
||||||
- Water or steam for rotary power?
|
|
||||||
- Arrangements to auto-return if propulsion removed?
|
|
||||||
- Push fluids, falling_nodes, items, ents as appropriate?
|
|
||||||
- Also move items sitting atop?
|
|
||||||
- Use as press for quick packing recipes?
|
|
||||||
|
|
||||||
- Domain Wall Sensor
|
|
||||||
- Adapt from sztest?
|
|
||||||
- Field Generator?
|
|
||||||
- Power an annealed lode block from 2 opposite faces.
|
|
||||||
- Generates particle effect at mapblock boundary.
|
|
||||||
|
|
||||||
- Thatch
|
|
||||||
- Collect grass and dry in sun, or pummel sticks into wood fiber.
|
|
||||||
- Nodes that reduce fall damage, decorative for building.
|
|
||||||
- Brushes for painting, writing system.
|
|
||||||
- Broom to sweep scattered item stacks together.
|
|
||||||
|
|
||||||
- Water and lava surface springs.
|
|
||||||
- Access to water for forges.
|
|
||||||
- Access to lava for lighting, firestarting, glass?
|
|
||||||
|
|
||||||
- Lava quenching, new material?
|
|
||||||
|
|
||||||
- Lurk Ore
|
|
||||||
- Moves freely among air-exposed stone while no player is looking.
|
|
||||||
- Follows after player, attempting to cause harm.
|
|
||||||
- Weakens nodes above/below player into falling nodes,
|
|
||||||
e.g. loose cobble, gravel?
|
|
||||||
- Steals items from player, drops onto ground or absorbs them
|
|
||||||
into body? Saps tool durability?
|
|
||||||
- Ignites flammables it passes by?
|
|
||||||
- Downgrades or absorbs ores nearby by contact or air floodfill?
|
|
||||||
- Creates illusionary nodes you can fall through?
|
|
||||||
- Cannot be dug or damaged directly.
|
|
||||||
- Digging it yields plain stone, but converts up to 2
|
|
||||||
surrounding stone nodes into Lurk.
|
|
||||||
- Need to dig all around it so it cannot move, then apply Some
|
|
||||||
time-integrated process to convert it to useful form.
|
|
||||||
|
|
||||||
- Threats
|
|
||||||
- Visceral
|
|
||||||
- Flammable/toxic gas?
|
|
||||||
- Monsters: stone-lurkers, mimics.
|
|
||||||
- Lightning, meteor strikes?
|
|
||||||
- Creeping
|
|
||||||
- Cellular automata hazards.
|
|
||||||
- From exploration, delving too deep, leaving things to rot, etc.
|
|
||||||
- Blights, Fungi
|
|
||||||
|
|
||||||
- Social features
|
|
||||||
- Randomize player appearance/colors.
|
|
||||||
- Shirt/pants, possibly w/ stripes/patterns
|
|
||||||
- Skin color, hair color, eye color?
|
|
||||||
- Add more holiday outfits.
|
|
||||||
- Track server lag in metadata?
|
|
||||||
|
|
||||||
- New writing system based on charcoal
|
|
||||||
- Draw a symbol on surfaces by pummeling w/ charcoal
|
|
||||||
- ...or maybe make ink from coal+water, use a brush?
|
|
||||||
- Punch symbol w/ charcoal to rotate thru alphabet
|
|
||||||
- Use a special/reduced alphabet?
|
|
||||||
|
|
||||||
- Smoked glass
|
|
||||||
- Lux-infuse clear glass.
|
|
||||||
- Does not transmit light.
|
|
||||||
- See thru only in one direction.
|
|
||||||
- Useful for hidden bases.
|
|
||||||
|
|
||||||
- Digital logic + lighting via optics.
|
|
||||||
- Piezo Crystal Node
|
|
||||||
- Emits light briefly when punched or stepped on
|
|
||||||
- Need to interpolate player paths for "stepped on" logic
|
|
||||||
- Lux-infused chromatic glass?
|
|
||||||
- Pistons or rack&pinions for affecting world stuff.
|
|
||||||
- Laser ablation propulsion
|
|
||||||
- Gray code absolute game time to determine distance (logarithmic by load)
|
|
||||||
- Advanced optics?
|
|
||||||
- Polarization? Phase? Interference and superposition?
|
|
||||||
|
|
||||||
- Rotary power?
|
|
||||||
- Stirling engine?
|
|
||||||
- Rotors?
|
|
||||||
- Conveyors?
|
|
||||||
- Steam as a classic fluid?
|
|
||||||
|
|
||||||
- New materials to craft with.
|
|
||||||
- Dungeon materials, stonework?
|
|
||||||
- Decorations for dungeons
|
|
||||||
- Tree sap from stumps? Resin? Rubber? Shellac?
|
|
||||||
- Small plants? Reeds? Mallows?
|
|
||||||
- Sea stars, anenome, coral, other underwater things?
|
|
||||||
- Fungi, esp. tree-destroying ones, blight?
|
|
||||||
- Oil, natural gas? Fossils and fossil fuels?
|
|
||||||
- Geode, hydra crystals, radioactives?
|
|
||||||
- Shipwrecks or alien tech
|
|
||||||
- Slow-moving animals? Snails? Miniature spice worms?
|
|
||||||
- Non-portable things, like "spawners" or wormholes
|
|
||||||
- Tubers and taproots, cacti, and other "defensive" plantlife
|
|
||||||
- Plant-like CA animals, like bee nests and clouds of bees?
|
|
||||||
Termine mounds? Ant colonies? Coral?
|
|
||||||
- Popeggcorn?
|
|
||||||
- Ores that smelt via heating and then rapid quenching?
|
|
||||||
|
|
||||||
- System for transporting cargo.
|
|
||||||
- Trains of minecarts?
|
|
||||||
- Conveyors, elevators?
|
|
||||||
|
|
||||||
- Vary player walking speed based on nodes under feet?
|
|
||||||
|
|
||||||
- Use gravity vector to make flowing water push the player?
|
|
||||||
|
|
||||||
........................................................................
|
|
||||||
========================================================================
|
|
|
@ -1,8 +0,0 @@
|
||||||
auth.*
|
|
||||||
env_meta.*
|
|
||||||
force_loaded.*
|
|
||||||
ipban.*
|
|
||||||
mod_storage
|
|
||||||
players.*
|
|
||||||
players
|
|
||||||
world.mt
|
|
|
@ -1,3 +0,0 @@
|
||||||
clean:
|
|
||||||
lua5.1 mapclean.lua | sqlite3 map.sqlite
|
|
||||||
cp world.mt.dist world.mt
|
|
|
@ -1,202 +0,0 @@
|
||||||
mgv7_np_ridge = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.75
|
|
||||||
octaves = 4
|
|
||||||
offset = 0
|
|
||||||
scale = 1
|
|
||||||
flags = defaults
|
|
||||||
spread = (100,100,100)
|
|
||||||
seed = 6467
|
|
||||||
}
|
|
||||||
mgv7_np_mountain = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.63
|
|
||||||
octaves = 5
|
|
||||||
offset = -0.6
|
|
||||||
scale = 1
|
|
||||||
flags = defaults
|
|
||||||
spread = (250,350,250)
|
|
||||||
seed = 5333
|
|
||||||
}
|
|
||||||
mgv7_np_float_base_height = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.7
|
|
||||||
octaves = 4
|
|
||||||
offset = 48
|
|
||||||
scale = 24
|
|
||||||
flags = defaults
|
|
||||||
spread = (300,300,300)
|
|
||||||
seed = 907
|
|
||||||
}
|
|
||||||
mgv7_np_ridge_uwater = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.6
|
|
||||||
octaves = 5
|
|
||||||
offset = 0
|
|
||||||
scale = 1
|
|
||||||
flags = defaults
|
|
||||||
spread = (1000,1000,1000)
|
|
||||||
seed = 85039
|
|
||||||
}
|
|
||||||
mgv7_np_mount_height = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.6
|
|
||||||
octaves = 3
|
|
||||||
offset = 256
|
|
||||||
scale = 112
|
|
||||||
flags = defaults
|
|
||||||
spread = (1000,1000,1000)
|
|
||||||
seed = 72449
|
|
||||||
}
|
|
||||||
mgv7_np_filler_depth = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.7
|
|
||||||
octaves = 3
|
|
||||||
offset = 0
|
|
||||||
scale = 1.2
|
|
||||||
flags = defaults
|
|
||||||
spread = (150,150,150)
|
|
||||||
seed = 261
|
|
||||||
}
|
|
||||||
mgv7_np_height_select = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.7
|
|
||||||
octaves = 6
|
|
||||||
offset = -8
|
|
||||||
scale = 16
|
|
||||||
flags = defaults
|
|
||||||
spread = (500,500,500)
|
|
||||||
seed = 4213
|
|
||||||
}
|
|
||||||
mgv7_dungeon_ymax = 31000
|
|
||||||
mgv7_dungeon_ymin = -31000
|
|
||||||
mgv7_cavern_threshold = 0.7
|
|
||||||
mg_flags = caves, dungeons, light, decorations, biomes
|
|
||||||
seed = 14531853857515683775
|
|
||||||
mgv7_np_cave1 = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.5
|
|
||||||
octaves = 3
|
|
||||||
offset = 0
|
|
||||||
scale = 12
|
|
||||||
flags = defaults
|
|
||||||
spread = (61,61,61)
|
|
||||||
seed = 52534
|
|
||||||
}
|
|
||||||
mg_biome_np_humidity = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.5
|
|
||||||
octaves = 3
|
|
||||||
offset = 50
|
|
||||||
scale = 50
|
|
||||||
flags = defaults
|
|
||||||
spread = (1000,1000,1000)
|
|
||||||
seed = 842
|
|
||||||
}
|
|
||||||
mg_biome_np_humidity_blend = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 1
|
|
||||||
octaves = 2
|
|
||||||
offset = 0
|
|
||||||
scale = 1.5
|
|
||||||
flags = defaults
|
|
||||||
spread = (8,8,8)
|
|
||||||
seed = 90003
|
|
||||||
}
|
|
||||||
mgv7_float_mount_exponent = 0.75
|
|
||||||
mgv7_np_terrain_persist = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.6
|
|
||||||
octaves = 3
|
|
||||||
offset = 0.6
|
|
||||||
scale = 0.1
|
|
||||||
flags = defaults
|
|
||||||
spread = (2000,2000,2000)
|
|
||||||
seed = 539
|
|
||||||
}
|
|
||||||
mg_name = v7
|
|
||||||
mgv7_np_cave2 = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.5
|
|
||||||
octaves = 3
|
|
||||||
offset = 0
|
|
||||||
scale = 12
|
|
||||||
flags = defaults
|
|
||||||
spread = (67,67,67)
|
|
||||||
seed = 10325
|
|
||||||
}
|
|
||||||
water_level = 1
|
|
||||||
mg_biome_np_heat_blend = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 1
|
|
||||||
octaves = 2
|
|
||||||
offset = 0
|
|
||||||
scale = 1.5
|
|
||||||
flags = defaults
|
|
||||||
spread = (8,8,8)
|
|
||||||
seed = 13
|
|
||||||
}
|
|
||||||
mgv7_cavern_limit = -256
|
|
||||||
mgv7_cavern_taper = 256
|
|
||||||
mgv7_np_cavern = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.63
|
|
||||||
octaves = 5
|
|
||||||
offset = 0
|
|
||||||
scale = 1
|
|
||||||
flags = defaults
|
|
||||||
spread = (384,128,384)
|
|
||||||
seed = 723
|
|
||||||
}
|
|
||||||
mgv7_np_floatland_base = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.6
|
|
||||||
octaves = 5
|
|
||||||
offset = -0.6
|
|
||||||
scale = 1.5
|
|
||||||
flags = defaults
|
|
||||||
spread = (600,600,600)
|
|
||||||
seed = 114
|
|
||||||
}
|
|
||||||
mg_biome_np_heat = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.5
|
|
||||||
octaves = 3
|
|
||||||
offset = 50
|
|
||||||
scale = 50
|
|
||||||
flags = defaults
|
|
||||||
spread = (1000,1000,1000)
|
|
||||||
seed = 5349
|
|
||||||
}
|
|
||||||
chunksize = 5
|
|
||||||
mapgen_limit = 31000
|
|
||||||
mgv7_np_terrain_alt = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.6
|
|
||||||
octaves = 5
|
|
||||||
offset = 4
|
|
||||||
scale = 25
|
|
||||||
flags = defaults
|
|
||||||
spread = (600,600,600)
|
|
||||||
seed = 5934
|
|
||||||
}
|
|
||||||
mgv7_mount_zero_level = 0
|
|
||||||
mgv7_spflags = mountains, ridges, nofloatlands, caverns
|
|
||||||
mgv7_large_cave_depth = -33
|
|
||||||
mgv7_float_mount_height = 128
|
|
||||||
mgv7_float_mount_density = 0.6
|
|
||||||
mgv7_cave_width = 0.09
|
|
||||||
mgv7_lava_depth = -256
|
|
||||||
mgv7_floatland_level = 1280
|
|
||||||
mgv7_np_terrain_base = {
|
|
||||||
lacunarity = 2
|
|
||||||
persistence = 0.6
|
|
||||||
octaves = 5
|
|
||||||
offset = 4
|
|
||||||
scale = 70
|
|
||||||
flags = defaults
|
|
||||||
spread = (600,600,600)
|
|
||||||
seed = 82341
|
|
||||||
}
|
|
||||||
mgv7_shadow_limit = 1024
|
|
||||||
[end_of_params]
|
|
|
@ -1,44 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, pairs, table
|
|
||||||
= math, pairs, table
|
|
||||||
local math_ceil, math_floor, table_concat, table_sort
|
|
||||||
= math.ceil, math.floor, table.concat, table.sort
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local min = {
|
|
||||||
x = -192,
|
|
||||||
y = -16,
|
|
||||||
z = -192
|
|
||||||
}
|
|
||||||
local max = {
|
|
||||||
x = 64,
|
|
||||||
y = 32,
|
|
||||||
z = -64
|
|
||||||
}
|
|
||||||
|
|
||||||
for k, v in pairs(min) do min[k] = math_floor(v / 80) * 5 end
|
|
||||||
for k, v in pairs(max) do max[k] = math_ceil(v / 80) * 5 end
|
|
||||||
|
|
||||||
local t = {}
|
|
||||||
for x = min.x, max.x do
|
|
||||||
for y = min.y, max.y do
|
|
||||||
for z = min.z, max.z do
|
|
||||||
t[#t + 1] = x + 4096 * y + 16777216 * z
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
table_sort(t)
|
|
||||||
|
|
||||||
print("create table if not exists keep(id integer primary key);")
|
|
||||||
print("begin transaction;")
|
|
||||||
for s = 1, #t, 100 do
|
|
||||||
local e = s + 99
|
|
||||||
if e > #t then e = #t end
|
|
||||||
local u = {}
|
|
||||||
for i = s, e do u[#u + 1] = t[i] end
|
|
||||||
print("insert into keep(id) values(" .. table_concat(u, "),(") .. ");")
|
|
||||||
end
|
|
||||||
print("commit;")
|
|
||||||
print("delete from blocks where pos not in (select distinct id from keep);")
|
|
||||||
print("drop table keep;")
|
|
||||||
print("vacuum;")
|
|
|
@ -1,3 +0,0 @@
|
||||||
gameid = nodecore
|
|
||||||
backend = sqlite3
|
|
||||||
load_mod_nc_reative = true
|
|
|
@ -1,23 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest
|
|
||||||
= minetest
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
minetest.settings:set("time_speed", 0)
|
|
||||||
minetest.after(0, function() minetest.set_timeofday(0.5) end)
|
|
||||||
|
|
||||||
local function setup(p)
|
|
||||||
local n = p:get_player_name()
|
|
||||||
|
|
||||||
local v = minetest.get_player_privs(n)
|
|
||||||
v.fly = true
|
|
||||||
v.fast = true
|
|
||||||
v.give = true
|
|
||||||
v.interact = true
|
|
||||||
v.nc_reative = true
|
|
||||||
minetest.set_player_privs(n, v)
|
|
||||||
|
|
||||||
p:set_pos({x = -113, y = 5, z = -93})
|
|
||||||
end
|
|
||||||
minetest.register_on_joinplayer(setup)
|
|
||||||
minetest.register_on_respawnplayer(setup)
|
|
|
@ -1,2 +0,0 @@
|
||||||
name = NodeCore Skyblock
|
|
||||||
description = Skyblock version of an original, immersive puzzle/adventure game with NO popup GUIs, minimal HUDs.
|
|
Before Width: | Height: | Size: 232 KiB |
BIN
menu/header.png
Before Width: | Height: | Size: 19 KiB |
BIN
menu/icon.png
Before Width: | Height: | Size: 8.2 KiB |
|
@ -1,227 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="625.26715mm"
|
|
||||||
height="134.6713mm"
|
|
||||||
viewBox="0 0 1000.4274 215.47406"
|
|
||||||
version="1.1"
|
|
||||||
id="svg8"
|
|
||||||
sodipodi:docname="header.svg"
|
|
||||||
inkscape:version="0.92.1 r15371"
|
|
||||||
inkscape:export-filename="header.png"
|
|
||||||
inkscape:export-xdpi="41.599998"
|
|
||||||
inkscape:export-ydpi="41.599998">
|
|
||||||
<defs
|
|
||||||
id="defs2">
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="16.93333 : 181.96188 : 1"
|
|
||||||
inkscape:vp_y="140.18095 : 489.6094 : 1"
|
|
||||||
inkscape:vp_z="328.74288 : 169.26187 : 1"
|
|
||||||
inkscape:persp3d-origin="168 : 158.39997 : 1"
|
|
||||||
id="perspective4485" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="0.175"
|
|
||||||
inkscape:cx="1208.5144"
|
|
||||||
inkscape:cy="234.92333"
|
|
||||||
inkscape:document-units="mm"
|
|
||||||
inkscape:current-layer="g4676"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
inkscape:snap-bbox-midpoints="true"
|
|
||||||
inkscape:snap-object-midpoints="true"
|
|
||||||
inkscape:snap-global="true"
|
|
||||||
fit-margin-top="0"
|
|
||||||
fit-margin-left="0"
|
|
||||||
fit-margin-right="0"
|
|
||||||
fit-margin-bottom="0"
|
|
||||||
inkscape:pagecheckerboard="true"
|
|
||||||
scale-x="1.6" />
|
|
||||||
<metadata
|
|
||||||
id="metadata5">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(235.51666,155.09466)">
|
|
||||||
<g
|
|
||||||
id="g4676"
|
|
||||||
transform="matrix(0.94952391,0,0,0.94978823,1.2397197,8.6363235)"
|
|
||||||
style="stroke-width:1.05301285">
|
|
||||||
<g
|
|
||||||
style="stroke:#ffffff;stroke-width:25.27230644;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
|
||||||
id="g4657-5">
|
|
||||||
<path
|
|
||||||
sodipodi:type="star"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25.27230644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4515-5-48"
|
|
||||||
sodipodi:sides="6"
|
|
||||||
sodipodi:cx="28.273651"
|
|
||||||
sodipodi:cy="-58.95414"
|
|
||||||
sodipodi:r1="64.224815"
|
|
||||||
sodipodi:r2="55.620323"
|
|
||||||
sodipodi:arg1="-1.5707963"
|
|
||||||
sodipodi:arg2="-1.0471976"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
inkscape:rounded="0"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
d="m 28.273653,-123.17896 55.620321,32.112414 -2e-6,64.224815 -55.620323,32.1124067 -55.62032,-32.1124097 1e-6,-64.224815 z"
|
|
||||||
inkscape:transform-center-x="1.0101525e-06"
|
|
||||||
inkscape:transform-center-y="-1.3577723e-06" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4516-1"
|
|
||||||
d="M 117.65593,-123.1792 V 5.270433 l 55.62032,-32.11241 v -64.224817 z"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25.27230644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 262.65853,-58.923867 h -55.24781 m 55.24781,-64.224813 -55.62032,32.112404 v 64.224819 l 55.62032,32.1124099"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25.27230644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4520-2" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4515-5-4-8"
|
|
||||||
d="M 467.57949,-9.732521 382.02998,39.489085 296.48047,-9.7325256 V -108.17574 l 85.54951,-49.22163 85.54952,49.22163"
|
|
||||||
inkscape:transform-center-y="-5.1205033e-06"
|
|
||||||
inkscape:transform-center-x="1.5537137e-06"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25.27230644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:type="star"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25.27230644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4515-5-0-9"
|
|
||||||
sodipodi:sides="6"
|
|
||||||
sodipodi:cx="557.01379"
|
|
||||||
sodipodi:cy="-58.95414"
|
|
||||||
sodipodi:r1="64.224815"
|
|
||||||
sodipodi:r2="55.620323"
|
|
||||||
sodipodi:arg1="-1.5707963"
|
|
||||||
sodipodi:arg2="-1.0471976"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
inkscape:rounded="0"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
d="m 557.0138,-123.17896 55.62032,32.112414 -1e-5,64.224815 -55.62032,32.1124067 -55.62032,-32.1124097 0,-64.224815 z"
|
|
||||||
inkscape:transform-center-x="1.0101525e-06"
|
|
||||||
inkscape:transform-center-y="-1.3577723e-06" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4554-3"
|
|
||||||
d="M 646.39652,5.2704448 V -123.1792 l 55.62032,32.112413 -55.62032,32.112412 55.62032,32.11241"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25.27230644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 791.45113,-58.923867 h -55.1483 m 55.1483,-64.224813 -55.62032,32.112402 v 64.224822 l 55.62032,32.1124089"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25.27230644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4520-5-6" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4515-8"
|
|
||||||
d="m -148.90733,-159.66051 87.798708,50.35319 -9e-6,100.7063678 L -236.70605,-109.30733 V -8.6009522 l 87.79871,50.3531812"
|
|
||||||
inkscape:transform-center-y="-3.6452217e-06"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:25.27230644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g4657">
|
|
||||||
<path
|
|
||||||
sodipodi:type="star"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8.42410278;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4515-5"
|
|
||||||
sodipodi:sides="6"
|
|
||||||
sodipodi:cx="28.273651"
|
|
||||||
sodipodi:cy="-58.95414"
|
|
||||||
sodipodi:r1="64.224815"
|
|
||||||
sodipodi:r2="55.620323"
|
|
||||||
sodipodi:arg1="-1.5707963"
|
|
||||||
sodipodi:arg2="-1.0471976"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
inkscape:rounded="0"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
d="m 28.273653,-123.17896 55.620321,32.112414 -2e-6,64.224815 -55.620323,32.1124067 -55.62032,-32.1124097 1e-6,-64.224815 z"
|
|
||||||
inkscape:transform-center-x="1.0101525e-06"
|
|
||||||
inkscape:transform-center-y="-1.3577723e-06" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4516"
|
|
||||||
d="M 117.65593,-123.1792 V 5.270433 l 55.62032,-32.11241 v -64.224817 z"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8.42410278;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 262.65853,-58.923867 h -55.24781 m 55.24781,-64.224813 -55.62032,32.112404 v 64.224819 l 55.62032,32.1124099"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8.42410278;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4520" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4515-5-4"
|
|
||||||
d="M 467.57949,-9.732521 382.02998,39.489085 296.48047,-9.7325256 V -108.17574 l 85.54951,-49.22163 85.54952,49.22163"
|
|
||||||
inkscape:transform-center-y="-5.1205033e-06"
|
|
||||||
inkscape:transform-center-x="1.5537137e-06"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8.42410278;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:type="star"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8.42410278;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4515-5-0"
|
|
||||||
sodipodi:sides="6"
|
|
||||||
sodipodi:cx="557.01379"
|
|
||||||
sodipodi:cy="-58.95414"
|
|
||||||
sodipodi:r1="64.224815"
|
|
||||||
sodipodi:r2="55.620323"
|
|
||||||
sodipodi:arg1="-1.5707963"
|
|
||||||
sodipodi:arg2="-1.0471976"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
inkscape:rounded="0"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
d="m 557.0138,-123.17896 55.62032,32.112414 -1e-5,64.224815 -55.62032,32.1124067 -55.62032,-32.1124097 0,-64.224815 z"
|
|
||||||
inkscape:transform-center-x="1.0101525e-06"
|
|
||||||
inkscape:transform-center-y="-1.3577723e-06" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4554"
|
|
||||||
d="M 646.39652,5.2704448 V -123.1792 l 55.62032,32.112413 -55.62032,32.112412 55.62032,32.11241"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8.42410278;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 791.45113,-58.923867 h -55.1483 m 55.1483,-64.224813 -55.62032,32.112402 v 64.224822 l 55.62032,32.1124089"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8.42410278;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4520-5" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4515"
|
|
||||||
d="m -148.90733,-159.66051 87.798708,50.35319 -9e-6,100.7063678 L -236.70605,-109.30733 V -8.6009522 l 87.79871,50.3531812"
|
|
||||||
inkscape:transform-center-y="-3.6452217e-06"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8.42410278;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 14 KiB |
|
@ -1,134 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
width="134.66922mm"
|
|
||||||
height="134.66922mm"
|
|
||||||
viewBox="0 0 134.66923 134.66922"
|
|
||||||
version="1.1"
|
|
||||||
id="svg8"
|
|
||||||
sodipodi:docname="icon.svg"
|
|
||||||
inkscape:version="0.92.1 r15371"
|
|
||||||
inkscape:export-filename="/home/warr/git/gitlab.com/sztest/nodecore/menu/icon.png"
|
|
||||||
inkscape:export-xdpi="24.139999"
|
|
||||||
inkscape:export-ydpi="24.139999">
|
|
||||||
<defs
|
|
||||||
id="defs2">
|
|
||||||
<inkscape:perspective
|
|
||||||
sodipodi:type="inkscape:persp3d"
|
|
||||||
inkscape:vp_x="10.583334 : 113.72616 : 1"
|
|
||||||
inkscape:vp_y="87.613106 : 306.00588 : 1"
|
|
||||||
inkscape:vp_z="205.46432 : 105.78866 : 1"
|
|
||||||
inkscape:persp3d-origin="105.00001 : 98.999985 : 1"
|
|
||||||
id="perspective4485" />
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="0.35"
|
|
||||||
inkscape:cx="41.97112"
|
|
||||||
inkscape:cy="355.38663"
|
|
||||||
inkscape:document-units="mm"
|
|
||||||
inkscape:current-layer="g89"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:snap-bbox="true"
|
|
||||||
inkscape:snap-bbox-midpoints="true"
|
|
||||||
inkscape:snap-object-midpoints="true"
|
|
||||||
inkscape:snap-global="false"
|
|
||||||
fit-margin-top="0"
|
|
||||||
fit-margin-left="7.730245"
|
|
||||||
fit-margin-right="7.730245"
|
|
||||||
fit-margin-bottom="0"
|
|
||||||
inkscape:pagecheckerboard="true" />
|
|
||||||
<metadata
|
|
||||||
id="metadata5">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Layer 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1"
|
|
||||||
transform="translate(-10.038749,-43.6634)">
|
|
||||||
<g
|
|
||||||
id="g4676"
|
|
||||||
transform="matrix(0.94952391,0,0,0.94978823,1.2397197,8.6363235)"
|
|
||||||
style="stroke-width:1.05301285">
|
|
||||||
<path
|
|
||||||
inkscape:transform-center-y="-1.3577723e-06"
|
|
||||||
inkscape:transform-center-x="1.0101525e-06"
|
|
||||||
d="m 80.180857,43.548355 55.620323,32.112409 0,64.224816 -55.620327,32.11241 -55.620321,-32.11241 2e-6,-64.224819 z"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
inkscape:rounded="0"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
sodipodi:arg2="-1.0471976"
|
|
||||||
sodipodi:arg1="-1.5707963"
|
|
||||||
sodipodi:r2="55.620323"
|
|
||||||
sodipodi:r1="64.224815"
|
|
||||||
sodipodi:cy="107.77317"
|
|
||||||
sodipodi:cx="80.180855"
|
|
||||||
sodipodi:sides="6"
|
|
||||||
id="path4515-2"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:6.31807709;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
sodipodi:type="star" />
|
|
||||||
<path
|
|
||||||
inkscape:transform-center-y="-1.3577723e-06"
|
|
||||||
inkscape:transform-center-x="1.0101525e-06"
|
|
||||||
d="m 80.180857,43.548355 55.620323,32.112409 0,64.224816 -55.620327,32.11241 -55.620321,-32.11241 2e-6,-64.224819 z"
|
|
||||||
inkscape:randomized="0"
|
|
||||||
inkscape:rounded="0"
|
|
||||||
inkscape:flatsided="true"
|
|
||||||
sodipodi:arg2="-1.0471976"
|
|
||||||
sodipodi:arg1="-1.5707963"
|
|
||||||
sodipodi:r2="55.620323"
|
|
||||||
sodipodi:r1="64.224815"
|
|
||||||
sodipodi:cy="107.77317"
|
|
||||||
sodipodi:cx="80.180855"
|
|
||||||
sodipodi:sides="6"
|
|
||||||
id="path4515"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.1060257;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
sodipodi:type="star" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
d="m 80.180857,43.548355 -10e-7,64.224815 m -55.620324,32.11241 55.620323,-32.11241 55.620325,32.11241"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.1060257;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"
|
|
||||||
id="path4515-7" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g89"
|
|
||||||
transform="translate(-2.5234665,-44.723556)">
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4515-8"
|
|
||||||
d="m 79.896826,95.940486 52.104364,29.890544 -1e-5,59.78108 -104.20872,-59.78109 v 59.78109 l 52.104361,29.89054"
|
|
||||||
inkscape:transform-center-y="-3.6452217e-06"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:15;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
<path
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path4515-3"
|
|
||||||
d="m 79.896826,95.940486 52.104364,29.890544 -1e-5,59.78108 -104.20872,-59.78109 v 59.78109 l 52.104361,29.89054"
|
|
||||||
inkscape:transform-center-y="-3.6452217e-06"
|
|
||||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 6.2 KiB |
|
@ -1,41 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, minetest, nodecore, pairs
|
|
||||||
= math, minetest, nodecore, pairs
|
|
||||||
local math_ceil, math_floor, math_random
|
|
||||||
= math.ceil, math.floor, math.random
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
function nodecore.digparticles(nodedef, partdef)
|
|
||||||
if partdef.forcetexture then
|
|
||||||
partdef.texture = partdef.forcetexture
|
|
||||||
local id = minetest.add_particlespawner(partdef)
|
|
||||||
return function() minetest.delete_particlespawner(id) end
|
|
||||||
end
|
|
||||||
|
|
||||||
local img = {}
|
|
||||||
if nodedef.tiles then
|
|
||||||
for i = 1, 6 do
|
|
||||||
img[#img + 1] = nodedef.tiles[i > #nodedef.tiles and #nodedef.tiles or i]
|
|
||||||
end
|
|
||||||
elseif nodedef.inventory_image then
|
|
||||||
img[1] = nodedef.inventory_image
|
|
||||||
end
|
|
||||||
if #img < 1 then return minetest.log("no pummel tile images found!") end
|
|
||||||
img = nodecore.pickrand(img)
|
|
||||||
if img.name then img = img.name end
|
|
||||||
|
|
||||||
partdef.amount = partdef.amount and math_ceil(partdef.amount / 4) or 4
|
|
||||||
|
|
||||||
local t = {}
|
|
||||||
for _ = 1, 4 do
|
|
||||||
partdef.texture = img .. "^[mask:[combine\\:16x16\\:"
|
|
||||||
.. math_floor(math_random() * 12) .. ","
|
|
||||||
.. math_floor(math_random() * 12) .. "=nc_api_pummel.png"
|
|
||||||
t[#t + 1] = minetest.add_particlespawner(partdef)
|
|
||||||
end
|
|
||||||
return function()
|
|
||||||
for _, v in pairs(t) do
|
|
||||||
minetest.delete_particlespawner(v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,84 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
-- SKIP: include nodecore
|
|
||||||
local dofile, error, minetest, pairs, rawget, rawset, setmetatable,
|
|
||||||
table, type
|
|
||||||
= dofile, error, minetest, pairs, rawget, rawset, setmetatable,
|
|
||||||
table, type
|
|
||||||
local table_concat, table_insert
|
|
||||||
= table.concat, table.insert
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local nodecore = rawget(_G, "nodecore") or {}
|
|
||||||
rawset(_G, "nodecore", nodecore)
|
|
||||||
|
|
||||||
local include = rawget(_G, "include") or function(...)
|
|
||||||
local parts = {...}
|
|
||||||
table_insert(parts, 1, minetest.get_modpath(minetest.get_current_modname()))
|
|
||||||
if parts[#parts]:sub(-4) ~= ".lua" then
|
|
||||||
parts[#parts] = parts[#parts] .. ".lua"
|
|
||||||
end
|
|
||||||
return dofile(table_concat(parts, "/"))
|
|
||||||
end
|
|
||||||
rawset(_G, "include", include)
|
|
||||||
|
|
||||||
nodecore.product = "NodeCore Skyblock"
|
|
||||||
nodecore.version = include("version")
|
|
||||||
|
|
||||||
local function callguard(n, t, k, v)
|
|
||||||
if type(v) ~= "function" then return v end
|
|
||||||
return function(first, ...)
|
|
||||||
if first == t then
|
|
||||||
error("called " .. n .. ":" .. k .. "() instead of " .. n .. "." .. k .. "()")
|
|
||||||
end
|
|
||||||
return v(first, ...)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for k, v in pairs(minetest) do
|
|
||||||
minetest[k] = callguard("minetest", minetest, k, v)
|
|
||||||
end
|
|
||||||
setmetatable(nodecore, {
|
|
||||||
__newindex = function(t, k, v)
|
|
||||||
rawset(nodecore, k, callguard("nodecore", t, k, v))
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
local rawregitem = minetest.register_item
|
|
||||||
function minetest.register_item(name,item)
|
|
||||||
if type(item) == "table" and item.stack_max == nil then
|
|
||||||
item.stack_max = 100
|
|
||||||
end
|
|
||||||
rawregitem(name,item)
|
|
||||||
end
|
|
||||||
|
|
||||||
include("issue7020")
|
|
||||||
|
|
||||||
include("util_misc")
|
|
||||||
include("util_falling")
|
|
||||||
include("util_scan_flood")
|
|
||||||
include("util_node_is")
|
|
||||||
include("util_toolcaps")
|
|
||||||
include("util_stack")
|
|
||||||
include("util_phealth")
|
|
||||||
include("util_facedir")
|
|
||||||
include("util_sound")
|
|
||||||
include("util_translate")
|
|
||||||
include("util_ezschematic")
|
|
||||||
include("match")
|
|
||||||
|
|
||||||
include("fx_digparticles")
|
|
||||||
|
|
||||||
include("register_limited_abm")
|
|
||||||
include("register_soaking_abm")
|
|
||||||
include("register_ambiance")
|
|
||||||
include("register_mods")
|
|
||||||
include("mapgen_shared")
|
|
||||||
|
|
||||||
include("item_on_register")
|
|
||||||
include("item_drop_in_place")
|
|
||||||
include("item_falling_repose")
|
|
||||||
include("item_alternate_loose")
|
|
||||||
include("item_group_visinv")
|
|
||||||
include("item_oldnames")
|
|
||||||
include("item_tool_wears_to")
|
|
||||||
include("item_tool_sounds")
|
|
||||||
include("item_punch_sounds")
|
|
|
@ -1,22 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, pairs, setmetatable, type
|
|
||||||
= minetest, pairs, setmetatable, type
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local bifn = minetest.registered_entities["__builtin:falling_node"]
|
|
||||||
local falling = {
|
|
||||||
set_node = function(self, node, meta, ...)
|
|
||||||
meta = meta or {}
|
|
||||||
if type(meta) ~= "table" then meta = meta:to_table() end
|
|
||||||
for _, v1 in pairs(meta.inventory or {}) do
|
|
||||||
for k2, v2 in pairs(v1) do
|
|
||||||
if type(v2) == "userdata" then
|
|
||||||
v1[k2] = v2:to_string()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return bifn.set_node(self, node, meta, ...)
|
|
||||||
end
|
|
||||||
}
|
|
||||||
setmetatable(falling, bifn)
|
|
||||||
minetest.register_entity(":__builtin:falling_node", falling)
|
|
|
@ -1,109 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, minetest, nodecore, pairs, type
|
|
||||||
= math, minetest, nodecore, pairs, type
|
|
||||||
local math_pow
|
|
||||||
= math.pow
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
--[[
|
|
||||||
Nodes that have an "alternate_loose = { ... }" definition when
|
|
||||||
registered will be registered as a pair, one being the "loose" version
|
|
||||||
and the other being the normal "solid" one. Solid-specific attributes
|
|
||||||
can be set via "alternate_solid = { ... }". The solid version will
|
|
||||||
transform to the loose one when dug, and the loose to solid when
|
|
||||||
pummeled.
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local looseimg = "^nc_api_loose.png"
|
|
||||||
|
|
||||||
nodecore.register_on_register_item(function(name, def)
|
|
||||||
if def.type ~= "node" then return end
|
|
||||||
|
|
||||||
local loose = def.alternate_loose
|
|
||||||
if not loose then return end
|
|
||||||
|
|
||||||
if not loose.tiles then
|
|
||||||
loose.tiles = nodecore.underride({}, def.tiles)
|
|
||||||
for k, v in pairs(loose.tiles) do
|
|
||||||
if type(v) == "string" then
|
|
||||||
loose.tiles[k] = v .. looseimg
|
|
||||||
elseif type(v) == "table" then
|
|
||||||
loose.tiles[k] = nodecore.underride({
|
|
||||||
name = v.name .. looseimg
|
|
||||||
}, v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
nodecore.underride(loose, def)
|
|
||||||
|
|
||||||
loose.name = name .. "_loose"
|
|
||||||
if loose.oldnames then
|
|
||||||
for k, v in pairs(loose.oldnames) do
|
|
||||||
loose.oldnames[k] = v .. "_loose"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
loose.description = "Loose " .. loose.description
|
|
||||||
loose.groups = nodecore.underride({}, loose.groups or {})
|
|
||||||
loose.groups.falling_node = 1
|
|
||||||
loose.groups.loose_repack = 1
|
|
||||||
|
|
||||||
if loose.groups.crumbly and not loose.no_repack then
|
|
||||||
minetest.after(0, function()
|
|
||||||
nodecore.register_craft({
|
|
||||||
label = "repack " .. loose.name,
|
|
||||||
action = "pummel",
|
|
||||||
nodes = {
|
|
||||||
{match = loose.name, replace = name}
|
|
||||||
},
|
|
||||||
toolgroups = {thumpy = loose.repack_level or 1},
|
|
||||||
})
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
loose.alternate_loose = nil
|
|
||||||
loose.alternate_solid = nil
|
|
||||||
loose.repack_to = name
|
|
||||||
minetest.register_node(loose.name, loose)
|
|
||||||
|
|
||||||
local solid = nodecore.underride(def.alternate_solid or {}, def)
|
|
||||||
solid.drop_in_place = solid.drop_in_place or loose.name
|
|
||||||
|
|
||||||
solid.alternate_loose = nil
|
|
||||||
solid.alternate_solid = nil
|
|
||||||
minetest.register_node(name, solid)
|
|
||||||
|
|
||||||
return true
|
|
||||||
end)
|
|
||||||
|
|
||||||
nodecore.register_soaking_abm({
|
|
||||||
label = "loose self-repacking",
|
|
||||||
nodenames = {"group:loose_repack"},
|
|
||||||
interval = 10,
|
|
||||||
chance = 1,
|
|
||||||
limited_max = 100,
|
|
||||||
limited_alert = 1000,
|
|
||||||
soakrate = function(pos, node)
|
|
||||||
local bnode = minetest.get_node({x = pos.x, y = pos.y - 1, z = pos.z})
|
|
||||||
local bdef = minetest.registered_items[bnode.name] or {}
|
|
||||||
if (not bdef.groups) or bdef.groups.falling_node then return false end
|
|
||||||
|
|
||||||
local weight = 1
|
|
||||||
for dy = 1, 8 do
|
|
||||||
local n = minetest.get_node({x = pos.x, y = pos.y + dy, z = pos.z})
|
|
||||||
local def = minetest.registered_items[n.name] or {}
|
|
||||||
if def and def.groups and def.groups.falling_node then
|
|
||||||
local w = def.crush_damage or 1
|
|
||||||
if w < 1 then w = 1 end
|
|
||||||
weight = weight + w
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
return weight * 2 / math_pow(2, def.repack_level or 1)
|
|
||||||
end,
|
|
||||||
soakcheck = function(data, pos, node)
|
|
||||||
if data.total < 100 then return end
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
return minetest.set_node(pos, {name = def.repack_to})
|
|
||||||
end
|
|
||||||
})
|
|
|
@ -1,38 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ItemStack, minetest, nodecore, pairs, type
|
|
||||||
= ItemStack, minetest, nodecore, pairs, type
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
--[[
|
|
||||||
Nodes with a "drop_in_place" spec transform on node drop by dropping
|
|
||||||
into place of existing node instead of digger inventory.
|
|
||||||
--]]
|
|
||||||
|
|
||||||
nodecore.register_on_register_item(function(_, def)
|
|
||||||
if def.type ~= "node" then return end
|
|
||||||
local dip = def.drop_in_place
|
|
||||||
if dip then
|
|
||||||
if type(dip) ~= "table" then dip = {name = dip} end
|
|
||||||
def.drop = def.drop or ""
|
|
||||||
def.node_dig_prediction = def.node_dig_prediction or dip.name
|
|
||||||
local st = def.silktouch
|
|
||||||
if st == nil then
|
|
||||||
st = {}
|
|
||||||
for k, v in pairs(def.groups or {}) do
|
|
||||||
st[k] = v + 5
|
|
||||||
end
|
|
||||||
end
|
|
||||||
def.after_dig_node = def.after_dig_node or function(pos, node, _, digger)
|
|
||||||
if st and digger and nodecore.toolspeed(
|
|
||||||
digger:get_wielded_item(), st) then
|
|
||||||
local stack = ItemStack(node.name)
|
|
||||||
stack = digger:get_inventory():add_item("main",
|
|
||||||
stack:to_string())
|
|
||||||
if stack:is_empty() then return end
|
|
||||||
do return nodecore.item_eject(pos, stack) end
|
|
||||||
end
|
|
||||||
dip.param2 = node.param2
|
|
||||||
minetest.set_node(pos, dip)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
|
@ -1,109 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, minetest, nodecore, pairs
|
|
||||||
= math, minetest, nodecore, pairs
|
|
||||||
local math_random
|
|
||||||
= math.random
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
--[[
|
|
||||||
Nodes with the "falling_repose" group will not only fall if unsupported
|
|
||||||
from below, but if there is a sufficient drop off the sides, so simulate
|
|
||||||
an "angle of repose."
|
|
||||||
--]]
|
|
||||||
|
|
||||||
function nodecore.falling_repose_drop(posfrom, posto, node)
|
|
||||||
minetest.spawn_falling_node(posto, node, minetest.get_meta(posfrom))
|
|
||||||
minetest.remove_node(posfrom)
|
|
||||||
posfrom.y = posfrom.y + 1
|
|
||||||
return nodecore.fallcheck(posfrom)
|
|
||||||
end
|
|
||||||
|
|
||||||
nodecore.register_on_register_item(function(_, def)
|
|
||||||
if def.type ~= "node" then return end
|
|
||||||
|
|
||||||
def.groups = def.groups or {}
|
|
||||||
|
|
||||||
if def.groups.falling_repose then def.groups.falling_node = 1 end
|
|
||||||
|
|
||||||
def.repose_drop = def.repose_drop or nodecore.falling_repose_drop
|
|
||||||
end)
|
|
||||||
|
|
||||||
function minetest.spawn_falling_node(pos, node, meta)
|
|
||||||
node = node or minetest.get_node(pos)
|
|
||||||
if node.name == "air" or node.name == "ignore" then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
local obj = minetest.add_entity(pos, "__builtin:falling_node")
|
|
||||||
if obj then
|
|
||||||
obj:get_luaentity():set_node(node, meta or minetest.get_meta(pos):to_table())
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
local function check_empty(pos, dx, dy, dz)
|
|
||||||
for ndy = dy, 1 do
|
|
||||||
local p = {x = pos.x + dx, y = pos.y + ndy, z = pos.z + dz}
|
|
||||||
if not nodecore.buildable_to(p) then return end
|
|
||||||
end
|
|
||||||
return {x = pos.x + dx, y = pos.y, z = pos.z + dz}
|
|
||||||
end
|
|
||||||
function nodecore.falling_repose_check(pos)
|
|
||||||
if minetest.check_single_for_falling(pos) then return end
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
local repose = def.groups and def.groups.falling_repose
|
|
||||||
if not repose then return end
|
|
||||||
|
|
||||||
-- Reposing nodes can always sit comfortably atop
|
|
||||||
-- a non-moving node; it's only when stacked on other
|
|
||||||
-- falling nodes that they can slip off.
|
|
||||||
local sitdef = minetest.registered_items[minetest.get_node(
|
|
||||||
{x = pos.x, y = pos.y - 1, z = pos.z}).name]
|
|
||||||
if not (sitdef and sitdef.groups and sitdef.groups.falling_node)
|
|
||||||
then return end
|
|
||||||
|
|
||||||
local open = {}
|
|
||||||
local ok = check_empty(pos, 1, -repose, 0)
|
|
||||||
if ok then open[1] = ok end
|
|
||||||
ok = check_empty(pos, -1, -repose, 0)
|
|
||||||
if ok then open[#open + 1] = ok end
|
|
||||||
ok = check_empty(pos, 0, -repose, 1)
|
|
||||||
if ok then open[#open + 1] = ok end
|
|
||||||
ok = check_empty(pos, 0, -repose, -1)
|
|
||||||
if ok then open[#open + 1] = ok end
|
|
||||||
if #open < 1 then return end
|
|
||||||
return def.repose_drop(pos, open[math_random(1, #open)], node)
|
|
||||||
end
|
|
||||||
|
|
||||||
local reposeq
|
|
||||||
local qqty
|
|
||||||
local qmax = 100
|
|
||||||
local function reposeall()
|
|
||||||
for _, v in pairs(reposeq) do v() end
|
|
||||||
reposeq = nil
|
|
||||||
qqty = nil
|
|
||||||
end
|
|
||||||
nodecore.register_limited_abm({
|
|
||||||
label = "Falling Repose",
|
|
||||||
nodenames = {"group:falling_repose"},
|
|
||||||
neighbors = {"air"},
|
|
||||||
interval = 2,
|
|
||||||
chance = 5,
|
|
||||||
action = function(pos)
|
|
||||||
if not reposeq then
|
|
||||||
reposeq = {}
|
|
||||||
qqty = 0
|
|
||||||
minetest.after(0, reposeall)
|
|
||||||
end
|
|
||||||
local f = function() nodecore.falling_repose_check(pos) end
|
|
||||||
if #reposeq > qmax then
|
|
||||||
local i = math_random(1, qqty)
|
|
||||||
if i < qmax then reposeq[i] = f end
|
|
||||||
else
|
|
||||||
reposeq[#reposeq + 1] = f
|
|
||||||
end
|
|
||||||
qqty = qqty + 1
|
|
||||||
end
|
|
||||||
})
|
|
|
@ -1,196 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ItemStack, math, minetest, nodecore, pairs, setmetatable, type,
|
|
||||||
vector
|
|
||||||
= ItemStack, math, minetest, nodecore, pairs, setmetatable, type,
|
|
||||||
vector
|
|
||||||
local math_floor, math_pi, math_random, math_sqrt
|
|
||||||
= math.floor, math.pi, math.random, math.sqrt
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
--[[
|
|
||||||
Helpers for visible inventory. Use "visinv" node group.
|
|
||||||
Sets up on_construct, after_destruct and an ABM to manage
|
|
||||||
the visual entities.
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local modname = minetest.get_current_modname()
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
-- VISIBLE STACK ENTITY
|
|
||||||
|
|
||||||
function nodecore.stackentprops(stack, yaw, rotate)
|
|
||||||
local props = {
|
|
||||||
hp_max = 1,
|
|
||||||
physical = false,
|
|
||||||
collide_with_objects = false,
|
|
||||||
collisionbox = {0, 0, 0, 0, 0, 0},
|
|
||||||
visual = "wielditem",
|
|
||||||
visual_size = {x = 0.4, y = 0.4 },
|
|
||||||
textures = {""},
|
|
||||||
spritediv = {x = 1, y = 1},
|
|
||||||
initial_sprite_basepos = {x = 0, y = 0},
|
|
||||||
is_visible = false,
|
|
||||||
static_save = false
|
|
||||||
}
|
|
||||||
local scale = 0
|
|
||||||
yaw = yaw or 0
|
|
||||||
if stack then
|
|
||||||
if type(stack) == "string" then stack = ItemStack(stack) end
|
|
||||||
props.is_visible = not stack:is_empty()
|
|
||||||
props.textures[1] = stack:get_name()
|
|
||||||
|
|
||||||
local ratio = stack:get_count() / stack:get_stack_max()
|
|
||||||
scale = math_sqrt(ratio) * 0.15 + 0.25
|
|
||||||
props.visual_size = {x = scale, y = scale}
|
|
||||||
|
|
||||||
props.automatic_rotate = rotate
|
|
||||||
and rotate * 2 / math_sqrt(math_sqrt(ratio)) or nil
|
|
||||||
|
|
||||||
if ratio == 1 then ratio = 1 - (stack:get_wear() / 65536) end
|
|
||||||
|
|
||||||
if ratio ~= 1 then yaw = yaw + 1/8 + 3/8 * (1 - ratio) end
|
|
||||||
yaw = yaw - 2 * math_floor(yaw / 2)
|
|
||||||
end
|
|
||||||
return props, scale, yaw * math_pi / 2
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_entity(modname .. ":stackent", {
|
|
||||||
initial_properties = nodecore.stackentprops(),
|
|
||||||
is_stack = true,
|
|
||||||
itemcheck = function(self)
|
|
||||||
local pos = self.object:get_pos()
|
|
||||||
local stack = nodecore.stack_get(pos)
|
|
||||||
if not stack or stack:is_empty() then return self.object:remove() end
|
|
||||||
|
|
||||||
local rp = vector.round(pos)
|
|
||||||
local props, scale, yaw = nodecore.stackentprops(stack,
|
|
||||||
rp.x * 3 + rp.y * 5 + rp.z * 7)
|
|
||||||
rp.y = rp.y + scale - 31/64
|
|
||||||
|
|
||||||
local obj = self.object
|
|
||||||
obj:set_properties(props)
|
|
||||||
obj:set_yaw(yaw)
|
|
||||||
obj:set_pos(rp)
|
|
||||||
end,
|
|
||||||
on_activate = function(self)
|
|
||||||
self.cktime = 0.00001
|
|
||||||
end,
|
|
||||||
on_step = function(self, dtime)
|
|
||||||
self.cktime = (self.cktime or 0) - dtime
|
|
||||||
if self.cktime > 0 then return end
|
|
||||||
self.cktime = 1
|
|
||||||
return self:itemcheck()
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
function nodecore.visinv_update_ents(pos, node)
|
|
||||||
node = node or minetest.get_node(pos)
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
local max = def.groups and def.groups.visinv and 1 or 0
|
|
||||||
|
|
||||||
local found = {}
|
|
||||||
for _, v in pairs(minetest.get_objects_inside_radius(pos, 0.5)) do
|
|
||||||
if v and v.get_luaentity and v:get_luaentity()
|
|
||||||
and v:get_luaentity().is_stack then
|
|
||||||
found[#found + 1] = v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if #found < max then
|
|
||||||
minetest.add_entity(pos, modname .. ":stackent")
|
|
||||||
else
|
|
||||||
while #found > max do
|
|
||||||
found[#found]:remove()
|
|
||||||
found[#found] = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return found
|
|
||||||
end
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
-- ITEM ENT APPEARANCE
|
|
||||||
|
|
||||||
local bii = minetest.registered_entities["__builtin:item"]
|
|
||||||
local item = {
|
|
||||||
set_item = function(self, ...)
|
|
||||||
local realobj = self.object
|
|
||||||
self.object = {}
|
|
||||||
setmetatable(self.object, {
|
|
||||||
__index = {
|
|
||||||
set_properties = function() end
|
|
||||||
}
|
|
||||||
})
|
|
||||||
bii.set_item(self, ...)
|
|
||||||
self.object = realobj
|
|
||||||
|
|
||||||
self.rotdir = self.rotdir or math_random(1, 2) * 2 - 3
|
|
||||||
local p, s = nodecore.stackentprops(self.itemstring, 0, self.rotdir)
|
|
||||||
p.physical = true
|
|
||||||
s = s / math_sqrt(2)
|
|
||||||
p.collisionbox = {-s, -s, -s, s, s, s}
|
|
||||||
return realobj:set_properties(p)
|
|
||||||
end
|
|
||||||
}
|
|
||||||
setmetatable(item, bii)
|
|
||||||
minetest.register_entity(":__builtin:item", item)
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
-- NODE REGISTRATION HELPERS
|
|
||||||
|
|
||||||
function nodecore.visinv_on_construct(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("solo", 1)
|
|
||||||
nodecore.visinv_update_ents(pos)
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.visinv_after_destruct(pos)
|
|
||||||
nodecore.visinv_update_ents(pos)
|
|
||||||
nodecore.fallcheck(pos)
|
|
||||||
end
|
|
||||||
|
|
||||||
nodecore.register_on_register_item(function(_, def)
|
|
||||||
if def.type ~= "node" then return end
|
|
||||||
|
|
||||||
def.groups = def.groups or {}
|
|
||||||
|
|
||||||
if def.groups.visinv then
|
|
||||||
def.on_construct = def.on_construct or nodecore.visinv_on_construct
|
|
||||||
def.after_destruct = def.after_destruct or nodecore.visinv_after_destruct
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
nodecore.register_limited_abm({
|
|
||||||
label = "VisInv Check",
|
|
||||||
nodenames = {"group:visinv"},
|
|
||||||
interval = 1,
|
|
||||||
chance = 1,
|
|
||||||
action = function(...) return nodecore.visinv_update_ents(...) end
|
|
||||||
})
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
-- DIG INVENTORY
|
|
||||||
|
|
||||||
local digpos
|
|
||||||
local old_node_dig = minetest.node_dig
|
|
||||||
minetest.node_dig = function(pos, ...)
|
|
||||||
nodecore.stack_sounds(pos, "dug")
|
|
||||||
local function helper(...)
|
|
||||||
digpos = nil
|
|
||||||
return ...
|
|
||||||
end
|
|
||||||
digpos = pos
|
|
||||||
return helper(old_node_dig(pos, ...))
|
|
||||||
end
|
|
||||||
local old_get_node_drops = minetest.get_node_drops
|
|
||||||
minetest.get_node_drops = function(...)
|
|
||||||
local drops = old_get_node_drops(...)
|
|
||||||
if not digpos then return drops end
|
|
||||||
drops = drops or {}
|
|
||||||
local stack = nodecore.stack_get(digpos)
|
|
||||||
if stack and not stack:is_empty() then
|
|
||||||
drops[#drops + 1] = stack
|
|
||||||
end
|
|
||||||
return drops
|
|
||||||
end
|
|
|
@ -1,14 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore, pairs
|
|
||||||
= minetest, nodecore, pairs
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
nodecore.register_on_register_item(function(name, def)
|
|
||||||
if def.oldnames then
|
|
||||||
for _, v in pairs(def.oldnames) do
|
|
||||||
if not minetest.registered_items[v] then
|
|
||||||
minetest.register_alias(v, name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
|
@ -1,17 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ipairs, minetest, nodecore
|
|
||||||
= ipairs, minetest, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
nodecore.register_on_register_item,
|
|
||||||
nodecore.registered_on_register_item
|
|
||||||
= nodecore.mkreg()
|
|
||||||
|
|
||||||
local oldreg = minetest.register_item
|
|
||||||
function minetest.register_item(name, def, ...)
|
|
||||||
for _, v in ipairs(nodecore.registered_on_register_item) do
|
|
||||||
local x = v(name, def, ...)
|
|
||||||
if x then return x end
|
|
||||||
end
|
|
||||||
return oldreg(name, def, ...)
|
|
||||||
end
|
|
|
@ -1,40 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore
|
|
||||||
= minetest, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local lasthit = {}
|
|
||||||
|
|
||||||
minetest.register_on_punchnode(function(pos, node, puncher)
|
|
||||||
if not puncher then return end
|
|
||||||
local pname = puncher:get_player_name()
|
|
||||||
local now = minetest.get_us_time() / 1000000
|
|
||||||
local last = lasthit[pname] or 0
|
|
||||||
if now - last < 0.25 then return end
|
|
||||||
lasthit[pname] = now
|
|
||||||
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
local wield = puncher:get_wielded_item()
|
|
||||||
if (not def.sounds) or (not def.groups)
|
|
||||||
or (not nodecore.toolspeed(wield, def.groups)) then
|
|
||||||
nodecore.node_sound(pos, "dig")
|
|
||||||
else
|
|
||||||
nodecore.node_sound(pos, "dig",
|
|
||||||
{except = puncher})
|
|
||||||
end
|
|
||||||
|
|
||||||
if wield:get_wear() >= (65536 * 0.95) then
|
|
||||||
minetest.sound_play("nc_api_toolwear",
|
|
||||||
{object = puncher, gain = 0.5})
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_on_dignode(function(pos, node, digger)
|
|
||||||
return nodecore.node_sound(pos, "dug",
|
|
||||||
{node = node, except = digger})
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_on_placenode(function(pos, node, placer)
|
|
||||||
return nodecore.node_sound(pos, "place",
|
|
||||||
{node = node, except = placer})
|
|
||||||
end)
|
|
|
@ -1,11 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local nodecore
|
|
||||||
= nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
nodecore.register_on_register_item(function(_, def)
|
|
||||||
if def.type == "tool" then
|
|
||||||
def.sound = def.sound or {}
|
|
||||||
def.sound.breaks = def.sound.breaks or {name = "nc_api_toolbreak", gain = 1}
|
|
||||||
end
|
|
||||||
end)
|
|
|
@ -1,20 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ItemStack, minetest, nodecore
|
|
||||||
= ItemStack, minetest, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
nodecore.register_on_register_item(function(_, def)
|
|
||||||
if def.tool_wears_to then
|
|
||||||
def.after_use = def.after_use or function(what, who, _, dp)
|
|
||||||
what:add_wear(dp.wear)
|
|
||||||
if what:get_count() == 0 then
|
|
||||||
if def.sound and def.sound.breaks then
|
|
||||||
minetest.sound_play(def.sound.breaks,
|
|
||||||
{object = who, gain = 0.5})
|
|
||||||
end
|
|
||||||
return ItemStack(def.tool_wears_to)
|
|
||||||
end
|
|
||||||
return what
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
|
@ -1,4 +0,0 @@
|
||||||
# textdomain: nc_api
|
|
||||||
(C)2018-2019 by Aaron Suen <warr1024@@gmail.com>=(C)2018-2019 から Aaron Suen <warr1024@@gmail.com>
|
|
||||||
(and 1 more hint)=(さらに1つのヒント)
|
|
||||||
(and @1 more hints)=(さらに@1つのヒント)
|
|
|
@ -1,145 +0,0 @@
|
||||||
# textdomain: nc_api
|
|
||||||
(C)2018-2019 by Aaron Suen <warr1024@@gmail.com>=(C)2018-2019 por Aaron Suen <war1024@@gmail.com>
|
|
||||||
(and 1 more hint)=( e mais 1 dica)
|
|
||||||
(and @1 more hints)=(e mais @1 dicas)
|
|
||||||
- Crafting is done by building recipes in-world.=- A Criação de Itens é feita construindo as receitas pelo mundo.
|
|
||||||
- If a recipe exists, you will see a special particle effect.=- Se uma receita existe, você verá um efeito especial de partícula sair do node.
|
|
||||||
- Items picked up try to fit into the current selected slot first.=- Os itens pegados são primeiramente armazenados no espaço atualmente selecionado.
|
|
||||||
- Order and specific face of placement may matter for crafting.=- A ordem e a face em que os itens são colocados pode importar no processo de criação.
|
|
||||||
- Recipes are time-based, punching faster does not speed up.=- Receitas são cronometradas, bater mais forte não afetará a velocidade delas.
|
|
||||||
- Sneak+drop to count out single items from stack.=- Use os comandos de agachar e soltar juntos para soltar um só item.
|
|
||||||
- Some recipes require "pummeling" a node.=- Algumas receitas necessitam que você "esmurre" um node.
|
|
||||||
- Stacks may be pummeled, exact item count may matter.=- Amontoados de itens podem ser esmurrados, pode ser que precise de uma quantidade exata do item.
|
|
||||||
- There is NO inventory screen.=- NÃO EXISTE tela de inventário.
|
|
||||||
- To pummel, punch a node repeatedly, WITHOUT digging.=- Para esmurrar, bata num node repetidamente, SEM QUEBRÁ-LO.
|
|
||||||
- Wielded item, target face, and surrounding nodes may matter.=- O item segurado, a face do objeto alvo e os nodes ao redor podem importar durante a criação de algo.
|
|
||||||
- You do not have to punch very fast (about 1 per second).=- Você não precisa bater muito rápido(basta 1 batida por segundo).
|
|
||||||
About=Sobre
|
|
||||||
Active Lens=Lente Ativa
|
|
||||||
Active Prism=Prisma Ativo
|
|
||||||
Aggregate=Agregar
|
|
||||||
Air=Ar
|
|
||||||
Annealed Lode=Veio Mineral Recozido
|
|
||||||
Annealed Lode Bar=Barra de Veio Mineral Recozida
|
|
||||||
Annealed Lode Hatchet=Machado de Veio Mineral Recozida
|
|
||||||
Annealed Lode Hatchet Head=Cabeça de Machado de Veio Mineral Recozida
|
|
||||||
Annealed Lode Mallet=Marreta de Veio Mineral Recozida
|
|
||||||
Annealed Lode Mallet Head=Cabeça de Marreta de Veio Mineral Recozida
|
|
||||||
Annealed Lode Mattock=Enxada de Veio Mineral Recozida
|
|
||||||
Annealed Lode Mattock Head=Cabeça de Enxada de Veio Mineral Recozida
|
|
||||||
Annealed Lode Pick=Picareta de Veio Mineral Recozida
|
|
||||||
Annealed Lode Pick Head=Cabeça de Picareta de Veio Mineral Recozida
|
|
||||||
Annealed Lode Prill=Lascas de Veio Mineral Recozida
|
|
||||||
Annealed Lode Rod=Vara de Veio Mineral Recozida
|
|
||||||
Annealed Lode Spade=Pá de Veio Mineral Recozida
|
|
||||||
Annealed Lode Spade Head=Cabeça de Pá de Veio Mineral Recozida
|
|
||||||
Ash=Cinza
|
|
||||||
Ash Lump=Nódulo de Cinzas
|
|
||||||
Burning Embers=Brasa Quente
|
|
||||||
Charcoal=Carvão Vegetal
|
|
||||||
Charcoal Lump=Nódulo de Carvão Vegetal
|
|
||||||
Chromatic Glass=Vidro Cromático
|
|
||||||
Clear Glass=Vidro Transparente
|
|
||||||
Cobble=Pedregulho
|
|
||||||
Cobble Hinged Panel=Painel de Pedregulho Articulado
|
|
||||||
Cobble Panel=Painel de Pedregulho
|
|
||||||
Crude Glass=Vidro Bruto
|
|
||||||
DEVELOPMENT VERSION=VERSÃO EM DESENVOLVIMENTO
|
|
||||||
Dirt=Terra
|
|
||||||
Eggcorn=Semente de Carvalho
|
|
||||||
Fire=Fogo
|
|
||||||
Float Glass=Vidro Float
|
|
||||||
Glowing Lode=Veio Mineral Incandescente
|
|
||||||
Glowing Lode Bar=Barra de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Hatchet=Machado de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Hatchet Head=Cabeça de Machado Veio Mineral Incandescente
|
|
||||||
Glowing Lode Mallet=Marreta de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Mallet Head=Cabeça de Marreta Veio Mineral Incandescente
|
|
||||||
Glowing Lode Mattock=Enxada de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Mattock Head=Cabeça de Enxada Veio Mineral Incandescente
|
|
||||||
Glowing Lode Pick=Picareta de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Pick Head=Cabeça de Picareta de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Prill=Lascas de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Rod=Vara de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Spade=Pá de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Spade Head=Cabeça de Pá Veio Mineral Incandescente
|
|
||||||
Grass=Grama
|
|
||||||
Gravel=Cascalho
|
|
||||||
Hints=Dicas
|
|
||||||
Ignore=Ignorar
|
|
||||||
Injury=Ferir
|
|
||||||
Inventory=Inventário
|
|
||||||
Leaves=Folhas
|
|
||||||
Lens=Lente
|
|
||||||
Living Sponge=Esponja Viva
|
|
||||||
Lode Cobble=Veio de Pedregulho
|
|
||||||
Lode Ore=Veio Mineral
|
|
||||||
Loose Cobble=Pedregulho Solta
|
|
||||||
Loose Dirt=Terra Solta
|
|
||||||
Loose Gravel=Cascalho Solto
|
|
||||||
Loose Leaves=Folhas Soltas
|
|
||||||
Loose Lode Cobble=Veio de Pedregulho Solto
|
|
||||||
Loose Sand=Areia Solta
|
|
||||||
Molten Glass=Vidro Derretido
|
|
||||||
Molten Rock=Pedra Derretida
|
|
||||||
Player's Guide: Inventory Management=Guia do Jogador: Gerenciamento de Inventário
|
|
||||||
Player's Guide: Pummeling Recipes=Guia do Jogador: Receitas por Esmurrada
|
|
||||||
Prism=Prisma
|
|
||||||
Progress: @1 complete, @2 current, @3 future=Progresso: @1 completo(s), @2 atual(is), @3 futuro(s)
|
|
||||||
Pummel=Esmurrar
|
|
||||||
Sand=Areia
|
|
||||||
See included LICENSE file for full details and credits=Veja o arquivo de LICENSA incluso para créditos e maiores detalhes
|
|
||||||
Shining Lens=Lente Brilhante
|
|
||||||
Sponge=Esponja
|
|
||||||
Staff=Bastão
|
|
||||||
Stick=Graveto
|
|
||||||
Stone=Pedra
|
|
||||||
Stone Chip=Pedaço de Pedra
|
|
||||||
Stone-Tipped Hatchet=Machado com Ponta de Pedra
|
|
||||||
Stone-Tipped Mallet=Marreta com Ponta de Pedra
|
|
||||||
Stone-Tipped Pick=Picareta com Ponta de Pedra
|
|
||||||
Stone-Tipped Spade=Pá com Ponta de Pedra
|
|
||||||
Stump=Toco
|
|
||||||
Tempered Lode=Veio Mineral Temperado
|
|
||||||
Tempered Lode Bar=Barra de Veio Mineral Temperado
|
|
||||||
Tempered Lode Hatchet=Machado de Veio Mineral Temperado
|
|
||||||
Tempered Lode Hatchet Head=Cabeça de Machado de Veio Mineral Temperado
|
|
||||||
Tempered Lode Mallet=Marreta de Veio Mineral Temperado
|
|
||||||
Tempered Lode Mallet Head=Cabeça de Marreta de Veio Mineral Temperado
|
|
||||||
Tempered Lode Mattock=Enxada de Veio Mineral Temperado
|
|
||||||
Tempered Lode Mattock Head=Cabeça de Enxada de Veio Mineral Temperado
|
|
||||||
Tempered Lode Pick=Picareta de Veio Mineral Temperado
|
|
||||||
Tempered Lode Pick Head=Cabeça de Picareta de Veio Mineral Temperado
|
|
||||||
Tempered Lode Prill=Lascas de Veio Mineral Temperado
|
|
||||||
Tempered Lode Rod=Vara de Veio Mineral Temperado
|
|
||||||
Tempered Lode Spade=Pá de Veio Mineral Temperado
|
|
||||||
Tempered Lode Spade Head=Cabeça de Enxada de Veio Mineral Temperado
|
|
||||||
Tote (1 Slot)=Bolsa (1 Compartimento)
|
|
||||||
Tote (2 Slots)=Bolsa (2 Compartimentos)
|
|
||||||
Tote (3 Slots)=Bolsa (3 Compartimentos)
|
|
||||||
Tote (4 Slots)=Bolsa (4 Compartimentos)
|
|
||||||
Tote (5 Slots)=Bolsa (5 Compartimentos)
|
|
||||||
Tote (6 Slots)=Bolsa (6 Compartimentos)
|
|
||||||
Tote (7 Slots)=Bolsa (7 Compartimentos)
|
|
||||||
Tote (8 Slots)=Bolsa (8 Compartimentos)
|
|
||||||
Tote Handle=Alça de Bolsa
|
|
||||||
Tree Trunk=Tronco de Árvore
|
|
||||||
Unknown Item=Item Desconhecido
|
|
||||||
Water=Água
|
|
||||||
Wet Aggregate=Massa Úmida
|
|
||||||
Wet Sponge=Esponja Molhada
|
|
||||||
Wooden Adze=Enxó de Madeira
|
|
||||||
Wooden Frame=Estrutura de Madeira
|
|
||||||
Wooden Hatchet=Machado de Madeira
|
|
||||||
Wooden Hatchet Head=Cabeça de Machado de Madeira
|
|
||||||
Wooden Hinged Panel=Painel Articulado de Madeira
|
|
||||||
Wooden Ladder=Escada de Madeira
|
|
||||||
Wooden Mallet=Marreta de Madeira
|
|
||||||
Wooden Mallet Head=Cabeça de Marreta de Madeira
|
|
||||||
Wooden Panel=Painel de Madeira
|
|
||||||
Wooden Pick=Picareta de Madeira
|
|
||||||
Wooden Pick Head=Cabeça de Picareta de Madeira
|
|
||||||
Wooden Plank=Tábua de Madeira
|
|
||||||
Wooden Shelf=Estante de Madeira
|
|
||||||
Wooden Spade=Pá de Madeira
|
|
||||||
Wooden Spade Head=Cabeça de Pá de Madeira
|
|
|
@ -1,143 +0,0 @@
|
||||||
# textdomain: nc_api
|
|
||||||
(C)2018-2019 by Aaron Suen <warr1024@@gmail.com>=(C)2018-2019 por Aaron Suen <war1024@@gmail.com>
|
|
||||||
- Crafting is done by building recipes in-world.=- A Criação de Itens é feita construindo as receitas pelo mundo.
|
|
||||||
- If a recipe exists, you will see a special particle effect.=- Se uma receita existe, você verá um efeito especial de partícula sair do node.
|
|
||||||
- Items picked up try to fit into the current selected slot first.=- Os itens pegados são primeiramente armazenados no espaço atualmente selecionado.
|
|
||||||
- Order and specific face of placement may matter for crafting.=- A ordem e a face em que os itens são colocados pode importar no processo de criação.
|
|
||||||
- Recipes are time-based, punching faster does not speed up.=- Receitas são cronometradas, bater mais forte não afetará a velocidade delas.
|
|
||||||
- Sneak+drop to count out single items from stack.=- Use os comandos de agachar e soltar juntos para soltar um só item.
|
|
||||||
- Some recipes require "pummeling" a node.=- Algumas receitas necessitam que você "esmurre" um node.
|
|
||||||
- Stacks may be pummeled, exact item count may matter.=- Amontoados de itens podem ser esmurrados, pode ser que precise de uma quantidade exata do item.
|
|
||||||
- There is NO inventory screen.=- NÃO EXISTE tela de inventário.
|
|
||||||
- To pummel, punch a node repeatedly, WITHOUT digging.=- Para esmurrar, bata num node repetidamente, SEM QUEBRÁ-LO.
|
|
||||||
- Wielded item, target face, and surrounding nodes may matter.=- O item segurado, a face do objeto alvo e os nodes ao redor podem importar durante a criação de algo.
|
|
||||||
- You do not have to punch very fast (about 1 per second).=- Você não precisa bater muito rápido(basta 1 batida por segundo).
|
|
||||||
About=Sobre
|
|
||||||
Active Lens=Lente Ativa
|
|
||||||
Active Prism=Prisma Ativo
|
|
||||||
Aggregate=Agregar
|
|
||||||
Air=Ar
|
|
||||||
Annealed Lode=Veio Mineral Recozido
|
|
||||||
Annealed Lode Bar=Barra de Veio Mineral Recozida
|
|
||||||
Annealed Lode Hatchet=Machado de Veio Mineral Recozida
|
|
||||||
Annealed Lode Hatchet Head=Cabeça de Machado de Veio Mineral Recozida
|
|
||||||
Annealed Lode Mallet=Marreta de Veio Mineral Recozida
|
|
||||||
Annealed Lode Mallet Head=Cabeça de Marreta de Veio Mineral Recozida
|
|
||||||
Annealed Lode Mattock=Enxada de Veio Mineral Recozida
|
|
||||||
Annealed Lode Mattock Head=Cabeça de Enxada de Veio Mineral Recozida
|
|
||||||
Annealed Lode Pick=Picareta de Veio Mineral Recozida
|
|
||||||
Annealed Lode Pick Head=Cabeça de Picareta de Veio Mineral Recozida
|
|
||||||
Annealed Lode Prill=Lascas de Veio Mineral Recozida
|
|
||||||
Annealed Lode Rod=Vara de Veio Mineral Recozida
|
|
||||||
Annealed Lode Spade=Pá de Veio Mineral Recozida
|
|
||||||
Annealed Lode Spade Head=Cabeça de Pá de Veio Mineral Recozida
|
|
||||||
Ash=Cinza
|
|
||||||
Ash Lump=Nódulo de Cinzas
|
|
||||||
Burning Embers=Brasa Quente
|
|
||||||
Charcoal=Carvão Vegetal
|
|
||||||
Charcoal Lump=Nódulo de Carvão Vegetal
|
|
||||||
Chromatic Glass=Vidro Cromático
|
|
||||||
Clear Glass=Vidro Transparente
|
|
||||||
Cobble=Pedregulho
|
|
||||||
Cobble Hinged Panel=Painel de Pedregulho Articulado
|
|
||||||
Cobble Panel=Painel de Pedregulho
|
|
||||||
Crude Glass=Vidro Bruto
|
|
||||||
DEVELOPMENT VERSION=VERSÃO EM DESENVOLVIMENTO
|
|
||||||
Dirt=Terra
|
|
||||||
Eggcorn=Semente de Carvalho
|
|
||||||
Fire=Fogo
|
|
||||||
Float Glass=Vidro Float
|
|
||||||
Glowing Lode=Veio Mineral Incandescente
|
|
||||||
Glowing Lode Bar=Barra de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Hatchet=Machado de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Hatchet Head=Cabeça de Machado Veio Mineral Incandescente
|
|
||||||
Glowing Lode Mallet=Marreta de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Mallet Head=Cabeça de Marreta Veio Mineral Incandescente
|
|
||||||
Glowing Lode Mattock=Enxada de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Mattock Head=Cabeça de Enxada Veio Mineral Incandescente
|
|
||||||
Glowing Lode Pick=Picareta de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Pick Head=Cabeça de Picareta de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Prill=Lascas de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Rod=Vara de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Spade=Pá de Veio Mineral Incandescente
|
|
||||||
Glowing Lode Spade Head=Cabeça de Pá Veio Mineral Incandescente
|
|
||||||
Grass=Grama
|
|
||||||
Gravel=Cascalho
|
|
||||||
Hints=Dicas
|
|
||||||
Ignore=Ignorar
|
|
||||||
Injury=Ferir
|
|
||||||
Inventory=Inventário
|
|
||||||
Leaves=Folhas
|
|
||||||
Lens=Lente
|
|
||||||
Living Sponge=Esponja Viva
|
|
||||||
Lode Cobble=Veio de Pedregulho
|
|
||||||
Lode Ore=Veio Mineral
|
|
||||||
Loose Cobble=Pedregulho Solta
|
|
||||||
Loose Dirt=Terra Solta
|
|
||||||
Loose Gravel=Cascalho Solto
|
|
||||||
Loose Leaves=Folhas Soltas
|
|
||||||
Loose Lode Cobble=Veio de Pedregulho Solto
|
|
||||||
Loose Sand=Areia Solta
|
|
||||||
Molten Glass=Vidro Derretido
|
|
||||||
Molten Rock=Pedra Derretida
|
|
||||||
Player's Guide: Inventory Management=Guia do Jogador: Gerenciamento de Inventário
|
|
||||||
Player's Guide: Pummeling Recipes=Guia do Jogador: Receitas por Esmurrada
|
|
||||||
Prism=Prisma
|
|
||||||
Progress: @1 complete, @2 current, @3 future=Progresso: @1 completo(s), @2 atual(is), @3 futuro(s)
|
|
||||||
Pummel=Esmurrar
|
|
||||||
Sand=Areia
|
|
||||||
See included LICENSE file for full details and credits=Veja o arquivo de LICENSA incluso para créditos e maiores detalhes
|
|
||||||
Shining Lens=Lente Brilhante
|
|
||||||
Sponge=Esponja
|
|
||||||
Staff=Bastão
|
|
||||||
Stick=Graveto
|
|
||||||
Stone=Pedra
|
|
||||||
Stone Chip=Pedaço de Pedra
|
|
||||||
Stone-Tipped Hatchet=Machado com Ponta de Pedra
|
|
||||||
Stone-Tipped Mallet=Marreta com Ponta de Pedra
|
|
||||||
Stone-Tipped Pick=Picareta com Ponta de Pedra
|
|
||||||
Stone-Tipped Spade=Pá com Ponta de Pedra
|
|
||||||
Stump=Toco
|
|
||||||
Tempered Lode=Veio Mineral Temperado
|
|
||||||
Tempered Lode Bar=Barra de Veio Mineral Temperado
|
|
||||||
Tempered Lode Hatchet=Machado de Veio Mineral Temperado
|
|
||||||
Tempered Lode Hatchet Head=Cabeça de Machado de Veio Mineral Temperado
|
|
||||||
Tempered Lode Mallet=Marreta de Veio Mineral Temperado
|
|
||||||
Tempered Lode Mallet Head=Cabeça de Marreta de Veio Mineral Temperado
|
|
||||||
Tempered Lode Mattock=Enxada de Veio Mineral Temperado
|
|
||||||
Tempered Lode Mattock Head=Cabeça de Enxada de Veio Mineral Temperado
|
|
||||||
Tempered Lode Pick=Picareta de Veio Mineral Temperado
|
|
||||||
Tempered Lode Pick Head=Cabeça de Picareta de Veio Mineral Temperado
|
|
||||||
Tempered Lode Prill=Lascas de Veio Mineral Temperado
|
|
||||||
Tempered Lode Rod=Vara de Veio Mineral Temperado
|
|
||||||
Tempered Lode Spade=Pá de Veio Mineral Temperado
|
|
||||||
Tempered Lode Spade Head=Cabeça de Enxada de Veio Mineral Temperado
|
|
||||||
Tote (1 Slot)=Bolsa (1 Compartimento)
|
|
||||||
Tote (2 Slots)=Bolsa (2 Compartimentos)
|
|
||||||
Tote (3 Slots)=Bolsa (3 Compartimentos)
|
|
||||||
Tote (4 Slots)=Bolsa (4 Compartimentos)
|
|
||||||
Tote (5 Slots)=Bolsa (5 Compartimentos)
|
|
||||||
Tote (6 Slots)=Bolsa (6 Compartimentos)
|
|
||||||
Tote (7 Slots)=Bolsa (7 Compartimentos)
|
|
||||||
Tote (8 Slots)=Bolsa (8 Compartimentos)
|
|
||||||
Tote Handle=Alça de Bolsa
|
|
||||||
Tree Trunk=Tronco de Árvore
|
|
||||||
Unknown Item=Item Desconhecido
|
|
||||||
Water=Água
|
|
||||||
Wet Aggregate=Massa Úmida
|
|
||||||
Wet Sponge=Esponja Molhada
|
|
||||||
Wooden Adze=Enxó de Madeira
|
|
||||||
Wooden Frame=Estrutura de Madeira
|
|
||||||
Wooden Hatchet=Machado de Madeira
|
|
||||||
Wooden Hatchet Head=Cabeça de Machado de Madeira
|
|
||||||
Wooden Hinged Panel=Painel Articulado de Madeira
|
|
||||||
Wooden Ladder=Escada de Madeira
|
|
||||||
Wooden Mallet=Marreta de Madeira
|
|
||||||
Wooden Mallet Head=Cabeça de Marreta de Madeira
|
|
||||||
Wooden Panel=Painel de Madeira
|
|
||||||
Wooden Pick=Picareta de Madeira
|
|
||||||
Wooden Pick Head=Cabeça de Picareta de Madeira
|
|
||||||
Wooden Plank=Tábua de Madeira
|
|
||||||
Wooden Shelf=Estante de Madeira
|
|
||||||
Wooden Spade=Pá de Madeira
|
|
||||||
Wooden Spade Head=Cabeça de Pá de Madeira
|
|
|
@ -1,2 +0,0 @@
|
||||||
update:
|
|
||||||
cd .. && perl -w src/update.pl
|
|
|
@ -1,771 +0,0 @@
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2019-10-04 22:56+0000\n"
|
|
||||||
"PO-Revision-Date: 2019-10-04 22:56+0000\n"
|
|
||||||
"Last-Translator: Weblate Admin <warr1024@gmail.com>\n"
|
|
||||||
"Language-Team: English <http://nodecore.mine.nu/trans/projects/nodecore/core/"
|
|
||||||
"en/>\n"
|
|
||||||
"Language: en\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
|
||||||
"X-Generator: Weblate 3.8\n"
|
|
||||||
|
|
||||||
msgid "(C)2018-2019 by Aaron Suen <warr1024@@gmail.com>"
|
|
||||||
msgstr "(C)2018-2019 by Aaron Suen <warr1024@@gmail.com>"
|
|
||||||
|
|
||||||
msgid "(and 1 more hint)"
|
|
||||||
msgstr "(and 1 more hint)"
|
|
||||||
|
|
||||||
msgid "(and @1 more hints)"
|
|
||||||
msgstr "(and @1 more hints)"
|
|
||||||
|
|
||||||
msgid "- "Furnaces" are not a thing; discover smelting with open flames."
|
|
||||||
msgstr "- "Furnaces" are not a thing; discover smelting with open flames."
|
|
||||||
|
|
||||||
msgid "- "Torches" are not a thing; use fire as your first light source."
|
|
||||||
msgstr "[REMOVED]"
|
|
||||||
|
|
||||||
msgid "- @1"
|
|
||||||
msgstr "- @1"
|
|
||||||
|
|
||||||
msgid "- Can't dig trees or grass? Search for sticks in the canopy."
|
|
||||||
msgstr "- Can't dig trees or grass? Search for sticks in the canopy."
|
|
||||||
|
|
||||||
msgid "- Crafting is done by building recipes in-world."
|
|
||||||
msgstr "- Crafting is done by building recipes in-world."
|
|
||||||
|
|
||||||
msgid "- DONE: @1"
|
|
||||||
msgstr "- DONE: @1"
|
|
||||||
|
|
||||||
msgid "- Drop items onto ground to create stack nodes. They do not decay."
|
|
||||||
msgstr "- Drop items onto ground to create stack nodes. They do not decay."
|
|
||||||
|
|
||||||
msgid "- If a recipe exists, you will see a special particle effect."
|
|
||||||
msgstr "- If a recipe exists, you will see a special particle effect."
|
|
||||||
|
|
||||||
msgid "- Items picked up try to fit into the current selected slot first."
|
|
||||||
msgstr "- Items picked up try to fit into the current selected slot first."
|
|
||||||
|
|
||||||
msgid "- Order and specific face of placement may matter for crafting."
|
|
||||||
msgstr "- Order and specific face of placement may matter for crafting."
|
|
||||||
|
|
||||||
msgid "- Ores may be hidden, but revealed by subtle clues in terrain."
|
|
||||||
msgstr "- Ores may be hidden, but revealed by subtle clues in terrain."
|
|
||||||
|
|
||||||
msgid "- Recipes are time-based, punching faster does not speed up."
|
|
||||||
msgstr "- Recipes are time-based, punching faster does not speed up."
|
|
||||||
|
|
||||||
msgid "- Sneak+drop to count out single items from stack."
|
|
||||||
msgstr "- Sneak+drop to count out single items from stack."
|
|
||||||
|
|
||||||
msgid "- Some recipes require "pummeling" a node."
|
|
||||||
msgstr "- Some recipes require "pummeling" a node."
|
|
||||||
|
|
||||||
msgid "- Stacks may be pummeled, exact item count may matter."
|
|
||||||
msgstr "- Stacks may be pummeled, exact item count may matter."
|
|
||||||
|
|
||||||
msgid "- Stuck in a pit? Pummel surfaces barehanded to find places to climb."
|
|
||||||
msgstr "- Stuck in a pit? Pummel surfaces barehanded to find places to climb."
|
|
||||||
|
|
||||||
msgid "- The game is challenging by design, sometimes frustrating. DON'T GIVE UP!"
|
|
||||||
msgstr "- The game is challenging by design, sometimes frustrating. DON'T GIVE UP!"
|
|
||||||
|
|
||||||
msgid "- There is NO inventory screen."
|
|
||||||
msgstr "- There is NO inventory screen."
|
|
||||||
|
|
||||||
msgid "- To pummel, punch a node repeatedly, WITHOUT digging."
|
|
||||||
msgstr "- To pummel, punch a node repeatedly, WITHOUT digging."
|
|
||||||
|
|
||||||
msgid "- Trouble lighting a fire? Try using longer sticks, more tinder."
|
|
||||||
msgstr "- Trouble lighting a fire? Try using longer sticks, more tinder."
|
|
||||||
|
|
||||||
msgid "- Wielded item, target face, and surrounding nodes may matter."
|
|
||||||
msgstr "- Wielded item, target face, and surrounding nodes may matter."
|
|
||||||
|
|
||||||
msgid "- You do not have to punch very fast (about 1 per second)."
|
|
||||||
msgstr "- You do not have to punch very fast (about 1 per second)."
|
|
||||||
|
|
||||||
msgid "About"
|
|
||||||
msgstr "About"
|
|
||||||
|
|
||||||
msgid "Active Lens"
|
|
||||||
msgstr "Active Lens"
|
|
||||||
|
|
||||||
msgid "Active Prism"
|
|
||||||
msgstr "Active Prism"
|
|
||||||
|
|
||||||
msgid "Aggregate"
|
|
||||||
msgstr "Aggregate"
|
|
||||||
|
|
||||||
msgid "Air"
|
|
||||||
msgstr "Air"
|
|
||||||
|
|
||||||
msgid "Annealed Lode"
|
|
||||||
msgstr "Annealed Lode"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Bar"
|
|
||||||
msgstr "Annealed Lode Bar"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Hatchet"
|
|
||||||
msgstr "Annealed Lode Hatchet"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Hatchet Head"
|
|
||||||
msgstr "Annealed Lode Hatchet Head"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mallet"
|
|
||||||
msgstr "Annealed Lode Mallet"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mallet Head"
|
|
||||||
msgstr "Annealed Lode Mallet Head"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mattock"
|
|
||||||
msgstr "Annealed Lode Mattock"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mattock Head"
|
|
||||||
msgstr "Annealed Lode Mattock Head"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Pick"
|
|
||||||
msgstr "Annealed Lode Pick"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Pick Head"
|
|
||||||
msgstr "Annealed Lode Pick Head"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Prill"
|
|
||||||
msgstr "Annealed Lode Prill"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Rod"
|
|
||||||
msgstr "Annealed Lode Rod"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Spade"
|
|
||||||
msgstr "Annealed Lode Spade"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Spade Head"
|
|
||||||
msgstr "Annealed Lode Spade Head"
|
|
||||||
|
|
||||||
msgid "Ash"
|
|
||||||
msgstr "Ash"
|
|
||||||
|
|
||||||
msgid "Ash Lump"
|
|
||||||
msgstr "Ash Lump"
|
|
||||||
|
|
||||||
msgid "Burning Embers"
|
|
||||||
msgstr "Burning Embers"
|
|
||||||
|
|
||||||
msgid "Charcoal"
|
|
||||||
msgstr "Charcoal"
|
|
||||||
|
|
||||||
msgid "Charcoal Lump"
|
|
||||||
msgstr "Charcoal Lump"
|
|
||||||
|
|
||||||
msgid "Chromatic Glass"
|
|
||||||
msgstr "Chromatic Glass"
|
|
||||||
|
|
||||||
msgid "Clear Glass"
|
|
||||||
msgstr "Clear Glass"
|
|
||||||
|
|
||||||
msgid "Cobble"
|
|
||||||
msgstr "Cobble"
|
|
||||||
|
|
||||||
msgid "Cobble Hinged Panel"
|
|
||||||
msgstr "Cobble Hinged Panel"
|
|
||||||
|
|
||||||
msgid "Cobble Panel"
|
|
||||||
msgstr "Cobble Panel"
|
|
||||||
|
|
||||||
msgid "Crude Glass"
|
|
||||||
msgstr "Crude Glass"
|
|
||||||
|
|
||||||
msgid "DEVELOPMENT VERSION"
|
|
||||||
msgstr "DEVELOPMENT VERSION"
|
|
||||||
|
|
||||||
msgid "Dirt"
|
|
||||||
msgstr "Dirt"
|
|
||||||
|
|
||||||
msgid "Discord: https://discord.gg/SHq2tkb"
|
|
||||||
msgstr "Discord: https://discord.gg/SHq2tkb"
|
|
||||||
|
|
||||||
msgid "Eggcorn"
|
|
||||||
msgstr "Eggcorn"
|
|
||||||
|
|
||||||
msgid "Fire"
|
|
||||||
msgstr "Fire"
|
|
||||||
|
|
||||||
msgid "Float Glass"
|
|
||||||
msgstr "Float Glass"
|
|
||||||
|
|
||||||
msgid "GitLab: https://gitlab.com/sztest/nodecore"
|
|
||||||
msgstr "GitLab: https://gitlab.com/sztest/nodecore"
|
|
||||||
|
|
||||||
msgid "Glowing Lode"
|
|
||||||
msgstr "Glowing Lode"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Bar"
|
|
||||||
msgstr "Glowing Lode Bar"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Hatchet"
|
|
||||||
msgstr "Glowing Lode Hatchet"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Hatchet Head"
|
|
||||||
msgstr "Glowing Lode Hatchet Head"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mallet"
|
|
||||||
msgstr "Glowing Lode Mallet"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mallet Head"
|
|
||||||
msgstr "Glowing Lode Mallet Head"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mattock"
|
|
||||||
msgstr "Glowing Lode Mattock"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mattock Head"
|
|
||||||
msgstr "Glowing Lode Mattock Head"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Pick"
|
|
||||||
msgstr "Glowing Lode Pick"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Pick Head"
|
|
||||||
msgstr "Glowing Lode Pick Head"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Prill"
|
|
||||||
msgstr "Glowing Lode Prill"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Rod"
|
|
||||||
msgstr "Glowing Lode Rod"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Spade"
|
|
||||||
msgstr "Glowing Lode Spade"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Spade Head"
|
|
||||||
msgstr "Glowing Lode Spade Head"
|
|
||||||
|
|
||||||
msgid "Grass"
|
|
||||||
msgstr "Grass"
|
|
||||||
|
|
||||||
msgid "Gravel"
|
|
||||||
msgstr "Gravel"
|
|
||||||
|
|
||||||
msgid "Hints"
|
|
||||||
msgstr "Hints"
|
|
||||||
|
|
||||||
msgid "Ignore"
|
|
||||||
msgstr "Ignore"
|
|
||||||
|
|
||||||
msgid "Infused Annealed Lode Hatchet"
|
|
||||||
msgstr "Infused Annealed Lode Hatchet"
|
|
||||||
|
|
||||||
msgid "Infused Annealed Lode Mallet"
|
|
||||||
msgstr "Infused Annealed Lode Mallet"
|
|
||||||
|
|
||||||
msgid "Infused Annealed Lode Mattock"
|
|
||||||
msgstr "Infused Annealed Lode Mattock"
|
|
||||||
|
|
||||||
msgid "Infused Annealed Lode Pick"
|
|
||||||
msgstr "Infused Annealed Lode Pick"
|
|
||||||
|
|
||||||
msgid "Infused Annealed Lode Spade"
|
|
||||||
msgstr "Infused Annealed Lode Spade"
|
|
||||||
|
|
||||||
msgid "Infused Tempered Lode Hatchet"
|
|
||||||
msgstr "Infused Tempered Lode Hatchet"
|
|
||||||
|
|
||||||
msgid "Infused Tempered Lode Mallet"
|
|
||||||
msgstr "Infused Tempered Lode Mallet"
|
|
||||||
|
|
||||||
msgid "Infused Tempered Lode Mattock"
|
|
||||||
msgstr "Infused Tempered Lode Mattock"
|
|
||||||
|
|
||||||
msgid "Infused Tempered Lode Pick"
|
|
||||||
msgstr "Infused Tempered Lode Pick"
|
|
||||||
|
|
||||||
msgid "Infused Tempered Lode Spade"
|
|
||||||
msgstr "Infused Tempered Lode Spade"
|
|
||||||
|
|
||||||
msgid "Injury"
|
|
||||||
msgstr "Injury"
|
|
||||||
|
|
||||||
msgid "Inventory"
|
|
||||||
msgstr "Inventory"
|
|
||||||
|
|
||||||
msgid "Leaves"
|
|
||||||
msgstr "Leaves"
|
|
||||||
|
|
||||||
msgid "Lens"
|
|
||||||
msgstr "Lens"
|
|
||||||
|
|
||||||
msgid "Living Sponge"
|
|
||||||
msgstr "Living Sponge"
|
|
||||||
|
|
||||||
msgid "Lode Cobble"
|
|
||||||
msgstr "Lode Cobble"
|
|
||||||
|
|
||||||
msgid "Lode Crate"
|
|
||||||
msgstr "Lode Crate"
|
|
||||||
|
|
||||||
msgid "Lode Ore"
|
|
||||||
msgstr "Lode Ore"
|
|
||||||
|
|
||||||
msgid "Loose Cobble"
|
|
||||||
msgstr "Loose Cobble"
|
|
||||||
|
|
||||||
msgid "Loose Dirt"
|
|
||||||
msgstr "Loose Dirt"
|
|
||||||
|
|
||||||
msgid "Loose Gravel"
|
|
||||||
msgstr "Loose Gravel"
|
|
||||||
|
|
||||||
msgid "Loose Leaves"
|
|
||||||
msgstr "Loose Leaves"
|
|
||||||
|
|
||||||
msgid "Loose Lode Cobble"
|
|
||||||
msgstr "Loose Lode Cobble"
|
|
||||||
|
|
||||||
msgid "Loose Lux Cobble"
|
|
||||||
msgstr "Loose Lux Cobble"
|
|
||||||
|
|
||||||
msgid "Loose Sand"
|
|
||||||
msgstr "Loose Sand"
|
|
||||||
|
|
||||||
msgid "Lux Cobble"
|
|
||||||
msgstr "Lux Cobble"
|
|
||||||
|
|
||||||
msgid "Lux Flow"
|
|
||||||
msgstr "Lux Flow"
|
|
||||||
|
|
||||||
msgid "MIT License (http://www.opensource.org/licenses/MIT)"
|
|
||||||
msgstr "MIT License (http://www.opensource.org/licenses/MIT)"
|
|
||||||
|
|
||||||
msgid "Molten Glass"
|
|
||||||
msgstr "Molten Glass"
|
|
||||||
|
|
||||||
msgid "Molten Rock"
|
|
||||||
msgstr "Molten Rock"
|
|
||||||
|
|
||||||
msgid "NodeCore"
|
|
||||||
msgstr "NodeCore"
|
|
||||||
|
|
||||||
msgid "Not all game content is covered by hints. Explore!"
|
|
||||||
msgstr "Not all game content is covered by hints. Explore!"
|
|
||||||
|
|
||||||
msgid "Player's Guide: Inventory Management"
|
|
||||||
msgstr "Player's Guide: Inventory Management"
|
|
||||||
|
|
||||||
msgid "Player's Guide: Pummeling Recipes"
|
|
||||||
msgstr "Player's Guide: Pummeling Recipes"
|
|
||||||
|
|
||||||
msgid "Player's Guide: Tips and Guidance"
|
|
||||||
msgstr "Player's Guide: Tips and Guidance"
|
|
||||||
|
|
||||||
msgid "Prism"
|
|
||||||
msgstr "Prism"
|
|
||||||
|
|
||||||
msgid "Progress: @1 complete, @2 current, @3 future"
|
|
||||||
msgstr "Progress: @1 complete, @2 current, @3 future"
|
|
||||||
|
|
||||||
msgid "Pummel"
|
|
||||||
msgstr "Pummel"
|
|
||||||
|
|
||||||
msgid "Sand"
|
|
||||||
msgstr "Sand"
|
|
||||||
|
|
||||||
msgid "See included LICENSE file for full details and credits"
|
|
||||||
msgstr "See included LICENSE file for full details and credits"
|
|
||||||
|
|
||||||
msgid "Shining Lens"
|
|
||||||
msgstr "Shining Lens"
|
|
||||||
|
|
||||||
msgid "Sponge"
|
|
||||||
msgstr "Sponge"
|
|
||||||
|
|
||||||
msgid "Staff"
|
|
||||||
msgstr "Staff"
|
|
||||||
|
|
||||||
msgid "Stick"
|
|
||||||
msgstr "Stick"
|
|
||||||
|
|
||||||
msgid "Stone"
|
|
||||||
msgstr "Stone"
|
|
||||||
|
|
||||||
msgid "Stone Chip"
|
|
||||||
msgstr "Stone Chip"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Hatchet"
|
|
||||||
msgstr "Stone-Tipped Hatchet"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Mallet"
|
|
||||||
msgstr "Stone-Tipped Mallet"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Pick"
|
|
||||||
msgstr "Stone-Tipped Pick"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Spade"
|
|
||||||
msgstr "Stone-Tipped Spade"
|
|
||||||
|
|
||||||
msgid "Stump"
|
|
||||||
msgstr "Stump"
|
|
||||||
|
|
||||||
msgid "Tempered Lode"
|
|
||||||
msgstr "Tempered Lode"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Bar"
|
|
||||||
msgstr "Tempered Lode Bar"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Hatchet"
|
|
||||||
msgstr "Tempered Lode Hatchet"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Hatchet Head"
|
|
||||||
msgstr "Tempered Lode Hatchet Head"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mallet"
|
|
||||||
msgstr "Tempered Lode Mallet"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mallet Head"
|
|
||||||
msgstr "Tempered Lode Mallet Head"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mattock"
|
|
||||||
msgstr "Tempered Lode Mattock"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mattock Head"
|
|
||||||
msgstr "Tempered Lode Mattock Head"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Pick"
|
|
||||||
msgstr "Tempered Lode Pick"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Pick Head"
|
|
||||||
msgstr "Tempered Lode Pick Head"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Prill"
|
|
||||||
msgstr "Tempered Lode Prill"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Rod"
|
|
||||||
msgstr "Tempered Lode Rod"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Spade"
|
|
||||||
msgstr "Tempered Lode Spade"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Spade Head"
|
|
||||||
msgstr "Tempered Lode Spade Head"
|
|
||||||
|
|
||||||
msgid "Tips"
|
|
||||||
msgstr "Tips"
|
|
||||||
|
|
||||||
msgid "Tote (1 Slot)"
|
|
||||||
msgstr "Tote (1 Slot)"
|
|
||||||
|
|
||||||
msgid "Tote (2 Slots)"
|
|
||||||
msgstr "Tote (2 Slots)"
|
|
||||||
|
|
||||||
msgid "Tote (3 Slots)"
|
|
||||||
msgstr "Tote (3 Slots)"
|
|
||||||
|
|
||||||
msgid "Tote (4 Slots)"
|
|
||||||
msgstr "Tote (4 Slots)"
|
|
||||||
|
|
||||||
msgid "Tote (5 Slots)"
|
|
||||||
msgstr "Tote (5 Slots)"
|
|
||||||
|
|
||||||
msgid "Tote (6 Slots)"
|
|
||||||
msgstr "Tote (6 Slots)"
|
|
||||||
|
|
||||||
msgid "Tote (7 Slots)"
|
|
||||||
msgstr "Tote (7 Slots)"
|
|
||||||
|
|
||||||
msgid "Tote (8 Slots)"
|
|
||||||
msgstr "Tote (8 Slots)"
|
|
||||||
|
|
||||||
msgid "Tote Handle"
|
|
||||||
msgstr "Tote Handle"
|
|
||||||
|
|
||||||
msgid "Tree Trunk"
|
|
||||||
msgstr "Tree Trunk"
|
|
||||||
|
|
||||||
msgid "Unknown Item"
|
|
||||||
msgstr "Unknown Item"
|
|
||||||
|
|
||||||
msgid "Water"
|
|
||||||
msgstr "Water"
|
|
||||||
|
|
||||||
msgid "Wet Aggregate"
|
|
||||||
msgstr "Wet Aggregate"
|
|
||||||
|
|
||||||
msgid "Wet Sponge"
|
|
||||||
msgstr "Wet Sponge"
|
|
||||||
|
|
||||||
msgid "Wooden Adze"
|
|
||||||
msgstr "Wooden Adze"
|
|
||||||
|
|
||||||
msgid "Wooden Frame"
|
|
||||||
msgstr "Wooden Frame"
|
|
||||||
|
|
||||||
msgid "Wooden Hatchet"
|
|
||||||
msgstr "Wooden Hatchet"
|
|
||||||
|
|
||||||
msgid "Wooden Hatchet Head"
|
|
||||||
msgstr "Wooden Hatchet Head"
|
|
||||||
|
|
||||||
msgid "Wooden Hinged Panel"
|
|
||||||
msgstr "Wooden Hinged Panel"
|
|
||||||
|
|
||||||
msgid "Wooden Ladder"
|
|
||||||
msgstr "Wooden Ladder"
|
|
||||||
|
|
||||||
msgid "Wooden Mallet"
|
|
||||||
msgstr "Wooden Mallet"
|
|
||||||
|
|
||||||
msgid "Wooden Mallet Head"
|
|
||||||
msgstr "Wooden Mallet Head"
|
|
||||||
|
|
||||||
msgid "Wooden Panel"
|
|
||||||
msgstr "Wooden Panel"
|
|
||||||
|
|
||||||
msgid "Wooden Pick"
|
|
||||||
msgstr "Wooden Pick"
|
|
||||||
|
|
||||||
msgid "Wooden Pick Head"
|
|
||||||
msgstr "Wooden Pick Head"
|
|
||||||
|
|
||||||
msgid "Wooden Plank"
|
|
||||||
msgstr "Wooden Plank"
|
|
||||||
|
|
||||||
msgid "Wooden Shelf"
|
|
||||||
msgstr "Wooden Shelf"
|
|
||||||
|
|
||||||
msgid "Wooden Spade"
|
|
||||||
msgstr "Wooden Spade"
|
|
||||||
|
|
||||||
msgid "Wooden Spade Head"
|
|
||||||
msgstr "Wooden Spade Head"
|
|
||||||
|
|
||||||
msgid "activate a lens"
|
|
||||||
msgstr "activate a lens"
|
|
||||||
|
|
||||||
msgid "assemble a staff from sticks"
|
|
||||||
msgstr "assemble a staff from sticks"
|
|
||||||
|
|
||||||
msgid "assemble a wooden frame from staves"
|
|
||||||
msgstr "assemble a wooden frame from staves"
|
|
||||||
|
|
||||||
msgid "assemble a wooden ladder from sticks"
|
|
||||||
msgstr "assemble a wooden ladder from sticks"
|
|
||||||
|
|
||||||
msgid "assemble a wooden shelf from frames and planks"
|
|
||||||
msgstr "assemble a wooden shelf from frames and planks"
|
|
||||||
|
|
||||||
msgid "assemble a wooden tool"
|
|
||||||
msgstr "assemble a wooden tool"
|
|
||||||
|
|
||||||
msgid "assemble an adze out of sticks"
|
|
||||||
msgstr "assemble an adze out of sticks"
|
|
||||||
|
|
||||||
msgid "assemble an annealed lode tote handle"
|
|
||||||
msgstr "assemble an annealed lode tote handle"
|
|
||||||
|
|
||||||
msgid "bash a plank into sticks"
|
|
||||||
msgstr "bash a plank into sticks"
|
|
||||||
|
|
||||||
msgid "break cobble into chips"
|
|
||||||
msgstr "break cobble into chips"
|
|
||||||
|
|
||||||
msgid "carve a wooden plank completely"
|
|
||||||
msgstr "carve a wooden plank completely"
|
|
||||||
|
|
||||||
msgid "carve wooden tool heads from planks"
|
|
||||||
msgstr "carve wooden tool heads from planks"
|
|
||||||
|
|
||||||
msgid "chip chromatic glass into prisms"
|
|
||||||
msgstr "chip chromatic glass into prisms"
|
|
||||||
|
|
||||||
msgid "chisel a hinge groove into a wooden plank"
|
|
||||||
msgstr "chisel a hinge groove into a wooden plank"
|
|
||||||
|
|
||||||
msgid "chisel a hinge groove into cobble"
|
|
||||||
msgstr "chisel a hinge groove into cobble"
|
|
||||||
|
|
||||||
msgid "chop a glowing lode cube into prills"
|
|
||||||
msgstr "chop a glowing lode cube into prills"
|
|
||||||
|
|
||||||
msgid "chop a lode crate back apart"
|
|
||||||
msgstr "chop a lode crate back apart"
|
|
||||||
|
|
||||||
msgid "chop chromatic glass into lenses"
|
|
||||||
msgstr "chop chromatic glass into lenses"
|
|
||||||
|
|
||||||
msgid "chop lode a rod back into bars"
|
|
||||||
msgstr "chop lode a rod back into bars"
|
|
||||||
|
|
||||||
msgid "chop up charcoal"
|
|
||||||
msgstr "chop up charcoal"
|
|
||||||
|
|
||||||
msgid "cold-forge annealed lode prills into a tool head"
|
|
||||||
msgstr "cold-forge annealed lode prills into a tool head"
|
|
||||||
|
|
||||||
msgid "cold-forge lode down completely"
|
|
||||||
msgstr "cold-forge lode down completely"
|
|
||||||
|
|
||||||
msgid "cool molten glass into crude glass"
|
|
||||||
msgstr "cool molten glass into crude glass"
|
|
||||||
|
|
||||||
msgid "cut down a tree"
|
|
||||||
msgstr "cut down a tree"
|
|
||||||
|
|
||||||
msgid "dig up a tree stump"
|
|
||||||
msgstr "dig up a tree stump"
|
|
||||||
|
|
||||||
msgid "dig up dirt"
|
|
||||||
msgstr "dig up dirt"
|
|
||||||
|
|
||||||
msgid "dig up gravel"
|
|
||||||
msgstr "dig up gravel"
|
|
||||||
|
|
||||||
msgid "dig up lode ore"
|
|
||||||
msgstr "dig up lode ore"
|
|
||||||
|
|
||||||
msgid "dig up lux cobble"
|
|
||||||
msgstr "dig up lux cobble"
|
|
||||||
|
|
||||||
msgid "dig up sand"
|
|
||||||
msgstr "dig up sand"
|
|
||||||
|
|
||||||
msgid "dig up stone"
|
|
||||||
msgstr "dig up stone"
|
|
||||||
|
|
||||||
msgid "dry out a sponge"
|
|
||||||
msgstr "dry out a sponge"
|
|
||||||
|
|
||||||
msgid "find a lode stratum"
|
|
||||||
msgstr "find a lode stratum"
|
|
||||||
|
|
||||||
msgid "find a sponge"
|
|
||||||
msgstr "find a sponge"
|
|
||||||
|
|
||||||
msgid "find a stick"
|
|
||||||
msgstr "find a stick"
|
|
||||||
|
|
||||||
msgid "find an eggcorn"
|
|
||||||
msgstr "find an eggcorn"
|
|
||||||
|
|
||||||
msgid "find ash"
|
|
||||||
msgstr "find ash"
|
|
||||||
|
|
||||||
msgid "find charcoal"
|
|
||||||
msgstr "find charcoal"
|
|
||||||
|
|
||||||
msgid "find deep stone strata"
|
|
||||||
msgstr "find deep stone strata"
|
|
||||||
|
|
||||||
msgid "find dry (loose) leaves"
|
|
||||||
msgstr "find dry (loose) leaves"
|
|
||||||
|
|
||||||
msgid "find lode ore"
|
|
||||||
msgstr "find lode ore"
|
|
||||||
|
|
||||||
msgid "find lux"
|
|
||||||
msgstr "find lux"
|
|
||||||
|
|
||||||
msgid "find molten rock"
|
|
||||||
msgstr "find molten rock"
|
|
||||||
|
|
||||||
msgid "hammer a lode bar back to a prill"
|
|
||||||
msgstr "hammer a lode bar back to a prill"
|
|
||||||
|
|
||||||
msgid "hammer a lode prill into a bar"
|
|
||||||
msgstr "hammer a lode prill into a bar"
|
|
||||||
|
|
||||||
msgid "hammer a metal rod into a cobble panel"
|
|
||||||
msgstr "hammer a metal rod into a cobble panel"
|
|
||||||
|
|
||||||
msgid "hammer a staff into a lubricated wooden panel"
|
|
||||||
msgstr "hammer a staff into a lubricated wooden panel"
|
|
||||||
|
|
||||||
msgid "hammer lode bars into a rod"
|
|
||||||
msgstr "hammer lode bars into a rod"
|
|
||||||
|
|
||||||
msgid "harvest a sponge"
|
|
||||||
msgstr "harvest a sponge"
|
|
||||||
|
|
||||||
msgid "https://content.minetest.net/packages/Warr1024/nodecore/"
|
|
||||||
msgstr "https://content.minetest.net/packages/Warr1024/nodecore/"
|
|
||||||
|
|
||||||
msgid "lubricate a cobble panel with graphite"
|
|
||||||
msgstr "lubricate a cobble panel with graphite"
|
|
||||||
|
|
||||||
msgid "lubricate a wooden panel with graphite"
|
|
||||||
msgstr "lubricate a wooden panel with graphite"
|
|
||||||
|
|
||||||
msgid "lux-infuse a lode tool"
|
|
||||||
msgstr "lux-infuse a lode tool"
|
|
||||||
|
|
||||||
msgid "make an anvil by tempering a lode cube"
|
|
||||||
msgstr "make an anvil by tempering a lode cube"
|
|
||||||
|
|
||||||
msgid "make fire by rubbing sticks together"
|
|
||||||
msgstr "make fire by rubbing sticks together"
|
|
||||||
|
|
||||||
msgid "make wet aggregate"
|
|
||||||
msgstr "make wet aggregate"
|
|
||||||
|
|
||||||
msgid "melt down lode metal from lode cobble"
|
|
||||||
msgstr "melt down lode metal from lode cobble"
|
|
||||||
|
|
||||||
msgid "melt sand into glass"
|
|
||||||
msgstr "melt sand into glass"
|
|
||||||
|
|
||||||
msgid "mix gravel into ash to make aggregate"
|
|
||||||
msgstr "mix gravel into ash to make aggregate"
|
|
||||||
|
|
||||||
msgid "mold molten glass into clear glass"
|
|
||||||
msgstr "mold molten glass into clear glass"
|
|
||||||
|
|
||||||
msgid "mold molten glass into float glass"
|
|
||||||
msgstr "mold molten glass into float glass"
|
|
||||||
|
|
||||||
msgid "observe a lux reaction"
|
|
||||||
msgstr "observe a lux reaction"
|
|
||||||
|
|
||||||
msgid "observe lux criticality"
|
|
||||||
msgstr "observe lux criticality"
|
|
||||||
|
|
||||||
msgid "pack high-quality charcoal"
|
|
||||||
msgstr "pack high-quality charcoal"
|
|
||||||
|
|
||||||
msgid "pack stone chips back into cobble"
|
|
||||||
msgstr "pack stone chips back into cobble"
|
|
||||||
|
|
||||||
msgid "plant an eggcorn"
|
|
||||||
msgstr "plant an eggcorn"
|
|
||||||
|
|
||||||
msgid "produce light from a lens"
|
|
||||||
msgstr "produce light from a lens"
|
|
||||||
|
|
||||||
msgid "put a stone tip onto a wooden tool"
|
|
||||||
msgstr "put a stone tip onto a wooden tool"
|
|
||||||
|
|
||||||
msgid "quench molten glass into chromatic glass"
|
|
||||||
msgstr "quench molten glass into chromatic glass"
|
|
||||||
|
|
||||||
msgid "scale a sheer overhang"
|
|
||||||
msgstr "scale a sheer overhang"
|
|
||||||
|
|
||||||
msgid "scale a sheer wall"
|
|
||||||
msgstr "scale a sheer wall"
|
|
||||||
|
|
||||||
msgid "sinter glowing lode prills into a cube"
|
|
||||||
msgstr "sinter glowing lode prills into a cube"
|
|
||||||
|
|
||||||
msgid "solder lode rods into crates"
|
|
||||||
msgstr "solder lode rods into crates"
|
|
||||||
|
|
||||||
msgid "split a tree trunk into planks"
|
|
||||||
msgstr "split a tree trunk into planks"
|
|
||||||
|
|
||||||
msgid "squeeze out a sponge"
|
|
||||||
msgstr "squeeze out a sponge"
|
|
||||||
|
|
||||||
msgid "temper a lode tool head"
|
|
||||||
msgstr "temper a lode tool head"
|
|
||||||
|
|
||||||
msgid "weld glowing lode pick and spade heads together"
|
|
||||||
msgstr "weld glowing lode pick and spade heads together"
|
|
|
@ -1,2 +0,0 @@
|
||||||
msgid ""
|
|
||||||
msgstr "X-Generator: Weblate\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit"
|
|
|
@ -1,2 +0,0 @@
|
||||||
msgid ""
|
|
||||||
msgstr "X-Generator: Weblate\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit"
|
|
|
@ -1,21 +0,0 @@
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"PO-Revision-Date: 2019-10-04 22:59+0000\n"
|
|
||||||
"Last-Translator: Terifo <none@example.org>\n"
|
|
||||||
"Language-Team: Japanese <http://nodecore.mine.nu/trans/projects/nodecore/"
|
|
||||||
"core/ja/>\n"
|
|
||||||
"Language: ja\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
|
||||||
"X-Generator: Weblate 3.8\n"
|
|
||||||
|
|
||||||
msgid "(and @1 more hints)"
|
|
||||||
msgstr "(さらに@1つのヒント)"
|
|
||||||
|
|
||||||
msgid "(and 1 more hint)"
|
|
||||||
msgstr "(さらに1つのヒント)"
|
|
||||||
|
|
||||||
msgid "(C)2018-2019 by Aaron Suen <warr1024@@gmail.com>"
|
|
||||||
msgstr "(C)2018-2019 から Aaron Suen <warr1024@@gmail.com>"
|
|
|
@ -1,633 +0,0 @@
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2019-09-12 14:44+0000\n"
|
|
||||||
"PO-Revision-Date: 2019-10-04 22:56+0000\n"
|
|
||||||
"Last-Translator: Terifo <none@example.org>\n"
|
|
||||||
"Language-Team: Portuguese <http://nodecore.mine.nu/trans/projects/nodecore/"
|
|
||||||
"core/pt/>\n"
|
|
||||||
"Language: pt\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
|
||||||
"X-Generator: Weblate 3.8\n"
|
|
||||||
|
|
||||||
msgid "(C)2018-2019 by Aaron Suen <warr1024@@gmail.com>"
|
|
||||||
msgstr "(C)2018-2019 por Aaron Suen <war1024@@gmail.com>"
|
|
||||||
|
|
||||||
msgid "- Crafting is done by building recipes in-world."
|
|
||||||
msgstr "- A Criação de Itens é feita construindo as receitas pelo mundo."
|
|
||||||
|
|
||||||
msgid "- Drop items onto ground to create stack nodes. They do not decay."
|
|
||||||
msgstr "- Solte itens no chão para criar um node de itens amontoados. Eles não desaparecem."
|
|
||||||
|
|
||||||
msgid "- If a recipe exists, you will see a special particle effect."
|
|
||||||
msgstr "- Se uma receita existe, você verá um efeito especial de partícula sair do node."
|
|
||||||
|
|
||||||
msgid "- Items picked up try to fit into the current selected slot first."
|
|
||||||
msgstr "- Os itens pegados são primeiramente armazenados no espaço atualmente selecionado."
|
|
||||||
|
|
||||||
msgid "- Order and specific face of placement may matter for crafting."
|
|
||||||
msgstr "- A ordem e a face em que os itens são colocados pode importar no processo de criação."
|
|
||||||
|
|
||||||
msgid "- Recipes are time-based, punching faster does not speed up."
|
|
||||||
msgstr "- Receitas são cronometradas, bater mais forte não afetará a velocidade delas."
|
|
||||||
|
|
||||||
msgid "- Sneak+drop to count out single items from stack."
|
|
||||||
msgstr "- Use os comandos de agachar e soltar juntos para soltar um só item."
|
|
||||||
|
|
||||||
msgid "- Some recipes require "pummeling" a node."
|
|
||||||
msgstr "- Algumas receitas necessitam que você "esmurre" um node."
|
|
||||||
|
|
||||||
msgid "- Stacks may be pummeled, exact item count may matter."
|
|
||||||
msgstr "- Amontoados de itens podem ser esmurrados, pode ser que precise de uma quantidade exata do item."
|
|
||||||
|
|
||||||
msgid "- There is NO inventory screen."
|
|
||||||
msgstr "- NÃO EXISTE tela de inventário."
|
|
||||||
|
|
||||||
msgid "- To pummel, punch a node repeatedly, WITHOUT digging."
|
|
||||||
msgstr "- Para esmurrar, bata num node repetidamente, SEM QUEBRÁ-LO."
|
|
||||||
|
|
||||||
msgid "- Wielded item, target face, and surrounding nodes may matter."
|
|
||||||
msgstr "- O item segurado, a face do objeto alvo e os nodes ao redor podem importar durante a criação de algo."
|
|
||||||
|
|
||||||
msgid "- You do not have to punch very fast (about 1 per second)."
|
|
||||||
msgstr "- Você não precisa bater muito rápido(basta 1 batida por segundo)."
|
|
||||||
|
|
||||||
msgid "...and 1 more hint..."
|
|
||||||
msgstr "...e mais 1 dica..."
|
|
||||||
|
|
||||||
msgid "...and @1 more hints..."
|
|
||||||
msgstr "...e mais @1 dicas..."
|
|
||||||
|
|
||||||
msgid "...have you activated a lens yet?"
|
|
||||||
msgstr "...você já ativou uma lente?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a staff from sticks yet?"
|
|
||||||
msgstr "...você já montou um bastão usando gravetos?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a wooden frame yet?"
|
|
||||||
msgstr "...você já montou um estrutura de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a wooden ladder yet?"
|
|
||||||
msgstr "...você já montou uma escada de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a wooden shelf yet?"
|
|
||||||
msgstr "...você já montou uma estante de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a wooden tool yet?"
|
|
||||||
msgstr "...você já montou uma ferramenta de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you assembled an adze out of sticks yet?"
|
|
||||||
msgstr "...você já montou um enxó usando gravetos?"
|
|
||||||
|
|
||||||
msgid "...have you assembled an annealed lode tote handle yet?"
|
|
||||||
msgstr "...você já montou uma alça de bolsa recozida?"
|
|
||||||
|
|
||||||
msgid "...have you bashed a plank into sticks yet?"
|
|
||||||
msgstr "...você já quebrou uma tábua em gravetos batendo nela?"
|
|
||||||
|
|
||||||
msgid "...have you broken cobble into chips yet?"
|
|
||||||
msgstr "...você já quebrou pedregulho em pedaços?"
|
|
||||||
|
|
||||||
msgid "...have you carved a wooden plank completely yet?"
|
|
||||||
msgstr "...você já entalhou completamente uma tábua de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you carved wooden tool heads from planks yet?"
|
|
||||||
msgstr "...você já transformou uma tábua em cabeças de ferramentas, entalhando a madeira?"
|
|
||||||
|
|
||||||
msgid "...have you chipped chromatic glass into prisms yet?"
|
|
||||||
msgstr "...você já quebrou um vidro cromático em prismas, lascando o vidro?"
|
|
||||||
|
|
||||||
msgid "...have you chopped a lode cube into prills yet?"
|
|
||||||
msgstr "...você já quebrou um veio mineral em lascas, usando um machado?"
|
|
||||||
|
|
||||||
msgid "...have you chopped chromatic glass into lenses yet?"
|
|
||||||
msgstr "...você já quebrou vidro cromático em lentes, usando um machado?"
|
|
||||||
|
|
||||||
msgid "...have you chopped up charcoal yet?"
|
|
||||||
msgstr "...você já quebrou carvão usando um machado?"
|
|
||||||
|
|
||||||
msgid "...have you cold-forged an annealed lode tool head yet?"
|
|
||||||
msgstr "...você já fez uma forja fria de uma cabeça de ferramenta de veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you cold-forged lode down completely yet?"
|
|
||||||
msgstr "...você já fez uma forja fria de um veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you cooled molten glass into crude glass yet?"
|
|
||||||
msgstr "...você já esfriou vidro derretido para que este virasse vidro cru?"
|
|
||||||
|
|
||||||
msgid "...have you cut down a tree yet?"
|
|
||||||
msgstr "...você já cortou uma árvore?"
|
|
||||||
|
|
||||||
msgid "...have you dug up a tree stump yet?"
|
|
||||||
msgstr "...você já desenterrou um toco de árvore?"
|
|
||||||
|
|
||||||
msgid "...have you dug up dirt yet?"
|
|
||||||
msgstr "...você já cavou terra?"
|
|
||||||
|
|
||||||
msgid "...have you dug up gravel yet?"
|
|
||||||
msgstr "...você já cavou cascalho?"
|
|
||||||
|
|
||||||
msgid "...have you dug up lode ore yet?"
|
|
||||||
msgstr "...você já desenterrou um veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you dug up sand yet?"
|
|
||||||
msgstr "...você já cavou areia?"
|
|
||||||
|
|
||||||
msgid "...have you dug up stone yet?"
|
|
||||||
msgstr "...você já cavou pedra?"
|
|
||||||
|
|
||||||
msgid "...have you found a lode stratum yet?"
|
|
||||||
msgstr "...você já encontrou um estrato de veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you found ash yet?"
|
|
||||||
msgstr "...você já encontrou cinzas?"
|
|
||||||
|
|
||||||
msgid "...have you found charcoal yet?"
|
|
||||||
msgstr "...você já encontrou carvão?"
|
|
||||||
|
|
||||||
msgid "...have you found deep stone strata yet?"
|
|
||||||
msgstr "...você já encontrou um estrato de pedra profunda?"
|
|
||||||
|
|
||||||
msgid "...have you found dry leaves yet?"
|
|
||||||
msgstr "...você já encontrou folhas secas?"
|
|
||||||
|
|
||||||
msgid "...have you found eggcorns yet?"
|
|
||||||
msgstr "...você já encontrou semente de carvalho?"
|
|
||||||
|
|
||||||
msgid "...have you found lode ore yet?"
|
|
||||||
msgstr "...você já encontrou um veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you found molten rock yet?"
|
|
||||||
msgstr "...você já encontrou pedra derretida (lava)?"
|
|
||||||
|
|
||||||
msgid "...have you found sponges yet?"
|
|
||||||
msgstr "...você já encontrou esponjas?"
|
|
||||||
|
|
||||||
msgid "...have you found sticks yet?"
|
|
||||||
msgstr "...você já encontrou gravetos?"
|
|
||||||
|
|
||||||
msgid "...have you made fire by rubbing sticks together yet?"
|
|
||||||
msgstr "...você já fez fogo esfregando gravetos?"
|
|
||||||
|
|
||||||
msgid "...have you melted down lode metal yet?"
|
|
||||||
msgstr "...você já derreteu um veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you melted sand into glass yet?"
|
|
||||||
msgstr "...você já transformou areia em vidro, derretendo a areia?"
|
|
||||||
|
|
||||||
msgid "...have you molded molten glass into clear glass yet?"
|
|
||||||
msgstr "...você já moldou vidro derretido em vidro transparente?"
|
|
||||||
|
|
||||||
msgid "...have you packed high-quality charcoal yet?"
|
|
||||||
msgstr "...você já juntou carvão de alta qualidade?"
|
|
||||||
|
|
||||||
msgid "...have you packed stone chips back into cobble yet?"
|
|
||||||
msgstr "...você já juntou pedaços de pedra para que virassem pedregulho?"
|
|
||||||
|
|
||||||
msgid "...have you planted an eggcorn yet?"
|
|
||||||
msgstr "...você já plantou uma semente de carvalho?"
|
|
||||||
|
|
||||||
msgid "...have you produced light from a lens yet?"
|
|
||||||
msgstr "...você já gerou luz a partir de uma lente?"
|
|
||||||
|
|
||||||
msgid "...have you put a stone tip onto a tool yet?"
|
|
||||||
msgstr "...você já colocou uma ponta de pedra em uma ferramenta?"
|
|
||||||
|
|
||||||
msgid "...have you quenched molten glass into chromatic glass yet?"
|
|
||||||
msgstr "...você já temperou vidro derretido para que virasse vidro cromático?"
|
|
||||||
|
|
||||||
msgid "...have you sintered glowing lode into a cube yet?"
|
|
||||||
msgstr "...você já moldou veio mineral incandescente em um cubo?"
|
|
||||||
|
|
||||||
msgid "...have you split a tree trunk into planks yet?"
|
|
||||||
msgstr "...você já fez tábuas quebrando troncos de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you tempered a lode anvil yet?"
|
|
||||||
msgstr "...você já fez uma bigorna temperando veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you tempered a lode tool head yet?"
|
|
||||||
msgstr "...você já fez uma cabeça de ferramenta temperando veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you welded a lode pick and spade together yet?"
|
|
||||||
msgstr "...você já soldou uma picareta de veio mineral com uma pá de veio mineral?"
|
|
||||||
|
|
||||||
msgid "About"
|
|
||||||
msgstr "Sobre"
|
|
||||||
|
|
||||||
msgid "Active Lens"
|
|
||||||
msgstr "Lente Ativa"
|
|
||||||
|
|
||||||
msgid "Active Prism"
|
|
||||||
msgstr "Prisma Ativo"
|
|
||||||
|
|
||||||
msgid "Aggregate"
|
|
||||||
msgstr "Agregar"
|
|
||||||
|
|
||||||
msgid "Air"
|
|
||||||
msgstr "Ar"
|
|
||||||
|
|
||||||
msgid "Annealed Lode"
|
|
||||||
msgstr "Veio Mineral Recozido"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Bar"
|
|
||||||
msgstr "Barra de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Hatchet"
|
|
||||||
msgstr "Machado de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Hatchet Head"
|
|
||||||
msgstr "Cabeça de Machado de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mallet"
|
|
||||||
msgstr "Marreta de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mallet Head"
|
|
||||||
msgstr "Cabeça de Marreta de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mattock"
|
|
||||||
msgstr "Enxada de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mattock Head"
|
|
||||||
msgstr "Cabeça de Enxada de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Pick"
|
|
||||||
msgstr "Picareta de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Pick Head"
|
|
||||||
msgstr "Cabeça de Picareta de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Prill"
|
|
||||||
msgstr "Lascas de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Rod"
|
|
||||||
msgstr "Vara de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Spade"
|
|
||||||
msgstr "Pá de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Spade Head"
|
|
||||||
msgstr "Cabeça de Pá de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Ash"
|
|
||||||
msgstr "Cinza"
|
|
||||||
|
|
||||||
msgid "Ash Lump"
|
|
||||||
msgstr "Nódulo de Cinzas"
|
|
||||||
|
|
||||||
msgid "Burning Embers"
|
|
||||||
msgstr "Brasa Quente"
|
|
||||||
|
|
||||||
msgid "Charcoal"
|
|
||||||
msgstr "Carvão Vegetal"
|
|
||||||
|
|
||||||
msgid "Charcoal Lump"
|
|
||||||
msgstr "Nódulo de Carvão Vegetal"
|
|
||||||
|
|
||||||
msgid "Chromatic Glass"
|
|
||||||
msgstr "Vidro Cromático"
|
|
||||||
|
|
||||||
msgid "Clear Glass"
|
|
||||||
msgstr "Vidro Transparente"
|
|
||||||
|
|
||||||
msgid "Cobble"
|
|
||||||
msgstr "Pedregulho"
|
|
||||||
|
|
||||||
msgid "Cobble Hinged Panel"
|
|
||||||
msgstr "Painel de Pedregulho Articulado"
|
|
||||||
|
|
||||||
msgid "Cobble Panel"
|
|
||||||
msgstr "Painel de Pedregulho"
|
|
||||||
|
|
||||||
msgid "Crude Glass"
|
|
||||||
msgstr "Vidro Bruto"
|
|
||||||
|
|
||||||
msgid "DEVELOPMENT VERSION"
|
|
||||||
msgstr "VERSÃO EM DESENVOLVIMENTO"
|
|
||||||
|
|
||||||
msgid "Dirt"
|
|
||||||
msgstr "Terra"
|
|
||||||
|
|
||||||
msgid "Discord: https://discord.gg/SHq2tkb"
|
|
||||||
msgstr "Discord: https://discord.gg/SHq2tkb"
|
|
||||||
|
|
||||||
msgid "Eggcorn"
|
|
||||||
msgstr "Semente de Carvalho"
|
|
||||||
|
|
||||||
msgid "Fire"
|
|
||||||
msgstr "Fogo"
|
|
||||||
|
|
||||||
msgid "Float Glass"
|
|
||||||
msgstr "Vidro Float"
|
|
||||||
|
|
||||||
msgid "GitLab: https://gitlab.com/sztest/nodecore"
|
|
||||||
msgstr "GitLab: https://gitlab.com/sztest/nodecore"
|
|
||||||
|
|
||||||
msgid "Glowing Lode"
|
|
||||||
msgstr "Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Bar"
|
|
||||||
msgstr "Barra de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Hatchet"
|
|
||||||
msgstr "Machado de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Hatchet Head"
|
|
||||||
msgstr "Cabeça de Machado Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mallet"
|
|
||||||
msgstr "Marreta de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mallet Head"
|
|
||||||
msgstr "Cabeça de Marreta Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mattock"
|
|
||||||
msgstr "Enxada de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mattock Head"
|
|
||||||
msgstr "Cabeça de Enxada Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Pick"
|
|
||||||
msgstr "Picareta de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Pick Head"
|
|
||||||
msgstr "Cabeça de Picareta de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Prill"
|
|
||||||
msgstr "Lascas de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Rod"
|
|
||||||
msgstr "Vara de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Spade"
|
|
||||||
msgstr "Pá de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Spade Head"
|
|
||||||
msgstr "Cabeça de Pá Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Grass"
|
|
||||||
msgstr "Grama"
|
|
||||||
|
|
||||||
msgid "Gravel"
|
|
||||||
msgstr "Cascalho"
|
|
||||||
|
|
||||||
msgid "Hints"
|
|
||||||
msgstr "Dicas"
|
|
||||||
|
|
||||||
msgid "Ignore"
|
|
||||||
msgstr "Ignorar"
|
|
||||||
|
|
||||||
msgid "Injury"
|
|
||||||
msgstr "Ferir"
|
|
||||||
|
|
||||||
msgid "Inventory"
|
|
||||||
msgstr "Inventário"
|
|
||||||
|
|
||||||
msgid "Leaves"
|
|
||||||
msgstr "Folhas"
|
|
||||||
|
|
||||||
msgid "Lens"
|
|
||||||
msgstr "Lente"
|
|
||||||
|
|
||||||
msgid "Living Sponge"
|
|
||||||
msgstr "Esponja Viva"
|
|
||||||
|
|
||||||
msgid "Lode Cobble"
|
|
||||||
msgstr "Veio de Pedregulho"
|
|
||||||
|
|
||||||
msgid "Lode Ore"
|
|
||||||
msgstr "Veio Mineral"
|
|
||||||
|
|
||||||
msgid "Loose Cobble"
|
|
||||||
msgstr "Pedregulho Solta"
|
|
||||||
|
|
||||||
msgid "Loose Dirt"
|
|
||||||
msgstr "Terra Solta"
|
|
||||||
|
|
||||||
msgid "Loose Gravel"
|
|
||||||
msgstr "Cascalho Solto"
|
|
||||||
|
|
||||||
msgid "Loose Leaves"
|
|
||||||
msgstr "Folhas Soltas"
|
|
||||||
|
|
||||||
msgid "Loose Lode Cobble"
|
|
||||||
msgstr "Veio de Pedregulho Solto"
|
|
||||||
|
|
||||||
msgid "Loose Sand"
|
|
||||||
msgstr "Areia Solta"
|
|
||||||
|
|
||||||
msgid "MIT License: http://www.opensource.org/licenses/MIT"
|
|
||||||
msgstr "Licensa MIT: http://www.opensource.org/licenses/MIT"
|
|
||||||
|
|
||||||
msgid "Molten Glass"
|
|
||||||
msgstr "Vidro Derretido"
|
|
||||||
|
|
||||||
msgid "Molten Rock"
|
|
||||||
msgstr "Pedra Derretida"
|
|
||||||
|
|
||||||
msgid "NodeCore"
|
|
||||||
msgstr "NodeCore"
|
|
||||||
|
|
||||||
msgid "Not all game content is covered by hints. Explore!"
|
|
||||||
msgstr "As dicas não cobrem todo o conteúdo do jogo. Explore!"
|
|
||||||
|
|
||||||
msgid "Player's Guide: Inventory Management"
|
|
||||||
msgstr "Guia do Jogador: Gerenciamento de Inventário"
|
|
||||||
|
|
||||||
msgid "Player's Guide: Pummeling Recipes"
|
|
||||||
msgstr "Guia do Jogador: Receitas por Esmurrada"
|
|
||||||
|
|
||||||
msgid "Prism"
|
|
||||||
msgstr "Prisma"
|
|
||||||
|
|
||||||
msgid "Progress: @1 complete, @2 current, @3 future"
|
|
||||||
msgstr "Progresso: @1 completo(s), @2 atual(is), @3 futuro(s)"
|
|
||||||
|
|
||||||
msgid "Pummel"
|
|
||||||
msgstr "Esmurrar"
|
|
||||||
|
|
||||||
msgid "Sand"
|
|
||||||
msgstr "Areia"
|
|
||||||
|
|
||||||
msgid "See included LICENSE file for full details and credits"
|
|
||||||
msgstr "Veja o arquivo de LICENSA incluso para créditos e maiores detalhes"
|
|
||||||
|
|
||||||
msgid "Shining Lens"
|
|
||||||
msgstr "Lente Brilhante"
|
|
||||||
|
|
||||||
msgid "Sponge"
|
|
||||||
msgstr "Esponja"
|
|
||||||
|
|
||||||
msgid "Staff"
|
|
||||||
msgstr "Bastão"
|
|
||||||
|
|
||||||
msgid "Stick"
|
|
||||||
msgstr "Graveto"
|
|
||||||
|
|
||||||
msgid "Stone"
|
|
||||||
msgstr "Pedra"
|
|
||||||
|
|
||||||
msgid "Stone Chip"
|
|
||||||
msgstr "Pedaço de Pedra"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Hatchet"
|
|
||||||
msgstr "Machado com Ponta de Pedra"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Mallet"
|
|
||||||
msgstr "Marreta com Ponta de Pedra"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Pick"
|
|
||||||
msgstr "Picareta com Ponta de Pedra"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Spade"
|
|
||||||
msgstr "Pá com Ponta de Pedra"
|
|
||||||
|
|
||||||
msgid "Stump"
|
|
||||||
msgstr "Toco"
|
|
||||||
|
|
||||||
msgid "Teleport to get unstuck (but you can't bring your items)"
|
|
||||||
msgstr "Teleporte para desprender-se (mas você perderá seus itens)"
|
|
||||||
|
|
||||||
msgid "Tempered Lode"
|
|
||||||
msgstr "Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Bar"
|
|
||||||
msgstr "Barra de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Hatchet"
|
|
||||||
msgstr "Machado de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Hatchet Head"
|
|
||||||
msgstr "Cabeça de Machado de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mallet"
|
|
||||||
msgstr "Marreta de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mallet Head"
|
|
||||||
msgstr "Cabeça de Marreta de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mattock"
|
|
||||||
msgstr "Enxada de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mattock Head"
|
|
||||||
msgstr "Cabeça de Enxada de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Pick"
|
|
||||||
msgstr "Picareta de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Pick Head"
|
|
||||||
msgstr "Cabeça de Picareta de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Prill"
|
|
||||||
msgstr "Lascas de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Rod"
|
|
||||||
msgstr "Vara de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Spade"
|
|
||||||
msgstr "Pá de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Spade Head"
|
|
||||||
msgstr "Cabeça de Enxada de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tote (1 Slot)"
|
|
||||||
msgstr "Bolsa (1 Compartimento)"
|
|
||||||
|
|
||||||
msgid "Tote (2 Slots)"
|
|
||||||
msgstr "Bolsa (2 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (3 Slots)"
|
|
||||||
msgstr "Bolsa (3 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (4 Slots)"
|
|
||||||
msgstr "Bolsa (4 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (5 Slots)"
|
|
||||||
msgstr "Bolsa (5 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (6 Slots)"
|
|
||||||
msgstr "Bolsa (6 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (7 Slots)"
|
|
||||||
msgstr "Bolsa (7 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (8 Slots)"
|
|
||||||
msgstr "Bolsa (8 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote Handle"
|
|
||||||
msgstr "Alça de Bolsa"
|
|
||||||
|
|
||||||
msgid "Tree Trunk"
|
|
||||||
msgstr "Tronco de Árvore"
|
|
||||||
|
|
||||||
msgid "Unknown Item"
|
|
||||||
msgstr "Item Desconhecido"
|
|
||||||
|
|
||||||
msgid "Version"
|
|
||||||
msgstr "Versão"
|
|
||||||
|
|
||||||
msgid "Water"
|
|
||||||
msgstr "Água"
|
|
||||||
|
|
||||||
msgid "Wet Aggregate"
|
|
||||||
msgstr "Massa Úmida"
|
|
||||||
|
|
||||||
msgid "Wet Sponge"
|
|
||||||
msgstr "Esponja Molhada"
|
|
||||||
|
|
||||||
msgid "Wooden Adze"
|
|
||||||
msgstr "Enxó de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Frame"
|
|
||||||
msgstr "Estrutura de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Hatchet"
|
|
||||||
msgstr "Machado de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Hatchet Head"
|
|
||||||
msgstr "Cabeça de Machado de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Hinged Panel"
|
|
||||||
msgstr "Painel Articulado de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Ladder"
|
|
||||||
msgstr "Escada de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Mallet"
|
|
||||||
msgstr "Marreta de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Mallet Head"
|
|
||||||
msgstr "Cabeça de Marreta de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Panel"
|
|
||||||
msgstr "Painel de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Pick"
|
|
||||||
msgstr "Picareta de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Pick Head"
|
|
||||||
msgstr "Cabeça de Picareta de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Plank"
|
|
||||||
msgstr "Tábua de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Shelf"
|
|
||||||
msgstr "Estante de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Spade"
|
|
||||||
msgstr "Pá de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Spade Head"
|
|
||||||
msgstr "Cabeça de Pá de Madeira"
|
|
||||||
|
|
||||||
msgid "https://content.minetest.net/packages/Warr1024/nodecore/"
|
|
||||||
msgstr "https://content.minetest.net/packages/Warr1024/nodecore/"
|
|
||||||
|
|
||||||
msgid "(and @1 more hints)"
|
|
||||||
msgstr "(e mais @1 dicas)"
|
|
||||||
|
|
||||||
msgid "(and 1 more hint)"
|
|
||||||
msgstr "( e mais 1 dica)"
|
|
|
@ -1,627 +0,0 @@
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2019-09-12 14:44+0000\n"
|
|
||||||
"PO-Revision-Date: 2019-09-12 14:44+0000\n"
|
|
||||||
"Last-Translator: Weblate Admin <warr1024@gmail.com>\n"
|
|
||||||
"Language-Team: Portuguese (Brazil) <http://nodecore.mine.nu/trans/projects/"
|
|
||||||
"nodecore/core/pt_BR/>\n"
|
|
||||||
"Language: pt_BR\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
|
||||||
"X-Generator: Weblate 3.8\n"
|
|
||||||
|
|
||||||
msgid "(C)2018-2019 by Aaron Suen <warr1024@@gmail.com>"
|
|
||||||
msgstr "(C)2018-2019 por Aaron Suen <war1024@@gmail.com>"
|
|
||||||
|
|
||||||
msgid "- Crafting is done by building recipes in-world."
|
|
||||||
msgstr "- A Criação de Itens é feita construindo as receitas pelo mundo."
|
|
||||||
|
|
||||||
msgid "- Drop items onto ground to create stack nodes. They do not decay."
|
|
||||||
msgstr "- Solte itens no chão para criar um node de itens amontoados. Eles não desaparecem."
|
|
||||||
|
|
||||||
msgid "- If a recipe exists, you will see a special particle effect."
|
|
||||||
msgstr "- Se uma receita existe, você verá um efeito especial de partícula sair do node."
|
|
||||||
|
|
||||||
msgid "- Items picked up try to fit into the current selected slot first."
|
|
||||||
msgstr "- Os itens pegados são primeiramente armazenados no espaço atualmente selecionado."
|
|
||||||
|
|
||||||
msgid "- Order and specific face of placement may matter for crafting."
|
|
||||||
msgstr "- A ordem e a face em que os itens são colocados pode importar no processo de criação."
|
|
||||||
|
|
||||||
msgid "- Recipes are time-based, punching faster does not speed up."
|
|
||||||
msgstr "- Receitas são cronometradas, bater mais forte não afetará a velocidade delas."
|
|
||||||
|
|
||||||
msgid "- Sneak+drop to count out single items from stack."
|
|
||||||
msgstr "- Use os comandos de agachar e soltar juntos para soltar um só item."
|
|
||||||
|
|
||||||
msgid "- Some recipes require "pummeling" a node."
|
|
||||||
msgstr "- Algumas receitas necessitam que você "esmurre" um node."
|
|
||||||
|
|
||||||
msgid "- Stacks may be pummeled, exact item count may matter."
|
|
||||||
msgstr "- Amontoados de itens podem ser esmurrados, pode ser que precise de uma quantidade exata do item."
|
|
||||||
|
|
||||||
msgid "- There is NO inventory screen."
|
|
||||||
msgstr "- NÃO EXISTE tela de inventário."
|
|
||||||
|
|
||||||
msgid "- To pummel, punch a node repeatedly, WITHOUT digging."
|
|
||||||
msgstr "- Para esmurrar, bata num node repetidamente, SEM QUEBRÁ-LO."
|
|
||||||
|
|
||||||
msgid "- Wielded item, target face, and surrounding nodes may matter."
|
|
||||||
msgstr "- O item segurado, a face do objeto alvo e os nodes ao redor podem importar durante a criação de algo."
|
|
||||||
|
|
||||||
msgid "- You do not have to punch very fast (about 1 per second)."
|
|
||||||
msgstr "- Você não precisa bater muito rápido(basta 1 batida por segundo)."
|
|
||||||
|
|
||||||
msgid "...and 1 more hint..."
|
|
||||||
msgstr "...e mais 1 dica..."
|
|
||||||
|
|
||||||
msgid "...and @1 more hints..."
|
|
||||||
msgstr "...e mais @1 dicas..."
|
|
||||||
|
|
||||||
msgid "...have you activated a lens yet?"
|
|
||||||
msgstr "...você já ativou uma lente?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a staff from sticks yet?"
|
|
||||||
msgstr "...você já montou um bastão usando gravetos?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a wooden frame yet?"
|
|
||||||
msgstr "...você já montou um estrutura de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a wooden ladder yet?"
|
|
||||||
msgstr "...você já montou uma escada de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a wooden shelf yet?"
|
|
||||||
msgstr "...você já montou uma estante de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you assembled a wooden tool yet?"
|
|
||||||
msgstr "...você já montou uma ferramenta de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you assembled an adze out of sticks yet?"
|
|
||||||
msgstr "...você já montou um enxó usando gravetos?"
|
|
||||||
|
|
||||||
msgid "...have you assembled an annealed lode tote handle yet?"
|
|
||||||
msgstr "...você já montou uma alça de bolsa recozida?"
|
|
||||||
|
|
||||||
msgid "...have you bashed a plank into sticks yet?"
|
|
||||||
msgstr "...você já quebrou uma tábua em gravetos batendo nela?"
|
|
||||||
|
|
||||||
msgid "...have you broken cobble into chips yet?"
|
|
||||||
msgstr "...você já quebrou pedregulho em pedaços?"
|
|
||||||
|
|
||||||
msgid "...have you carved a wooden plank completely yet?"
|
|
||||||
msgstr "...você já entalhou completamente uma tábua de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you carved wooden tool heads from planks yet?"
|
|
||||||
msgstr "...você já transformou uma tábua em cabeças de ferramentas, entalhando a madeira?"
|
|
||||||
|
|
||||||
msgid "...have you chipped chromatic glass into prisms yet?"
|
|
||||||
msgstr "...você já quebrou um vidro cromático em prismas, lascando o vidro?"
|
|
||||||
|
|
||||||
msgid "...have you chopped a lode cube into prills yet?"
|
|
||||||
msgstr "...você já quebrou um veio mineral em lascas, usando um machado?"
|
|
||||||
|
|
||||||
msgid "...have you chopped chromatic glass into lenses yet?"
|
|
||||||
msgstr "...você já quebrou vidro cromático em lentes, usando um machado?"
|
|
||||||
|
|
||||||
msgid "...have you chopped up charcoal yet?"
|
|
||||||
msgstr "...você já quebrou carvão usando um machado?"
|
|
||||||
|
|
||||||
msgid "...have you cold-forged an annealed lode tool head yet?"
|
|
||||||
msgstr "...você já fez uma forja fria de uma cabeça de ferramenta de veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you cold-forged lode down completely yet?"
|
|
||||||
msgstr "...você já fez uma forja fria de um veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you cooled molten glass into crude glass yet?"
|
|
||||||
msgstr "...você já esfriou vidro derretido para que este virasse vidro cru?"
|
|
||||||
|
|
||||||
msgid "...have you cut down a tree yet?"
|
|
||||||
msgstr "...você já cortou uma árvore?"
|
|
||||||
|
|
||||||
msgid "...have you dug up a tree stump yet?"
|
|
||||||
msgstr "...você já desenterrou um toco de árvore?"
|
|
||||||
|
|
||||||
msgid "...have you dug up dirt yet?"
|
|
||||||
msgstr "...você já cavou terra?"
|
|
||||||
|
|
||||||
msgid "...have you dug up gravel yet?"
|
|
||||||
msgstr "...você já cavou cascalho?"
|
|
||||||
|
|
||||||
msgid "...have you dug up lode ore yet?"
|
|
||||||
msgstr "...você já desenterrou um veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you dug up sand yet?"
|
|
||||||
msgstr "...você já cavou areia?"
|
|
||||||
|
|
||||||
msgid "...have you dug up stone yet?"
|
|
||||||
msgstr "...você já cavou pedra?"
|
|
||||||
|
|
||||||
msgid "...have you found a lode stratum yet?"
|
|
||||||
msgstr "...você já encontrou um estrato de veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you found ash yet?"
|
|
||||||
msgstr "...você já encontrou cinzas?"
|
|
||||||
|
|
||||||
msgid "...have you found charcoal yet?"
|
|
||||||
msgstr "...você já encontrou carvão?"
|
|
||||||
|
|
||||||
msgid "...have you found deep stone strata yet?"
|
|
||||||
msgstr "...você já encontrou um estrato de pedra profunda?"
|
|
||||||
|
|
||||||
msgid "...have you found dry leaves yet?"
|
|
||||||
msgstr "...você já encontrou folhas secas?"
|
|
||||||
|
|
||||||
msgid "...have you found eggcorns yet?"
|
|
||||||
msgstr "...você já encontrou semente de carvalho?"
|
|
||||||
|
|
||||||
msgid "...have you found lode ore yet?"
|
|
||||||
msgstr "...você já encontrou um veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you found molten rock yet?"
|
|
||||||
msgstr "...você já encontrou pedra derretida (lava)?"
|
|
||||||
|
|
||||||
msgid "...have you found sponges yet?"
|
|
||||||
msgstr "...você já encontrou esponjas?"
|
|
||||||
|
|
||||||
msgid "...have you found sticks yet?"
|
|
||||||
msgstr "...você já encontrou gravetos?"
|
|
||||||
|
|
||||||
msgid "...have you made fire by rubbing sticks together yet?"
|
|
||||||
msgstr "...você já fez fogo esfregando gravetos?"
|
|
||||||
|
|
||||||
msgid "...have you melted down lode metal yet?"
|
|
||||||
msgstr "...você já derreteu um veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you melted sand into glass yet?"
|
|
||||||
msgstr "...você já transformou areia em vidro, derretendo a areia?"
|
|
||||||
|
|
||||||
msgid "...have you molded molten glass into clear glass yet?"
|
|
||||||
msgstr "...você já moldou vidro derretido em vidro transparente?"
|
|
||||||
|
|
||||||
msgid "...have you packed high-quality charcoal yet?"
|
|
||||||
msgstr "...você já juntou carvão de alta qualidade?"
|
|
||||||
|
|
||||||
msgid "...have you packed stone chips back into cobble yet?"
|
|
||||||
msgstr "...você já juntou pedaços de pedra para que virassem pedregulho?"
|
|
||||||
|
|
||||||
msgid "...have you planted an eggcorn yet?"
|
|
||||||
msgstr "...você já plantou uma semente de carvalho?"
|
|
||||||
|
|
||||||
msgid "...have you produced light from a lens yet?"
|
|
||||||
msgstr "...você já gerou luz a partir de uma lente?"
|
|
||||||
|
|
||||||
msgid "...have you put a stone tip onto a tool yet?"
|
|
||||||
msgstr "...você já colocou uma ponta de pedra em uma ferramenta?"
|
|
||||||
|
|
||||||
msgid "...have you quenched molten glass into chromatic glass yet?"
|
|
||||||
msgstr "...você já temperou vidro derretido para que virasse vidro cromático?"
|
|
||||||
|
|
||||||
msgid "...have you sintered glowing lode into a cube yet?"
|
|
||||||
msgstr "...você já moldou veio mineral incandescente em um cubo?"
|
|
||||||
|
|
||||||
msgid "...have you split a tree trunk into planks yet?"
|
|
||||||
msgstr "...você já fez tábuas quebrando troncos de madeira?"
|
|
||||||
|
|
||||||
msgid "...have you tempered a lode anvil yet?"
|
|
||||||
msgstr "...você já fez uma bigorna temperando veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you tempered a lode tool head yet?"
|
|
||||||
msgstr "...você já fez uma cabeça de ferramenta temperando veio mineral?"
|
|
||||||
|
|
||||||
msgid "...have you welded a lode pick and spade together yet?"
|
|
||||||
msgstr "...você já soldou uma picareta de veio mineral com uma pá de veio mineral?"
|
|
||||||
|
|
||||||
msgid "About"
|
|
||||||
msgstr "Sobre"
|
|
||||||
|
|
||||||
msgid "Active Lens"
|
|
||||||
msgstr "Lente Ativa"
|
|
||||||
|
|
||||||
msgid "Active Prism"
|
|
||||||
msgstr "Prisma Ativo"
|
|
||||||
|
|
||||||
msgid "Aggregate"
|
|
||||||
msgstr "Agregar"
|
|
||||||
|
|
||||||
msgid "Air"
|
|
||||||
msgstr "Ar"
|
|
||||||
|
|
||||||
msgid "Annealed Lode"
|
|
||||||
msgstr "Veio Mineral Recozido"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Bar"
|
|
||||||
msgstr "Barra de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Hatchet"
|
|
||||||
msgstr "Machado de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Hatchet Head"
|
|
||||||
msgstr "Cabeça de Machado de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mallet"
|
|
||||||
msgstr "Marreta de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mallet Head"
|
|
||||||
msgstr "Cabeça de Marreta de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mattock"
|
|
||||||
msgstr "Enxada de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Mattock Head"
|
|
||||||
msgstr "Cabeça de Enxada de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Pick"
|
|
||||||
msgstr "Picareta de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Pick Head"
|
|
||||||
msgstr "Cabeça de Picareta de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Prill"
|
|
||||||
msgstr "Lascas de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Rod"
|
|
||||||
msgstr "Vara de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Spade"
|
|
||||||
msgstr "Pá de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Annealed Lode Spade Head"
|
|
||||||
msgstr "Cabeça de Pá de Veio Mineral Recozida"
|
|
||||||
|
|
||||||
msgid "Ash"
|
|
||||||
msgstr "Cinza"
|
|
||||||
|
|
||||||
msgid "Ash Lump"
|
|
||||||
msgstr "Nódulo de Cinzas"
|
|
||||||
|
|
||||||
msgid "Burning Embers"
|
|
||||||
msgstr "Brasa Quente"
|
|
||||||
|
|
||||||
msgid "Charcoal"
|
|
||||||
msgstr "Carvão Vegetal"
|
|
||||||
|
|
||||||
msgid "Charcoal Lump"
|
|
||||||
msgstr "Nódulo de Carvão Vegetal"
|
|
||||||
|
|
||||||
msgid "Chromatic Glass"
|
|
||||||
msgstr "Vidro Cromático"
|
|
||||||
|
|
||||||
msgid "Clear Glass"
|
|
||||||
msgstr "Vidro Transparente"
|
|
||||||
|
|
||||||
msgid "Cobble"
|
|
||||||
msgstr "Pedregulho"
|
|
||||||
|
|
||||||
msgid "Cobble Hinged Panel"
|
|
||||||
msgstr "Painel de Pedregulho Articulado"
|
|
||||||
|
|
||||||
msgid "Cobble Panel"
|
|
||||||
msgstr "Painel de Pedregulho"
|
|
||||||
|
|
||||||
msgid "Crude Glass"
|
|
||||||
msgstr "Vidro Bruto"
|
|
||||||
|
|
||||||
msgid "DEVELOPMENT VERSION"
|
|
||||||
msgstr "VERSÃO EM DESENVOLVIMENTO"
|
|
||||||
|
|
||||||
msgid "Dirt"
|
|
||||||
msgstr "Terra"
|
|
||||||
|
|
||||||
msgid "Discord: https://discord.gg/SHq2tkb"
|
|
||||||
msgstr "Discord: https://discord.gg/SHq2tkb"
|
|
||||||
|
|
||||||
msgid "Eggcorn"
|
|
||||||
msgstr "Semente de Carvalho"
|
|
||||||
|
|
||||||
msgid "Fire"
|
|
||||||
msgstr "Fogo"
|
|
||||||
|
|
||||||
msgid "Float Glass"
|
|
||||||
msgstr "Vidro Float"
|
|
||||||
|
|
||||||
msgid "GitLab: https://gitlab.com/sztest/nodecore"
|
|
||||||
msgstr "GitLab: https://gitlab.com/sztest/nodecore"
|
|
||||||
|
|
||||||
msgid "Glowing Lode"
|
|
||||||
msgstr "Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Bar"
|
|
||||||
msgstr "Barra de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Hatchet"
|
|
||||||
msgstr "Machado de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Hatchet Head"
|
|
||||||
msgstr "Cabeça de Machado Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mallet"
|
|
||||||
msgstr "Marreta de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mallet Head"
|
|
||||||
msgstr "Cabeça de Marreta Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mattock"
|
|
||||||
msgstr "Enxada de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Mattock Head"
|
|
||||||
msgstr "Cabeça de Enxada Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Pick"
|
|
||||||
msgstr "Picareta de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Pick Head"
|
|
||||||
msgstr "Cabeça de Picareta de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Prill"
|
|
||||||
msgstr "Lascas de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Rod"
|
|
||||||
msgstr "Vara de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Spade"
|
|
||||||
msgstr "Pá de Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Glowing Lode Spade Head"
|
|
||||||
msgstr "Cabeça de Pá Veio Mineral Incandescente"
|
|
||||||
|
|
||||||
msgid "Grass"
|
|
||||||
msgstr "Grama"
|
|
||||||
|
|
||||||
msgid "Gravel"
|
|
||||||
msgstr "Cascalho"
|
|
||||||
|
|
||||||
msgid "Hints"
|
|
||||||
msgstr "Dicas"
|
|
||||||
|
|
||||||
msgid "Ignore"
|
|
||||||
msgstr "Ignorar"
|
|
||||||
|
|
||||||
msgid "Injury"
|
|
||||||
msgstr "Ferir"
|
|
||||||
|
|
||||||
msgid "Inventory"
|
|
||||||
msgstr "Inventário"
|
|
||||||
|
|
||||||
msgid "Leaves"
|
|
||||||
msgstr "Folhas"
|
|
||||||
|
|
||||||
msgid "Lens"
|
|
||||||
msgstr "Lente"
|
|
||||||
|
|
||||||
msgid "Living Sponge"
|
|
||||||
msgstr "Esponja Viva"
|
|
||||||
|
|
||||||
msgid "Lode Cobble"
|
|
||||||
msgstr "Veio de Pedregulho"
|
|
||||||
|
|
||||||
msgid "Lode Ore"
|
|
||||||
msgstr "Veio Mineral"
|
|
||||||
|
|
||||||
msgid "Loose Cobble"
|
|
||||||
msgstr "Pedregulho Solta"
|
|
||||||
|
|
||||||
msgid "Loose Dirt"
|
|
||||||
msgstr "Terra Solta"
|
|
||||||
|
|
||||||
msgid "Loose Gravel"
|
|
||||||
msgstr "Cascalho Solto"
|
|
||||||
|
|
||||||
msgid "Loose Leaves"
|
|
||||||
msgstr "Folhas Soltas"
|
|
||||||
|
|
||||||
msgid "Loose Lode Cobble"
|
|
||||||
msgstr "Veio de Pedregulho Solto"
|
|
||||||
|
|
||||||
msgid "Loose Sand"
|
|
||||||
msgstr "Areia Solta"
|
|
||||||
|
|
||||||
msgid "MIT License: http://www.opensource.org/licenses/MIT"
|
|
||||||
msgstr "Licensa MIT: http://www.opensource.org/licenses/MIT"
|
|
||||||
|
|
||||||
msgid "Molten Glass"
|
|
||||||
msgstr "Vidro Derretido"
|
|
||||||
|
|
||||||
msgid "Molten Rock"
|
|
||||||
msgstr "Pedra Derretida"
|
|
||||||
|
|
||||||
msgid "NodeCore"
|
|
||||||
msgstr "NodeCore"
|
|
||||||
|
|
||||||
msgid "Not all game content is covered by hints. Explore!"
|
|
||||||
msgstr "As dicas não cobrem todo o conteúdo do jogo. Explore!"
|
|
||||||
|
|
||||||
msgid "Player's Guide: Inventory Management"
|
|
||||||
msgstr "Guia do Jogador: Gerenciamento de Inventário"
|
|
||||||
|
|
||||||
msgid "Player's Guide: Pummeling Recipes"
|
|
||||||
msgstr "Guia do Jogador: Receitas por Esmurrada"
|
|
||||||
|
|
||||||
msgid "Prism"
|
|
||||||
msgstr "Prisma"
|
|
||||||
|
|
||||||
msgid "Progress: @1 complete, @2 current, @3 future"
|
|
||||||
msgstr "Progresso: @1 completo(s), @2 atual(is), @3 futuro(s)"
|
|
||||||
|
|
||||||
msgid "Pummel"
|
|
||||||
msgstr "Esmurrar"
|
|
||||||
|
|
||||||
msgid "Sand"
|
|
||||||
msgstr "Areia"
|
|
||||||
|
|
||||||
msgid "See included LICENSE file for full details and credits"
|
|
||||||
msgstr "Veja o arquivo de LICENSA incluso para créditos e maiores detalhes"
|
|
||||||
|
|
||||||
msgid "Shining Lens"
|
|
||||||
msgstr "Lente Brilhante"
|
|
||||||
|
|
||||||
msgid "Sponge"
|
|
||||||
msgstr "Esponja"
|
|
||||||
|
|
||||||
msgid "Staff"
|
|
||||||
msgstr "Bastão"
|
|
||||||
|
|
||||||
msgid "Stick"
|
|
||||||
msgstr "Graveto"
|
|
||||||
|
|
||||||
msgid "Stone"
|
|
||||||
msgstr "Pedra"
|
|
||||||
|
|
||||||
msgid "Stone Chip"
|
|
||||||
msgstr "Pedaço de Pedra"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Hatchet"
|
|
||||||
msgstr "Machado com Ponta de Pedra"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Mallet"
|
|
||||||
msgstr "Marreta com Ponta de Pedra"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Pick"
|
|
||||||
msgstr "Picareta com Ponta de Pedra"
|
|
||||||
|
|
||||||
msgid "Stone-Tipped Spade"
|
|
||||||
msgstr "Pá com Ponta de Pedra"
|
|
||||||
|
|
||||||
msgid "Stump"
|
|
||||||
msgstr "Toco"
|
|
||||||
|
|
||||||
msgid "Teleport to get unstuck (but you can't bring your items)"
|
|
||||||
msgstr "Teleporte para desprender-se (mas você perderá seus itens)"
|
|
||||||
|
|
||||||
msgid "Tempered Lode"
|
|
||||||
msgstr "Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Bar"
|
|
||||||
msgstr "Barra de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Hatchet"
|
|
||||||
msgstr "Machado de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Hatchet Head"
|
|
||||||
msgstr "Cabeça de Machado de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mallet"
|
|
||||||
msgstr "Marreta de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mallet Head"
|
|
||||||
msgstr "Cabeça de Marreta de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mattock"
|
|
||||||
msgstr "Enxada de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Mattock Head"
|
|
||||||
msgstr "Cabeça de Enxada de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Pick"
|
|
||||||
msgstr "Picareta de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Pick Head"
|
|
||||||
msgstr "Cabeça de Picareta de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Prill"
|
|
||||||
msgstr "Lascas de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Rod"
|
|
||||||
msgstr "Vara de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Spade"
|
|
||||||
msgstr "Pá de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tempered Lode Spade Head"
|
|
||||||
msgstr "Cabeça de Enxada de Veio Mineral Temperado"
|
|
||||||
|
|
||||||
msgid "Tote (1 Slot)"
|
|
||||||
msgstr "Bolsa (1 Compartimento)"
|
|
||||||
|
|
||||||
msgid "Tote (2 Slots)"
|
|
||||||
msgstr "Bolsa (2 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (3 Slots)"
|
|
||||||
msgstr "Bolsa (3 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (4 Slots)"
|
|
||||||
msgstr "Bolsa (4 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (5 Slots)"
|
|
||||||
msgstr "Bolsa (5 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (6 Slots)"
|
|
||||||
msgstr "Bolsa (6 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (7 Slots)"
|
|
||||||
msgstr "Bolsa (7 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote (8 Slots)"
|
|
||||||
msgstr "Bolsa (8 Compartimentos)"
|
|
||||||
|
|
||||||
msgid "Tote Handle"
|
|
||||||
msgstr "Alça de Bolsa"
|
|
||||||
|
|
||||||
msgid "Tree Trunk"
|
|
||||||
msgstr "Tronco de Árvore"
|
|
||||||
|
|
||||||
msgid "Unknown Item"
|
|
||||||
msgstr "Item Desconhecido"
|
|
||||||
|
|
||||||
msgid "Version"
|
|
||||||
msgstr "Versão"
|
|
||||||
|
|
||||||
msgid "Water"
|
|
||||||
msgstr "Água"
|
|
||||||
|
|
||||||
msgid "Wet Aggregate"
|
|
||||||
msgstr "Massa Úmida"
|
|
||||||
|
|
||||||
msgid "Wet Sponge"
|
|
||||||
msgstr "Esponja Molhada"
|
|
||||||
|
|
||||||
msgid "Wooden Adze"
|
|
||||||
msgstr "Enxó de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Frame"
|
|
||||||
msgstr "Estrutura de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Hatchet"
|
|
||||||
msgstr "Machado de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Hatchet Head"
|
|
||||||
msgstr "Cabeça de Machado de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Hinged Panel"
|
|
||||||
msgstr "Painel Articulado de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Ladder"
|
|
||||||
msgstr "Escada de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Mallet"
|
|
||||||
msgstr "Marreta de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Mallet Head"
|
|
||||||
msgstr "Cabeça de Marreta de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Panel"
|
|
||||||
msgstr "Painel de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Pick"
|
|
||||||
msgstr "Picareta de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Pick Head"
|
|
||||||
msgstr "Cabeça de Picareta de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Plank"
|
|
||||||
msgstr "Tábua de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Shelf"
|
|
||||||
msgstr "Estante de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Spade"
|
|
||||||
msgstr "Pá de Madeira"
|
|
||||||
|
|
||||||
msgid "Wooden Spade Head"
|
|
||||||
msgstr "Cabeça de Pá de Madeira"
|
|
||||||
|
|
||||||
msgid "https://content.minetest.net/packages/Warr1024/nodecore/"
|
|
||||||
msgstr "https://content.minetest.net/packages/Warr1024/nodecore/"
|
|
|
@ -1,51 +0,0 @@
|
||||||
#!/usr/bin/perl -w
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
use JSON qw(from_json);
|
|
||||||
|
|
||||||
sub getlang {
|
|
||||||
my $lang = shift();
|
|
||||||
my %db;
|
|
||||||
open(my $fh, "-|", "curl", "https://nodecore.mine.nu/trans/api/translations/nodecore/core/$lang/file/") or die($!);
|
|
||||||
open(my $raw, ">", "src/$lang.txt") or die($!);
|
|
||||||
my $id;
|
|
||||||
while(<$fh>) {
|
|
||||||
print $raw $_;
|
|
||||||
m#^\s*msgid\s+"(.*)"\s*$# and $id = $1;
|
|
||||||
m#^\s*msgstr\s+"(.*)"\s*$# or next;
|
|
||||||
my $str = $1;
|
|
||||||
$str =~ m#\S# or next;
|
|
||||||
$db{$id} = $str;
|
|
||||||
}
|
|
||||||
close($fh);
|
|
||||||
close($raw);
|
|
||||||
return \%db;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub savelang {
|
|
||||||
my $lang = shift();
|
|
||||||
my $en = shift();
|
|
||||||
my %db = %{getlang($lang)};
|
|
||||||
map { $en->{$_} and $db{$_} ne $_ or delete $db{$_} } keys %db;
|
|
||||||
%db or return;
|
|
||||||
open(my $fh, ">", "nc_api.$lang.tr") or die($!);
|
|
||||||
print $fh "# textdomain: nc_api\n";
|
|
||||||
print $fh map { "$_=$db{$_}\n" } sort keys %db;
|
|
||||||
close($fh);
|
|
||||||
warn("updated: $lang\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
my $en = getlang("en");
|
|
||||||
my $page = "https://nodecore.mine.nu/trans/api/translations/?format=json";
|
|
||||||
while($page) {
|
|
||||||
open(my $fh, "-|", "curl", $page) or die($!);
|
|
||||||
my $json = from_json(do { local $/; <$fh> });
|
|
||||||
close($fh);
|
|
||||||
$page = $json->{next};
|
|
||||||
for my $r ( @{$json->{results}} ) {
|
|
||||||
$r->{component}->{slug} eq "core" or next;
|
|
||||||
$r->{component}->{project}->{slug} eq "nodecore" or next;
|
|
||||||
my $code = $r->{language}->{code};
|
|
||||||
$code eq 'en' or savelang($code, $en);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local VoxelArea, ipairs, math, minetest, nodecore, table
|
|
||||||
= VoxelArea, ipairs, math, minetest, nodecore, table
|
|
||||||
local math_floor, table_insert
|
|
||||||
= math.floor, table.insert
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local mapgens = {}
|
|
||||||
nodecore.registered_mapgen_shared = mapgens
|
|
||||||
|
|
||||||
local prios = {}
|
|
||||||
|
|
||||||
function nodecore.register_mapgen_shared(func, prio)
|
|
||||||
prio = prio or 0
|
|
||||||
local min = 1
|
|
||||||
local max = #mapgens + 1
|
|
||||||
while max > min do
|
|
||||||
local try = math_floor((min + max) / 2)
|
|
||||||
local oldp = prios[try]
|
|
||||||
if prio < oldp then
|
|
||||||
min = try + 1
|
|
||||||
else
|
|
||||||
max = try
|
|
||||||
end
|
|
||||||
end
|
|
||||||
table_insert(mapgens, min, func)
|
|
||||||
table_insert(prios, min, prio)
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_on_generated(function(minp, maxp)
|
|
||||||
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
|
||||||
local data = vm:get_data()
|
|
||||||
local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
|
|
||||||
|
|
||||||
for _, v in ipairs(mapgens) do
|
|
||||||
v(minp, maxp, area, data, vm, emin, emax)
|
|
||||||
end
|
|
||||||
|
|
||||||
vm:set_data(data)
|
|
||||||
vm:write_to_map()
|
|
||||||
end)
|
|
|
@ -1,88 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore, pairs, type
|
|
||||||
= minetest, nodecore, pairs, type
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local match_skip = {
|
|
||||||
name = true,
|
|
||||||
param2 = true,
|
|
||||||
param = true,
|
|
||||||
groups = true,
|
|
||||||
stack = true,
|
|
||||||
count = true,
|
|
||||||
excess = true,
|
|
||||||
wear = true,
|
|
||||||
stacked = true,
|
|
||||||
any = true
|
|
||||||
}
|
|
||||||
|
|
||||||
function nodecore.match(thing, crit)
|
|
||||||
if not thing then return end
|
|
||||||
|
|
||||||
if type(crit) == "string" then crit = {name = crit} end
|
|
||||||
|
|
||||||
if crit.any then
|
|
||||||
for _, v in pairs(crit.any) do
|
|
||||||
local found = nodecore.match(thing, v)
|
|
||||||
if found then return found end
|
|
||||||
end
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
thing.count = thing.count or 1
|
|
||||||
|
|
||||||
thing = nodecore.underride({}, thing)
|
|
||||||
if thing.stack then
|
|
||||||
thing.name = thing.stack:get_name()
|
|
||||||
thing.count = thing.stack:get_count()
|
|
||||||
thing.wear = thing.stack:get_wear()
|
|
||||||
thing.stacked = true
|
|
||||||
end
|
|
||||||
if not thing.name then
|
|
||||||
thing = nodecore.underride(thing, minetest.get_node(thing))
|
|
||||||
end
|
|
||||||
local def = minetest.registered_items[thing.name]
|
|
||||||
if (not thing.stacked) and def and def.groups and def.groups.is_stack_only then
|
|
||||||
local stack = nodecore.stack_get(thing)
|
|
||||||
if stack and not stack:is_empty() then
|
|
||||||
thing.name = stack:get_name()
|
|
||||||
def = minetest.registered_items[thing.name]
|
|
||||||
thing.count = stack:get_count()
|
|
||||||
thing.wear = stack:get_wear()
|
|
||||||
end
|
|
||||||
thing.stacked = true
|
|
||||||
end
|
|
||||||
if crit.stacked and not thing.stacked then return end
|
|
||||||
if crit.stacked == false and thing.stacked then return end
|
|
||||||
|
|
||||||
if crit.name and thing.name ~= crit.name then return end
|
|
||||||
if crit.param2 and thing.param2 ~= crit.param2 then return end
|
|
||||||
if crit.param and thing.param ~= crit.param then return end
|
|
||||||
if crit.count and thing.count < crit.count then return end
|
|
||||||
if crit.count and (not crit.excess) and thing.count > crit.count then return end
|
|
||||||
if crit.count == nil and thing.count ~= 1 then return end
|
|
||||||
if crit.wear then
|
|
||||||
if crit.wear < 1 then crit.wear = crit.wear * 65535 end
|
|
||||||
if thing.wear > crit.wear then return end
|
|
||||||
end
|
|
||||||
|
|
||||||
if crit.groups then
|
|
||||||
if (not def) or (not def.groups) then return end
|
|
||||||
for k, v in pairs(crit.groups) do
|
|
||||||
if v == true then
|
|
||||||
if not def.groups[k] then return end
|
|
||||||
elseif v == false then
|
|
||||||
if def.groups[k] then return end
|
|
||||||
else
|
|
||||||
if def.groups[k] ~= v then return end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for k, v in pairs(crit) do
|
|
||||||
if not match_skip[k] then
|
|
||||||
if not def or def[k] ~= v then return end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return thing
|
|
||||||
end
|
|
|
@ -1 +0,0 @@
|
||||||
name = nc_api
|
|
|
@ -1,65 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, minetest, nodecore
|
|
||||||
= math, minetest, nodecore
|
|
||||||
local math_random
|
|
||||||
= math.random
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
function nodecore.register_ambiance(def)
|
|
||||||
local max = def.queue_max or 100
|
|
||||||
local rate = 1 / (def.queue_rate or 20)
|
|
||||||
|
|
||||||
local seen = {}
|
|
||||||
local queue = {}
|
|
||||||
local total = 0
|
|
||||||
|
|
||||||
local batch
|
|
||||||
local time = 0
|
|
||||||
minetest.register_globalstep(function(dtime)
|
|
||||||
time = time + dtime
|
|
||||||
while time > rate do
|
|
||||||
if not batch then
|
|
||||||
if #queue < 1 then return end
|
|
||||||
batch = queue
|
|
||||||
queue = {}
|
|
||||||
total = 0
|
|
||||||
seen = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
local opts = batch[#batch]
|
|
||||||
batch[#batch] = nil
|
|
||||||
if #batch < 1 then batch = nil end
|
|
||||||
|
|
||||||
opts.name = opts.name or def.sound_name
|
|
||||||
opts.gain = opts.gain or def.sound_gain
|
|
||||||
minetest.sound_play(opts.name, opts)
|
|
||||||
|
|
||||||
time = time - rate
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
def.action = function(pos)
|
|
||||||
local hash = minetest.hash_node_position(pos)
|
|
||||||
if seen[hash] then return end
|
|
||||||
seen[hash] = true
|
|
||||||
local opts
|
|
||||||
if def.check then
|
|
||||||
opts = def.check(pos)
|
|
||||||
if not opts then return end
|
|
||||||
else
|
|
||||||
opts = {}
|
|
||||||
end
|
|
||||||
opts.pos = pos
|
|
||||||
if #queue < max then
|
|
||||||
queue[#queue + 1] = opts
|
|
||||||
else
|
|
||||||
local r = math_random(1, total + 1)
|
|
||||||
if r <= #queue then
|
|
||||||
queue[r] = opts
|
|
||||||
end
|
|
||||||
end
|
|
||||||
total = total + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
return nodecore.register_limited_abm(def)
|
|
||||||
end
|
|
|
@ -1,74 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, minetest, nodecore, pairs, unpack
|
|
||||||
= math, minetest, nodecore, pairs, unpack
|
|
||||||
local math_random
|
|
||||||
= math.random
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local genlabels = 0
|
|
||||||
|
|
||||||
function nodecore.register_limited_abm(def)
|
|
||||||
def = nodecore.underride(def, {
|
|
||||||
limited_queue = {},
|
|
||||||
limited_seen = {},
|
|
||||||
limited_qty = 0,
|
|
||||||
limited_max = 1000,
|
|
||||||
limited_interval = 1,
|
|
||||||
limited_jitter = 0.05,
|
|
||||||
limited_action = def.action or function() end,
|
|
||||||
catch_up = false
|
|
||||||
})
|
|
||||||
|
|
||||||
if not def.label then
|
|
||||||
def.label = minetest.get_current_modname() .. ":" .. genlabels
|
|
||||||
genlabels = genlabels + 1
|
|
||||||
end
|
|
||||||
def.limited_alert = def.limited_alert or def.limited_max
|
|
||||||
|
|
||||||
def.action = function(pos, ...)
|
|
||||||
local hash = minetest.hash_node_position(pos)
|
|
||||||
local seen = def.limited_seen
|
|
||||||
if seen[hash] then return end
|
|
||||||
seen[hash] = true
|
|
||||||
|
|
||||||
local q = def.limited_queue
|
|
||||||
local max = def.limited_max
|
|
||||||
local nqty = def.limited_qty + 1
|
|
||||||
if #q < max then
|
|
||||||
q[#q + 1] = {pos, ...}
|
|
||||||
else
|
|
||||||
local r = math_random(1, nqty)
|
|
||||||
if r <= #q then q[r] = {pos, ...} end
|
|
||||||
end
|
|
||||||
def.limited_qty = nqty
|
|
||||||
end
|
|
||||||
|
|
||||||
local function pumpq()
|
|
||||||
minetest.after(def.limited_interval
|
|
||||||
- def.limited_jitter
|
|
||||||
+ def.limited_jitter * math_random() * 2,
|
|
||||||
pumpq)
|
|
||||||
|
|
||||||
if def.limited_qty >= def.limited_alert then
|
|
||||||
minetest.log("limited abm \"" .. def.label .. "\" filled ("
|
|
||||||
.. def.limited_qty .. "/" .. def.limited_max .. ")")
|
|
||||||
end
|
|
||||||
|
|
||||||
local act = def.limited_action
|
|
||||||
for _, args in pairs(def.limited_queue) do
|
|
||||||
local pos = args[1]
|
|
||||||
local node = pos and args[2]
|
|
||||||
local nn = node and minetest.get_node_or_nil(pos)
|
|
||||||
if nn and nn.name == node.name then
|
|
||||||
act(unpack(args))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def.limited_queue = {}
|
|
||||||
def.limited_seen = {}
|
|
||||||
def.limited_qty = 0
|
|
||||||
end
|
|
||||||
pumpq()
|
|
||||||
|
|
||||||
return minetest.register_abm(def)
|
|
||||||
end
|
|
|
@ -1,34 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore, pairs, string, table
|
|
||||||
= minetest, nodecore, pairs, string, table
|
|
||||||
local string_format, table_concat, table_sort
|
|
||||||
= string.format, table.concat, table.sort
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
nodecore.coremods = {}
|
|
||||||
|
|
||||||
function nodecore.amcoremod(v)
|
|
||||||
nodecore.coremods[minetest.get_current_modname()] = (v == nil) or v
|
|
||||||
end
|
|
||||||
nodecore.amcoremod()
|
|
||||||
|
|
||||||
for k, v in pairs(minetest.registered_chatcommands) do
|
|
||||||
if k == "mods" then
|
|
||||||
minetest.override_chatcommand(k, nodecore.underride({
|
|
||||||
func = function()
|
|
||||||
local mods = {}
|
|
||||||
for _, n in pairs(minetest.get_modnames()) do
|
|
||||||
if not nodecore.coremods[n] then
|
|
||||||
mods[#mods + 1] = n
|
|
||||||
end
|
|
||||||
end
|
|
||||||
table_sort(mods)
|
|
||||||
return true, string_format("%s(%s)%s%s",
|
|
||||||
nodecore.product,
|
|
||||||
nodecore.version or "DEV",
|
|
||||||
#mods > 0 and " + " or "",
|
|
||||||
table_concat(mods, ", "))
|
|
||||||
end
|
|
||||||
}, v))
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,68 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local error, math, minetest, nodecore, type
|
|
||||||
= error, math, minetest, nodecore, type
|
|
||||||
local math_floor, math_sqrt
|
|
||||||
= math.floor, math.sqrt
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
function nodecore.register_soaking_abm(def)
|
|
||||||
def.qtyfield = def.qtyfield or "soakqty"
|
|
||||||
def.timefield = def.timefield or "soaktime"
|
|
||||||
|
|
||||||
def.soakinterval = def.soakinterval or ((def.interval or 1) * (def.chance or 1))
|
|
||||||
|
|
||||||
if not def.soakrate then error("soaking abm missing soakrate callback") end
|
|
||||||
if not def.soakcheck then error("soaking abm missing soakcheck callback") end
|
|
||||||
|
|
||||||
def.soakvary = def.soakvary or 0.25
|
|
||||||
if not def.soakrand then
|
|
||||||
if def.soakvary then
|
|
||||||
def.soakrand = function(rate, ticks)
|
|
||||||
return rate * (1 + def.soakvary * nodecore.boxmuller()
|
|
||||||
/ math_sqrt(ticks)) * ticks
|
|
||||||
end
|
|
||||||
else
|
|
||||||
def.soakrand = function(rate, ticks) return rate * ticks end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def.action = function(pos, ...)
|
|
||||||
local now = minetest.get_gametime()
|
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local total = meta:get_float(def.qtyfield) or 0
|
|
||||||
local start = meta:get_float(def.timefield)
|
|
||||||
start = start and start ~= 0 and start or now
|
|
||||||
|
|
||||||
local rate = 0
|
|
||||||
local delta = 0
|
|
||||||
if start <= now then
|
|
||||||
rate = def.soakrate(pos, ...)
|
|
||||||
if rate == false then
|
|
||||||
meta:set_string(def.qtyfield, "")
|
|
||||||
meta:set_string(def.timefield, "")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
rate = rate or 0
|
|
||||||
local ticks = 1 + math_floor((now - start) / def.soakinterval)
|
|
||||||
delta = def.soakrand(rate, ticks)
|
|
||||||
total = total + delta
|
|
||||||
start = start + ticks * def.soakinterval
|
|
||||||
end
|
|
||||||
|
|
||||||
local set = def.soakcheck({
|
|
||||||
rate = rate,
|
|
||||||
delta = delta,
|
|
||||||
total = total
|
|
||||||
}, pos, ...)
|
|
||||||
if set == false then
|
|
||||||
meta:set_string(def.qtyfield, "")
|
|
||||||
meta:set_string(def.timefield, "")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
meta:set_float(def.qtyfield, set and type(set) == "number" and set or total)
|
|
||||||
meta:set_float(def.timefield, start)
|
|
||||||
end
|
|
||||||
|
|
||||||
return nodecore.register_limited_abm(def)
|
|
||||||
end
|
|
Before Width: | Height: | Size: 429 B |
Before Width: | Height: | Size: 103 B |
|
@ -1,26 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local error, ipairs, minetest, nodecore
|
|
||||||
= error, ipairs, minetest, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
function nodecore.ezschematic(key, yslices, init)
|
|
||||||
local size = {}
|
|
||||||
local data = {}
|
|
||||||
size.y = #yslices
|
|
||||||
for y, ys in ipairs(yslices) do
|
|
||||||
if size.z and size.z ~= #ys then error("inconsistent z size") end
|
|
||||||
size.z = #ys
|
|
||||||
for z, zs in ipairs(ys) do
|
|
||||||
if size.x and size.x ~= #zs then error("inconsistent x size") end
|
|
||||||
size.x = #zs
|
|
||||||
for x = 1, zs:len() do
|
|
||||||
data[(z - 1) * size.x * size.y + (y - 1) * size.x + x]
|
|
||||||
= key[zs:sub(x, x)]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
init = init or {}
|
|
||||||
init.size = size
|
|
||||||
init.data = data
|
|
||||||
return minetest.register_schematic(init)
|
|
||||||
end
|
|
|
@ -1,58 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local nodecore, pairs, vector
|
|
||||||
= nodecore, pairs, vector
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local alldirs = {}
|
|
||||||
for _, v in pairs(nodecore.dirs()) do
|
|
||||||
alldirs[v.n] = v
|
|
||||||
end
|
|
||||||
|
|
||||||
local facedirs = {
|
|
||||||
{"u", "w"},
|
|
||||||
{"u", "n"},
|
|
||||||
{"u", "e"},
|
|
||||||
{"n", "u"},
|
|
||||||
{"n", "w"},
|
|
||||||
{"n", "d"},
|
|
||||||
{"n", "e"},
|
|
||||||
{"s", "d"},
|
|
||||||
{"s", "w"},
|
|
||||||
{"s", "u"},
|
|
||||||
{"s", "e"},
|
|
||||||
{"e", "s"},
|
|
||||||
{"e", "u"},
|
|
||||||
{"e", "n"},
|
|
||||||
{"e", "d"},
|
|
||||||
{"w", "s"},
|
|
||||||
{"w", "d"},
|
|
||||||
{"w", "n"},
|
|
||||||
{"w", "u"},
|
|
||||||
{"d", "s"},
|
|
||||||
{"d", "e"},
|
|
||||||
{"d", "n"},
|
|
||||||
{"d", "w"},
|
|
||||||
[0] = {"u", "s"}
|
|
||||||
}
|
|
||||||
|
|
||||||
local function cross(a, b)
|
|
||||||
return {
|
|
||||||
x = a.y * b.z - a.z * b.y,
|
|
||||||
y = a.z * b.x - a.x * b.z,
|
|
||||||
z = a.x * b.y - a.y * b.x
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
for k, t in pairs(facedirs) do
|
|
||||||
t.id = k
|
|
||||||
t.t = alldirs[t[1]]
|
|
||||||
t.f = alldirs[t[2]]
|
|
||||||
t[2] = nil
|
|
||||||
t[1] = nil
|
|
||||||
t.l = cross(t.t, t.f)
|
|
||||||
t.r = vector.multiply(t.l, -1)
|
|
||||||
t.b = vector.multiply(t.t, -1)
|
|
||||||
t.k = vector.multiply(t.f, -1)
|
|
||||||
end
|
|
||||||
|
|
||||||
nodecore.facedirs = facedirs
|
|
|
@ -1,19 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore, pairs
|
|
||||||
= minetest, nodecore, pairs
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local queue
|
|
||||||
|
|
||||||
function nodecore.fallcheck(pos)
|
|
||||||
if not queue then
|
|
||||||
queue = {}
|
|
||||||
minetest.after(0, function()
|
|
||||||
for _, p in pairs(queue) do
|
|
||||||
minetest.check_for_falling(p)
|
|
||||||
end
|
|
||||||
queue = nil
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
queue[minetest.pos_to_string(pos)] = pos
|
|
||||||
end
|
|
|
@ -1,273 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ItemStack, ipairs, math, minetest, nodecore, pairs, type, unpack
|
|
||||||
= ItemStack, ipairs, math, minetest, nodecore, pairs, type, unpack
|
|
||||||
local math_cos, math_log, math_pi, math_random, math_sin, math_sqrt
|
|
||||||
= math.cos, math.log, math.pi, math.random, math.sin, math.sqrt
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
for k, v in pairs(minetest) do
|
|
||||||
if type(v) == "function" then
|
|
||||||
-- Late-bind in case minetest methods overridden.
|
|
||||||
nodecore[k] = function(...) return minetest[k](...) end
|
|
||||||
else
|
|
||||||
nodecore[k] = v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function underride(t, u, u2, ...)
|
|
||||||
if u2 then underride(u, u2, ...) end
|
|
||||||
for k, v in pairs(u) do
|
|
||||||
if t[k] == nil then
|
|
||||||
t[k] = v
|
|
||||||
elseif type(t[k]) == "table" and type(v) == "table" then
|
|
||||||
underride(t[k], v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return t
|
|
||||||
end
|
|
||||||
nodecore.underride = underride
|
|
||||||
|
|
||||||
function nodecore.mkreg()
|
|
||||||
local t = {}
|
|
||||||
local f = function(x) t[#t + 1] = x end
|
|
||||||
return f, t
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.memoize(func)
|
|
||||||
local cache
|
|
||||||
return function()
|
|
||||||
if cache then return cache[1] end
|
|
||||||
cache = {func()}
|
|
||||||
return cache[1]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.dirs()
|
|
||||||
return {
|
|
||||||
{n = "e", x = 1, y = 0, z = 0},
|
|
||||||
{n = "w", x = -1, y = 0, z = 0},
|
|
||||||
{n = "u", x = 0, y = 1, z = 0},
|
|
||||||
{n = "d", x = 0, y = -1, z = 0},
|
|
||||||
{n = "n", x = 0, y = 0, z = 1},
|
|
||||||
{n = "s", x = 0, y = 0, z = -1}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.pickrand(tbl, weight)
|
|
||||||
weight = weight or function() end
|
|
||||||
local t = {}
|
|
||||||
local max = 0
|
|
||||||
for k, v in pairs(tbl) do
|
|
||||||
local w = weight(v) or 1
|
|
||||||
if w > 0 then
|
|
||||||
max = max + w
|
|
||||||
t[#t + 1] = {w = w, k = k, v = v}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if max <= 0 then return end
|
|
||||||
max = math_random() * max
|
|
||||||
for _, v in ipairs(t) do
|
|
||||||
max = max - v.w
|
|
||||||
if max <= 0 then return v.v, v.k end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
do
|
|
||||||
local saved
|
|
||||||
function nodecore.boxmuller()
|
|
||||||
local old = saved
|
|
||||||
if old then
|
|
||||||
saved = nil
|
|
||||||
return old
|
|
||||||
end
|
|
||||||
local r = math_sqrt(-2 * math_log(math_random()))
|
|
||||||
local t = 2 * math_pi * math_random()
|
|
||||||
saved = r * math_sin(t)
|
|
||||||
return r * math_cos(t)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.extend_item(name, func)
|
|
||||||
local orig = minetest.registered_items[name] or {}
|
|
||||||
local copy = {}
|
|
||||||
for k, v in pairs(orig) do copy[k] = v end
|
|
||||||
copy = func(copy, orig) or copy
|
|
||||||
minetest.register_item(":" .. name, copy)
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.fixedbox(x, ...)
|
|
||||||
return {type = "fixed", fixed = {
|
|
||||||
x or {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
|
||||||
...
|
|
||||||
}}
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.interact(player)
|
|
||||||
if type(player) ~= "string" then
|
|
||||||
player = player:get_player_name()
|
|
||||||
end
|
|
||||||
return minetest.get_player_privs(player).interact
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.wieldgroup(who, group)
|
|
||||||
local wielded = who and who:get_wielded_item()
|
|
||||||
local nodedef = minetest.registered_nodes[wielded:get_name()]
|
|
||||||
if nodedef then return nodedef.groups and nodedef.groups[group] end
|
|
||||||
local caps = wielded and wielded:get_tool_capabilities()
|
|
||||||
return caps and caps.groupcaps and caps.groupcaps[group]
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.toolspeed(what, groups)
|
|
||||||
if not what then return end
|
|
||||||
local dg = what:get_tool_capabilities().groupcaps
|
|
||||||
local t
|
|
||||||
for gn, lv in pairs(groups) do
|
|
||||||
local gt = dg[gn]
|
|
||||||
gt = gt and gt.times
|
|
||||||
gt = gt and gt[lv]
|
|
||||||
if gt and (not t or t > gt) then t = gt end
|
|
||||||
end
|
|
||||||
if (not t) and (not what:is_empty()) then
|
|
||||||
return nodecore.toolspeed(ItemStack(""), groups)
|
|
||||||
end
|
|
||||||
return t
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.interval(after, func)
|
|
||||||
local function go()
|
|
||||||
minetest.after(after, go)
|
|
||||||
return func()
|
|
||||||
end
|
|
||||||
minetest.after(after, go)
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.wear_wield(player, groups, qty)
|
|
||||||
local wielded = player:get_wielded_item()
|
|
||||||
if wielded then
|
|
||||||
local wdef = wielded:get_definition()
|
|
||||||
local tp = wielded:get_tool_capabilities()
|
|
||||||
local dp = minetest.get_dig_params(groups, tp)
|
|
||||||
if wdef and wdef.after_use then
|
|
||||||
wielded = wdef.after_use(wielded, player, nil, dp) or wielded
|
|
||||||
else
|
|
||||||
if not minetest.settings:get_bool("creative_mode") then
|
|
||||||
wielded:add_wear(dp.wear * (qty or 1))
|
|
||||||
if wielded:get_count() <= 0 and wdef.sound
|
|
||||||
and wdef.sound.breaks then
|
|
||||||
minetest.sound_play(wdef.sound.breaks,
|
|
||||||
{object = player, gain = 0.5})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return player:set_wielded_item(wielded)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.consume_wield(player, qty)
|
|
||||||
local wielded = player:get_wielded_item()
|
|
||||||
if wielded then
|
|
||||||
local wdef = wielded:get_definition()
|
|
||||||
if wdef.stack_max > 1 and qty then
|
|
||||||
local have = wielded:get_count() - qty
|
|
||||||
if have <= 0 then
|
|
||||||
wielded = ItemStack("")
|
|
||||||
else
|
|
||||||
wielded:set_count(have)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return player:set_wielded_item(wielded)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.loaded_mods()
|
|
||||||
local t = {}
|
|
||||||
for _, v in pairs(minetest.get_modnames()) do
|
|
||||||
t[v] = true
|
|
||||||
end
|
|
||||||
return t
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.node_group(name, pos, node)
|
|
||||||
node = node or minetest.get_node(pos)
|
|
||||||
local def = minetest.registered_nodes[node.name] or {}
|
|
||||||
return def.groups and def.groups[name]
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.item_eject(pos, stack, speed, qty, vel)
|
|
||||||
stack = ItemStack(stack)
|
|
||||||
speed = speed or 0
|
|
||||||
vel = vel or {x = 0, y = 0, z = 0}
|
|
||||||
if speed == 0 and vel.x == 0 and vel.y == 0 and vel.z == 0
|
|
||||||
and nodecore.place_stack and minetest.get_node(pos).name == "air" then
|
|
||||||
stack:set_count(stack:get_count() * (qty or 1))
|
|
||||||
return nodecore.place_stack(pos, stack)
|
|
||||||
end
|
|
||||||
for _ = 1, (qty or 1) do
|
|
||||||
local v = {
|
|
||||||
x = vel.x + (math_random() - 0.5) * speed,
|
|
||||||
y = vel.y + math_random() * speed,
|
|
||||||
z = vel.z + (math_random() - 0.5) * speed,
|
|
||||||
}
|
|
||||||
local p = {
|
|
||||||
x = v.x > 0 and pos.x + 0.4 or v.x < 0 and pos.x - 0.4 or pos.x,
|
|
||||||
y = pos.y + 0.25,
|
|
||||||
z = v.z > 0 and pos.z + 0.4 or v.z < 0 and pos.z - 0.4 or pos.z,
|
|
||||||
}
|
|
||||||
local obj = minetest.add_item(p, stack)
|
|
||||||
if obj then obj:set_velocity(v) end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.quenched(pos)
|
|
||||||
return #minetest.find_nodes_in_area(
|
|
||||||
{x = pos.x - 1, y = pos.y - 1, z = pos.z - 1},
|
|
||||||
{x = pos.x + 1, y = pos.y + 1, z = pos.z + 1},
|
|
||||||
{"group:coolant"}) > 0
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.node_spin_custom(...)
|
|
||||||
local arr = {...}
|
|
||||||
arr[0] = false
|
|
||||||
local lut = {}
|
|
||||||
for i = 1, #arr do
|
|
||||||
lut[arr[i - 1]] = arr[i]
|
|
||||||
end
|
|
||||||
lut[arr[#arr]] = arr[1]
|
|
||||||
local qty = #arr
|
|
||||||
|
|
||||||
return function(pos, node, clicker, itemstack)
|
|
||||||
node = node or minetest.get_node(pos)
|
|
||||||
node.param2 = lut[node.param2] or lut[false]
|
|
||||||
if clicker:is_player() then
|
|
||||||
minetest.log(clicker:get_player_name() .. " spins "
|
|
||||||
.. node.name .. " at " .. minetest.pos_to_string(pos)
|
|
||||||
.. " to param2 " .. node.param2 .. " ("
|
|
||||||
.. qty .. " total)")
|
|
||||||
end
|
|
||||||
minetest.swap_node(pos, node)
|
|
||||||
nodecore.node_sound(pos, "place")
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
if def.on_spin then def.on_spin(pos, node) end
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function nodecore.node_spin_filtered(func)
|
|
||||||
local rots = {}
|
|
||||||
for i = 0, 23 do
|
|
||||||
local f = nodecore.facedirs[i]
|
|
||||||
local hit
|
|
||||||
for j = 1, #rots do
|
|
||||||
if not hit then
|
|
||||||
local o = nodecore.facedirs[rots[j]]
|
|
||||||
hit = hit or func(f, o)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if not hit then rots[#rots + 1] = f.id end
|
|
||||||
end
|
|
||||||
return nodecore.node_spin_custom(unpack(rots))
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.node_change(pos, node, newname)
|
|
||||||
if node.name == newname then return end
|
|
||||||
return minetest.set_node(pos, underride({name = newname}, node))
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore
|
|
||||||
= minetest, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
function nodecore.buildable_to(thing)
|
|
||||||
if not thing.name then
|
|
||||||
thing = nodecore.underride(thing, minetest.get_node(thing))
|
|
||||||
end
|
|
||||||
if thing.name == "ignore" then return end
|
|
||||||
local def = minetest.registered_items[thing.name] or {}
|
|
||||||
return def.buildable_to
|
|
||||||
end
|
|
|
@ -1,32 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, minetest, nodecore
|
|
||||||
= math, minetest, nodecore
|
|
||||||
local math_ceil
|
|
||||||
= math.ceil
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local function getphealth(player)
|
|
||||||
return player:get_hp() + player:get_meta():get_float("dhp")
|
|
||||||
end
|
|
||||||
nodecore.getphealth = getphealth
|
|
||||||
|
|
||||||
local function setphealth(player, hp)
|
|
||||||
if hp > 20 then hp = 20 end
|
|
||||||
if hp < 0 then hp = 0 end
|
|
||||||
local whole = math_ceil(hp)
|
|
||||||
if whole == 0 then whole = 1 end
|
|
||||||
local dhp = hp - whole
|
|
||||||
player:get_meta():set_float("dhp", dhp)
|
|
||||||
return player:set_hp(whole)
|
|
||||||
end
|
|
||||||
nodecore.setphealth = setphealth
|
|
||||||
|
|
||||||
local function addphealth(player, hp)
|
|
||||||
return setphealth(player, getphealth(player) + hp)
|
|
||||||
end
|
|
||||||
nodecore.addphealth = addphealth
|
|
||||||
|
|
||||||
function nodecore.node_punch_hurt(pos, node, puncher, ...)
|
|
||||||
if puncher and puncher:is_player() then addphealth(puncher, -1) end
|
|
||||||
return minetest.node_punch(pos, node, puncher, ...)
|
|
||||||
end
|
|
|
@ -1,41 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ipairs, math, minetest, nodecore, pairs, table
|
|
||||||
= ipairs, math, minetest, nodecore, pairs, table
|
|
||||||
local math_random, table_insert
|
|
||||||
= math.random, table.insert
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local dirs = nodecore.dirs()
|
|
||||||
|
|
||||||
function nodecore.scan_flood(pos, range, func)
|
|
||||||
local q = {pos}
|
|
||||||
local seen = { }
|
|
||||||
for d = 0, range do
|
|
||||||
local nxt = {}
|
|
||||||
for _, p in ipairs(q) do
|
|
||||||
local res = func(p, d)
|
|
||||||
if res then return res end
|
|
||||||
if res == nil then
|
|
||||||
for _, v in pairs(dirs) do
|
|
||||||
local np = {
|
|
||||||
x = p.x + v.x,
|
|
||||||
y = p.y + v.y,
|
|
||||||
z = p.z + v.z
|
|
||||||
}
|
|
||||||
local nk = minetest.hash_node_position(np)
|
|
||||||
if not seen[nk] then
|
|
||||||
seen[nk] = true
|
|
||||||
np.dir = v
|
|
||||||
table_insert(nxt, np)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if #nxt < 1 then break end
|
|
||||||
for i = 1, #nxt do
|
|
||||||
local j = math_random(1, #nxt)
|
|
||||||
nxt[i], nxt[j] = nxt[j], nxt[i]
|
|
||||||
end
|
|
||||||
q = nxt
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,76 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ItemStack, ipairs, math, minetest, nodecore, pairs, type, unpack,
|
|
||||||
vector
|
|
||||||
= ItemStack, ipairs, math, minetest, nodecore, pairs, type, unpack,
|
|
||||||
vector
|
|
||||||
local math_exp, math_random, math_sin, math_sqrt
|
|
||||||
= math.exp, math.random, math.sin, math.sqrt
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local oldplay = minetest.sound_play
|
|
||||||
function minetest.sound_play(name, spec, ...)
|
|
||||||
if spec and type(spec) == "table" and spec.pitch == nil then
|
|
||||||
spec.pitch = math_exp((math_random() - 0.5) * (spec.pitchvary or 0.05))
|
|
||||||
end
|
|
||||||
return oldplay(name, spec, ...)
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.windiness(y)
|
|
||||||
if y < 0 then return 0 end
|
|
||||||
if y > 512 then y = 512 end
|
|
||||||
return math_sqrt(y) * (1 + 0.5 * math_sin(minetest.get_gametime() / 5))
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.stack_sounds(pos, kind, stack)
|
|
||||||
stack = stack or nodecore.stack_get(pos)
|
|
||||||
stack = ItemStack(stack)
|
|
||||||
if stack:is_empty() then return end
|
|
||||||
local def = minetest.registered_items[stack:get_name()] or {}
|
|
||||||
if (not def.sounds) or (not def.sounds[kind]) then return end
|
|
||||||
local t = {}
|
|
||||||
for k, v in pairs(def.sounds[kind]) do t[k] = v end
|
|
||||||
t.pos = pos
|
|
||||||
return minetest.sound_play(t.name, t)
|
|
||||||
end
|
|
||||||
function nodecore.stack_sounds_delay(...)
|
|
||||||
local t = {...}
|
|
||||||
minetest.after(0, function()
|
|
||||||
nodecore.stack_sounds(unpack(t))
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
function nodecore.sounds(name, gfoot, gdug, gplace)
|
|
||||||
return {
|
|
||||||
footstep = {name = name, gain = gfoot or 0.2},
|
|
||||||
dig = {name = name, gain = gdug or 0.5},
|
|
||||||
dug = {name = name, gain = gdug or 1},
|
|
||||||
place = {name = name, gain = gplace or 1}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.sound_play_except(name, def, pname)
|
|
||||||
if not pname then
|
|
||||||
return minetest.sound_play(name, def)
|
|
||||||
end
|
|
||||||
if type(pname) ~= "string" then
|
|
||||||
pname = pname:get_player_name()
|
|
||||||
end
|
|
||||||
for _, p in ipairs(minetest.get_connected_players()) do
|
|
||||||
local pn = p:get_player_name()
|
|
||||||
if pn ~= pname and ((not def.pos)
|
|
||||||
or (vector.distance(p:get_pos(), def.pos) <= 32)) then
|
|
||||||
def.to_player = pn
|
|
||||||
minetest.sound_play(name, def)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.node_sound(pos, kind, opts)
|
|
||||||
if nodecore.stack_sounds(pos, kind) then return end
|
|
||||||
local node = opts and opts.node or minetest.get_node(pos)
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
if (not def.sounds) or (not def.sounds[kind]) then return end
|
|
||||||
local t = {}
|
|
||||||
for k, v in pairs(def.sounds[kind]) do t[k] = v end
|
|
||||||
t.pos = pos
|
|
||||||
return nodecore.sound_play_except(t.name, t, opts and opts.except)
|
|
||||||
end
|
|
|
@ -1,79 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ItemStack, ipairs, minetest, nodecore
|
|
||||||
= ItemStack, ipairs, minetest, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local function family(stack)
|
|
||||||
if stack:is_empty() then return "" end
|
|
||||||
local name = stack:get_name()
|
|
||||||
local def = minetest.registered_items[name]
|
|
||||||
return def and def.stackfamily or stack:to_string()
|
|
||||||
end
|
|
||||||
function nodecore.stack_merge(dest, src)
|
|
||||||
if dest:is_empty() then return dest:add_item(src) end
|
|
||||||
if family(src) ~= family(dest) then
|
|
||||||
return dest:add_item(src)
|
|
||||||
end
|
|
||||||
local o = src:get_name()
|
|
||||||
src:set_name(dest:get_name())
|
|
||||||
src = dest:add_item(src)
|
|
||||||
if not src:is_empty() then
|
|
||||||
src:set_name(o)
|
|
||||||
end
|
|
||||||
return src
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.node_inv(pos)
|
|
||||||
return minetest.get_meta(pos):get_inventory()
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.stack_get(pos)
|
|
||||||
return nodecore.node_inv(pos):get_stack("solo", 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function update(pos, ...)
|
|
||||||
for _, v in ipairs(nodecore.visinv_update_ents(pos)) do
|
|
||||||
v:get_luaentity():itemcheck()
|
|
||||||
end
|
|
||||||
return ...
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.stack_set(pos, stack)
|
|
||||||
return update(pos, nodecore.node_inv(pos):set_stack("solo", 1, ItemStack(stack)))
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.stack_add(pos, stack)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
if def.stack_allow then
|
|
||||||
local ret = def.stack_allow(pos, node, stack)
|
|
||||||
if ret == false then return stack end
|
|
||||||
if ret and ret ~= true then return ret end
|
|
||||||
end
|
|
||||||
stack = ItemStack(stack)
|
|
||||||
local item = nodecore.stack_get(pos)
|
|
||||||
local left
|
|
||||||
if item:is_empty() then
|
|
||||||
left = nodecore.node_inv(pos):add_item("solo", stack)
|
|
||||||
else
|
|
||||||
left = nodecore.stack_merge(item, stack)
|
|
||||||
nodecore.stack_set(pos, item)
|
|
||||||
end
|
|
||||||
if left:get_count() ~= stack:get_count() then
|
|
||||||
nodecore.stack_sounds(pos, "place")
|
|
||||||
end
|
|
||||||
return update(pos, left)
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.stack_giveto(pos, player)
|
|
||||||
local stack = nodecore.stack_get(pos)
|
|
||||||
local qty = stack:get_count()
|
|
||||||
if qty < 1 then return true end
|
|
||||||
|
|
||||||
stack = player:get_inventory():add_item("main", stack)
|
|
||||||
if stack:get_count() == qty then return stack:is_empty() end
|
|
||||||
|
|
||||||
nodecore.stack_sounds(pos, "dug")
|
|
||||||
nodecore.stack_set(pos, stack)
|
|
||||||
return stack:is_empty()
|
|
||||||
end
|
|
|
@ -1,35 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, nodecore, pairs
|
|
||||||
= math, nodecore, pairs
|
|
||||||
local math_pow
|
|
||||||
= math.pow
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local basetimes = {
|
|
||||||
cracky = 3,
|
|
||||||
thumpy = 2,
|
|
||||||
choppy = 2,
|
|
||||||
crumbly = 0.5,
|
|
||||||
snappy = 0.4,
|
|
||||||
}
|
|
||||||
|
|
||||||
function nodecore.toolcaps(opts)
|
|
||||||
if opts.uses == nil then opts.uses = 1 end
|
|
||||||
local gcaps = {}
|
|
||||||
for gn, bt in pairs(basetimes) do
|
|
||||||
local lv = opts[gn]
|
|
||||||
if lv then
|
|
||||||
local times = {}
|
|
||||||
for n = 1, lv do
|
|
||||||
local tt = math_pow(0.5, lv - n) * bt
|
|
||||||
if tt < 0.25 then tt = 0.25 end
|
|
||||||
times[n] = tt
|
|
||||||
end
|
|
||||||
gcaps[gn] = {
|
|
||||||
times = times,
|
|
||||||
uses = 5 * math_pow(3, lv) * opts.uses
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return { groupcaps = gcaps, opts = opts }
|
|
||||||
end
|
|
|
@ -1,48 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ipairs, minetest, nodecore, pairs, table, type
|
|
||||||
= ipairs, minetest, nodecore, pairs, table, type
|
|
||||||
local table_sort
|
|
||||||
= table.sort
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local modname = minetest.get_current_modname()
|
|
||||||
|
|
||||||
local strings = {}
|
|
||||||
local strings_dirty
|
|
||||||
|
|
||||||
local prefix = minetest.translate(modname, "x")
|
|
||||||
prefix = prefix:sub(1, prefix:find(modname) - 1)
|
|
||||||
|
|
||||||
function nodecore.translate_inform(str)
|
|
||||||
if (not str) or (type(str) ~= "string") or (#str < 1)
|
|
||||||
or (str:sub(1, #prefix) == prefix) then return end
|
|
||||||
|
|
||||||
if not strings[str] then
|
|
||||||
strings[str] = true
|
|
||||||
strings_dirty = true
|
|
||||||
end
|
|
||||||
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.translate(str, ...)
|
|
||||||
if not nodecore.translate_inform(str) then return str end
|
|
||||||
return minetest.translate(modname, str, ...)
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_globalstep(function()
|
|
||||||
if not strings_dirty then return end
|
|
||||||
strings_dirty = nil
|
|
||||||
|
|
||||||
local keys = {}
|
|
||||||
for k in pairs(strings) do keys[#keys + 1] = k end
|
|
||||||
table_sort(keys)
|
|
||||||
|
|
||||||
local data = "# textdomain: " .. modname .. "\n"
|
|
||||||
for _, k in ipairs(keys) do
|
|
||||||
data = data .. k .. "=" .. "\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
local p = minetest.get_worldpath() .. "/" .. modname .. ".template.tr"
|
|
||||||
return minetest.safe_file_write(p, data)
|
|
||||||
end)
|
|
|
@ -1,12 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, tonumber
|
|
||||||
= math, tonumber
|
|
||||||
local math_floor
|
|
||||||
= math.floor
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local stamp = tonumber("$Format:%at$")
|
|
||||||
if not stamp then return end
|
|
||||||
stamp = math_floor((stamp - 1540612800) / 60)
|
|
||||||
stamp = ("00000000" .. stamp):sub(-8)
|
|
||||||
return stamp .. "-$Format:%h$"
|
|
|
@ -1,168 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local ItemStack, ipairs, minetest, nodecore, pairs, type
|
|
||||||
= ItemStack, ipairs, minetest, nodecore, pairs, type
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local function addgroups(sum, pos)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
if not def.groups then return end
|
|
||||||
for k, v in pairs(def.groups) do
|
|
||||||
sum[k] = (sum[k] or 0) + v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function craftcheck(recipe, pos, node, data, xx, xz, zx, zz)
|
|
||||||
local function rel(x, y, z)
|
|
||||||
return {
|
|
||||||
x = pos.x + xx * x + zx * z,
|
|
||||||
y = pos.y + y,
|
|
||||||
z = pos.z + xz * x + zz * z
|
|
||||||
}
|
|
||||||
end
|
|
||||||
data.rel = rel
|
|
||||||
data.wield = ItemStack(data.wield or data.crafter and data.crafter:get_wielded_item())
|
|
||||||
if recipe.check and not recipe.check(pos, data) then return end
|
|
||||||
if recipe.wield and (not data.wield or not nodecore.match(
|
|
||||||
{stack = data.wield}, recipe.wield)) then return end
|
|
||||||
if recipe.normal then
|
|
||||||
if data.pointed.type ~= "node" or
|
|
||||||
recipe.normal.y ~= data.pointed.above.y - data.pointed.under.y then return end
|
|
||||||
local rx = recipe.normal.x * xx + recipe.normal.z * zx
|
|
||||||
if rx ~= data.pointed.above.x - data.pointed.under.x then return end
|
|
||||||
local rz = recipe.normal.x * xz + recipe.normal.z * zz
|
|
||||||
if rz ~= data.pointed.above.z - data.pointed.under.z then return end
|
|
||||||
end
|
|
||||||
for _, v in pairs(recipe.nodes) do
|
|
||||||
if v ~= recipe.root and v.match then
|
|
||||||
local p = rel(v.x, v.y, v.z)
|
|
||||||
if not nodecore.match(p, v.match) then return end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if recipe.touchgroups then
|
|
||||||
local sum = {}
|
|
||||||
addgroups(sum, rel(1, 0, 0))
|
|
||||||
addgroups(sum, rel(-1, 0, 0))
|
|
||||||
addgroups(sum, rel(0, 1, 0))
|
|
||||||
addgroups(sum, rel(0, -1, 0))
|
|
||||||
addgroups(sum, rel(0, 0, 1))
|
|
||||||
addgroups(sum, rel(0, 0, -1))
|
|
||||||
for k, v in pairs(recipe.touchgroups) do
|
|
||||||
local w = sum[k] or 0
|
|
||||||
if v > 0 and w < v then return end
|
|
||||||
if v <= 0 and w > -v then return end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
local mindur = recipe.duration or 0
|
|
||||||
if type(mindur) == "function" then mindur = mindur(recipe, pos, node, data) end
|
|
||||||
if recipe.toolgroups then
|
|
||||||
if not data.wield then return end
|
|
||||||
local dg = data.wield:get_tool_capabilities().groupcaps
|
|
||||||
local t
|
|
||||||
for gn, lv in pairs(recipe.toolgroups) do
|
|
||||||
local gt = dg[gn]
|
|
||||||
gt = gt and gt.times
|
|
||||||
gt = gt and gt[lv]
|
|
||||||
if gt and (not t or t > gt) then t = gt end
|
|
||||||
end
|
|
||||||
if not t then return end
|
|
||||||
mindur = mindur + t
|
|
||||||
end
|
|
||||||
if mindur > 0 then
|
|
||||||
if not data.duration then return end
|
|
||||||
local dur = data.duration
|
|
||||||
if type(dur) == "function" then dur = dur(pos, data) end
|
|
||||||
if not dur or dur < mindur then
|
|
||||||
if data.inprogress then data.inprogress(pos, data) end
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if data.before then data.before(pos, data) end
|
|
||||||
if recipe.before then recipe.before(pos, data) end
|
|
||||||
for _, v in ipairs(recipe.nodes) do
|
|
||||||
if v.replace then
|
|
||||||
local p = rel(v.x, v.y, v.z)
|
|
||||||
local r = v.replace
|
|
||||||
while type(r) == "function" do
|
|
||||||
r = r(p, v)
|
|
||||||
end
|
|
||||||
if r and type(r) == "string" then
|
|
||||||
r = {name = r}
|
|
||||||
end
|
|
||||||
if v.match.excess then
|
|
||||||
local s = nodecore.stack_get(p)
|
|
||||||
local x = s:get_count() - (v.match.count or 1)
|
|
||||||
if x > 0 then
|
|
||||||
s:set_count(x)
|
|
||||||
nodecore.item_eject(p, s, 0.001)
|
|
||||||
end
|
|
||||||
nodecore.stack_set(p, ItemStack(""))
|
|
||||||
end
|
|
||||||
if r then
|
|
||||||
local n = minetest.get_node(p)
|
|
||||||
r.param2 = n.param2
|
|
||||||
minetest.set_node(p, r)
|
|
||||||
nodecore.node_sound(p, "place")
|
|
||||||
nodecore.fallcheck(p)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if recipe.items then
|
|
||||||
for _, v in pairs(recipe.items) do
|
|
||||||
nodecore.item_eject(rel(v.x or 0, v.y or 0, v.z or 0),
|
|
||||||
v.name, v.scatter, v.count, v.velocity)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if recipe.consumewield then
|
|
||||||
nodecore.consume_wield(data.crafter, recipe.consumewield)
|
|
||||||
elseif recipe.toolgroups and recipe.toolwear and data.crafter then
|
|
||||||
nodecore.wear_wield(data.crafter, recipe.toolgroups, recipe.toolwear)
|
|
||||||
end
|
|
||||||
if recipe.after then recipe.after(pos, data) end
|
|
||||||
if data.after then data.after(pos, data) end
|
|
||||||
if nodecore.player_stat_add then
|
|
||||||
nodecore.player_stat_add(1, data.crafter, "craft", recipe.label)
|
|
||||||
end
|
|
||||||
minetest.log((data.crafter and data.crafter:get_player_name() or "unknown")
|
|
||||||
.. " completed recipe \"" .. recipe.label .. "\" at " ..
|
|
||||||
minetest.pos_to_string(pos) .. " upon " .. node.name)
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
local function tryall(rc, pos, node, data)
|
|
||||||
local function go(xx, xz, zx, zz)
|
|
||||||
return craftcheck(rc, pos, node, data, xx, xz, zx, zz)
|
|
||||||
end
|
|
||||||
local r = go(1, 0, 0, 1)
|
|
||||||
if r then return r end
|
|
||||||
if not rc.norotate then
|
|
||||||
r = go(0, -1, 1, 0)
|
|
||||||
or go(-1, 0, 0, -1)
|
|
||||||
or go(0, 1, -1, 0)
|
|
||||||
if r then return r end
|
|
||||||
if not rc.nomirror then
|
|
||||||
r = go(-1, 0, 0, 1)
|
|
||||||
or go(0, 1, 1, 0)
|
|
||||||
or go(1, 0, 0, -1)
|
|
||||||
or go(0, -1, -1, 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return r
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.craft_check(pos, node, data)
|
|
||||||
data = data or {}
|
|
||||||
node.x = pos.x
|
|
||||||
node.y = pos.y
|
|
||||||
node.z = pos.z
|
|
||||||
data.pos = pos
|
|
||||||
data.node = node
|
|
||||||
for _, rc in ipairs(nodecore.craft_recipes) do
|
|
||||||
if data.action == rc.action
|
|
||||||
and nodecore.match(node, rc.root.match) then
|
|
||||||
data.recipe = rc
|
|
||||||
local r = tryall(rc, pos, node, data)
|
|
||||||
if r then return r == true end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,41 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, minetest, nodecore, type
|
|
||||||
= math, minetest, nodecore, type
|
|
||||||
local math_random
|
|
||||||
= math.random
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local smoking = {}
|
|
||||||
|
|
||||||
function nodecore.smokefx(pos, time, qty)
|
|
||||||
local now = minetest.get_us_time() / 1000000
|
|
||||||
local key = minetest.hash_node_position(pos)
|
|
||||||
local old = smoking[key]
|
|
||||||
if old and now < old.exp then minetest.delete_particlespawner(old.id) end
|
|
||||||
if (not time) or (time <= 0) then
|
|
||||||
smoking[key] = nil
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if type(qty) ~= "number" then qty = 1 end
|
|
||||||
if qty < 1 then
|
|
||||||
if math_random() > qty then return end
|
|
||||||
qty = 1
|
|
||||||
end
|
|
||||||
smoking[key] = {
|
|
||||||
id = minetest.add_particlespawner({
|
|
||||||
texture = "nc_api_craft_smoke.png",
|
|
||||||
collisiondetection = true,
|
|
||||||
amount = (qty or 2) * time,
|
|
||||||
time = time,
|
|
||||||
minpos = {x = pos.x - 0.4, y = pos.y - 0.4, z = pos.z - 0.4},
|
|
||||||
maxpos = {x = pos.x + 0.4, y = pos.y + 0.4, z = pos.z + 0.4},
|
|
||||||
minvel = {x = -0.1, y = 0.3, z = -0.1},
|
|
||||||
maxvel = {x = 0.1, y = 0.7, z = 0.1},
|
|
||||||
minexptime = 1,
|
|
||||||
maxexptime = 5,
|
|
||||||
minsize = 1,
|
|
||||||
maxsize = 3
|
|
||||||
}),
|
|
||||||
exp = now + time
|
|
||||||
}
|
|
||||||
end
|
|
|
@ -1,13 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local include, nodecore
|
|
||||||
= include, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
nodecore.amcoremod()
|
|
||||||
|
|
||||||
include("register_craft")
|
|
||||||
include("craft_check")
|
|
||||||
include("item_place_node")
|
|
||||||
include("on_punchnode")
|
|
||||||
include("fx_smoke")
|
|
||||||
include("register_cook_abm")
|
|
|
@ -1,25 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore
|
|
||||||
= minetest, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local old_place = minetest.item_place_node
|
|
||||||
function minetest.item_place_node(itemstack, placer, pointed_thing, ...)
|
|
||||||
local old_add = minetest.add_node
|
|
||||||
minetest.add_node = function(pos, node, ...)
|
|
||||||
local function helper2(...)
|
|
||||||
nodecore.craft_check(pos, node, {
|
|
||||||
action = "place",
|
|
||||||
crafter = placer,
|
|
||||||
pointed = pointed_thing
|
|
||||||
})
|
|
||||||
return ...
|
|
||||||
end
|
|
||||||
return helper2(old_add(pos, node, ...))
|
|
||||||
end
|
|
||||||
local function helper(...)
|
|
||||||
minetest.add_node = old_add
|
|
||||||
return ...
|
|
||||||
end
|
|
||||||
return helper(old_place(itemstack, placer, pointed_thing, ...))
|
|
||||||
end
|
|
|
@ -1,2 +0,0 @@
|
||||||
name = nc_api_craft
|
|
||||||
depends = nc_api
|
|
|
@ -1,91 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore, vector
|
|
||||||
= minetest, nodecore, vector
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local function pummelparticles(_, data)
|
|
||||||
local pointed = data.pointed
|
|
||||||
local nodedef = data.nodedef
|
|
||||||
local pname = data.pname
|
|
||||||
|
|
||||||
local stack = nodecore.stack_get(data.node)
|
|
||||||
if stack and not stack:is_empty() then
|
|
||||||
nodedef = minetest.registered_items[stack:get_name()] or nodedef
|
|
||||||
end
|
|
||||||
|
|
||||||
local a = pointed.above
|
|
||||||
local b = pointed.under
|
|
||||||
local vel = vector.subtract(a, b)
|
|
||||||
local mid = vector.multiply(vector.add(a, b), 0.5)
|
|
||||||
local p1 = {x = vel.y, y = vel.z, z = vel.x}
|
|
||||||
local p2 = {x = vel.z, y = vel.x, z = vel.y}
|
|
||||||
local s1 = vector.add(vector.add(mid, vector.multiply(p1, 0.5)), vector.multiply(p2, 0.5))
|
|
||||||
local s2 = vector.add(vector.add(mid, vector.multiply(p1, -0.5)), vector.multiply(p2, -0.5))
|
|
||||||
vel = vector.multiply(vel, 0.5)
|
|
||||||
|
|
||||||
data.clearfx = nodecore.digparticles(nodedef, nodecore.underride(
|
|
||||||
nodecore.underride({}, data.recipe.pumparticles or {}),
|
|
||||||
{
|
|
||||||
amount = 8,
|
|
||||||
time = 1.5,
|
|
||||||
minpos = s1,
|
|
||||||
maxpos = s2,
|
|
||||||
minvel = vel,
|
|
||||||
maxvel = vel,
|
|
||||||
minexptime = 0.4,
|
|
||||||
maxexptime = 0.9,
|
|
||||||
minsize = 1,
|
|
||||||
maxsize = 5,
|
|
||||||
playername = pname
|
|
||||||
})
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
local pummeling = {}
|
|
||||||
|
|
||||||
minetest.register_on_punchnode(function(pos, node, puncher, pointed)
|
|
||||||
if not puncher:is_player() then return end
|
|
||||||
local pname = puncher:get_player_name()
|
|
||||||
if not nodecore.interact(pname) then return end
|
|
||||||
|
|
||||||
node = node or minetest.get_node(pos)
|
|
||||||
local def = minetest.registered_items[node.name] or {}
|
|
||||||
|
|
||||||
local now = minetest.get_us_time() / 1000000 * 3
|
|
||||||
local pum = {
|
|
||||||
action = "pummel",
|
|
||||||
crafter = puncher,
|
|
||||||
pname = pname,
|
|
||||||
pos = pos,
|
|
||||||
pointed = pointed,
|
|
||||||
node = node,
|
|
||||||
nodedef = def,
|
|
||||||
start = now,
|
|
||||||
wield = puncher:get_wielded_item():to_string(),
|
|
||||||
count = 0,
|
|
||||||
inprogress = pummelparticles
|
|
||||||
}
|
|
||||||
|
|
||||||
local old = pummeling[pname]
|
|
||||||
if old and old.clearfx then old.clearfx() end
|
|
||||||
|
|
||||||
local hash = minetest.hash_node_position
|
|
||||||
if old and hash(old.pos) == hash(pum.pos)
|
|
||||||
and hash(old.pointed.above) == hash(pum.pointed.above)
|
|
||||||
and hash(old.pointed.under) == hash(pum.pointed.under)
|
|
||||||
and pum.wield == old.wield
|
|
||||||
and old.last >= (now - 3)
|
|
||||||
then pum = old end
|
|
||||||
|
|
||||||
pum.count = pum.count + 1
|
|
||||||
pum.last = now
|
|
||||||
pum.duration = now - pum.start - 1
|
|
||||||
pummeling[pname] = pum
|
|
||||||
|
|
||||||
if pum.count < 2 then return end
|
|
||||||
|
|
||||||
if nodecore.craft_check(pos, node, nodecore.underride({}, pum)) then
|
|
||||||
pummeling[pname] = nil
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end)
|
|
|
@ -1,81 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore, type
|
|
||||||
= minetest, nodecore, type
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local modname = minetest.get_current_modname()
|
|
||||||
|
|
||||||
local function getduration(_, data)
|
|
||||||
local meta = minetest.get_meta(data.node)
|
|
||||||
|
|
||||||
local md = meta:get_string(modname) or ""
|
|
||||||
md = (md ~= "") and minetest.deserialize(md) or {}
|
|
||||||
|
|
||||||
if md.label ~= data.recipe.label
|
|
||||||
or md.count ~= nodecore.stack_get(data.node):get_count()
|
|
||||||
or not md.start
|
|
||||||
then return 0 end
|
|
||||||
|
|
||||||
return minetest.get_gametime() - md.start
|
|
||||||
end
|
|
||||||
|
|
||||||
local function playcookfx(pos, cookfx, sound, smokeqty, smoketime)
|
|
||||||
if not cookfx then return end
|
|
||||||
if cookfx == true or cookfx and cookfx[sound] then
|
|
||||||
minetest.sound_play("nc_api_craft_" .. sound,
|
|
||||||
{gain = 1, pos = pos})
|
|
||||||
end
|
|
||||||
if cookfx == true or cookfx and cookfx.smoke then
|
|
||||||
if cookfx ~= true and type(cookfx.smoke) == "number" then
|
|
||||||
smokeqty = smokeqty * cookfx.smoke
|
|
||||||
end
|
|
||||||
nodecore.smokefx(pos, smoketime, smokeqty)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function inprogress(pos, data)
|
|
||||||
local meta = minetest.get_meta(data.node)
|
|
||||||
local recipe = data.recipe
|
|
||||||
|
|
||||||
local md = meta:get_string(modname) or ""
|
|
||||||
md = (md ~= "") and minetest.deserialize(md) or {}
|
|
||||||
|
|
||||||
local count = nodecore.stack_get(data.node):get_count()
|
|
||||||
if md.label ~= recipe.label or md.count ~= count or not md.start then
|
|
||||||
md = {
|
|
||||||
label = recipe.label,
|
|
||||||
count = count,
|
|
||||||
start = minetest.get_gametime()
|
|
||||||
}
|
|
||||||
meta:set_string(modname, minetest.serialize(md))
|
|
||||||
end
|
|
||||||
|
|
||||||
data.progressing = true
|
|
||||||
|
|
||||||
return playcookfx(pos, recipe.cookfx, "sizzle", 2, 1)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function cookdone(pos, data)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local recipe = data.recipe
|
|
||||||
meta:set_float(recipe.label, 0)
|
|
||||||
return playcookfx(pos, recipe.cookfx, "hiss", 80, 0.2)
|
|
||||||
end
|
|
||||||
|
|
||||||
function nodecore.register_cook_abm(def)
|
|
||||||
def.interval = def.interval or 1
|
|
||||||
def.chance = def.chance or 1
|
|
||||||
def.action = function(pos, node)
|
|
||||||
local data = {
|
|
||||||
action = "cook",
|
|
||||||
duration = getduration,
|
|
||||||
inprogress = inprogress,
|
|
||||||
after = cookdone
|
|
||||||
}
|
|
||||||
nodecore.craft_check(pos, node, data)
|
|
||||||
if not data.progressing then
|
|
||||||
minetest.get_meta(pos):set_string(modname, "")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
nodecore.register_limited_abm(def)
|
|
||||||
end
|
|
|
@ -1,69 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local error, math, nodecore, pairs, table, type
|
|
||||||
= error, math, nodecore, pairs, table, type
|
|
||||||
local math_floor, table_insert
|
|
||||||
= math.floor, table.insert
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local craft_recipes = {}
|
|
||||||
nodecore.craft_recipes = craft_recipes
|
|
||||||
|
|
||||||
local id = 0
|
|
||||||
|
|
||||||
function nodecore.register_craft(recipe)
|
|
||||||
recipe.action = recipe.action or "place"
|
|
||||||
local canrot
|
|
||||||
recipe.nodes = recipe.nodes or {}
|
|
||||||
for _, v in pairs(recipe.nodes) do
|
|
||||||
v.x = v.x or 0
|
|
||||||
v.y = v.y or 0
|
|
||||||
v.z = v.z or 0
|
|
||||||
if type(v.match) == "table" and v.match.count then
|
|
||||||
v.match.excess = v.match.excess or true
|
|
||||||
end
|
|
||||||
canrot = canrot or v.x ~= 0 or v.z ~= 0
|
|
||||||
if v.x == 0 and v.y == 0 and v.z == 0 then
|
|
||||||
recipe.root = v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if not recipe.root or not recipe.root.match then
|
|
||||||
error "recipe.nodes must have a match for 0,0,0"
|
|
||||||
end
|
|
||||||
if not recipe.label then
|
|
||||||
id = id + 1
|
|
||||||
recipe.label = "unnamed " .. recipe.action .. " " .. id
|
|
||||||
end
|
|
||||||
if recipe.toolgroups and recipe.toolwear ~= false then
|
|
||||||
recipe.toolwear = 1
|
|
||||||
end
|
|
||||||
if not canrot then recipe.norotate = true end
|
|
||||||
if recipe.normal then
|
|
||||||
recipe.normal.x = recipe.normal.x or 0
|
|
||||||
recipe.normal.y = recipe.normal.y or 0
|
|
||||||
recipe.normal.z = recipe.normal.z or 0
|
|
||||||
end
|
|
||||||
if recipe.items then
|
|
||||||
for k, v in pairs(recipe.items) do
|
|
||||||
if type(v) == "string" then
|
|
||||||
recipe.items[k] = {name = v}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if recipe.wield and type(recipe.wield) == "table" then
|
|
||||||
recipe.wield.count = recipe.wield.count or false
|
|
||||||
end
|
|
||||||
local newp = recipe.priority or 0
|
|
||||||
|
|
||||||
local min = 1
|
|
||||||
local max = #craft_recipes + 1
|
|
||||||
while max > min do
|
|
||||||
local try = math_floor((min + max) / 2)
|
|
||||||
local oldp = craft_recipes[try].priority or 0
|
|
||||||
if newp < oldp then
|
|
||||||
min = try + 1
|
|
||||||
else
|
|
||||||
max = try
|
|
||||||
end
|
|
||||||
end
|
|
||||||
table_insert(craft_recipes, min, recipe)
|
|
||||||
end
|
|
Before Width: | Height: | Size: 243 B |
|
@ -1,146 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local math, minetest, nodecore, pairs, vector
|
|
||||||
= math, minetest, nodecore, pairs, vector
|
|
||||||
local math_random
|
|
||||||
= math.random
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local modname = minetest.get_current_modname()
|
|
||||||
|
|
||||||
local ashdirs = {
|
|
||||||
{x = 1, y = -1, z = 0},
|
|
||||||
{x = -1, y = -1, z = 0},
|
|
||||||
{x = 0, y = -1, z = 1},
|
|
||||||
{x = 0, y = -1, z = -1}
|
|
||||||
}
|
|
||||||
|
|
||||||
nodecore.register_craft({
|
|
||||||
label = "mix concrete (fail)",
|
|
||||||
action = "pummel",
|
|
||||||
priority = 2,
|
|
||||||
toolgroups = {thumpy = 1},
|
|
||||||
normal = {y = 1},
|
|
||||||
nodes = {
|
|
||||||
{
|
|
||||||
match = {groups = {gravel = true}}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
x = 1,
|
|
||||||
y = -1,
|
|
||||||
match = {buildable_to = true}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
y = -1,
|
|
||||||
match = "nc_fire:ash",
|
|
||||||
replace = "air"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
after = function(pos)
|
|
||||||
local dirs = {}
|
|
||||||
for _, d in pairs(ashdirs) do
|
|
||||||
local p = vector.add(pos, d)
|
|
||||||
if nodecore.buildable_to(p) then
|
|
||||||
dirs[#dirs + 1] = {pos = p, qty = 0}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for _ = 1, 8 do
|
|
||||||
local p = dirs[math_random(1, #dirs)]
|
|
||||||
p.qty = p.qty + 1
|
|
||||||
end
|
|
||||||
for _, v in pairs(dirs) do
|
|
||||||
if v.qty > 0 then
|
|
||||||
nodecore.item_eject(v.pos, "nc_fire:lump_ash " .. v.qty)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
nodecore.register_craft({
|
|
||||||
label = "mix concrete",
|
|
||||||
action = "pummel",
|
|
||||||
priority = 1,
|
|
||||||
toolgroups = {thumpy = 1},
|
|
||||||
normal = {y = 1},
|
|
||||||
nodes = {
|
|
||||||
{
|
|
||||||
match = {groups = {gravel = true}},
|
|
||||||
replace = "air"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
y = -1,
|
|
||||||
match = "nc_fire:ash",
|
|
||||||
replace = modname .. ":aggregate"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
local flow = modname .. ":wet_flowing"
|
|
||||||
local src = modname .. ":wet_source"
|
|
||||||
|
|
||||||
nodecore.register_limited_abm({
|
|
||||||
label = "Aggregate Wettening",
|
|
||||||
interval = 1,
|
|
||||||
chance = 2,
|
|
||||||
limited_max = 100,
|
|
||||||
nodenames = {modname .. ":aggregate"},
|
|
||||||
neighbors = {"group:water"},
|
|
||||||
action = function(pos)
|
|
||||||
minetest.set_node(pos, {name = src})
|
|
||||||
nodecore.node_sound(pos, "place")
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
nodecore.register_limited_abm({
|
|
||||||
label = "Aggregate Wandering",
|
|
||||||
interval = 4,
|
|
||||||
chance = 2,
|
|
||||||
limited_max = 100,
|
|
||||||
nodenames = {src},
|
|
||||||
neighbors = {flow},
|
|
||||||
action = function(pos, node)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local gen = meta:get_int("agggen")
|
|
||||||
if gen >= 8 and math_random(1, 2) == 1 then
|
|
||||||
minetest.set_node(pos, {name = "nc_terrain:cobble"})
|
|
||||||
return nodecore.node_sound(pos, "place")
|
|
||||||
end
|
|
||||||
local miny = pos.y
|
|
||||||
local found = {}
|
|
||||||
nodecore.scan_flood(pos, 2, function(p)
|
|
||||||
local nn = minetest.get_node(p).name
|
|
||||||
if nn == src then return end
|
|
||||||
if nn ~= flow then return false end
|
|
||||||
if p.y > miny then return end
|
|
||||||
if p.y == miny then
|
|
||||||
found[#found + 1] = p
|
|
||||||
return
|
|
||||||
end
|
|
||||||
miny = p.y
|
|
||||||
found = {p}
|
|
||||||
end)
|
|
||||||
if #found < 1 then return end
|
|
||||||
local np = nodecore.pickrand(found)
|
|
||||||
nodecore.node_sound(pos, "dig")
|
|
||||||
minetest.set_node(np, node)
|
|
||||||
minetest.get_meta(np):set_int("agggen", gen + 1)
|
|
||||||
minetest.set_node(pos, {name = flow, param2 = 7})
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
nodecore.register_craft({
|
|
||||||
label = "aggregate curing",
|
|
||||||
action = "cook",
|
|
||||||
duration = 300,
|
|
||||||
cookfx = {smoke = 0.05},
|
|
||||||
check = function(pos)
|
|
||||||
return not minetest.find_node_near(pos, 1, {flow, "group:water"})
|
|
||||||
end,
|
|
||||||
nodes = {
|
|
||||||
{
|
|
||||||
match = src,
|
|
||||||
replace = "nc_terrain:stone"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
nodecore.register_cook_abm({nodenames = {src}})
|
|
|
@ -1,9 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local include, nodecore
|
|
||||||
= include, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
nodecore.amcoremod()
|
|
||||||
|
|
||||||
include("node")
|
|
||||||
include("crafting")
|
|
|
@ -1,2 +0,0 @@
|
||||||
name = nc_concrete
|
|
||||||
depends = nc_api, nc_api_craft, nc_fire, nc_terrain
|
|
|
@ -1,43 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore
|
|
||||||
= minetest, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local modname = minetest.get_current_modname()
|
|
||||||
|
|
||||||
minetest.register_node(modname .. ":aggregate", {
|
|
||||||
description = "Aggregate",
|
|
||||||
tiles = {"nc_terrain_gravel.png^(nc_fire_ash.png^[mask:nc_concrete_mask.png)"},
|
|
||||||
groups = {
|
|
||||||
crumbly = 2,
|
|
||||||
falling_node = 1,
|
|
||||||
falling_repose = 1
|
|
||||||
},
|
|
||||||
crush_damage = 1,
|
|
||||||
sounds = nodecore.sounds("nc_terrain_chompy")
|
|
||||||
})
|
|
||||||
|
|
||||||
local wettile = "nc_terrain_stone.png^(nc_fire_ash.png^[mask:nc_concrete_mask.png)"
|
|
||||||
local wetdef = {
|
|
||||||
description = "Wet Aggregate",
|
|
||||||
tiles = {wettile},
|
|
||||||
special_tiles = {wettile, wettile},
|
|
||||||
liquid_viscosity = 15,
|
|
||||||
liquid_renewable = false,
|
|
||||||
liquid_range = 1,
|
|
||||||
liquid_alternative_flowing = modname .. ":wet_flowing",
|
|
||||||
liquid_alternative_source = modname .. ":wet_source",
|
|
||||||
walkable = false,
|
|
||||||
diggable = false,
|
|
||||||
drowning = 1,
|
|
||||||
post_effect_color = {a = 240, r = 32, g = 32, b = 32},
|
|
||||||
sounds = nodecore.sounds("nc_terrain_chompy")
|
|
||||||
}
|
|
||||||
minetest.register_node(modname .. ":wet_source", nodecore.underride({
|
|
||||||
liquidtype = "source"
|
|
||||||
}, wetdef))
|
|
||||||
minetest.register_node(modname .. ":wet_flowing", nodecore.underride({
|
|
||||||
drawtype = "flowingliquid",
|
|
||||||
liquidtype = "flowing",
|
|
||||||
paramtype2 = "flowingliquid"
|
|
||||||
}, wetdef))
|
|
Before Width: | Height: | Size: 149 B |
|
@ -1,9 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local include, nodecore
|
|
||||||
= include, nodecore
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
nodecore.amcoremod()
|
|
||||||
|
|
||||||
include("operate")
|
|
||||||
include("register")
|
|
|
@ -1,2 +0,0 @@
|
||||||
name = nc_doors
|
|
||||||
depends = nc_api, nc_api_craft, nc_fire, nc_lode, nc_terrain, nc_woodwork
|
|
|
@ -1,107 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore, pairs, vector
|
|
||||||
= minetest, nodecore, pairs, vector
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local function hingeaxis(pos, node)
|
|
||||||
local fd = node and node.param2 or 0
|
|
||||||
fd = nodecore.facedirs[fd]
|
|
||||||
fd = vector.multiply(vector.add(fd.f, fd.r), 0.5)
|
|
||||||
return {
|
|
||||||
x = fd.x == 0 and 0 or pos.x + fd.x,
|
|
||||||
y = fd.y == 0 and 0 or pos.y + fd.y,
|
|
||||||
z = fd.z == 0 and 0 or pos.z + fd.z
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local squelch = {}
|
|
||||||
minetest.register_globalstep(function() squelch = {} end)
|
|
||||||
|
|
||||||
local is_door = {groups = { door = true }}
|
|
||||||
|
|
||||||
function nodecore.operate_door(pos, node, dir)
|
|
||||||
if squelch[minetest.pos_to_string(pos)] then return end
|
|
||||||
node = node or minetest.get_node_or_nil(pos)
|
|
||||||
if (not node) or (not nodecore.match(node, is_door)) then return end
|
|
||||||
|
|
||||||
local fd = nodecore.facedirs[node.param2 or 0]
|
|
||||||
local rotdir
|
|
||||||
if vector.equals(dir, fd.k) or vector.equals(dir, fd.r) then
|
|
||||||
rotdir = "r"
|
|
||||||
elseif vector.equals(dir, fd.l) or vector.equals(dir, fd.f) then
|
|
||||||
rotdir = "f"
|
|
||||||
else return end
|
|
||||||
|
|
||||||
local found = {}
|
|
||||||
local hinge = hingeaxis(pos, node)
|
|
||||||
if nodecore.scan_flood(pos, 128, function(p)
|
|
||||||
local n = minetest.get_node_or_nil(p)
|
|
||||||
if not n then return true end
|
|
||||||
if (not nodecore.match(n, is_door))
|
|
||||||
or (not vector.equals(hingeaxis(p, n), hinge)) then return false end
|
|
||||||
found[minetest.pos_to_string(p)] = {pos = p, node = n}
|
|
||||||
end
|
|
||||||
) then return end
|
|
||||||
|
|
||||||
local toop = {}
|
|
||||||
for k, v in pairs(found) do
|
|
||||||
local ffd = nodecore.facedirs[v.node.param2 or 0]
|
|
||||||
local to = vector.add(v.pos, ffd[rotdir])
|
|
||||||
|
|
||||||
if (not found[minetest.pos_to_string(to)])
|
|
||||||
and (not nodecore.buildable_to(to))
|
|
||||||
then return end
|
|
||||||
|
|
||||||
local str = minetest.pos_to_string(to)
|
|
||||||
if squelch[str] then return end
|
|
||||||
|
|
||||||
v.str = str
|
|
||||||
v.to = to
|
|
||||||
v.fd = ffd
|
|
||||||
|
|
||||||
toop[k .. "l"] = {
|
|
||||||
pos = vector.add(v.pos, ffd.l),
|
|
||||||
dir = rotdir == "r" and ffd.k or ffd.f
|
|
||||||
}
|
|
||||||
toop[k .. "k"] = {
|
|
||||||
pos = vector.add(v.pos, ffd.k),
|
|
||||||
dir = rotdir == "r" and ffd.r or ffd.l
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local toset = {}
|
|
||||||
for k, v in pairs(found) do
|
|
||||||
toset[k] = {pos = v.pos, name = "air"}
|
|
||||||
squelch[k] = true
|
|
||||||
squelch[v.str] = true
|
|
||||||
end
|
|
||||||
for _, v in pairs(found) do
|
|
||||||
for i, xfd in pairs(nodecore.facedirs) do
|
|
||||||
if vector.equals(xfd.t, v.fd.t)
|
|
||||||
and vector.equals(xfd.r, rotdir == "r" and v.fd.f or v.fd.k) then
|
|
||||||
toset[minetest.pos_to_string(v.to)] = {
|
|
||||||
pos = v.to,
|
|
||||||
name = v.node.name,
|
|
||||||
param2 = i
|
|
||||||
}
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for _, v in pairs(toset) do
|
|
||||||
minetest.set_node(v.pos, v)
|
|
||||||
if v.name ~= "air" then
|
|
||||||
local p = vector.round(vector.multiply(v.pos, 0.25))
|
|
||||||
local k = "sfx" .. minetest.pos_to_string(p)
|
|
||||||
if not squelch[k] then
|
|
||||||
squelch[k] = true
|
|
||||||
minetest.sound_play("nc_doors_operate",
|
|
||||||
{pos = v.pos, gain = 0.5})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for _, v in pairs(toop) do
|
|
||||||
nodecore.operate_door(v.pos, nil, v.dir)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,148 +0,0 @@
|
||||||
-- LUALOCALS < ---------------------------------------------------------
|
|
||||||
local minetest, nodecore, pairs, vector
|
|
||||||
= minetest, nodecore, pairs, vector
|
|
||||||
-- LUALOCALS > ---------------------------------------------------------
|
|
||||||
|
|
||||||
local modname = minetest.get_current_modname()
|
|
||||||
|
|
||||||
local function doorop(pos, node, _, _, pointed)
|
|
||||||
if (not pointed.above) or (not pointed.under) then return end
|
|
||||||
local force = vector.subtract(pointed.under, pointed.above)
|
|
||||||
return nodecore.operate_door(pos, node, force)
|
|
||||||
end
|
|
||||||
|
|
||||||
local tilemods = {
|
|
||||||
{idx = 1, part = "end", tran = "R180"},
|
|
||||||
{idx = 2, part = "end", tran = "FX"},
|
|
||||||
{idx = 3, part = "side", tran = "I"},
|
|
||||||
{idx = 6, part = "side", tran = "R180"}
|
|
||||||
}
|
|
||||||
|
|
||||||
function nodecore.register_door(basemod, basenode, desc, pin)
|
|
||||||
local basefull = basemod .. ":" .. basenode
|
|
||||||
local basedef = minetest.registered_nodes[basefull]
|
|
||||||
|
|
||||||
local tiles = nodecore.underride({}, basedef.tiles)
|
|
||||||
while #tiles < 6 do tiles[#tiles + 1] = tiles[#tiles] end
|
|
||||||
for k, v in pairs(tiles) do tiles[k] = v.name or v end
|
|
||||||
for _, v in pairs(tilemods) do
|
|
||||||
tiles[v.idx] = tiles[v.idx] .. "^nc_doors_hinge_" .. v.part
|
|
||||||
.. "_base.png^[transform" .. v.tran
|
|
||||||
end
|
|
||||||
|
|
||||||
local paneldef = nodecore.underride({}, {
|
|
||||||
name = modname .. ":panel_" .. basenode,
|
|
||||||
description = (desc or basedef.description) .. " Panel",
|
|
||||||
tiles = tiles,
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
silktouch = false,
|
|
||||||
on_rightclick = nodecore.node_spin_filtered(function(a, b)
|
|
||||||
return vector.equals(a.f, b.r)
|
|
||||||
and vector.equals(a.r, b.f)
|
|
||||||
end),
|
|
||||||
}, basedef)
|
|
||||||
paneldef.drop = nil
|
|
||||||
paneldef.alternate_loose = nil
|
|
||||||
paneldef.drop_in_place = nil
|
|
||||||
paneldef.after_dig_node = nil
|
|
||||||
|
|
||||||
minetest.register_node(paneldef.name, paneldef)
|
|
||||||
|
|
||||||
local t = minetest.registered_items[pin].tiles
|
|
||||||
t = t[3] or t[2] or t[1]
|
|
||||||
t = t.name or t
|
|
||||||
tiles = nodecore.underride({}, tiles)
|
|
||||||
for _, v in pairs(tilemods) do
|
|
||||||
tiles[v.idx] = tiles[v.idx] .. "^((" .. t .. ")^[mask:nc_doors_hinge_" .. v.part
|
|
||||||
.. "_mask.png^[transform" .. v.tran .. ")"
|
|
||||||
end
|
|
||||||
|
|
||||||
local groups = nodecore.underride({door = 1}, basedef.groups)
|
|
||||||
local doordef = nodecore.underride({
|
|
||||||
name = modname .. ":door_" .. basenode,
|
|
||||||
description = (desc or basedef.description) .. " Hinged Panel",
|
|
||||||
tiles = tiles,
|
|
||||||
drop = pin,
|
|
||||||
drop_in_place = paneldef.name,
|
|
||||||
on_rightclick = doorop,
|
|
||||||
groups = groups
|
|
||||||
}, paneldef)
|
|
||||||
|
|
||||||
minetest.register_node(doordef.name, doordef)
|
|
||||||
|
|
||||||
nodecore.register_craft({
|
|
||||||
label = "drill door " .. basenode:lower(),
|
|
||||||
action = "pummel",
|
|
||||||
toolgroups = {thumpy = 3},
|
|
||||||
normal = {y = 1},
|
|
||||||
nodes = {
|
|
||||||
{
|
|
||||||
match = "nc_lode:rod_tempered",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
y = -1,
|
|
||||||
match = basefull,
|
|
||||||
replace = paneldef.name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
nodecore.register_craft({
|
|
||||||
label = "lubricate door " .. basenode:lower(),
|
|
||||||
check = function(_, data)
|
|
||||||
return minetest.get_meta(data.rel(0, -1, 0))
|
|
||||||
:get_float("doorlube") ~= 1
|
|
||||||
end,
|
|
||||||
nodes = {
|
|
||||||
{
|
|
||||||
match = "nc_fire:lump_coal",
|
|
||||||
replace = "air"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
y = -1,
|
|
||||||
match = paneldef.name,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
after = function(pos, data)
|
|
||||||
minetest.get_meta(data.rel(0, -1, 0)):set_float("doorlube", 1)
|
|
||||||
return nodecore.digparticles(
|
|
||||||
minetest.registered_nodes["nc_fire:coal8"],
|
|
||||||
{
|
|
||||||
collisiondetection = true,
|
|
||||||
amount = 10,
|
|
||||||
time = 0.2,
|
|
||||||
minpos = {x = pos.x - 0.4, y = pos.y - 0.5, z = pos.z - 0.4},
|
|
||||||
maxpos = {x = pos.x + 0.4, y = pos.y - 0.45, z = pos.z + 0.4},
|
|
||||||
minexptime = 0.1,
|
|
||||||
maxexptime = 1,
|
|
||||||
minsize = 1,
|
|
||||||
maxsize = 3
|
|
||||||
}
|
|
||||||
)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
nodecore.register_craft({
|
|
||||||
label = "door pin " .. basenode:lower(),
|
|
||||||
action = "pummel",
|
|
||||||
toolgroups = {thumpy = 1},
|
|
||||||
normal = {y = 1},
|
|
||||||
check = function(_, data)
|
|
||||||
return minetest.get_meta(data.rel(0, -1, 0))
|
|
||||||
:get_float("doorlube") == 1
|
|
||||||
end,
|
|
||||||
nodes = {
|
|
||||||
{
|
|
||||||
match = pin,
|
|
||||||
replace = "air"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
y = -1,
|
|
||||||
match = paneldef.name,
|
|
||||||
replace = doordef.name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
nodecore.register_door("nc_woodwork", "plank", "Wooden", "nc_woodwork:staff")
|
|
||||||
nodecore.register_door("nc_terrain", "cobble", "Cobble", "nc_lode:rod_tempered")
|
|