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")
|