1
0
mirror of https://github.com/D00Med/scifi_nodes.git synced 2025-09-10 01:15:23 +02:00

120 Commits

Author SHA1 Message Date
fb1fdcf69e Merge remote-tracking branch 'upstream/master' 2025-03-20 12:50:24 +01:00
BuckarooBanzay
b682b2123d make crate game agnostic 2025-03-11 09:16:02 +01:00
BuckarooBanzay
c615237114 fix missing texture in plastic slope code 2025-03-11 08:36:18 +01:00
BuckarooBanzay
cb95483a12 fix player check, use builting code.is_player(obj) 2025-02-21 13:09:24 +01:00
BuckarooBanzay
e52a890883 add nil-check to door access card check 2025-02-10 17:54:29 +01:00
Buckaroo Banzai
6fb3ded8ad Add access cards (#88)
* add access cards

* colored cards

* rename / recipes

* impl

* crafting fix

* indent fixes

* door groups fix (should not be diggable by hand)

---------

Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2025-02-07 15:47:20 +01:00
BuckarooBanzay
373f06cd7c disable facedir param2type on weird looking nodes 2025-02-07 10:30:59 +01:00
Buckaroo Banzai
d531ad4eda add ambience sounds and helper function (#87)
* add ambience sounds and helper function

* minor tweaks

* fix deps

---------

Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2025-02-03 17:18:31 +01:00
BuckarooBanzay
62037ad60a improve octagon glass pane slope / refactor node- and selectionbox code 2025-01-04 19:50:33 +01:00
BuckarooBanzay
36b0c5cc05 octagon glass slope variants 2024-09-27 12:11:43 +02:00
BuckarooBanzay
fbd56e67c9 various cleanups 2024-09-26 19:48:32 +02:00
BuckarooBanzay
08c83f52ce remove duplicated white textures 2024-09-26 19:35:28 +02:00
BuckarooBanzay
364211ebf1 add not_blocking_trains to offset panes 2024-09-16 16:49:20 +02:00
BuckarooBanzay
93bdcda2dd signs_api support and various large banner registrations 2024-09-15 20:45:28 +02:00
BuckarooBanzay
1159a02f76 upgrade luacheck workflow and define std 2024-09-15 19:44:17 +02:00
BuckarooBanzay
e519d3c6e0 add advtrains platform registration for stripes node 2024-09-15 19:42:47 +02:00
f79e84b92d Merge remote-tracking branch 'upstream/master' 2024-09-15 09:47:44 +02:00
OgelGames
8967e0ea04 fix alien grass texture (#84) 2024-07-15 08:37:24 +02:00
BuckarooBanzay
6bb8d294f3 use other mes texture for transparent mesh-node 2024-05-04 19:10:12 +02:00
BuckarooBanzay
d4ec06f888 add transparent vent and mesh 2024-05-03 11:02:46 +02:00
Buckaroo Banzai
4bbe29fcd3 mtt action (#83)
* mtt action

* nodename

* remove coverage step

* re-enable coverage

* add coverage badge

---------

Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2024-04-21 09:36:24 +02:00
Luke aka SwissalpS
49703e7386 is ground content revision (#81)
also cleaned up some of the whitespace indentation
and one occurance where ';' was being used instead of ','
2024-03-01 07:00:13 +01:00
squidicuz
014ca0179f update doors group (#80) 2024-02-29 20:41:04 +01:00
BuckarooBanzay
f3354f52da disable param2type of octofloors 2024-02-29 13:37:38 +01:00
BuckarooBanzay
e29c8467af fix some light and rotation issues with cover 2024-02-03 20:10:55 +01:00
BuckarooBanzay
2822954737 add some missing crafts 2024-02-03 20:10:11 +01:00
BuckarooBanzay
f1c0d74503 copy groups before passing them 2024-01-29 17:29:47 +01:00
BuckarooBanzay
89876b23e7 add slat support 2024-01-29 17:26:15 +01:00
BuckarooBanzay
3c3ad75e6d add recipe for screen3 2024-01-27 19:33:01 +01:00
BuckarooBanzay
ba7a8eea46 fix sunlight_propagates of octagon glass nodes 2023-12-22 10:14:13 +01:00
cc5f1bea5a Merge remote-tracking branch 'upstream/master' 2023-11-25 15:35:19 +01:00
BuckarooBanzay
772aef2118 add scifi_nodes.open_door(pos) and api docs 2023-10-27 17:09:37 +02:00
BuckarooBanzay
83a5d401cc colored dented metal 2023-10-27 15:55:01 +02:00
BuckarooBanzay
211dcff770 register white octagon glass only if unified dyes available 2023-10-26 18:05:18 +02:00
BuckarooBanzay
5102ad7a39 white, colorable octagon glass 2023-10-26 18:02:06 +02:00
BuckarooBanzay
9177b875d9 colorable moonstone 2023-10-26 17:37:30 +02:00
BuckarooBanzay
531a0ff257 registration overhaul (json-based) 2023-10-26 17:20:51 +02:00
BuckarooBanzay
63f4bd529e embed dirt,wood and grass texture for proper cross-game support 2023-10-17 11:35:26 +02:00
BuckarooBanzay
44d108fff8 add empty table fallbacks if no sound implented/found 2023-09-07 15:20:57 +02:00
BuckarooBanzay
fcd5ae671e mod.conf fix 2023-06-26 10:00:47 +02:00
BuckarooBanzay
f9bfaf0988 add recipe for scifi_nodes:crate and refactor chest registration 2023-06-23 17:05:20 +02:00
BuckarooBanzay
5b9e18f278 register forcefield and wall node as stealthnode if available 2023-06-23 16:56:45 +02:00
BuckarooBanzay
fd4a03dd8d allow digging of forcefield (same toughness as a diamondblock) 2023-06-23 16:48:18 +02:00
BuckarooBanzay
8cd08c1852 add recipes for fan, engine and forcefield 2023-06-23 16:41:19 +02:00
e7864a4a86 Merge remote-tracking branch 'upstream/master' 2023-06-07 22:31:17 +02:00
BuckarooBanzay
89f825d4e6 fix deprecated minetest.env calls 2023-02-17 08:54:52 +01:00
BuckarooBanzay
c5c587d01a use colorwallmounted with a single letter registration (has 32 colors) 2022-12-13 20:01:23 +01:00
Buckaroo Banzai
f94b900fbe add facedir param2type to lightbars and liquidpipes (#77)
Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2022-12-12 10:36:09 +01:00
Buckaroo Banzai
3d7910f2fd register some nodes to the letters mod (#76)
Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2022-12-12 10:36:02 +01:00
Buckaroo Banzai
10d818b2e1 add forcefield node (#75)
Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2022-12-07 08:08:55 +01:00
BuckarooBanzay
ab81d74f33 increase line length for luacheck 2022-12-03 18:34:23 +01:00
Wuzzy
72471b7c3b Set more fitting node sounds (#74) 2022-12-03 18:30:28 +01:00
c649c290ab Merge remote-tracking branch 'upstream/master' 2022-06-25 16:54:20 +02:00
Buckaroo Banzai
c44ced1362 remove buildable_to from plants
aligns with all other plant-mods
2022-05-28 11:57:14 +02:00
4f2d2a304f Merge remote-tracking branch 'upstream/master' 2022-05-27 18:51:16 +02:00
Buckaroo Banzai
9947c41ce7 remove deprecated depends.txt 2022-03-05 19:30:23 +01:00
wsor4035
32f46ebf23 fix https://github.com/D00Med/scifi_nodes/issues/68 and adding additional game digging support (#69) 2022-03-05 16:09:17 +01:00
8816db8ecf Merge remote-tracking branch 'upstream/master' 2021-11-01 10:41:33 +01:00
OgelGames
1558b4c146 remove duplicate craft recipe (#65) 2021-10-13 14:34:36 +02:00
acmgit
cb515e60f1 Fix recipe collision (#64)
* Fixed Recipe-Collision.
2021-10-11 09:04:12 +02:00
5b903a6e78 Merge remote-tracking branch 'upstream/master' 2021-10-04 21:49:01 +02:00
BuckarooBanzay
4fc833bb00 fix default setting value for mesecons-only door operation 2021-09-30 10:50:12 +02:00
BuckarooBanzay
5788062fac update contributors 2021-09-30 10:50:12 +02:00
BuckarooBanzay
1c8024401f add setting for teleporter pad 2021-09-30 10:50:12 +02:00
Niles Corder
1273b627c2 add crafting recipe for teleporter pad 2021-09-30 10:50:12 +02:00
eb231d7ca7 Merge remote-tracking branch 'upstream/master' 2021-08-31 19:59:22 +02:00
BuckarooBanzay
3d7e7a82a5 add missing comma in mod.conf 2021-08-28 18:21:11 +02:00
Buckaroo Banzai
e40f9747b0 Opt-depend on all mods (#58)
* move "dye" to optional depends and disable recipes if default or dye are not available
* replace default.LIGHT_MAX with minetest.LIGHT_MAX
* add sound-switch and use default if available
* enable crate and builder only if default mod is available
* move default mod to opt-depends and use screwdriver only if available

Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2021-08-27 09:22:15 +02:00
2fd4de11c0 Merge remote-tracking branch 'upstream/master' 2021-08-16 18:18:21 +02:00
OgelGames
85aa74e98b fix metal plant pot 2021-08-15 11:01:17 +02:00
BuckarooBanzay
5b9431ea18 add pot-lid protection-check and fix lid-toggle code 2021-08-14 19:17:20 +02:00
b88b7349a5 Merge remote-tracking branch 'upstream/master' 2021-06-20 17:30:14 +02:00
Oversword
53d9659051 Exit minetest.after callback if node no longer exists 2021-06-06 10:32:50 +02:00
c30ae4b3bd Merge remote-tracking branch 'upstream/master' 2021-05-09 21:44:34 +02:00
OgelGames
79ba8cabc3 Fix drop of scifi_nodes:digicode_on 2021-05-02 19:11:55 +02:00
6cf45fcd43 Merge remote-tracking branch 'upstream/master' 2021-03-25 21:58:42 +01:00
1d42e59ada Fix things to avoid warnings about use_texture_alpha
And optimize textures with optipng
2021-03-20 14:31:04 +01:00
1ded358e04 Merge branch 'github' 2021-03-20 13:38:15 +01:00
ecfaa4714a Fix things to avoid warnings about use_texture_alpha
And optimize textures with optipng
2021-03-20 13:33:39 +01:00
c341cb8a20 Merge remote-tracking branch 'upstream/master' 2021-01-29 17:43:56 +01:00
D00Med
aecd323b93 Merge pull request #50 from D00Med/animated_lightbar
add animated lightbar
2021-01-28 07:28:10 +10:00
BuckarooBanzay
317fdd6df6 add animated lightbar 2021-01-26 20:15:20 +01:00
d66e04f9b1 Merge remote-tracking branch 'upstream/master' 2020-12-24 21:10:26 +01:00
Andrey Kozlovskiy
2e035f37e9 Fix strong window panel recipe collision with dark glass pane 2020-12-23 20:29:43 +01:00
d3d6a7bf79 Merge remote-tracking branch 'upstream/master' 2020-12-18 12:21:17 +01:00
BuckarooBanzay
178fd9c48b fix too large nodebox of "scifi_nodes:light_dynamic" 2020-12-16 09:21:07 +01:00
e34fdde795 Merge remote-tracking branch 'upstream/master' 2020-12-15 23:41:17 +01:00
Cam B
d2dd770635 Preserve the metadata of items in the itemholder by converting to string instead of taking name 2020-12-14 07:54:40 +01:00
1993068ed1 Merge remote-tracking branch 'upstream/master' 2020-11-12 22:04:59 +01:00
Buckaroo Banzai
eed0d601be add contentdb badge 2020-11-11 12:13:38 +01:00
436f51ab0d Merge remote-tracking branch 'upstream/master' 2020-11-10 19:59:40 +01:00
BuckarooBanzay
16ff4dcdb8 fix recipe typo for "scifi_nodes:stripes2top" 2020-11-07 19:20:53 +01:00
749d59a530 Merge remote-tracking branch 'upstream/master' 2020-09-13 12:28:42 +02:00
Buckaroo Banzai
b54333d56b fix nodeboxes of double- and offset pane 2020-09-11 21:19:50 +02:00
bd58dbc48b Merge remote-tracking branch 'upstream/master' 2020-07-23 11:42:19 +02:00
Buckaroo Banzai
6492d311c8 fix "walk-through" glass panes (wrong nodebox) 2020-07-22 20:23:54 +02:00
4eaba4f6e1 Adds loading message in the Action Log 2020-07-21 11:52:47 +02:00
Buckaroo Banzai
03d097abf8 add pane variants of the octagon glass nodes (single, double and offset) (#41)
* add pane variants of the octagon glass nodes (single, double and offset)
* fix some indent issues
* added dark glass pane

Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
2020-07-14 07:37:51 +02:00
wsor
9ad9ba33c8 #39 fix (chat_send_all to chat_send_player) 2020-06-24 21:32:08 +02:00
BuckarooBanzay
40bcb29c6d add white and white2 to colored nodes 2020-06-02 07:23:15 +02:00
BuckarooBanzay
37aef1ce17 fix backward compatibility 2020-06-02 07:23:15 +02:00
BuckarooBanzay
8a8e566d27 add unifieddyes support 2020-06-02 07:23:15 +02:00
BuckarooBanzay
a3b8ec1522 update contributor list
fixes #19
2020-05-13 17:56:14 +02:00
BuckarooBanzay
ce0501bef3 fix name typo in github action 2020-05-13 17:55:37 +02:00
BuckarooBanzay
6d6432940f add integration-test 2020-05-13 17:55:37 +02:00
Buckaroo Banzai
242dbde0e6 Merge pull request #36 from D00Med/protected-button
Protected button
2020-05-13 17:55:20 +02:00
BuckarooBanzay
973f14fbd2 add protected switch variant 2020-05-11 10:25:12 +02:00
BuckarooBanzay
0c19943f05 code tidy 2020-05-11 10:18:13 +02:00
D00Med
3659705c7d Merge pull request #34 from fluxionary/53_fixes
fix inventory image parameter value
2020-05-01 08:48:32 +10:00
flux
14a123c7b5 fix inventory image parameter value 2020-04-30 21:52:25 +00:00
D00Med
f341f26905 Merge pull request #33 from D00Med/sounds-license
Sounds license
2020-04-27 10:25:51 +10:00
BuckarooBanzay
1b564e0a43 replace digicode sound with CC0 compatible track 2020-04-19 16:51:00 +02:00
BuckarooBanzay
d50c645648 use free (non-NC-license) door sound for doors 2020-04-19 16:46:31 +02:00
thomasrudin
992ec19360 update contributors 2020-04-14 14:43:35 +02:00
thomasrudin
f452274b9c fix wrongly listed licenses
fixes #30
2020-04-14 14:42:44 +02:00
Adrian Schneider
6010bad2e9 fix: only open second door next to this door 2020-03-19 10:48:26 +01:00
BuckarooBanzay
d48c185f34 add luacheck badge to readme / execute luacheck on PR's 2020-01-31 11:13:37 +01:00
Thomas Rudin
d1f0a8f1cd Merge pull request #27 from OgelGames/master
Make doors top not diggable
2019-12-11 21:03:31 +01:00
OgelGames
8e226561a1 make doors top not diggable 2019-12-11 20:58:25 +11:00
Thomas Rudin
44fccd50c6 Merge pull request #26 from D00Med/github-actions
switch to github actions for luacheck
2019-11-28 11:08:08 +01:00
284 changed files with 2419 additions and 860 deletions

View File

@@ -1,17 +1,10 @@
name: luacheck name: luacheck
on: [push, pull_request]
on: [push]
jobs: jobs:
build: luacheck:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v1 - name: Checkout
- name: apt uses: actions/checkout@main
run: sudo apt-get install -y luarocks - name: Luacheck
- name: luacheck install uses: lunarmodules/luacheck@master
run: luarocks install --local luacheck
- name: luacheck run
run: $HOME/.luarocks/bin/luacheck ./

12
.github/workflows/test.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
name: test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: buckaroobanzay/mtt@main
with:
modname: scifi_nodes
enable_coverage: "true"
- uses: coverallsapp/github-action@v1

View File

@@ -1,3 +1,5 @@
std = "min+minetest"
unused_args = false unused_args = false
globals = { globals = {
@@ -5,20 +7,18 @@ globals = {
} }
read_globals = { read_globals = {
-- Stdlib
string = {fields = {"split"}},
table = {fields = {"copy", "getn"}},
-- Minetest
"vector", "ItemStack",
"dump",
-- optional deps -- optional deps
"advtrains",
"default", "default",
"stairsplus", "stairsplus",
"xpanes", "xpanes",
"screwdriver", "screwdriver",
"minetest", "minetest",
"mesecon" "mesecon",
"unifieddyes",
"letters",
"signs_api",
"stealthnode",
"slats",
"mtt"
} }

View File

@@ -2,10 +2,18 @@
# scifi_nodes # scifi_nodes
![](https://github.com/D00Med/scifi_nodes/workflows/luacheck/badge.svg)
![](https://github.com/D00Med/scifi_nodes/workflows/test/badge.svg)
[![Coverage Status](https://coveralls.io/repos/github/D00Med/scifi_nodes/badge.svg?branch=master)](https://coveralls.io/github/D00Med/scifi_nodes?branch=master)
[![ContentDB](https://content.minetest.net/packages/D00Med/scifi_nodes/shields/downloads/)](https://content.minetest.net/packages/D00Med/scifi_nodes/)
Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets.
# Changes log Lua api: see [api.md](./api.md)
# Changelog
* Added support for unifieddyes
* 14/08/2019 : retrocompatibility fixed (aliases in doors.lua) * 14/08/2019 : retrocompatibility fixed (aliases in doors.lua)
* 13/08/2019 : * 13/08/2019 :
* added mod option doors_open_with_mesecon_only (default = false) * added mod option doors_open_with_mesecon_only (default = false)
@@ -27,19 +35,35 @@ Minetest mod that adds scifi themed blocks, doors, materials, plants and other a
# Attributions # Attributions
CC BY-NC 3.0 CC BY 3.0
* scifi_nodes_door_normal.ogg tlwmdbt https://freesound.org/people/tlwmdbt/sounds/165862/ * scifi_nodes_door_normal.ogg tlwmdbt https://freesound.org/people/tlwmdbt/sounds/165862/
* scifi_nodes_door_mechanic.ogg primeval_polypod https://freesound.org/people/primeval_polypod/sounds/156507/
* scifi_nodes_digicode.ogg https://freesound.org/people/Robinhood76/sounds/94933/
* scifi_nodes_switch.ogg http://soundbible.com/1950-Button-Push.html * scifi_nodes_switch.ogg http://soundbible.com/1950-Button-Push.html
* scifi_nodes_palm_scanner.ogg https://freesound.org/people/THE_bizniss/sounds/39313/ * scifi_nodes_palm_scanner.ogg https://freesound.org/people/THE_bizniss/sounds/39313/
* scifi_nodes_access_granted https://freesound.org/people/TheBuilder15/sounds/415762/ * scifi_nodes_access_granted https://freesound.org/people/TheBuilder15/sounds/415762/
* scifi_nodes_access_refused https://freesound.org/people/RICHERlandTV/sounds/216090/ * scifi_nodes_access_refused https://freesound.org/people/RICHERlandTV/sounds/216090/
* scifi_nodes_forcefield.png https://github.com/minetest-mods/technic/
* scifi_nodes_dirt.png https://github.com/minetest/minetest_game
* scifi_nodes_grass_top.png https://github.com/minetest/minetest_game
* scifi_nodes_grass_side.png https://github.com/minetest/minetest_game
* scifi_nodes_wood.png https://github.com/minetest/minetest_game
CC0
* scifi_nodes_digicode.ogg https://freesound.org/people/benjaminharveydesign/sounds/315921/
* scifi_nodes_ambience_fan.ogg https://freesound.org/people/itinerantmonk108/sounds/554430/
* scifi_nodes_ambience_vent.ogg https://freesound.org/people/kentspublicdomain/sounds/324665/
* scifi_nodes_ambience_engine.ogg https://freesound.org/people/firestorm185/sounds/423221/
# Contributors: # Contributors:
* D00Med https://github.com/D00Med (creator)
* tanmayameher https://github.com/tanmayameher * tanmayameher https://github.com/tanmayameher
* naturefreshmilk https://github.com/naturefreshmilk * BuckarooBanzay https://github.com/BuckarooBanzay
* acmgit https://github.com/acmgit * acmgit https://github.com/acmgit
* catz85 https://github.com/catz85 * catz85 https://github.com/catz85
* coil0 https://github.com/coil0 * coil0 https://github.com/coil0
* Grossam https://github.com/Grossam
* OgelGames https://github.com/OgelGames
* leftshift https://github.com/leftshift
* fluxionary https://github.com/fluxionary
* Niles Corder https://github.com/ncorder

259
access_card.lua Normal file
View File

@@ -0,0 +1,259 @@
local FORMSPEC_NAME = "scifi_nodes:access_card_configure"
local function create_id()
local template = "xxxxxx"
return string.gsub(template, '[x]', function ()
return string.format('%x', math.random(0, 0xf))
end)
end
local function get_door_access_table(meta)
local str = meta:get_string("access")
if str == "" then
-- no config
return {}
else
return minetest.deserialize(str) or {}
end
end
local function set_door_access_table(meta, at)
if next(at) then
meta:set_string("access", minetest.serialize(at))
else
meta:set_string("access", "")
end
end
function scifi_nodes.door_check_access_card(node_pos, itemstack, player)
local node_meta = minetest.get_meta(node_pos)
local access_table = get_door_access_table(node_meta)
if not next(access_table) then
-- access not restricted
return true
end
if not minetest.is_player(player) then
-- not a player, restrict access
return false
end
local playername = player:get_player_name()
if itemstack:get_name() ~= "scifi_nodes:access_card" then
minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: no access card detected!"))
minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 })
return false
end
local item_meta = itemstack:get_meta()
local id = item_meta:get_string("id")
if id == "" then
minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: unconfigured access card"))
minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 })
return false
end
if not access_table[id] then
minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: invalid access card"))
minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 })
return false
end
minetest.sound_play("scifi_nodes_scanner_granted", { pos = node_pos, max_hear_distance = 10 })
return true
end
-- using a card against a door toggles the access to it
local function on_use(itemstack, player, pointed_thing)
local playername = player:get_player_name()
local pos = pointed_thing.under
if not pos then
-- nothing selected
return
end
if minetest.is_protected(pos, playername) then
-- protected
return
end
local node = minetest.get_node(pos)
local node_def = minetest.registered_nodes[node.name]
if not node_def.groups or not node_def.groups.scifi_nodes_door then
-- incompatible node
return
end
local item_meta = itemstack:get_meta()
local card_id = item_meta:get_string("id")
if card_id == "" then
minetest.chat_send_player(playername, "Access card is unconfigured")
return
end
local card_name = item_meta:get_string("name")
local node_meta = minetest.get_meta(pos)
local access_table = get_door_access_table(node_meta)
if access_table[card_id] then
-- remove access
access_table[card_id] = nil
minetest.chat_send_player(playername, "Revoked access to card-id '" .. card_id .. "'")
minetest.sound_play("scifi_nodes_scanner_refused", { pos = pos, max_hear_distance = 10 })
else
-- grant access
access_table[card_id] = card_name
minetest.chat_send_player(playername, "Granted access to card-id '" .. card_id .. "'")
minetest.sound_play("scifi_nodes_scanner_granted", { pos = pos, max_hear_distance = 10 })
end
local msg = ""
if next(access_table) then
msg = msg .. "Current registered cards: "
for id, name in pairs(access_table) do
msg = msg .. "Name: '" .. name .. "' ID: '" .. id .. "' / "
end
else
-- access table is empty
msg = "No access-card left in access-table, door is free to use"
end
minetest.chat_send_player(playername, msg)
-- set new access table
set_door_access_table(node_meta, access_table)
end
local function configure_access_card(meta, name)
local id = meta:get_string("id")
if id == "" then
-- set new id
id = create_id()
meta:set_string("id", id)
end
meta:set_string("name", name)
meta:set_string("description", "Access card '" .. name .. "' (id: '" .. id .. "')")
end
-- right-click with a card for rename/configuration
local function on_secondary_use(itemstack, player, pointed_thing)
local meta = itemstack:get_meta()
if meta:get_string("id") == "" then
-- initial configuration
configure_access_card(meta, "")
end
local name = meta:get_string("name")
minetest.show_formspec(player:get_player_name(), FORMSPEC_NAME, [[
size[10,1.4]
real_coordinates[true]
field[0.1,0.4;7,0.8;name;Name;]] .. minetest.formspec_escape(name) .. [[]
button_exit[7.3,0.4;2.5,0.8;save;Save]
]])
return itemstack
end
minetest.register_on_player_receive_fields(function(player, formname, fields)
if formname ~= FORMSPEC_NAME then
-- wrong formspec
return false
end
if not fields.save and not fields.key_enter_field then
-- quit
return true
end
local itemstack = player:get_wielded_item()
if itemstack:get_name() ~= "scifi_nodes:access_card" then
-- invalid item
return true
end
local meta = itemstack:get_meta()
configure_access_card(meta, fields.name or "")
player:set_wielded_item(itemstack)
end)
minetest.register_craftitem("scifi_nodes:access_card", {
description = "Access card (unconfigured)",
inventory_image = "scifi_nodes_access_card.png",
palette = "unifieddyes_palette_extended.png",
stack_max = 1,
paramtype2 = "color",
on_use = on_use,
on_secondary_use = on_secondary_use,
groups = {
ud_param2_colorable = 1
}
})
-- initial recipe
minetest.register_craft({
output = "scifi_nodes:access_card",
recipe = {
{"scifi_nodes:white2", "", ""},
{"scifi_nodes:white_pad", "", ""},
{"scifi_nodes:white2", "", ""}
}
})
-- copy recipe
minetest.register_craft({
output = "scifi_nodes:access_card",
recipe = {
{"scifi_nodes:access_card", "scifi_nodes:white_pad", ""},
{"", "", ""},
{"", "", ""}
}
})
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
if itemstack:get_name() ~= "scifi_nodes:access_card" then
return
end
local original
local index
for i = 1, #old_craft_grid do
if old_craft_grid[i]:get_name() == "scifi_nodes:access_card" then
original = old_craft_grid[i]
index = i
break
end
end
if not original then
return
end
-- copy metadata
local src_meta = original:get_meta()
local dst_meta = itemstack:get_meta()
local copy_fields = {"id", "name", "description"}
for _, fieldname in ipairs(copy_fields) do
dst_meta:set_string(fieldname, src_meta:get_string(fieldname))
end
if old_craft_grid[2]:get_name() == "scifi_nodes:white_pad" then
-- keep original item if the copy-recipe is used
craft_inv:set_stack("craft", index, original)
end
end)
if minetest.get_modpath("unifieddyes") then
-- add colored crafts
unifieddyes.register_color_craft({
output = "scifi_nodes:access_card",
palette = "extended",
neutral_node = "scifi_nodes:access_card",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
},
type = "shapeless"
})
end

73
ambience.lua Normal file
View File

@@ -0,0 +1,73 @@
-- currently playing sounds per mapblock
-- mapblock_pos[number]
local currently_playing = {}
-- clear the currently playing tracker every few seconds
local function clear_currently_playing()
currently_playing = {}
minetest.after(5, clear_currently_playing)
end
minetest.after(5, clear_currently_playing)
-- mapblock resolution
local function get_key(pos)
return minetest.pos_to_string(vector.round(vector.divide(pos, 16)))
end
local function add_currently_playing(pos, value)
local key = get_key(pos)
local count = currently_playing[key]
if not count then
-- new entry
count = value
else
-- update entry
count = count + value
end
currently_playing[key] = count
end
-- limit plaing sounds per mapblock
local function can_play(pos)
local count = currently_playing[get_key(pos)]
return not count or count < 25
end
-- register ambience sounds with node-timer
function scifi_nodes.register_ambience(nodename, soundname, opts)
assert(opts)
opts.interval = opts.interval or 60
local function play(pos)
minetest.sound_play(soundname ,{
max_hear_distance = opts.max_hear_distance or 16,
pos = pos,
gain = opts.gain or 0.7
})
end
minetest.override_item(nodename, {
on_timer = function(pos)
local timer = minetest.get_node_timer(pos)
if not can_play(pos) then
-- too many sounds playing, recheck again soon
timer:start(1)
return
end
-- increment usage count
add_currently_playing(pos, 1)
play(pos)
-- restart timer
timer:start(opts.interval)
end,
on_construct = function(pos)
play(pos)
local timer = minetest.get_node_timer(pos)
timer:start(opts.interval)
end
})
end

12
api.md Normal file
View File

@@ -0,0 +1,12 @@
scifi_nodes api
# Doors
Open scifi_nodes door at given position
```lua
scifi_nodes.open_door(pos)
```
returns `true` on success, `false` otherwise

View File

@@ -105,5 +105,7 @@ minetest.register_node("scifi_nodes:builder", {
end, end,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1, oddly_breakable_by_hand=1} groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })

View File

@@ -1,24 +1,21 @@
local has_default = minetest.get_modpath("default")
--chest code from default(Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>) --chest code from default(Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>)
local chest_formspec = local chest_formspec =
"size[8,9]" .. "size[8,9]" ..
default.gui_bg .. (has_default and default.gui_bg or "") ..
default.gui_bg_img .. (has_default and default.gui_bg_img or "") ..
default.gui_slots .. (has_default and default.gui_slots or "") ..
"list[current_name;main;0,0.3;8,4;]" .. "list[current_name;main;0,0.3;8,4;]" ..
"list[current_player;main;0,4.85;8,1;]" .. "list[current_player;main;0,4.85;8,1;]" ..
"list[current_player;main;0,6.08;8,3;8]" .. "list[current_player;main;0,6.08;8,3;8]" ..
"listring[current_name;main]" .. "listring[current_name;main]" ..
"listring[current_player;main]" .. "listring[current_player;main]" ..
default.get_hotbar_bg(0,4.85) (has_default and default.get_hotbar_bg(0,4.85) or "")
-- Helper functions -- Helper functions
local function drop_chest_stuff() local function drop_chest_stuff()
return function(pos, oldnode, oldmetadata, digger) return function(pos, _, oldmetadata)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:from_table(oldmetadata) meta:from_table(oldmetadata)
local inv = meta:get_inventory() local inv = meta:get_inventory()
@@ -35,21 +32,20 @@ local function drop_chest_stuff()
end end
end end
--chest code Copyright (C) 2011-2012 celeron55, Perttu Ahola <celeron55@gmail.com> local function register_chest(name, custom_def)
minetest.register_node("scifi_nodes:crate", { assert(custom_def.description)
description = "Crate", assert(custom_def.tiles)
tiles = {"scifi_nodes_crate.png"},
local def = {
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky = 1, oddly_breakable_by_hand = 2, fuel = 8},
legacy_facedir_simple = true, legacy_facedir_simple = true,
is_ground_content = false, is_ground_content = false,
sounds = default.node_sound_wood_defaults(), sounds = scifi_nodes.node_sound_wood_defaults(),
after_dig_node = drop_chest_stuff(), after_dig_node = drop_chest_stuff(),
on_construct = function(pos) on_construct = function(pos)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("formspec", chest_formspec) meta:set_string("formspec", chest_formspec)
meta:set_string("infotext", "Crate") meta:set_string("infotext", custom_def.description)
local inv = meta:get_inventory() local inv = meta:get_inventory()
inv:set_size("main", 8 * 4) inv:set_size("main", 8 * 4)
end, end,
@@ -65,10 +61,28 @@ minetest.register_node("scifi_nodes:crate", {
on_metadata_inventory_take = function(pos, listname, index, stack, player) on_metadata_inventory_take = function(pos, listname, index, stack, player)
minetest.log("action", player:get_player_name() .. minetest.log("action", player:get_player_name() ..
" takes stuff from chest at " .. minetest.pos_to_string(pos)) " takes stuff from chest at " .. minetest.pos_to_string(pos))
end, end
}
for k, v in pairs(custom_def) do
def[k] = v
end
minetest.register_node(name, def)
end
register_chest("scifi_nodes:crate", {
description = "Crate",
tiles = {"scifi_nodes_crate.png"},
groups = {
cracky = 1,
oddly_breakable_by_hand = 2,
fuel = 8
}
}) })
minetest.register_node("scifi_nodes:box", { register_chest("scifi_nodes:box", {
description = "Storage box", description = "Storage box",
tiles = { tiles = {
"scifi_nodes_box_top.png", "scifi_nodes_box_top.png",
@@ -78,32 +92,7 @@ minetest.register_node("scifi_nodes:box", {
"scifi_nodes_box.png", "scifi_nodes_box.png",
"scifi_nodes_box.png" "scifi_nodes_box.png"
}, },
paramtype2 = "facedir", groups = {
groups = {cracky = 1}, cracky = 1
legacy_facedir_simple = true, }
is_ground_content = false,
sounds = default.node_sound_metal_defaults(),
after_dig_node = drop_chest_stuff(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", chest_formspec)
meta:set_string("infotext", "Box")
local inv = meta:get_inventory()
inv:set_size("main", 8 * 4)
end,
on_metadata_inventory_move = function(pos, from_list, from_index,
to_list, to_index, count, player)
minetest.log("action", player:get_player_name() ..
" moves stuff in chest at " .. minetest.pos_to_string(pos))
end,
on_metadata_inventory_put = function(pos, listname, index, stack, player)
minetest.log("action", player:get_player_name() ..
" moves stuff to chest at " .. minetest.pos_to_string(pos))
end,
on_metadata_inventory_take = function(pos, listname, index, stack, player)
minetest.log("action", player:get_player_name() ..
" takes stuff from chest at " .. minetest.pos_to_string(pos))
end,
}) })
--end of chest code

View File

@@ -1,7 +1,5 @@
function scifi_nodes.get_switch_rules(param2)
scifi_nodes.get_switch_rules = function(param2)
-- param2 = 2 -- param2 = 2
local rules = { local rules = {
{x=1, y=-1, z=-1}, {x=1, y=-1, z=-1},
@@ -20,3 +18,23 @@ scifi_nodes.get_switch_rules = function(param2)
end end
return rules return rules
end end
scifi_nodes.slope_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.25, -0.25, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.25, 0.5},
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
}
}
scifi_nodes.slope_box_simple = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, -0.25},
{-0.5, -0.25, -0.25, 0.5, 0, 0},
{-0.5, 0, 0, 0.5, 0.25, 0.25},
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
}
}

View File

@@ -1,5 +1,6 @@
-- CRAFTING RECIPES FOR SCIFI NODES -- CRAFTING RECIPES FOR SCIFI NODES
if minetest.get_modpath("basic_materials") then
-- 6 basic plastic from 9 homedecor plastic sheet -- 6 basic plastic from 9 homedecor plastic sheet
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:white2 6", output = "scifi_nodes:white2 6",
@@ -10,6 +11,29 @@ minetest.register_craft({
} }
}) })
if minetest.settings:get_bool("scifi_nodes.teleporter_enable_crafting", false) then
-- enable the teleporter pad crafting recipe only if the setting is enabled
minetest.register_craft({
output = "scifi_nodes:pad",
recipe = {
{"homedecor:plastic_sheeting", "quartz:block", "homedecor:plastic_sheeting"},
{"default:mese_crystal", "quartz:block", "default:mese_crystal"},
{"homedecor:plastic_sheeting", "quartz:block", "homedecor:plastic_sheeting"}
}
})
end
end
if not minetest.get_modpath("default") or not minetest.get_modpath("dye") then
-- the default and dye mod are required for most of the recipes
-- if either of them is missing (because we are not in the default game)
-- then just skip the recipes entirely
-- TODO: potentially switch recipes depending on current game
return
end
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:super_white", output = "scifi_nodes:super_white",
recipe = { recipe = {
@@ -210,7 +234,7 @@ minetest.register_craft({
} }
}) })
-- 4 electronic screen from 4 plastic, 1 trap glow glass, 2 cyan dye, 2 -- 4 electronic screen from 4 plastic, 1 lightbar, 2 cyan dye, 2
-- microcontroller -- microcontroller
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:screen 4", output = "scifi_nodes:screen 4",
@@ -221,7 +245,7 @@ minetest.register_craft({
} }
}) })
-- 4 electronic screen2 from 4 plastic, 1 trap glow glass, 2 green dye, 2 -- 4 electronic screen2 from 4 plastic, 1 lightbar, 2 green dye, 2
-- microcontroller -- microcontroller
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:screen2 4", output = "scifi_nodes:screen2 4",
@@ -232,6 +256,18 @@ minetest.register_craft({
} }
}) })
-- 4 electronic screen3 from 4 plastic, 1 lightbar, 2 black dye, 2
-- microcontroller
minetest.register_craft({
output = "scifi_nodes:screen3 4",
recipe = {
{"scifi_nodes:white2", "mesecons_microcontroller:microcontroller0000", "scifi_nodes:white2"},
{"dye:black", "scifi_nodes:lightbar", "dye:black"},
{"scifi_nodes:white2", "mesecons_microcontroller:microcontroller0000", "scifi_nodes:white2"}
}
})
-- 4 black wall screen from 4 black meshes and 1 electronic screen2 -- 4 black wall screen from 4 black meshes and 1 electronic screen2
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:black_screen 4", output = "scifi_nodes:black_screen 4",
@@ -307,6 +343,16 @@ minetest.register_craft({
} }
}) })
-- 6 black vnt from 6 black wall block and 6 stripes
minetest.register_craft({
output = "scifi_nodes:blackvnt 6",
recipe = {
{"scifi_nodes:black", "scifi_nodes:black", "scifi_nodes:black"},
{"scifi_nodes:stripes", "scifi_nodes:stripes", "scifi_nodes:stripes"},
{"", "", ""}
}
})
-- 6 black vent from 6 black wall -- 6 black vent from 6 black wall
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:blackvent 6", output = "scifi_nodes:blackvent 6",
@@ -451,6 +497,15 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = "scifi_nodes:crate",
recipe = {
{"scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey"},
{"scifi_nodes:grey", "", "scifi_nodes:grey"},
{"scifi_nodes:grey", "scifi_nodes:grey", "scifi_nodes:grey"}
}
})
-- 6 blue metal from 6 plastic, 2 blue dye, 1 dented metal block -- 6 blue metal from 6 plastic, 2 blue dye, 1 dented metal block
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:bluemetal 6", output = "scifi_nodes:bluemetal 6",
@@ -700,6 +755,16 @@ minetest.register_craft({
} }
}) })
-- 6 black pipe from 6 lighttop and 1 vent
minetest.register_craft({
output = "scifi_nodes:blackpipe 6",
recipe = {
{"scifi_nodes:lighttop", "", "scifi_nodes:lighttop"},
{"scifi_nodes:lighttop", "scifi_nodes:vent2", "scifi_nodes:lighttop"},
{"scifi_nodes:lighttop", "", "scifi_nodes:lighttop"}
}
})
-- 1 broken green pipe from 1 green pipe -- 1 broken green pipe from 1 green pipe
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:grnpipe2", output = "scifi_nodes:grnpipe2",
@@ -767,6 +832,16 @@ minetest.register_craft({
} }
}) })
-- 4 green light bar from 4 green metal, 2 green dye, 1 lightbar
minetest.register_craft({
output = "scifi_nodes:greenbar_animated 4",
recipe = {
{"scifi_nodes:greenbar", "", "scifi_nodes:greenbar"},
{"", "mesecons:wire_00000000_off", ""},
{"scifi_nodes:greenbar", "", "scifi_nodes:greenbar"}
}
})
-- 4 green metal block from 4 green metal -- 4 green metal block from 4 green metal
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:green_square 4", output = "scifi_nodes:green_square 4",
@@ -853,6 +928,16 @@ minetest.register_craft({
} }
}) })
-- 4 holes from 4 grey and 1 black dye and 1 white dye and 1 metal mesh
minetest.register_craft({
output = "scifi_nodes:holes 4",
recipe = {
{"scifi_nodes:grey", "dye:black", "scifi_nodes:grey"},
{"", "scifi_nodes:mesh", ""},
{"scifi_nodes:grey", "dye:white", "scifi_nodes:grey"}
}
})
-- 4 metal table from 2 grey and 2 dented metal block -- 4 metal table from 2 grey and 2 dented metal block
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:table 4", output = "scifi_nodes:table 4",
@@ -902,6 +987,15 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = "scifi_nodes:octwht 4",
recipe = {
{"dye:white", "scifi_nodes:glass", ""},
{"scifi_nodes:glass", "scifi_nodes:lightbar", "scifi_nodes:glass"},
{"", "scifi_nodes:glass", "dye:white"}
}
})
-- 1 purple node from 1 plastic, 1 blue dye and 1 red dye -- 1 purple node from 1 plastic, 1 blue dye and 1 red dye
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:purple", output = "scifi_nodes:purple",
@@ -1089,6 +1183,22 @@ minetest.register_craft({
} }
}) })
-- wet metal plant pot from dry metal plant pot
minetest.register_craft({
output = "scifi_nodes:pot2",
recipe = {
{"scifi_nodes:pot", "bucket:bucket_water"}
},
replacements = {{"bucket:bucket_water", "bucket:bucket_empty"}}
})
-- dry metal plant pot from wet metal plant pot
minetest.register_craft({
type = "cooking",
output = "scifi_nodes:pot",
recipe = "scifi_nodes:pot2",
})
-- 6 itemholder from 2 dented metal block and 1 plastic -- 6 itemholder from 2 dented metal block and 1 plastic
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:itemholder 6", output = "scifi_nodes:itemholder 6",
@@ -1282,10 +1392,13 @@ minetest.register_craft({
}) })
-- https://forum.minetest.net/viewtopic.php?f=10&t=13125&p=261481#p261481 -- https://forum.minetest.net/viewtopic.php?f=10&t=13125&p=261481#p261481
-- with modified recipe
minetest.register_craft({ minetest.register_craft({
output = 'scifi_nodes:windowpanel 4', output = 'scifi_nodes:windowpanel',
recipe = { recipe = {
{"scifi_nodes:glass","",""} {"scifi_nodes:glass_pane","scifi_nodes:glass_pane",""},
{"scifi_nodes:glass_pane","scifi_nodes:glass_pane",""},
{"","",""}
} }
}) })
@@ -1433,9 +1546,9 @@ minetest.register_craft({
minetest.register_craft({ minetest.register_craft({
output = "scifi_nodes:plant8", output = "scifi_nodes:plant8",
recipe = { recipe = {
{"flowers:viola","default:junglegrass"}, {"flowers:viola","default:junglegrass", "default:grass_1"},
{"default:dirt",""}, {"default:dirt","",""},
{"scifi_nodes:greybolts",""} {"scifi_nodes:greybolts","",""}
} }
}) })
@@ -1564,6 +1677,25 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = 'scifi_nodes:green2 6',
recipe = {
{"scifi_nodes:white","dye:dark_green","scifi_nodes:white"},
{"scifi_nodes:black","dye:dark_green","scifi_nodes:black"},
{"scifi_nodes:white","dye:green","scifi_nodes:white"}
}
})
minetest.register_craft({
output = 'scifi_nodes:doomwall4 6',
recipe = {
{"scifi_nodes:white","dye:dark_green","scifi_nodes:white"},
{"scifi_nodes:black","dye:dark_green","scifi_nodes:black"},
{"scifi_nodes:white","dye:dark_green","scifi_nodes:white"}
}
})
minetest.register_craft({ minetest.register_craft({
output = 'scifi_nodes:doomwall41 6', output = 'scifi_nodes:doomwall41 6',
recipe = { recipe = {
@@ -1582,15 +1714,6 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = 'scifi_nodes:doomwall43 6',
recipe = {
{"scifi_nodes:white","dye:black","scifi_nodes:white"},
{"scifi_nodes:black","dye:dark_green","scifi_nodes:black"},
{"scifi_nodes:white","dye:yellow","scifi_nodes:white"}
}
})
minetest.register_craft({ minetest.register_craft({
output = 'scifi_nodes:doomwall43 6', output = 'scifi_nodes:doomwall43 6',
recipe = { recipe = {
@@ -1680,7 +1803,7 @@ minetest.register_craft({
minetest.register_craft({ minetest.register_craft({
output = 'scifi_nodes:stripes2top 3', output = 'scifi_nodes:stripes2top 3',
recipe = { recipe = {
{"scifi_nodes:black","scifi_noedes:black","scifi_nodes:black"}, {"scifi_nodes:black","scifi_nodes:black","scifi_nodes:black"},
{"default:silver_sand","default:silver_sand","default:silver_sand"} {"default:silver_sand","default:silver_sand","default:silver_sand"}
} }
}) })
@@ -1693,3 +1816,47 @@ minetest.register_craft({
} }
}) })
minetest.register_craft({
output = "scifi_nodes:fan",
recipe = {
{"scifi_nodes:grey", "", "scifi_nodes:grey"},
{"", "scifi_nodes:vent2", ""},
{"scifi_nodes:grey", "", "scifi_nodes:grey"}
}
})
minetest.register_craft({
output = "scifi_nodes:engine",
recipe = {
{"scifi_nodes:bluwllight", "", "scifi_nodes:bluwllight"},
{"scifi_nodes:screen", "scifi_nodes:fan", "scifi_nodes:screen3"},
{"scifi_nodes:bluwllight", "", "scifi_nodes:bluwllight"}
}
})
minetest.register_craft({
output = "scifi_nodes:forcefield 4",
recipe = {
{"scifi_nodes:octbl", "", "scifi_nodes:octbl"},
{"", "scifi_nodes:engine", ""},
{"scifi_nodes:octbl", "", "scifi_nodes:octbl"}
}
})
minetest.register_craft({
output = "scifi_nodes:vent3 4",
recipe = {
{"scifi_nodes:vent2", "", "scifi_nodes:vent2"},
{"", "scifi_nodes:glass", ""},
{"scifi_nodes:vent2", "", "scifi_nodes:vent2"}
}
})
minetest.register_craft({
output = "scifi_nodes:mesh3 4",
recipe = {
{"scifi_nodes:mesh2", "", "scifi_nodes:mesh2"},
{"", "scifi_nodes:glass", ""},
{"scifi_nodes:mesh2", "", "scifi_nodes:mesh2"}
}
})

View File

@@ -1,10 +0,0 @@
default
basic_materials
mesecons
xpanes?
moreblocks?
mesecons_microcontroller?
mesecons_button?
mesecons_torch?
mesecons_receiver?
dye?

View File

@@ -11,7 +11,7 @@ local digicode_context = {}
-- after_place_node, use by digicode and palm_scanner -- after_place_node, use by digicode and palm_scanner
-- placer is a player object -- placer is a player object
local function set_owner(pos, placer, itemstack, pointed_thing) local function set_owner(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("owner", placer:get_player_name()) meta:set_string("owner", placer:get_player_name())
meta:set_string("code", secret_code) meta:set_string("code", secret_code)
@@ -48,7 +48,7 @@ local function update_code(pos, code)
meta:set_string("code", code) meta:set_string("code", code)
end end
local function show_digicode_formspec(pos, node, player, itemstack, pointed_thing) local function show_digicode_formspec(pos, _, player)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner") local owner = meta:get_string("owner")
local current_code = meta:get_string("code") local current_code = meta:get_string("code")
@@ -122,14 +122,15 @@ minetest.register_node("scifi_nodes:digicode_on", {
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
light_source = 5, light_source = 5,
groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1},
drop = {items = {"scifi_nodes:digicode_off"}}, is_ground_content = false,
drop = "scifi_nodes:digicode_off",
mesecons = { mesecons = {
receptor = { receptor = {
state = (has_mesecons and mesecon.state.on) state = (has_mesecons and mesecon.state.on)
} }
}, },
on_timer = toggle_digicode, on_timer = toggle_digicode,
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:digicode_off", { minetest.register_node("scifi_nodes:digicode_off", {
@@ -145,6 +146,7 @@ minetest.register_node("scifi_nodes:digicode_off", {
paramtype = "light", paramtype = "light",
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1},
is_ground_content = false,
mesecons = { mesecons = {
receptor = { receptor = {
state = (has_mesecons and mesecon.state.off) state = (has_mesecons and mesecon.state.off)
@@ -152,7 +154,7 @@ minetest.register_node("scifi_nodes:digicode_off", {
}, },
after_place_node = set_owner, after_place_node = set_owner,
on_rightclick = show_digicode_formspec, on_rightclick = show_digicode_formspec,
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_craft({ minetest.register_craft({

191
doors.lua
View File

@@ -40,10 +40,10 @@ minetest.register_alias("scifi_nodes:door4d","scifi_nodes:green_door_opened_top"
-- This table now uses named parameters and more convenient variables names -- This table now uses named parameters and more convenient variables names
local doors = { local doors = {
{base_name = "Doom", base_ingredient = "doors:door_obsidian_glass", sound = "scifi_nodes_door_mechanic"}, {base_name = "Doom", base_ingredient = "doors:door_obsidian_glass", sound = "scifi_nodes_door_normal"},
{base_name = "black", base_ingredient = "doors:door_steel", sound = "scifi_nodes_door_mechanic"}, {base_name = "black", base_ingredient = "doors:door_steel", sound = "scifi_nodes_door_normal"},
{base_name = "white", base_ingredient = "doors:door_glass", sound = "scifi_nodes_door_normal"}, {base_name = "white", base_ingredient = "doors:door_glass", sound = "scifi_nodes_door_normal"},
{base_name = "green", base_ingredient = "doors:door_wood", sound = "scifi_nodes_door_mechanic"}, {base_name = "green", base_ingredient = "doors:door_wood", sound = "scifi_nodes_door_normal"},
{base_name = "blue", base_ingredient = "default:steelblock", sound = "scifi_nodes_door_normal"} {base_name = "blue", base_ingredient = "default:steelblock", sound = "scifi_nodes_door_normal"}
} }
@@ -120,11 +120,46 @@ for _, current_door in ipairs(doors) do
return itemstack; return itemstack;
end end
local function afterdestruct(pos, oldnode) local function afterdestruct(pos)
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"}) minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
end end
local function open_door(pos, node, player, itemstack, pointed_thing) local function change_adjacent(target, pos, node)
local target_opposite, target_top
if target == opened then
target_top = opened_top
target_opposite = closed
else
target_top = closed_top
target_opposite = opened
end
for offset = -1,1,2 do
local x = pos.x
local y = pos.y
local z = pos.z
-- match param2=0 or param2=2
if node.param2 % 2 == 0 then
x = x + offset
else
z = z + offset
end
local adjacent = minetest.get_node({x=x, y=y, z=z})
if adjacent.name == target_opposite then
minetest.swap_node({x=x, y=y, z=z}, {name=target, param2 = adjacent.param2})
minetest.swap_node({x=x, y=y+1, z=z}, {name=target_top, param2 = adjacent.param2})
end
end
end
local function open_door(pos, node, player, itemstack)
if not scifi_nodes.door_check_access_card(pos, itemstack, player) then
return
end
-- play sound -- play sound
minetest.sound_play(sound,{ minetest.sound_play(sound,{
max_hear_distance = 16, max_hear_distance = 16,
@@ -133,60 +168,21 @@ for _, current_door in ipairs(doors) do
}) })
local timer = minetest.get_node_timer(pos) local timer = minetest.get_node_timer(pos)
local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
local e = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z-1})
local f = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1})
local g = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1})
local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1})
minetest.swap_node(pos, {name=opened, param2=node.param2})
minetest.swap_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2})
minetest.set_node(pos, {name=opened, param2=node.param2}) change_adjacent(opened, pos, node)
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2})
if a.name == closed then
minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=opened, param2=a.param2})
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=opened_top, param2=a.param2})
end
if b.name == closed then
minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=opened, param2=b.param2})
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=opened_top, param2=b.param2})
end
if c.name == closed then
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=opened, param2=c.param2})
minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=c.param2})
end
if d.name == closed then
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=opened, param2=d.param2})
minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=d.param2})
end
if e.name == closed then
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=opened, param2=e.param2})
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=e.param2})
end
if f.name == closed then
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=opened, param2=f.param2})
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=f.param2})
end
if g.name == closed then
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=opened, param2=g.param2})
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=g.param2})
end
if h.name == closed then
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=opened, param2=h.param2})
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=h.param2})
end
timer:start(3) timer:start(3)
end end
local function afterplace(pos, placer, itemstack, pointed_thing) local function afterplace(pos)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=node.param2}) minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=node.param2})
end end
local function ontimer(pos, elapsed) local function ontimer(pos)
-- play sound -- play sound
minetest.sound_play(sound,{ minetest.sound_play(sound,{
max_hear_distance = 16, max_hear_distance = 16,
@@ -195,50 +191,11 @@ for _, current_door in ipairs(doors) do
}) })
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
local e = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z-1})
local f = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1})
local g = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1})
local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1})
minetest.set_node(pos, {name=closed, param2=node.param2}) minetest.swap_node(pos, {name=closed, param2=node.param2})
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2}) minetest.swap_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2})
if a.name == opened then change_adjacent(closed, pos, node)
minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=closed, param2=a.param2})
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=closed_top, param2=a.param2})
end
if b.name == opened then
minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=closed, param2=b.param2})
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=closed_top, param2=b.param2})
end
if c.name == opened then
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=closed, param2=c.param2})
minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=closed_top, param2=c.param2})
end
if d.name == opened then
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=closed, param2=d.param2})
minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=closed_top, param2=d.param2})
end
if e.name == opened then
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=closed, param2=e.param2})
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=closed_top, param2=e.param2})
end
if f.name == opened then
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=closed, param2=f.param2})
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=closed_top, param2=f.param2})
end
if g.name == opened then
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=closed, param2=g.param2})
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=closed_top, param2=g.param2})
end
if h.name == opened then
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=closed, param2=h.param2})
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=closed_top, param2=h.param2})
end
end end
local mesecons_doors_rules = { local mesecons_doors_rules = {
@@ -265,6 +222,10 @@ for _, current_door in ipairs(doors) do
}, },
} }
local function nodig()
return false
end
local doors_rightclick = nil -- Crashes serv if empty table ! local doors_rightclick = nil -- Crashes serv if empty table !
if not scifi_nodes.doors_open_with_mesecon_only then doors_rightclick = open_door end if not scifi_nodes.doors_open_with_mesecon_only then doors_rightclick = open_door end
@@ -283,7 +244,13 @@ for _, current_door in ipairs(doors) do
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky = 3, oddly_breakable_by_hand = 1}, groups = {
cracky = 3,
dig_generic = 3,
scifi_nodes_door = 1,
door = 1
},
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -296,10 +263,12 @@ for _, current_door in ipairs(doors) do
{-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625} {-0.5, -0.5, -0.0625, 0.5, 1.5, 0.0625}
} }
}, },
_open = open_door,
mesecons = mesecons_doors_def, mesecons = mesecons_doors_def,
on_place = onplace, on_place = onplace,
after_destruct = afterdestruct, after_destruct = afterdestruct,
on_rightclick = doors_rightclick, on_rightclick = doors_rightclick,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node(closed_top, { minetest.register_node(closed_top, {
@@ -314,7 +283,8 @@ for _, current_door in ipairs(doors) do
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky = 1}, groups = {cracky = 1, dig_generic = 3, door = 1},
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -327,6 +297,8 @@ for _, current_door in ipairs(doors) do
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},
} }
}, },
can_dig = nodig,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node(opened, { minetest.register_node(opened, {
@@ -342,7 +314,8 @@ for _, current_door in ipairs(doors) do
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
drop = closed, drop = closed,
groups = {cracky = 1}, groups = {cracky = 1, dig_generic = 3, door = 2},
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -358,6 +331,7 @@ for _, current_door in ipairs(doors) do
after_place_node = afterplace, after_place_node = afterplace,
after_destruct = afterdestruct, after_destruct = afterdestruct,
on_timer = ontimer, on_timer = ontimer,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node(opened_top, { minetest.register_node(opened_top, {
@@ -372,7 +346,8 @@ for _, current_door in ipairs(doors) do
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky = 1}, groups = {cracky = 1, dig_generic = 3, door = 2},
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -385,5 +360,31 @@ for _, current_door in ipairs(doors) do
{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0},
} }
}, },
can_dig = nodig,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
end -- end of doors table browsing end -- end of doors table browsing
-- opens the scifi-door at the given position
function scifi_nodes.open_door(pos)
local node = minetest.get_node_or_nil(pos)
if not node then
-- area not loaded
return false
end
local def = minetest.registered_nodes[node.name]
if type(def._open) ~= "function" then
-- open function not found
return false
end
if not def.groups or not def.groups.scifi_nodes_door then
-- not a scifi_nodes door
return false
end
-- call open function
def._open(pos, node)
return true
end

22
forcefield.lua Normal file
View File

@@ -0,0 +1,22 @@
minetest.register_node("scifi_nodes:forcefield", {
description = "Forcefield",
sunlight_propagates = true,
drawtype = "glasslike",
groups = {
cracky = 1,
level = 3
},
is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults(),
paramtype = "light",
light_source = minetest.LIGHT_MAX,
tiles = {{
name = "scifi_nodes_forcefield.png",
animation = {
type = "vertical_frames",
aspect_w = 16,
aspect_h = 16,
length = 1.0,
}
}}
})

View File

@@ -4,19 +4,50 @@ scifi_nodes = {}
local MP = minetest.get_modpath("scifi_nodes") local MP = minetest.get_modpath("scifi_nodes")
dofile(MP.."/sounds.lua")
if minetest.get_modpath("xpanes") then if minetest.get_modpath("xpanes") then
dofile(MP.."/panes.lua") dofile(MP.."/panes.lua")
end end
dofile(MP.."/common.lua") dofile(MP.."/common.lua")
if minetest.get_modpath("default") then
-- only load builder if the default mod is available
-- the formspecs depend on it
dofile(MP.."/builder.lua") dofile(MP.."/builder.lua")
end
dofile(MP.."/ambience.lua")
dofile(MP.."/chest.lua") dofile(MP.."/chest.lua")
dofile(MP.."/plants.lua") dofile(MP.."/plants.lua")
dofile(MP.."/models.lua")
dofile(MP.."/nodes.lua") dofile(MP.."/nodes.lua")
dofile(MP.."/access_card.lua")
dofile(MP.."/doors.lua") dofile(MP.."/doors.lua")
dofile(MP.."/switches.lua") dofile(MP.."/switch.lua")
dofile(MP.."/protected_switch.lua")
dofile(MP.."/nodeboxes.lua") dofile(MP.."/nodeboxes.lua")
dofile(MP.."/palm_scanner.lua") dofile(MP.."/palm_scanner.lua")
dofile(MP.."/digicode.lua") dofile(MP.."/digicode.lua")
dofile(MP.."/models.lua") dofile(MP.."/octagon_panes.lua")
dofile(MP.."/octagon_glass.lua")
dofile(MP.."/forcefield.lua")
dofile(MP.."/crafts.lua") dofile(MP.."/crafts.lua")
if minetest.get_modpath("letters") then
-- register letter nodes
dofile(MP.."/letters.lua")
end
if minetest.get_modpath("mesecons_stealthnode") then
-- register stealthnodes
dofile(MP.."/stealthnodes.lua")
end
if minetest.get_modpath("mtt") and mtt.enabled then
dofile(MP .. "/mtt.lua")
end
minetest.log("action", "[scifi_nodes] loaded.")

11
letters.lua Normal file
View File

@@ -0,0 +1,11 @@
letters.register_letters("scifi_nodes", "white2", "scifi_nodes:white2", "Plastic", "scifi_nodes_white2.png", {
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
groups = {
ud_param2_colorable = 1,
not_in_creative_inventory = 1,
not_in_craft_guide = 1,
oddly_breakable_by_hand = 1,
attached_node = 1
}
})

View File

@@ -1,4 +1,21 @@
name = scifi_nodes name = scifi_nodes
description = Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets. description = Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets.
depends = default,dye optional_depends = """
optional_depends = xpanes,mesecons,moreblocks,mesecons_microcontroller,mesecons_button,mesecons_torch,mesecons_receiver,basic_materials advtrains,
default,
xpanes,
mesecons,
moreblocks,
mesecons_microcontroller,
mesecons_button,
mesecons_torch,
mesecons_receiver,
basic_materials,
dye,
unifieddyes,
letters,
mesecons_stealthnode,
mtt,
slats,
signs_api
"""

View File

@@ -2,43 +2,37 @@
--Copyright (c) 2011-2015 Calinou and contributors. --Copyright (c) 2011-2015 Calinou and contributors.
--Licensed under the zlib license. --Licensed under the zlib license.
function scifi_nodes.register_slope(name, desc, texture, light) function scifi_nodes.register_slope(name, desc, texture, light, soundtype)
local sounds
if soundtype == "stone" then
sounds = scifi_nodes.node_sound_stone_defaults()
else
sounds = scifi_nodes.node_sound_metal_defaults()
end
minetest.register_node("scifi_nodes:slope_"..name, { minetest.register_node("scifi_nodes:slope_"..name, {
description = desc.." Slope", description = desc.." Slope",
sunlight_propagates = false, sunlight_propagates = false,
drawtype = "mesh", drawtype = "mesh",
mesh = "scifi_nodes_slope.obj", mesh = "scifi_nodes_slope.obj",
tiles = texture, tiles = texture,
selection_box = { selection_box = scifi_nodes.slope_box,
type = "fixed", collision_box = scifi_nodes.slope_box,
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.25, -0.25, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.25, 0.5},
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
}
},
collision_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
{-0.5, -0.25, -0.25, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.25, 0.5},
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
}
},
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
use_texture_alpha = "clip",
light_source = light, light_source = light,
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
on_place = minetest.rotate_node is_ground_content = false,
on_place = minetest.rotate_node,
sounds = sounds,
}) })
end end
-- register some blocks in stairsplus if available (part of moreblocks) -- register some blocks in stairsplus if available (part of moreblocks)
scifi_nodes.register_slope("white2", "Plastic", {"scifi_nodes_white2.png",}, 0) scifi_nodes.register_slope("white2", "Plastic", {"scifi_nodes_white2.png",}, 0, "stone")
scifi_nodes.register_slope("super_white", "Super Plastic", {"scifi_nodes_super_white.png",}, 11) scifi_nodes.register_slope("super_white", "Super Plastic", {"scifi_nodes_white2.png",}, 11, "stone")
scifi_nodes.register_slope("ultra_white", "Super Plastic", {"scifi_nodes_ultra_white.png",}, default.LIGHT_MAX) scifi_nodes.register_slope("ultra_white", "Super Plastic", {"scifi_nodes_white2.png",},minetest.LIGHT_MAX, "stone")
scifi_nodes.register_slope("black", "Black", {"scifi_nodes_black.png",}, 0) scifi_nodes.register_slope("black", "Black", {"scifi_nodes_black.png",}, 0)
scifi_nodes.register_slope("white", "White", {"scifi_nodes_white.png",}, 0) scifi_nodes.register_slope("white", "White", {"scifi_nodes_white.png",}, 0)
scifi_nodes.register_slope("grey", "Grey", {"scifi_nodes_grey.png",}, 0) scifi_nodes.register_slope("grey", "Grey", {"scifi_nodes_grey.png",}, 0)
@@ -53,8 +47,8 @@ scifi_nodes.register_slope("holes", "Holes", {"scifi_nodes_holes.png",}, 0)
scifi_nodes.register_slope("pipe", "Pipe", {"scifi_nodes_pipe.png",}, 0) scifi_nodes.register_slope("pipe", "Pipe", {"scifi_nodes_pipe.png",}, 0)
scifi_nodes.register_slope("stripes", "Stripes", {"scifi_nodes_stripes.png",}, 0) scifi_nodes.register_slope("stripes", "Stripes", {"scifi_nodes_stripes.png",}, 0)
scifi_nodes.register_slope("screen", "Screen", {"scifi_nodes_screen3.png",}, 5) scifi_nodes.register_slope("screen", "Screen", {"scifi_nodes_screen3.png",}, 5)
scifi_nodes.register_slope("lightstripe", "Lightstripe", {"scifi_nodes_lightstripe.png",}, default.LIGHT_MAX) scifi_nodes.register_slope("lightstripe", "Lightstripe", {"scifi_nodes_lightstripe.png",}, minetest.LIGHT_MAX)
scifi_nodes.register_slope("blight2", "Blue Light 2", {"scifi_nodes_capsule3.png",}, default.LIGHT_MAX) scifi_nodes.register_slope("blight2", "Blue Light 2", {"scifi_nodes_capsule3.png",}, minetest.LIGHT_MAX)
scifi_nodes.register_slope("wallpipe", "Alien Pipe", {"scifi_nodes_wallpipe.png",}, 0) scifi_nodes.register_slope("wallpipe", "Alien Pipe", {"scifi_nodes_wallpipe.png",}, 0)
scifi_nodes.register_slope("alien", "Alien Wall", {"scifi_nodes_alnslp.png",}, 0) scifi_nodes.register_slope("alien", "Alien Wall", {"scifi_nodes_alnslp.png",}, 0)
scifi_nodes.register_slope("purple", "Purple", {"scifi_nodes_purple.png",}, 0) scifi_nodes.register_slope("purple", "Purple", {"scifi_nodes_purple.png",}, 0)
@@ -64,111 +58,3 @@ scifi_nodes.register_slope("bluemetal", "Blue metal", {"scifi_nodes_bluemetal.pn
scifi_nodes.register_slope("wall", "Metal wall", {"scifi_nodes_wall.png",}, 0) scifi_nodes.register_slope("wall", "Metal wall", {"scifi_nodes_wall.png",}, 0)
scifi_nodes.register_slope("rough", "Rough metal", {"scifi_nodes_rough.png",}, 0) scifi_nodes.register_slope("rough", "Rough metal", {"scifi_nodes_rough.png",}, 0)
scifi_nodes.register_slope("blklt2", "Black stripe light", {"scifi_nodes_black_light2.png",}, 10) scifi_nodes.register_slope("blklt2", "Black stripe light", {"scifi_nodes_black_light2.png",}, 10)
-- Register Nodes for Stairsplus
local node = {}
node.types = {
{"blue", "blue lines", "blue"},
{"holes", "metal with holes","holes"},
{"white2", "plastic", "white2"},
{"super_white", "Super Plastic", "super_white", 11},
{"ultra_white", "Ultra Plastic", "ultra_white", default.LIGHT_MAX},
-- {"engine", "engine", "engine"},
{"wall", "metal wall", "wall"},
{"white", "plastic wall", "white"},
{"stripes2top", "dirty metal block","metal2"},
{"rough", "rough metal", "rough"},
{"lighttop", "metal block", "metal"},
{"red", "red lines", "red"},
{"green", "green lines", "green"},
{"vent2", "vent", "vent"},
{"stripes", "hazard stripes", "stripes"},
{"rust", "rusty metal", "rust"},
{"mesh", "metal mesh", "mesh"},
{"black", "black wall", "black"},
{"blackoct", "black octagon", "blackoct"},
{"blackpipe", "black pipe", "blackpipe"},
{"blacktile", "black tile", "blktl"},
{"blacktile2", "black tile 2", "blktl2"},
{"blackvent", "black vent", "blkvnt"},
{"bluebars", "blue bars", "bluebars"},
{"bluemetal", "blue metal", "blumtl"},
{"bluetile", "blue tile", "blutl"},
{"greytile", "grey tile", "grytl"},
{"mesh2", "metal floormesh", "mesh2"},
{"white", "plastic wall", "white"},
{"pipe", "wall pipe", "pipe2"},
{"pipeside", "side pipe", "pipe3"},
{"tile", "white tile", "tile"},
{"whiteoct", "white octagon", "whiteoct"},
{"whitetile", "white tile2", "whttl"},
{"black_detail", "black detail", "blckdtl"},
{"green_square", "green metal block", "grnblck"},
{"red_square", "red metal block", "redblck"},
{"grey_square", "grey metal block", "greyblck"},
{"blue_square", "blue metal block", "blublck"},
{"black_mesh", "black vent block", "blckmsh"},
{"dent", "dented metal block", "dent"},
{"greenmetal", "green metal wall", "grnmetl"},
{"greenmetal2", "green metal wall2", "grnmetl2"},
{"greenlights", "green wall lights", "grnlt", 10},
{"greenlights2", "green wall lights2", "grnlt2", 10},
{"greenbar", "green light bar", "grnlghtbr", 10},
{"green2", "green wall panel", "grn2"},
{"greentubes", "green pipes", "grntubes"},
{"grey", "grey wall", "gry"},
{"greybolts", "grey wall bolts", "gryblts"},
{"greybars", "grey bars", "grybrs"},
{"greydots", "grey wall dots", "grydts"},
{"greygreenbar", "gray power pipe", "grygrnbr", 10},
{"octofloor", "Doom floor", "octofloor"},
{"octofloor2", "Brown Doom floor", "octofloor2"},
{"doomwall1", "Doom wall 1", "doomwall1"},
{"doomwall2", "Doom wall 2", "doomwall2"},
{"doomwall3", "Doom wall 3", "doomwall3"},
{"doomwall4", "Doom wall 4", "doomwall4"},
{"doomwall41", "Doom wall 4.1", "doomwall4.1"},
{"doomwall42", "Doom wall 4.2", "doomwall4.2"},
{"doomwall43", "Doom wall 4.3", "doomwall4.3"},
{"doomwall431", "Doom wall 4.3.1", "doomwall4.3.1"},
{"doomwall44", "Doom wall 4.4", "doomwall4.4"},
{"blackdmg", "Damaged black wall", "blckdmg"},
{"blackdmgstripe", "Damaged black wall(stripes)", "blckdmgstripe"},
{"doomengine", "Doom engine wall", "doomengine"},
-- {"monitorwall", "Wall monitors", "monitorwall"},
{"screen3", "Wall monitor", "screen3"},
{"doomlight", "Doom light", "doomlight", 12},
{"bluwllight", "Blue wall light", "capsule3", default.LIGHT_MAX},
{"bluegrid", "Blue Grid", "bluegrid", 5},
{"fan", "Fan", "fan"},
{"ppllght", "Purple wall light", "", default.LIGHT_MAX},
{"pplwll", "Purple wall", "", 0},
{"pplwll2", "Purple wall2", "", 0},
{"pplwll3", "Purple wall3", "", 0},
{"pplwll4", "Purple wall4", "", 0},
{"pplblk", "Purple tile", "", 0},
{"purple", "Purple node", "", 0},
{"rock", "Moonstone", "", 0},
{"rock2", "Moonstone2", "", 0},
{"blackvnt", "Black vent", "", 0},
{"blackplate", "Black plate", "", 0},
}
if minetest.global_exists("stairsplus") then
for _, row in ipairs(node.types) do
local name = row[1]
local desc = row[2]
local light = row[4]
-- Node Definition
stairsplus:register_all("scifi_nodes", row[1], "scifi_nodes:"..name, {
description = desc,
tiles = {"scifi_nodes_"..name..".png"},
groups = {cracky=1},
paramtype = "light",
paramtype2 = "facedir",
light_source = light,
})
end
end

View File

@@ -0,0 +1,12 @@
g top
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.0000
vt 1.0000 0.0000
vn 0.0000 0.7071 -0.7071
s off
f 2/1/1 1/2/1 4/3/1 3/4/1

2
mtt.lua Normal file
View File

@@ -0,0 +1,2 @@
mtt.validate_nodenames(minetest.get_modpath("scifi_nodes") .. "/nodenames.txt")

View File

@@ -18,7 +18,8 @@ minetest.register_node("scifi_nodes:alienslope", {
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -32,7 +33,7 @@ minetest.register_node("scifi_nodes:alienslope", {
{-0.125, 0.375, -0.5, 0.5, 0.5, 0.5}, -- NodeBox17 {-0.125, 0.375, -0.5, 0.5, 0.5, 0.5}, -- NodeBox17
} }
}, },
sounds = default.node_sound_wood_defaults(), sounds = scifi_nodes.node_sound_wood_defaults(),
on_place = minetest.rotate_node on_place = minetest.rotate_node
}) })
@@ -49,7 +50,8 @@ minetest.register_node("scifi_nodes:wallpipe", {
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -62,7 +64,7 @@ minetest.register_node("scifi_nodes:wallpipe", {
{-0.5, -0.125, 0, 0.5, 0, 0.0625}, -- NodeBox24 {-0.5, -0.125, 0, 0.5, 0, 0.0625}, -- NodeBox24
} }
}, },
sounds = default.node_sound_wood_defaults() sounds = scifi_nodes.node_sound_wood_defaults()
}) })
minetest.register_node("scifi_nodes:plant_trap", { minetest.register_node("scifi_nodes:plant_trap", {
@@ -82,6 +84,7 @@ minetest.register_node("scifi_nodes:plant_trap", {
walkable = false, walkable = false,
sunlight_propagates = false, sunlight_propagates = false,
groups = {snappy=1, oddly_breakable_by_hand=1}, groups = {snappy=1, oddly_breakable_by_hand=1},
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -91,7 +94,7 @@ minetest.register_node("scifi_nodes:plant_trap", {
{-0.0625, -0.5, 0.3125, 0, 0.5, 0.375}, -- NodeBox28 {-0.0625, -0.5, 0.3125, 0, 0.5, 0.375}, -- NodeBox28
} }
}, },
sounds = default.node_sound_wood_defaults(), sounds = scifi_nodes.node_sound_wood_defaults(),
}) })
minetest.register_node("scifi_nodes:egg", { minetest.register_node("scifi_nodes:egg", {
@@ -107,7 +110,8 @@ minetest.register_node("scifi_nodes:egg", {
sunlight_propagates = false, sunlight_propagates = false,
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
groups = {cracky=1, oddly_breakable_by_hand=1, dig_immediate=2, falling_node=1}, groups = {cracky=1, oddly_breakable_by_hand=1, dig_immediate=2, falling_node=1, dig_generic = 3},
is_ground_content = false,
light_source = 5, light_source = 5,
node_box = { node_box = {
type = "fixed", type = "fixed",
@@ -122,8 +126,8 @@ minetest.register_node("scifi_nodes:egg", {
{-0.125, 0.75, -0.125, 0.125, 0.8125, 0.125}, -- NodeBox8 {-0.125, 0.75, -0.125, 0.125, 0.8125, 0.125}, -- NodeBox8
{-0.375, -0.3125, -0.4375, 0.375, 0.3125, 0.4375}, -- NodeBox9 {-0.375, -0.3125, -0.4375, 0.375, 0.3125, 0.4375}, -- NodeBox9
}, },
sounds = default.node_sound_wood_defaults() },
} sounds = scifi_nodes.node_sound_wood_defaults(),
}) })
if minetest.get_modpath("scifi_mobs") then if minetest.get_modpath("scifi_mobs") then
@@ -131,8 +135,8 @@ minetest.register_abm({
nodenames = {"scifi_nodes:egg"}, nodenames = {"scifi_nodes:egg"},
interval = 30, chance = 10, interval = 30, chance = 10,
action = function(pos, node, _, _) action = function(pos, node, _, _)
minetest.env:add_entity(pos, "scifi_mobs:xenomorph") minetest.add_entity(pos, "scifi_mobs:xenomorph")
minetest.env:remove_node(pos) minetest.remove_node(pos)
end end
}) })
end end
@@ -150,8 +154,10 @@ minetest.register_node("scifi_nodes:pad", {
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
light_source = 5, light_source = 5,
on_construct = function(pos, node, placer) after_place_node = function(pos, placer, itemstack, pointed_thing)
local placer_name = placer:get_player_name()
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if position1 == nil then if position1 == nil then
position1 = pos position1 = pos
@@ -160,10 +166,11 @@ minetest.register_node("scifi_nodes:pad", {
position2 = pos position2 = pos
meta:set_int("type", 2) meta:set_int("type", 2)
else else
minetest.chat_send_all("There can only be two teleportation pads at a time!") minetest.chat_send_player(placer_name, "There can only be two teleportation pads at a time!")
end end
end, end,
on_rightclick = function(pos, node, clicker) on_rightclick = function(pos, node, clicker)
local clicker_name = clicker:get_player_name()
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if meta:get_int("type") == 1 and position2 ~= nil and position1 ~= nil then if meta:get_int("type") == 1 and position2 ~= nil and position1 ~= nil then
minetest.add_particlespawner( minetest.add_particlespawner(
@@ -187,12 +194,12 @@ minetest.register_node("scifi_nodes:pad", {
if minetest.get_node({x=ppos.x, y=ppos.y, z=ppos.z}).name == "scifi_nodes:pad" then if minetest.get_node({x=ppos.x, y=ppos.y, z=ppos.z}).name == "scifi_nodes:pad" then
clicker:setpos(position2) clicker:setpos(position2)
end end
local objs = minetest.env:get_objects_inside_radius(pos, 3) local objs = minetest.get_objects_inside_radius(pos, 3)
for _, obj in pairs(objs) do for _, obj in pairs(objs) do
if obj:get_luaentity() and not obj:is_player() then if obj:get_luaentity() and not obj:is_player() then
if obj:get_luaentity().name == "__builtin:item" then if obj:get_luaentity().name == "__builtin:item" then
local item1 = obj:get_luaentity().itemstring local item1 = obj:get_luaentity().itemstring
local obj2 = minetest.env:add_entity(position2, "__builtin:item") local obj2 = minetest.add_entity(position2, "__builtin:item")
obj2:get_luaentity():set_item(item1) obj2:get_luaentity():set_item(item1)
obj:remove() obj:remove()
end end
@@ -221,12 +228,12 @@ minetest.register_node("scifi_nodes:pad", {
if minetest.get_node({x=ppos.x, y=ppos.y, z=ppos.z}).name == "scifi_nodes:pad" then if minetest.get_node({x=ppos.x, y=ppos.y, z=ppos.z}).name == "scifi_nodes:pad" then
clicker:setpos(position1) clicker:setpos(position1)
end end
local objs = minetest.env:get_objects_inside_radius(pos, 3) local objs = minetest.get_objects_inside_radius(pos, 3)
for _, obj in pairs(objs) do for _, obj in pairs(objs) do
if obj:get_luaentity() and not obj:is_player() then if obj:get_luaentity() and not obj:is_player() then
if obj:get_luaentity().name == "__builtin:item" then if obj:get_luaentity().name == "__builtin:item" then
local item1 = obj:get_luaentity().itemstring local item1 = obj:get_luaentity().itemstring
local obj2 = minetest.env:add_entity(position1, "__builtin:item") local obj2 = minetest.add_entity(position1, "__builtin:item")
obj2:get_luaentity():set_item(item1) obj2:get_luaentity():set_item(item1)
obj:remove() obj:remove()
end end
@@ -236,12 +243,13 @@ minetest.register_node("scifi_nodes:pad", {
elseif position1 == nil and meta:get_int("type") ~= 2 then elseif position1 == nil and meta:get_int("type") ~= 2 then
position1 = pos position1 = pos
meta:set_int("type", 1) meta:set_int("type", 1)
minetest.chat_send_all("Teleporter 1 connected at "..minetest.pos_to_string(pos)) minetest.chat_send_player(clicker_name, "Teleporter 1 connected at "..minetest.pos_to_string(pos))
elseif position2 == nil and meta:get_int("type") ~= 1 then elseif position2 == nil and meta:get_int("type") ~= 1 then
position2 = pos position2 = pos
meta:set_int("type", 2) meta:set_int("type", 2)
minetest.chat_send_all("Teleporter 2 connected at "..minetest.pos_to_string(pos)) minetest.chat_send_player(clicker_name, "Teleporter 2 connected at "..minetest.pos_to_string(pos))
else minetest.chat_send_all("Teleporter error!") else
minetest.chat_send_player(clicker_name, "Teleporter error!")
end end
end, end,
on_destruct = function(pos, oldnode, placer) on_destruct = function(pos, oldnode, placer)
@@ -262,8 +270,8 @@ minetest.register_node("scifi_nodes:pad", {
{-0.875, -0.5, -0.8125, 0.8125, -0.375, 0.8125}, -- NodeBox3 {-0.875, -0.5, -0.8125, 0.8125, -0.375, 0.8125}, -- NodeBox3
{-0.8125, -0.5, -0.75, 0.75, -0.3125, 0.75}, -- NodeBox4 {-0.8125, -0.5, -0.75, 0.75, -0.3125, 0.75}, -- NodeBox4
}, },
sounds = default.node_sound_wood_defaults() },
} sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:pplwndw", { minetest.register_node("scifi_nodes:pplwndw", {
@@ -279,9 +287,10 @@ minetest.register_node("scifi_nodes:pplwndw", {
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
use_texture_alpha = true, use_texture_alpha = "blend",
groups = {cracky=3}, groups = {cracky=3, dig_generic = 4},
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_glass_defaults(),
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -302,12 +311,13 @@ minetest.register_node("scifi_nodes:gloshroom", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
light_source = default.LIGHT_MAX, light_source = minetest.LIGHT_MAX,
walkable = false, walkable = false,
buildable_to = true, buildable_to = true,
sunlight_propagates = false, sunlight_propagates = false,
use_texture_alpha = true, use_texture_alpha = "blend",
groups = {fleshy=1, oddly_breakable_by_hand=1, dig_immediate=3}, groups = {fleshy=1, oddly_breakable_by_hand=1, dig_immediate=3},
is_ground_content = false,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -318,54 +328,70 @@ minetest.register_node("scifi_nodes:gloshroom", {
{-0.1875, 0.125, -0.1875, 0.1875, 0.1875, 0.1875}, -- NodeBox5 {-0.1875, 0.125, -0.1875, 0.1875, 0.1875, 0.1875}, -- NodeBox5
{-0.375, -0.0625, -0.4375, 0.375, 0, 0.4375}, -- NodeBox6 {-0.375, -0.0625, -0.4375, 0.375, 0, 0.4375}, -- NodeBox6
} }
} },
sounds = scifi_nodes.node_sound_plant_defaults(),
}) })
minetest.register_node("scifi_nodes:pot_lid", { minetest.register_node("scifi_nodes:pot_lid", {
description = "plant pot lid(place above plant)", description = "Plant Pot Lid",
tiles = { tiles = {
"scifi_nodes_glass2.png",
"scifi_nodes_glass2.png",
"scifi_nodes_glass2.png",
"scifi_nodes_glass2.png",
"scifi_nodes_glass2.png",
"scifi_nodes_glass2.png" "scifi_nodes_glass2.png"
}, },
inventory_image = "scifi_nodes_pod_inv.png", inventory_image = "scifi_nodes_pod_inv.png",
wield_image = "scifi_nodes_pod_inv.png", wield_image = "scifi_nodes_pod_inv.png",
use_texture_alpha = true, use_texture_alpha = "blend",
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
groups = {cracky=1, not_in_creative_inventory=1}, groups = {not_in_creative_inventory = 1},
is_ground_content = false,
sunlight_propagates = true, sunlight_propagates = true,
diggable = false,
drop = "",
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {0, 0, 0, 0, 0, 0} fixed = {-0.5, -1.5, -0.5, 0.5, -0.25, 0.5}
},
collision_box = {
type = "fixed",
fixed = {-0.5, -1.5, -0.5, 0.5, -0.5, 0.5}
}, },
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
{-0.1875, -0.5625, -0.1875, 0.1875, -0.5, 0.1875}, -- NodeBox13 {-0.4375, -1.5, -0.4375, 0.4375, -0.5, -0.375},
{-0.25, -0.625, -0.25, 0.25, -0.5625, 0.25}, -- NodeBox14 {-0.4375, -1.5, 0.375, 0.4375, -0.5, 0.4375},
{-0.3125, -0.6875, -0.3125, 0.3125, -0.625, 0.3125}, -- NodeBox15 {-0.4375, -1.5, -0.375, -0.375, -0.5, 0.375},
{-0.375, -0.75, -0.375, 0.375, -0.6875, 0.375}, -- NodeBox16 {0.375, -1.5, -0.375, 0.4375, -0.5, 0.375},
{-0.4375, -0.75, 0.375, 0.4375, -1.5, 0.4375}, -- NodeBox17 {-0.375, -0.5, -0.375, 0.375, -0.4375, 0.375},
{-0.4375, -0.75, -0.4375, 0.4375, -1.5, -0.375}, -- NodeBox18 {-0.3125, -0.4375, -0.3125, 0.3125, -0.375, 0.3125},
{0.375, -0.75, -0.4375, 0.4375, -1.5, 0.4375}, -- NodeBox19 {-0.25, -0.375, -0.25, 0.25, -0.3125, 0.25},
{-0.4375, -0.75, -0.4375, -0.375, -1.5, 0.4375}, -- NodeBox20 {-0.1875, -0.3125, -0.1875, 0.1875, -0.25, 0.1875}
} }
}, },
sounds = default.node_sound_glass_defaults() sounds = scifi_nodes.node_sound_glass_defaults()
}) })
local function toggle_lid(pos, node, player, itemstack)
if not player or minetest.is_protected(pos, player:get_player_name()) then
return
end
local lid_pos = {x = pos.x, y = pos.y+2 , z = pos.z}
local lid_node = minetest.get_node(lid_pos)
if lid_node.name == "scifi_nodes:pot_lid" then
minetest.set_node(lid_pos, {name = "air"})
elseif lid_node.name == "air" then
minetest.set_node(lid_pos, {name = "scifi_nodes:pot_lid"})
end
end
local function remove_lid(pos)
local lid_pos = {x = pos.x, y = pos.y+2 , z = pos.z}
local lid_node = minetest.get_node(lid_pos)
if lid_node.name == "scifi_nodes:pot_lid" then
minetest.set_node(lid_pos, {name = "air"})
end
end
minetest.register_node("scifi_nodes:pot", { minetest.register_node("scifi_nodes:pot", {
description = "metal plant pot (right click for lid, shift+rightclick to plant)", description = "Metal Plant Pot (right-click for lid, sneak + right-click to plant)",
tiles = { tiles = {
"scifi_nodes_pot.png", "scifi_nodes_dirt.png^scifi_nodes_pot.png",
"scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png",
"scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png",
"scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png",
@@ -374,34 +400,33 @@ minetest.register_node("scifi_nodes:pot", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
groups = {cracky=1, soil=1, sand=1}, groups = {cracky = 1, soil = 1, sand = 1, dig_generic = 3},
is_ground_content = false,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
},
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
{-0.5, -0.25, -0.5, 0.5, 0.5, 0.5}, -- NodeBox1 {-0.5, -0.25, -0.5, 0.5, 0.5, 0.5},
{0.1875, -0.5, 0.1875, 0.5, -0.25, 0.5}, -- NodeBox2 {0.1875, -0.5, 0.1875, 0.5, -0.25, 0.5},
{-0.5, -0.5, -0.5, -0.1875, -0.25, -0.1875}, -- NodeBox3 {-0.5, -0.5, -0.5, -0.1875, -0.25, -0.1875},
{-0.5, -0.5, 0.1875, -0.1875, -0.25, 0.5}, -- NodeBox4 {-0.5, -0.5, 0.1875, -0.1875, -0.25, 0.5},
{0.1875, -0.5, -0.5, 0.5, -0.25, -0.1875}, -- NodeBox5 {0.1875, -0.5, -0.5, 0.5, -0.25, -0.1875}
} }
}, },
on_rightclick = function(pos, node, clicker, item, _) on_rightclick = toggle_lid,
local lid_node = minetest.get_node({x=pos.x, y=pos.y+2, z=pos.z}) on_destruct = remove_lid,
if lid_node.name == "scifi_nodes:pot_lid" then sounds = scifi_nodes.node_sound_metal_defaults({
minetest.set_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="air", param2=lid_node.param2}) footstep = scifi_nodes.node_sound_dirt_defaults().footstep,
elseif lid_node.name ~= "scifi_nodes:pot_lid" and node.name == "air" then }),
minetest.set_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="scifi_nodes:pot_lid", param2=lid_node.param2})
end
end,
on_destruct = function(pos, node, _)
minetest.remove_node({x=pos.x, y=pos.y+2, z=pos.z})
end
}) })
minetest.register_node("scifi_nodes:pot2", { minetest.register_node("scifi_nodes:pot2", {
description = "metal wet plant pot(right click for lid, shift+rightclick to plant)", description = "Metal Plant Pot Wet (right-click for lid, sneak + right-click to plant)",
tiles = { tiles = {
"scifi_nodes_pot.png^[colorize:black:100", "scifi_nodes_dirt.png^scifi_nodes_pot2.png",
"scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png",
"scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png",
"scifi_nodes_greybolts.png", "scifi_nodes_greybolts.png",
@@ -410,28 +435,27 @@ minetest.register_node("scifi_nodes:pot2", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
groups = {cracky=1, soil=3, wet=1}, groups = {cracky = 1, soil = 3, wet = 1, dig_generic = 3},
is_ground_content = false,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
},
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
{-0.5, -0.25, -0.5, 0.5, 0.5, 0.5}, -- NodeBox1 {-0.5, -0.25, -0.5, 0.5, 0.5, 0.5},
{0.1875, -0.5, 0.1875, 0.5, -0.25, 0.5}, -- NodeBox2 {0.1875, -0.5, 0.1875, 0.5, -0.25, 0.5},
{-0.5, -0.5, -0.5, -0.1875, -0.25, -0.1875}, -- NodeBox3 {-0.5, -0.5, -0.5, -0.1875, -0.25, -0.1875},
{-0.5, -0.5, 0.1875, -0.1875, -0.25, 0.5}, -- NodeBox4 {-0.5, -0.5, 0.1875, -0.1875, -0.25, 0.5},
{0.1875, -0.5, -0.5, 0.5, -0.25, -0.1875}, -- NodeBox5 {0.1875, -0.5, -0.5, 0.5, -0.25, -0.1875}
} }
}, },
on_rightclick = function(pos, node, clicker, item, _) on_rightclick = toggle_lid,
local lid_node = minetest.get_node({x=pos.x, y=pos.y+2, z=pos.z}) on_destruct = remove_lid,
if lid_node.name == "scifi_nodes:pot_lid" then sounds = scifi_nodes.node_sound_metal_defaults({
minetest.set_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="air", param2=lid_node.param2}) footstep = scifi_nodes.node_sound_dirt_defaults().footstep,
elseif lid_node.name ~= "scifi_nodes:pot_lid" and node.name == "air" then }),
minetest.set_node({x=pos.x, y=pos.y+2, z=pos.z}, {name="scifi_nodes:pot_lid", param2=lid_node.param2})
end
end,
on_destruct = function(pos, node, _)
minetest.remove_node({x=pos.x, y=pos.y+2, z=pos.z})
end
}) })
minetest.register_node("scifi_nodes:lightbar", { minetest.register_node("scifi_nodes:lightbar", {
@@ -443,7 +467,7 @@ minetest.register_node("scifi_nodes:lightbar", {
paramtype = "light", paramtype = "light",
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
sunlight_propagates = true, sunlight_propagates = true,
light_source = default.LIGHT_MAX, light_source = minetest.LIGHT_MAX,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -456,8 +480,9 @@ minetest.register_node("scifi_nodes:lightbar", {
{-0.125, -0.5, -0.5, 0.125, -0.375, 0.5}, -- NodeBox1 {-0.125, -0.5, -0.5, 0.125, -0.375, 0.5}, -- NodeBox1
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:light_dynamic", { minetest.register_node("scifi_nodes:light_dynamic", {
@@ -473,10 +498,17 @@ minetest.register_node("scifi_nodes:light_dynamic", {
type = "wallmounted", type = "wallmounted",
fixed = {-0.5, -0.5, -0.5, -0.45, 0.5, 0.5} fixed = {-0.5, -0.5, -0.5, -0.45, 0.5, 0.5}
}, },
node_box = {
type = "fixed",
fixed = {
fixed = {-0.5, -0.5, -0.5, -0.45, 0.5, 0.5}
}
},
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
light_source = default.LIGHT_MAX, light_source = minetest.LIGHT_MAX,
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:ladder", { minetest.register_node("scifi_nodes:ladder", {
@@ -506,12 +538,13 @@ minetest.register_node("scifi_nodes:ladder", {
{0.3125, -0.5, 0.0625, 0.4375, -0.375, 0.1875}, -- NodeBox25 {0.3125, -0.5, 0.0625, 0.4375, -0.375, 0.1875}, -- NodeBox25
{0.3125, -0.5, -0.1875, 0.4375, -0.375, -0.0625}, -- NodeBox26 {0.3125, -0.5, -0.1875, 0.4375, -0.375, -0.0625}, -- NodeBox26
}, },
sounds = default.node_sound_metal_defaults()
}, },
sounds = scifi_nodes.node_sound_metal_defaults(),
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
walkable = false, walkable = false,
climbable = true, climbable = true,
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
}) })
minetest.register_node("scifi_nodes:lightbars", { minetest.register_node("scifi_nodes:lightbars", {
@@ -521,8 +554,9 @@ minetest.register_node("scifi_nodes:lightbars", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
use_texture_alpha = true, paramtype2 = "facedir",
light_source = default.LIGHT_MAX, use_texture_alpha = "blend",
light_source = minetest.LIGHT_MAX,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -532,8 +566,9 @@ minetest.register_node("scifi_nodes:lightbars", {
{0.125, -0.5, -0.375, 0.375, 0.5, -0.125}, -- NodeBox4 {0.125, -0.5, -0.375, 0.375, 0.5, -0.125}, -- NodeBox4
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:liquid_pipe", { minetest.register_node("scifi_nodes:liquid_pipe", {
@@ -542,19 +577,21 @@ tiles = {{
name = "scifi_nodes_liquid.png", name = "scifi_nodes_liquid.png",
animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.00}, animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 1.00},
}}, }},
use_texture_alpha = true, use_texture_alpha = "blend",
light_source = default.LIGHT_MAX, light_source = minetest.LIGHT_MAX,
drawtype = "nodebox", drawtype = "nodebox",
sunlight_propagates = true, sunlight_propagates = true,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir",
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
{-0.375, -0.5, -0.375, 0.375, 0.5, 0.375}, -- NodeBox1 {-0.375, -0.5, -0.375, 0.375, 0.5, 0.375}, -- NodeBox1
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:liquid_pipe2", { minetest.register_node("scifi_nodes:liquid_pipe2", {
@@ -562,11 +599,12 @@ minetest.register_node("scifi_nodes:liquid_pipe2", {
tiles = { tiles = {
"scifi_nodes_orange.png", "scifi_nodes_orange.png",
}, },
use_texture_alpha = true, use_texture_alpha = "blend",
light_source = default.LIGHT_MAX, light_source = minetest.LIGHT_MAX,
drawtype = "nodebox", drawtype = "nodebox",
sunlight_propagates = true, sunlight_propagates = true,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir",
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -574,7 +612,8 @@ tiles = {
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:powered_stand", { minetest.register_node("scifi_nodes:powered_stand", {
@@ -604,6 +643,7 @@ minetest.register_node("scifi_nodes:powered_stand", {
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
on_rightclick = function(pos, node, clicker, item, _) on_rightclick = function(pos, node, clicker, item, _)
local wield_item_stack = clicker:get_wielded_item() local wield_item_stack = clicker:get_wielded_item()
local wield_item = wield_item_stack:get_name() local wield_item = wield_item_stack:get_name()
@@ -619,6 +659,7 @@ minetest.register_node("scifi_nodes:powered_stand", {
return item return item
end end
end, end,
sounds = scifi_nodes.node_sound_wood_defaults()
}) })
minetest.register_node("scifi_nodes:cover", { minetest.register_node("scifi_nodes:cover", {
@@ -633,6 +674,8 @@ minetest.register_node("scifi_nodes:cover", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {
@@ -641,8 +684,9 @@ minetest.register_node("scifi_nodes:cover", {
{-0.3125, -0.375, -0.3125, 0.3125, -0.3125, 0.3125}, -- NodeBox6 {-0.3125, -0.375, -0.3125, 0.3125, -0.3125, 0.3125}, -- NodeBox6
} }
}, },
sounds = default.node_sound_wood_defaults(), sounds = scifi_nodes.node_sound_metal_defaults(),
groups = {cracky=1, oddly_breakable_by_hand=1} groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
}) })
minetest.register_node("scifi_nodes:computer", { minetest.register_node("scifi_nodes:computer", {
@@ -665,7 +709,9 @@ minetest.register_node("scifi_nodes:computer", {
{-0.4375, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox1 {-0.4375, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox1
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1} groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:keysmonitor", { minetest.register_node("scifi_nodes:keysmonitor", {
@@ -691,7 +737,9 @@ minetest.register_node("scifi_nodes:keysmonitor", {
{-0.5, -0.3125, 0.25, 0.5, 0.5, 0.375}, -- NodeBox4 {-0.5, -0.3125, 0.25, 0.5, 0.5, 0.375}, -- NodeBox4
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1} groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
sounds = scifi_nodes.node_sound_defaults(),
}) })
minetest.register_node("scifi_nodes:microscope", { minetest.register_node("scifi_nodes:microscope", {
@@ -718,7 +766,9 @@ minetest.register_node("scifi_nodes:microscope", {
{-0.125, -0.25, -0.125, 0.125, -0.1875, 0.1875}, -- NodeBox5 {-0.125, -0.25, -0.125, 0.125, -0.1875, 0.1875}, -- NodeBox5
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1} groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
sounds = scifi_nodes.node_sound_defaults(),
}) })
minetest.register_node("scifi_nodes:table", { minetest.register_node("scifi_nodes:table", {
@@ -746,8 +796,9 @@ minetest.register_node("scifi_nodes:table", {
{-0.0625, 0.25, -0.125, 0.0625, 0.4375, -0.0625}, -- NodeBox7 {-0.0625, 0.25, -0.125, 0.0625, 0.4375, -0.0625}, -- NodeBox7
} }
}, },
sounds = default.node_sound_metal_defaults(), sounds = scifi_nodes.node_sound_metal_defaults(),
groups = {cracky=1} groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
}) })
minetest.register_node("scifi_nodes:laptop_open", { minetest.register_node("scifi_nodes:laptop_open", {
@@ -772,9 +823,11 @@ minetest.register_node("scifi_nodes:laptop_open", {
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1},
is_ground_content = false,
on_rightclick = function(pos, node, clicker, item, _) on_rightclick = function(pos, node, clicker, item, _)
minetest.set_node(pos, {name="scifi_nodes:laptop_closed", param2=node.param2}) minetest.set_node(pos, {name="scifi_nodes:laptop_closed", param2=node.param2})
end, end,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:laptop_closed", { minetest.register_node("scifi_nodes:laptop_closed", {
@@ -798,9 +851,11 @@ minetest.register_node("scifi_nodes:laptop_closed", {
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
on_rightclick = function(pos, node, clicker, item, _) on_rightclick = function(pos, node, clicker, item, _)
minetest.set_node(pos, {name="scifi_nodes:laptop_open", param2=node.param2}) minetest.set_node(pos, {name="scifi_nodes:laptop_open", param2=node.param2})
end, end,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:pipen", { minetest.register_node("scifi_nodes:pipen", {
@@ -830,8 +885,10 @@ minetest.register_node("scifi_nodes:pipen", {
{-0.5, -0.4375, -0.5, 0.5, -0.375, 0.5}, -- NodeBox9 {-0.5, -0.4375, -0.5, 0.5, -0.375, 0.5}, -- NodeBox9
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
on_place = minetest.rotate_node is_ground_content = false,
on_place = minetest.rotate_node,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:windowcorner", { minetest.register_node("scifi_nodes:windowcorner", {
@@ -846,7 +903,7 @@ minetest.register_node("scifi_nodes:windowcorner", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
use_texture_alpha = true, use_texture_alpha = "blend",
sunlight_propagates = true, sunlight_propagates = true,
paramtype2 = "facedir", paramtype2 = "facedir",
node_box = { node_box = {
@@ -860,9 +917,10 @@ minetest.register_node("scifi_nodes:windowcorner", {
{-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
on_place = minetest.rotate_node, on_place = minetest.rotate_node,
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_glass_defaults(),
}) })
minetest.register_node("scifi_nodes:windowstraight", { minetest.register_node("scifi_nodes:windowstraight", {
@@ -877,7 +935,7 @@ minetest.register_node("scifi_nodes:windowstraight", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
use_texture_alpha = true, use_texture_alpha = "blend",
sunlight_propagates = true, sunlight_propagates = true,
paramtype2 = "facedir", paramtype2 = "facedir",
node_box = { node_box = {
@@ -887,9 +945,10 @@ minetest.register_node("scifi_nodes:windowstraight", {
{-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
on_place = minetest.rotate_node, on_place = minetest.rotate_node,
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_glass_defaults(),
}) })
minetest.register_node("scifi_nodes:windowcorner2", { minetest.register_node("scifi_nodes:windowcorner2", {
@@ -904,7 +963,7 @@ minetest.register_node("scifi_nodes:windowcorner2", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
use_texture_alpha = true, use_texture_alpha = "blend",
sunlight_propagates = true, sunlight_propagates = true,
paramtype2 = "facedir", paramtype2 = "facedir",
node_box = { node_box = {
@@ -918,9 +977,10 @@ minetest.register_node("scifi_nodes:windowcorner2", {
{-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
on_place = minetest.rotate_node, on_place = minetest.rotate_node,
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_glass_defaults(),
}) })
minetest.register_node("scifi_nodes:windowstraight2", { minetest.register_node("scifi_nodes:windowstraight2", {
@@ -935,7 +995,7 @@ minetest.register_node("scifi_nodes:windowstraight2", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
use_texture_alpha = true, use_texture_alpha = "blend",
sunlight_propagates = true, sunlight_propagates = true,
paramtype2 = "facedir", paramtype2 = "facedir",
node_box = { node_box = {
@@ -945,9 +1005,10 @@ minetest.register_node("scifi_nodes:windowstraight2", {
{-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
on_place = minetest.rotate_node, on_place = minetest.rotate_node,
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_glass_defaults(),
}) })
@@ -962,7 +1023,7 @@ minetest.register_node("scifi_nodes:capsule", {
"scifi_nodes_capsule.png", "scifi_nodes_capsule.png",
"scifi_nodes_capsule.png" "scifi_nodes_capsule.png"
}, },
use_texture_alpha = true, use_texture_alpha = "blend",
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
@@ -975,8 +1036,9 @@ minetest.register_node("scifi_nodes:capsule", {
{-0.3125, -0.4375, -0.1875, 0.3125, -0.0625, 0.1875}, -- NodeBox3 {-0.3125, -0.4375, -0.1875, 0.3125, -0.0625, 0.1875}, -- NodeBox3
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults(), is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults(),
on_rightclick = function(pos, node, clicker, item, _) on_rightclick = function(pos, node, clicker, item, _)
minetest.set_node(pos, {name="scifi_nodes:capsule2", param2=node.param2}) minetest.set_node(pos, {name="scifi_nodes:capsule2", param2=node.param2})
end, end,
@@ -992,7 +1054,7 @@ minetest.register_node("scifi_nodes:capsule3", {
"scifi_nodes_capsule3.png", "scifi_nodes_capsule3.png",
"scifi_nodes_capsule3.png" "scifi_nodes_capsule3.png"
}, },
use_texture_alpha = true, use_texture_alpha = "blend",
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
@@ -1006,7 +1068,8 @@ minetest.register_node("scifi_nodes:capsule3", {
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1},
sounds = default.node_sound_glass_defaults(), is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults(),
on_rightclick = function(pos, node, clicker, item, _) on_rightclick = function(pos, node, clicker, item, _)
minetest.set_node(pos, {name="scifi_nodes:capsule", param2=node.param2}) minetest.set_node(pos, {name="scifi_nodes:capsule", param2=node.param2})
end, end,
@@ -1022,7 +1085,7 @@ minetest.register_node("scifi_nodes:capsule2", {
"scifi_nodes_capsule2.png", "scifi_nodes_capsule2.png",
"scifi_nodes_capsule2.png" "scifi_nodes_capsule2.png"
}, },
use_texture_alpha = true, use_texture_alpha = "blend",
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
@@ -1036,7 +1099,8 @@ minetest.register_node("scifi_nodes:capsule2", {
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1}, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1},
sounds = default.node_sound_glass_defaults(), is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults(),
on_rightclick = function(pos, node, clicker, item, _) on_rightclick = function(pos, node, clicker, item, _)
minetest.set_node(pos, {name="scifi_nodes:capsule3", param2=node.param2}) minetest.set_node(pos, {name="scifi_nodes:capsule3", param2=node.param2})
end, end,
@@ -1065,8 +1129,9 @@ minetest.register_node("scifi_nodes:itemholder", {
{-0.25, -0.5, -0.0625, -0.1875, -0.0625, 0.0625}, -- NodeBox5 {-0.25, -0.5, -0.0625, -0.1875, -0.0625, 0.0625}, -- NodeBox5
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
on_rotate = screwdriver.disallow, is_ground_content = false,
on_rotate = minetest.get_modpath("screwdriver") and screwdriver.disallow,
after_place_node = function(pos, placer, itemstack) after_place_node = function(pos, placer, itemstack)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("owner",placer:get_player_name()) meta:set_string("owner",placer:get_player_name())
@@ -1078,10 +1143,9 @@ minetest.register_node("scifi_nodes:itemholder", {
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if name == meta:get_string("owner") or if name == meta:get_string("owner") or
minetest.check_player_privs(name, "protection_bypass") then minetest.check_player_privs(name, "protection_bypass") then
local wield_item = clicker:get_wielded_item():get_name()
local taken = item:take_item() local taken = item:take_item()
if taken and not taken:is_empty() then if taken and not taken:is_empty() then
minetest.add_item(pos, wield_item) minetest.add_item(pos, taken:to_string())
return item return item
end end
end end
@@ -1099,6 +1163,7 @@ minetest.register_node("scifi_nodes:itemholder", {
minetest.add_item(pos, meta:get_string("item")) minetest.add_item(pos, meta:get_string("item"))
end end
end, end,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:glassscreen", { minetest.register_node("scifi_nodes:glassscreen", {
@@ -1111,11 +1176,11 @@ minetest.register_node("scifi_nodes:glassscreen", {
"scifi_nodes_glscrn.png", "scifi_nodes_glscrn.png",
"scifi_nodes_glscrn.png" "scifi_nodes_glscrn.png"
}, },
use_texture_alpha = true, use_texture_alpha = "blend",
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
light_source = default.LIGHT_MAX, light_source = minetest.LIGHT_MAX,
sunlight_propagates = true, sunlight_propagates = true,
node_box = { node_box = {
type = "fixed", type = "fixed",
@@ -1125,7 +1190,8 @@ minetest.register_node("scifi_nodes:glassscreen", {
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1}, groups = {cracky=1, oddly_breakable_by_hand=1},
sounds = default.node_sound_glass_defaults(), is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults(),
}) })
@@ -1156,7 +1222,9 @@ minetest.register_node("scifi_nodes:widescreen", {
{-0.5, 0.25, 0.375, 0.5, 0.3125, 0.5}, -- NodeBox7 {-0.5, 0.25, 0.375, 0.5, 0.3125, 0.5}, -- NodeBox7
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1} groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
sounds = scifi_nodes.node_sound_defaults(),
}) })
minetest.register_node("scifi_nodes:tallscreen", { minetest.register_node("scifi_nodes:tallscreen", {
@@ -1186,7 +1254,9 @@ minetest.register_node("scifi_nodes:tallscreen", {
{0.25, -0.5, 0.375, 0.3125, 0.5, 0.5}, -- NodeBox7 {0.25, -0.5, 0.375, 0.3125, 0.5, 0.5}, -- NodeBox7
} }
}, },
groups = {cracky=1, oddly_breakable_by_hand=1} groups = {cracky=1, oddly_breakable_by_hand=1},
is_ground_content = false,
sounds = scifi_nodes.node_sound_defaults(),
}) })
-- https://forum.minetest.net/viewtopic.php?f=10&t=13125&p=261481#p261481 -- https://forum.minetest.net/viewtopic.php?f=10&t=13125&p=261481#p261481
@@ -1197,7 +1267,7 @@ minetest.register_node("scifi_nodes:windowpanel", {
}, },
drawtype = "nodebox", drawtype = "nodebox",
paramtype = "light", paramtype = "light",
use_texture_alpha = true, use_texture_alpha = "blend",
sunlight_propagates = true, sunlight_propagates = true,
paramtype2 = "facedir", paramtype2 = "facedir",
node_box = { node_box = {
@@ -1206,7 +1276,8 @@ minetest.register_node("scifi_nodes:windowpanel", {
{-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11 {-0.0625, -0.5, -0.5, 0.0625, 0.5, 0.5}, -- NodeBox11
} }
}, },
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
on_place = minetest.rotate_node, on_place = minetest.rotate_node,
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_glass_defaults(),
}) })

246
nodenames.txt Normal file
View File

@@ -0,0 +1,246 @@
scifi_nodes:liquid_pipe
scifi_nodes:light
scifi_nodes:blackdmg
scifi_nodes:bluemetal
scifi_nodes:blackpipe
scifi_nodes:white_pad
scifi_nodes:green_light
scifi_nodes:glass
scifi_nodes:pad
scifi_nodes:rough
scifi_nodes:protected_switch_on
scifi_nodes:rock
scifi_nodes:greentubes
scifi_nodes:slope_gblock
scifi_nodes:greytile
scifi_nodes:dent
scifi_nodes:screen2
scifi_nodes:octbl_pane_offset
scifi_nodes:octppl_pane_offset
scifi_nodes:grnpipe
scifi_nodes:doomengine
scifi_nodes:egg
scifi_nodes:ultra_white
scifi_nodes:octppl_pane_double
scifi_nodes:cover
scifi_nodes:laptop_closed
scifi_nodes:discs
scifi_nodes:switch_on
scifi_nodes:Doom_door_closed
scifi_nodes:glass_pane
scifi_nodes:disc
scifi_nodes:whtlightbnd
scifi_nodes:light_dynamic
scifi_nodes:slope_wallpipe
scifi_nodes:greenbar
scifi_nodes:blue_square
scifi_nodes:blumetlight
scifi_nodes:white_door_opened
scifi_nodes:blue_door_closed
scifi_nodes:pipeside
scifi_nodes:keysmonitor
scifi_nodes:slope_pipe
scifi_nodes:grass
scifi_nodes:slope_alien
scifi_nodes:doomwall3
scifi_nodes:blumetstr
scifi_nodes:doomwall42
scifi_nodes:blue
scifi_nodes:greenlights2
scifi_nodes:slope_black
scifi_nodes:plant10
scifi_nodes:plant2
scifi_nodes:blklt2
scifi_nodes:plant9
scifi_nodes:screen
scifi_nodes:purple
scifi_nodes:white_door_closed
scifi_nodes:lightstp
scifi_nodes:slope_stripes
scifi_nodes:pplwndw
scifi_nodes:crate
scifi_nodes:octrng_pane_double
scifi_nodes:widescreen
scifi_nodes:blue_door_closed_top
scifi_nodes:slope_white2
scifi_nodes:table
scifi_nodes:green_door_opened
scifi_nodes:flower1
scifi_nodes:grnpipe2
scifi_nodes:slope_mesh
scifi_nodes:rock2
scifi_nodes:blackdmgstripe
scifi_nodes:ppllght
scifi_nodes:grey_square
scifi_nodes:plant6
scifi_nodes:powered_stand
scifi_nodes:pot
scifi_nodes:wall
scifi_nodes:greygreenbar
scifi_nodes:greenmetal
scifi_nodes:blacktile2
scifi_nodes:blackoct
scifi_nodes:black
scifi_nodes:slope_ultra_white
scifi_nodes:lighttop
scifi_nodes:blackplate
scifi_nodes:doomwall43
scifi_nodes:green_square
scifi_nodes:Doom_door_closed_top
scifi_nodes:box
scifi_nodes:green
scifi_nodes:plant8
scifi_nodes:whiteoct
scifi_nodes:wallpipe
scifi_nodes:flower4
scifi_nodes:slope_bluebars
scifi_nodes:engine
scifi_nodes:glass_pane_double
scifi_nodes:blacktile
scifi_nodes:glassscreen
scifi_nodes:octrng
scifi_nodes:plant1
scifi_nodes:computer
scifi_nodes:grassblk
scifi_nodes:tower
scifi_nodes:builder
scifi_nodes:pplwll2
scifi_nodes:doomwall431
scifi_nodes:black_screen
scifi_nodes:doomwall44
scifi_nodes:windowstraight2
scifi_nodes:gblock3
scifi_nodes:octgrn_pane_offset
scifi_nodes:glass_pane_offset
scifi_nodes:octppl_pane
scifi_nodes:octbl_pane_double
scifi_nodes:octgrn_pane_double
scifi_nodes:octgrn_pane
scifi_nodes:octrng_pane_offset
scifi_nodes:octrng_pane
scifi_nodes:digicode_off
scifi_nodes:octppl
scifi_nodes:digicode_on
scifi_nodes:palm_scanner_checking
scifi_nodes:palm_scanner_off
scifi_nodes:windowpanel
scifi_nodes:slope_vent
scifi_nodes:tallscreen
scifi_nodes:itemholder
scifi_nodes:capsule2
scifi_nodes:capsule3
scifi_nodes:slope_wall
scifi_nodes:slope_blklt2
scifi_nodes:plant5
scifi_nodes:slope_screen
scifi_nodes:windowcorner2
scifi_nodes:windowstraight
scifi_nodes:windowcorner
scifi_nodes:pipen
scifi_nodes:laptop_open
scifi_nodes:mesh2
scifi_nodes:microscope
scifi_nodes:liquid_pipe2
scifi_nodes:lightbars
scifi_nodes:doomwall4
scifi_nodes:lightbar
scifi_nodes:plant_trap
scifi_nodes:slope_purple
scifi_nodes:gloshroom
scifi_nodes:blue_door_opened_top
scifi_nodes:greenbar_animated
scifi_nodes:blue_door_opened
scifi_nodes:tile
scifi_nodes:flower3
scifi_nodes:green_door_opened_top
scifi_nodes:green_door_closed_top
scifi_nodes:blackvent
scifi_nodes:white_door_opened_top
scifi_nodes:white_door_closed_top
scifi_nodes:black_door_opened_top
scifi_nodes:black_door_opened
scifi_nodes:white_base
scifi_nodes:black_door_closed_top
scifi_nodes:black_door_closed
scifi_nodes:Doom_door_opened_top
scifi_nodes:stripes
scifi_nodes:Doom_door_opened
scifi_nodes:bluebars
scifi_nodes:doomwall41
scifi_nodes:green2
scifi_nodes:whitetile
scifi_nodes:rust
scifi_nodes:slope_glight
scifi_nodes:fan
scifi_nodes:red_square
scifi_nodes:greydots
scifi_nodes:green_door_closed
scifi_nodes:greenlights
scifi_nodes:mesh
scifi_nodes:black_mesh
scifi_nodes:gblock2
scifi_nodes:stripes2top
scifi_nodes:greybolts
scifi_nodes:octofloor
scifi_nodes:pplwll3
scifi_nodes:red
scifi_nodes:greenmetal2
scifi_nodes:junk
scifi_nodes:red_light
scifi_nodes:pplblk
scifi_nodes:super_white
scifi_nodes:bluwllight
scifi_nodes:blackvnt
scifi_nodes:pplwll4
scifi_nodes:slope_holes
scifi_nodes:vent2
scifi_nodes:bluetile
scifi_nodes:eyetree
scifi_nodes:octgrn
scifi_nodes:capsule
scifi_nodes:slope_bluemetal
scifi_nodes:slope_super_white
scifi_nodes:switch_off
scifi_nodes:octbl
scifi_nodes:doomlight
scifi_nodes:white2
scifi_nodes:forcefield
scifi_nodes:alienslope
scifi_nodes:slope_white
scifi_nodes:plant3
scifi_nodes:slope_mesh2
scifi_nodes:screen3
scifi_nodes:pipe
scifi_nodes:black_detail
scifi_nodes:slope_lightstripe
scifi_nodes:slope_blight
scifi_nodes:ladder
scifi_nodes:protected_switch_off
scifi_nodes:rfloor
scifi_nodes:white
scifi_nodes:gblock
scifi_nodes:octofloor2
scifi_nodes:slope_rough
scifi_nodes:octbl_pane
scifi_nodes:bluegrid
scifi_nodes:pot_lid
scifi_nodes:slope_rlight
scifi_nodes:bfloor
scifi_nodes:plant4
scifi_nodes:pot2
scifi_nodes:greybars
scifi_nodes:doomwall1
scifi_nodes:holes
scifi_nodes:black_lights
scifi_nodes:palm_scanner_on
scifi_nodes:plant7
scifi_nodes:flower2
scifi_nodes:slope_greenmetal
scifi_nodes:blink
scifi_nodes:slope_grey
scifi_nodes:grey
scifi_nodes:pplwll
scifi_nodes:stripes2
scifi_nodes:slope_blight2
scifi_nodes:monitorwall
scifi_nodes:doomwall2

325
nodes.json Normal file
View File

@@ -0,0 +1,325 @@
{
"blue": {
"description": "Blue lines"
},
"holes": {
"description": "Metal with holes"
},
"white2": {
"description": "plastic",
"colorable": true,
"sounds": "stone",
"signs_banner": true,
"signs_banner_color": "#000"
},
"super_white": {
"description": "Super Plastic",
"light": 11,
"sounds": "stone",
"texture_name": "white2"
},
"ultra_white": {
"description": "Ultra Plastic",
"light": 14,
"sounds": "stone",
"texture_name": "white2"
},
"engine": {
"description": "Engine",
"ambience": {
"scifi_nodes_ambience_engine": {
"interval": 16.1
}
}
},
"wall": {
"description": "metal wall"
},
"white": {
"description": "plastic wall",
"colorable": true,
"sounds": "stone"
},
"stripes2top": {
"description": "Dirty metal block"
},
"rough": {
"description": "rough metal"
},
"lighttop": {
"description": "metal block",
"slat": true
},
"red": {
"description": "red lines"
},
"green": {
"description": "green lines"
},
"vent2": {
"description": "vent"
},
"vent3": {
"description": "transparent vent",
"texture_name": "vent2",
"texture_modifier": "^[makealpha:33,33,33",
"drawtype": "glasslike",
"ambience": {
"scifi_nodes_ambience_vent": {
"interval": 4.2
}
}
},
"stripes": {
"description": "hazard stripes",
"slat": true,
"advtrains_platform": true
},
"rust": {
"description": "rusty metal"
},
"mesh": {
"description": "metal mesh"
},
"black": {
"description": "black wall",
"signs_banner": true
},
"blackoct": {
"description": "black octagon"
},
"blackpipe": {
"description": "black pipe"
},
"blacktile": {
"description": "black tile"
},
"blacktile2": {
"description": "black tile 2",
"paramtype2": "none"
},
"blackvent": {
"description": "black vent"
},
"bluebars": {
"description": "blue bars"
},
"bluemetal": {
"description": "blue metal",
"signs_banner": true
},
"bluetile": {
"description": "blue tile",
"slat": true
},
"greytile": {
"description": "grey tile"
},
"mesh2": {
"description": "metal floormesh"
},
"mesh3": {
"description": "transparent metal floormesh",
"texture_name": "mesh",
"texture_modifier": "^[contrast:10:-50^[makealpha:0,0,0",
"drawtype": "glasslike"
},
"pipe": {
"description": "wall pipe"
},
"pipeside": {
"description": "side pipe"
},
"tile": {
"description": "white tile"
},
"whiteoct": {
"description": "white octagon",
"colorable": true
},
"whitetile": {
"description": "white tile 2",
"colorable": true,
"slat": true
},
"black_detail": {
"description": "black detail"
},
"green_square": {
"description": "green metal block"
},
"red_square": {
"description": "red metal block"
},
"grey_square": {
"description": "grey metal block",
"paramtype2": "none"
},
"blue_square": {
"description": "blue metal block"
},
"black_mesh": {
"description": "black vent block"
},
"dent": {
"description": "dented metal block",
"colorable": true
},
"greenmetal": {
"description": "green metal wall",
"signs_banner": true
},
"greenmetal2": {
"description": "green metal wall2"
},
"greenlights": {
"description": "green wall lights",
"light": 10
},
"greenlights2": {
"description": "green wall lights2",
"light": 10
},
"greenbar": {
"description": "green light bar",
"light": 10
},
"green2": {
"description": "green wall panel"
},
"greentubes": {
"description": "green pipes"
},
"grey": {
"description": "grey wall",
"signs_banner": true
},
"greybolts": {
"description": "grey wall bolts"
},
"greybars": {
"description": "grey bars"
},
"greydots": {
"description": "grey wall dots"
},
"greygreenbar": {
"description": "gray power pipe",
"light": 10
},
"octofloor": {
"description": "Doom floor",
"sounds": "stone",
"paramtype2": "none"
},
"octofloor2": {
"description": "Brown Doom floor",
"sounds": "stone",
"paramtype2": "none"
},
"doomwall1": {
"description": "Doom wall 1"
},
"doomwall2": {
"description": "Doom wall 2"
},
"doomwall3": {
"description": "Doom wall 3"
},
"doomwall4": {
"description": "Doom wall 4"
},
"doomwall41": {
"description": "Doom wall 4.1"
},
"doomwall42": {
"description": "Doom wall 4.2"
},
"doomwall43": {
"description": "Doom wall 4.3"
},
"doomwall431": {
"description": "Doom wall 4.3.1"
},
"doomwall44": {
"description": "Doom wall 4.4"
},
"blackdmg": {
"description": "Damaged black wall",
"slat": true,
"paramtype2": "none"
},
"blackdmgstripe": {
"description": "Damaged black wall(stripes)"
},
"doomengine": {
"description": "Doom engine wall"
},
"monitorwall": {
"description": "Wall monitors"
},
"screen3": {
"description": "Wall monitor"
},
"doomlight": {
"description": "Doom light",
"light": 12
},
"bluwllight": {
"description": "Blue wall light",
"light": 14
},
"bluegrid": {
"description": "Blue Grid",
"light": 5
},
"fan": {
"description": "Fan",
"ambience": {
"scifi_nodes_ambience_fan": {
"interval": 7
}
}
},
"ppllght": {
"description": "Purple wall light",
"light": 14
},
"pplwll": {
"description": "Purple wall"
},
"pplwll2": {
"description": "Purple wall 2"
},
"pplwll3": {
"description": "Purple wall 3"
},
"pplwll4": {
"description": "Purple wall 4"
},
"pplblk": {
"description": "Purple tile",
"slat": true
},
"purple": {
"description": "Purple node",
"signs_banner": true
},
"rock": {
"description": "Moonstone",
"sounds": "stone",
"colorable": true
},
"rock2": {
"description": "Moonstone 2",
"sounds": "stone",
"colorable": true
},
"blackvnt": {
"description": "Black vent"
},
"blackplate": {
"description": "Black plate",
"paramtype2": "none"
}
}

455
nodes.lua
View File

@@ -1,13 +1,22 @@
local has_unifieddyes_mod = minetest.get_modpath("unifieddyes")
local has_moreblocks_mod = minetest.get_modpath("moreblocks")
local has_slats_mod = minetest.get_modpath("slats")
local has_advtrains_mod = minetest.get_modpath("advtrains")
local has_signs_api_mod = minetest.get_modpath("signs_api")
--nodes --nodes
minetest.register_node("scifi_nodes:grassblk", { minetest.register_node("scifi_nodes:grassblk", {
description = "Dirt With Alien Grass", description = "Dirt With Alien Grass",
tiles = {"default_grass.png^[colorize:cyan:80", "default_dirt.png", tiles = {"scifi_nodes_grass_top.png^[colorize:cyan:80", "scifi_nodes_dirt.png",
{name = "default_dirt.png^(default_grass_side.png^[colorize:cyan:80)", {name = "scifi_nodes_dirt.png^(scifi_nodes_grass_side.png^[colorize:cyan:80)",
tileable_vertical = false}}, tileable_vertical = false}},
light_source = 2, light_source = 2,
groups = {crumbly=1, oddly_breakable_by_hand=1, soil=1} groups = {crumbly=1, oddly_breakable_by_hand=1, soil=1},
is_ground_content = false,
sounds = scifi_nodes.node_sound_dirt_defaults({
footstep = scifi_nodes.node_sound_plant_defaults().footstep,
})
}) })
minetest.register_node("scifi_nodes:light", { minetest.register_node("scifi_nodes:light", {
@@ -23,7 +32,9 @@ minetest.register_node("scifi_nodes:light", {
}, },
light_source = 10, light_source = 10,
paramtype = "light", paramtype = "light",
groups = {cracky=1} groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:rfloor", { minetest.register_node("scifi_nodes:rfloor", {
@@ -34,8 +45,9 @@ minetest.register_node("scifi_nodes:rfloor", {
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
light_source = 10, light_source = 10,
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_metal_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:bfloor", { minetest.register_node("scifi_nodes:bfloor", {
@@ -46,8 +58,9 @@ minetest.register_node("scifi_nodes:bfloor", {
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
light_source = 10, light_source = 10,
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_metal_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
@@ -63,8 +76,9 @@ minetest.register_node("scifi_nodes:stripes2", {
"scifi_nodes_stripes2.png" "scifi_nodes_stripes2.png"
}, },
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_metal_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:gblock", { minetest.register_node("scifi_nodes:gblock", {
@@ -79,8 +93,9 @@ minetest.register_node("scifi_nodes:gblock", {
"scifi_nodes_gblock.png" "scifi_nodes_gblock.png"
}, },
paramtype = "light", paramtype = "light",
groups = {cracky=1}; groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_metal_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:gblock2", { minetest.register_node("scifi_nodes:gblock2", {
@@ -96,8 +111,9 @@ minetest.register_node("scifi_nodes:gblock2", {
}, },
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_metal_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:gblock3", { minetest.register_node("scifi_nodes:gblock3", {
@@ -113,8 +129,9 @@ minetest.register_node("scifi_nodes:gblock3", {
}, },
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_metal_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
@@ -132,8 +149,9 @@ minetest.register_node("scifi_nodes:green_light", {
}, },
light_source = 10, light_source = 10,
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:red_light", { minetest.register_node("scifi_nodes:red_light", {
@@ -149,8 +167,9 @@ minetest.register_node("scifi_nodes:red_light", {
}, },
light_source = 10, light_source = 10,
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:discs", { minetest.register_node("scifi_nodes:discs", {
@@ -165,8 +184,9 @@ minetest.register_node("scifi_nodes:discs", {
"scifi_nodes_discs.png" "scifi_nodes_discs.png"
}, },
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:disc", { minetest.register_node("scifi_nodes:disc", {
@@ -179,9 +199,29 @@ minetest.register_node("scifi_nodes:disc", {
inventory_image = "scifi_nodes_disc.png", inventory_image = "scifi_nodes_disc.png",
wield_image = "scifi_nodes_disc.png", wield_image = "scifi_nodes_disc.png",
paramtype = "light", paramtype = "light",
groups = {cracky=1} groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
sounds = scifi_nodes.node_sound_defaults(),
}) })
minetest.register_node("scifi_nodes:greenbar_animated", {
description = "animated green light bar",
sunlight_propagates = false,
tiles = {
"scifi_nodes_greenbar.png",
"scifi_nodes_greenbar.png", {
name="scifi_nodes_greenbar_animated.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1.00},
}
},
paramtype = "light",
paramtype2 = "facedir",
groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
light_source = 10,
sounds = scifi_nodes.node_sound_glass_defaults(),
on_place = minetest.rotate_node
})
minetest.register_node("scifi_nodes:blink", { minetest.register_node("scifi_nodes:blink", {
description = "blinking light", description = "blinking light",
@@ -191,9 +231,10 @@ minetest.register_node("scifi_nodes:blink", {
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00}, animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00},
}}, }},
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
light_source = 5, light_source = 5,
sounds = default.node_sound_glass_defaults() sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:black_lights", { minetest.register_node("scifi_nodes:black_lights", {
@@ -204,8 +245,9 @@ minetest.register_node("scifi_nodes:black_lights", {
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50}, animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50},
}}, }},
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:black_screen", { minetest.register_node("scifi_nodes:black_screen", {
@@ -216,9 +258,10 @@ minetest.register_node("scifi_nodes:black_screen", {
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00}, animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.00},
}}, }},
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
light_source = 1, light_source = 1,
sounds = default.node_sound_stone_defaults() sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:screen", { minetest.register_node("scifi_nodes:screen", {
@@ -229,9 +272,10 @@ minetest.register_node("scifi_nodes:screen", {
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50}, animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50},
}}, }},
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
light_source = 5, light_source = 5,
sounds = default.node_sound_glass_defaults() sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:screen2", { minetest.register_node("scifi_nodes:screen2", {
@@ -242,9 +286,10 @@ minetest.register_node("scifi_nodes:screen2", {
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50}, animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=0.50},
}}, }},
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
is_ground_content = false,
light_source = 5, light_source = 5,
sounds = default.node_sound_glass_defaults() sounds = scifi_nodes.node_sound_glass_defaults()
}) })
@@ -262,8 +307,9 @@ minetest.register_node("scifi_nodes:white_pad", {
}, },
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:white_base", { minetest.register_node("scifi_nodes:white_base", {
@@ -279,8 +325,9 @@ minetest.register_node("scifi_nodes:white_base", {
}, },
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:grnpipe", { minetest.register_node("scifi_nodes:grnpipe", {
@@ -296,8 +343,9 @@ minetest.register_node("scifi_nodes:grnpipe", {
}, },
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_metal_defaults(), is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults(),
on_place = minetest.rotate_node on_place = minetest.rotate_node
}) })
@@ -315,71 +363,12 @@ minetest.register_node("scifi_nodes:grnpipe2", {
}, },
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_metal_defaults(), is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults(),
on_place = minetest.rotate_node on_place = minetest.rotate_node
}) })
minetest.register_node("scifi_nodes:octrng", {
description = "Orange Octagon Glass",
sunlight_propagates = false,
drawtype = "glasslike",
tiles = {
"scifi_nodes_octrng.png",
},
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = true,
light_source = 10,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("scifi_nodes:octgrn", {
description = "Green Octagon Glass",
sunlight_propagates = false,
drawtype = "glasslike",
tiles = {
"scifi_nodes_octgrn.png",
},
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = true,
light_source = 10,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("scifi_nodes:octbl", {
description = "Blue Octagon Glass",
sunlight_propagates = false,
drawtype = "glasslike",
tiles = {
"scifi_nodes_octbl.png",
},
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = true,
light_source = 10,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("scifi_nodes:octppl", {
description = "Purple Octagon Glass",
sunlight_propagates = false,
drawtype = "glasslike",
tiles = {
"scifi_nodes_octppl.png",
},
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = true,
light_source = 10,
groups = {cracky=2},
sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("scifi_nodes:tower", { minetest.register_node("scifi_nodes:tower", {
description = "Wind tower", description = "Wind tower",
sunlight_propagates = false, sunlight_propagates = false,
@@ -391,8 +380,9 @@ minetest.register_node("scifi_nodes:tower", {
visual_scale = 2, visual_scale = 2,
inventory_image = "scifi_nodes_tower.png", inventory_image = "scifi_nodes_tower.png",
paramtype = "light", paramtype = "light",
groups = {cracky=2}, groups = {cracky=2, dig_generic = 3},
sounds = default.node_sound_metal_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:junk", { minetest.register_node("scifi_nodes:junk", {
@@ -409,7 +399,8 @@ minetest.register_node("scifi_nodes:junk", {
tiles = { tiles = {
"scifi_nodes_junk.png" "scifi_nodes_junk.png"
}, },
groups = {snappy=1, oddly_breakable_by_hand=1, liquid=3, dig_immediate=1} groups = {snappy=1, oddly_breakable_by_hand=1, liquid=3, dig_immediate=1},
is_ground_content = false,
}) })
@@ -426,8 +417,9 @@ minetest.register_node("scifi_nodes:blumetlight", {
}, },
light_source = 10, light_source = 10,
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
@@ -437,10 +429,11 @@ minetest.register_node("scifi_nodes:lightstp", {
tiles = { tiles = {
"scifi_nodes_lightstripe.png" "scifi_nodes_lightstripe.png"
}, },
light_source = default.LIGHT_MAX, light_source = minetest.LIGHT_MAX,
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:blklt2", { minetest.register_node("scifi_nodes:blklt2", {
@@ -451,8 +444,9 @@ minetest.register_node("scifi_nodes:blklt2", {
}, },
light_source = 10, light_source = 10,
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:blumetstr", { minetest.register_node("scifi_nodes:blumetstr", {
@@ -463,8 +457,9 @@ minetest.register_node("scifi_nodes:blumetstr", {
}, },
light_source = 10, light_source = 10,
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:glass", { minetest.register_node("scifi_nodes:glass", {
@@ -474,10 +469,11 @@ minetest.register_node("scifi_nodes:glass", {
tiles = { tiles = {
"scifi_nodes_glass.png" "scifi_nodes_glass.png"
}, },
use_texture_alpha = true, use_texture_alpha = "blend",
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
}) })
minetest.register_node("scifi_nodes:whtlightbnd", { minetest.register_node("scifi_nodes:whtlightbnd", {
@@ -488,116 +484,135 @@ minetest.register_node("scifi_nodes:whtlightbnd", {
}, },
light_source = 10, light_source = 10,
paramtype = "light", paramtype = "light",
groups = {cracky=1}, groups = {cracky=1, dig_generic = 3},
sounds = default.node_sound_glass_defaults() is_ground_content = false,
sounds = scifi_nodes.node_sound_metal_defaults()
}) })
--edited wool code (Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>) -- read "nodes.json"
local f = assert(io.open(minetest.get_modpath("scifi_nodes") .. "/nodes.json", "rb"))
local nodes = assert(minetest.parse_json(f:read("*all")))
f:close()
-- register all nodes
for name, def in pairs(nodes) do
-- This uses a trick: you can first define the recipes using all of the base -- default to "metal" sounds if not specified
-- colors, and then some recipes using more specific colors for a few non-base local sounds
-- colors available. When crafting, the last recipes will be checked first. if def.sounds == "stone" then
--add new block using texture name(without "scifi_nodes_" prefix) then the description, and then the name of the block sounds = scifi_nodes.node_sound_stone_defaults()
local nodetypes = { else
{"blue", "blue lines", "blue"}, sounds = scifi_nodes.node_sound_metal_defaults()
{"holes", "metal with holes","holes"}, end
{"white2", "plastic", "white2"},
{"super_white", "Super Plastic", "super_white", 11}, -- tiles (default to nodename as texture-name)
{"ultra_white", "Ultra Plastic", "ultra_white", default.LIGHT_MAX}, local tiles = {"scifi_nodes_" .. name .. ".png"}
{"engine", "engine", "engine"}, if def.texture_name then
{"wall", "metal wall", "wall"}, tiles = {"scifi_nodes_" .. def.texture_name .. ".png"}
{"white", "plastic wall", "white"}, end
{"stripes2top", "dirty metal block","metal2"},
{"rough", "rough metal", "rough"}, -- optional texture modifier
{"lighttop", "metal block", "metal"}, if def.texture_modifier then
{"red", "red lines", "red"}, tiles[1] = tiles[1] .. def.texture_modifier
{"green", "green lines", "green"}, end
{"vent2", "vent", "vent"},
{"stripes", "hazard stripes", "stripes"}, -- Node Definition
{"rust", "rusty metal", "rust"}, local node_def = {
{"mesh", "metal mesh", "mesh"}, description = def.description,
{"black", "black wall", "black"}, drawtype = def.drawtype or "normal",
{"blackoct", "black octagon", "blackoct"}, tiles = tiles,
{"blackpipe", "black pipe", "blackpipe"}, groups = {cracky=1, dig_generic = 3},
{"blacktile", "black tile", "blktl"}, is_ground_content = false,
{"blacktile2", "black tile 2", "blktl2"}, paramtype = "light",
{"blackvent", "black vent", "blkvnt"}, paramtype2 = def.paramtype2 or "facedir",
{"bluebars", "blue bars", "bluebars"}, light_source = def.light,
{"bluemetal", "blue metal", "blumtl"}, sounds = sounds,
{"bluetile", "blue tile", "blutl"},
{"greytile", "grey tile", "grytl"},
{"mesh2", "metal floormesh", "mesh2"},
{"white", "plastic wall", "white"},
{"pipe", "wall pipe", "pipe2"},
{"pipeside", "side pipe", "pipe3"},
{"tile", "white tile", "tile"},
{"whiteoct", "white octagon", "whiteoct"},
{"whitetile", "white tile2", "whttl"},
{"black_detail", "black detail", "blckdtl"},
{"green_square", "green metal block", "grnblck"},
{"red_square", "red metal block", "redblck"},
{"grey_square", "grey metal block", "greyblck"},
{"blue_square", "blue metal block", "blublck"},
{"black_mesh", "black vent block", "blckmsh"},
{"dent", "dented metal block", "dent"},
{"greenmetal", "green metal wall", "grnmetl"},
{"greenmetal2", "green metal wall2", "grnmetl2"},
{"greenlights", "green wall lights", "grnlt", 10},
{"greenlights2", "green wall lights2", "grnlt2", 10},
{"greenbar", "green light bar", "grnlghtbr", 10},
{"green2", "green wall panel", "grn2"},
{"greentubes", "green pipes", "grntubes"},
{"grey", "grey wall", "gry"},
{"greybolts", "grey wall bolts", "gryblts"},
{"greybars", "grey bars", "grybrs"},
{"greydots", "grey wall dots", "grydts"},
{"greygreenbar", "gray power pipe", "grygrnbr", 10},
{"octofloor", "Doom floor", "octofloor"},
{"octofloor2", "Brown Doom floor", "octofloor2"},
{"doomwall1", "Doom wall 1", "doomwall1"},
{"doomwall2", "Doom wall 2", "doomwall2"},
{"doomwall3", "Doom wall 3", "doomwall3"},
{"doomwall4", "Doom wall 4", "doomwall4"},
{"doomwall41", "Doom wall 4.1", "doomwall4.1"},
{"doomwall42", "Doom wall 4.2", "doomwall4.2"},
{"doomwall43", "Doom wall 4.3", "doomwall4.3"},
{"doomwall431", "Doom wall 4.3.1", "doomwall4.3.1"},
{"doomwall44", "Doom wall 4.4", "doomwall4.4"},
{"blackdmg", "Damaged black wall", "blckdmg"},
{"blackdmgstripe", "Damaged black wall(stripes)", "blckdmgstripe"},
{"doomengine", "Doom engine wall", "doomengine"},
{"monitorwall", "Wall monitors", "monitorwall"},
{"screen3", "Wall monitor", "screen3"},
{"doomlight", "Doom light", "doomlight", 12},
{"bluwllight", "Blue wall light", "capsule3", default.LIGHT_MAX},
{"bluegrid", "Blue Grid", "bluegrid", 5},
{"fan", "Fan", "fan"},
{"ppllght", "Purple wall light", "", default.LIGHT_MAX},
{"pplwll", "Purple wall", "", 0},
{"pplwll2", "Purple wall2", "", 0},
{"pplwll3", "Purple wall3", "", 0},
{"pplwll4", "Purple wall4", "", 0},
{"pplblk", "Purple tile", "", 0},
{"purple", "Purple node", "", 0},
{"rock", "Moonstone", "", 0},
{"rock2", "Moonstone2", "", 0},
{"blackvnt", "Black vent", "", 0},
{"blackplate", "Black plate", "", 0},
} }
for _, row in ipairs(nodetypes) do if def.colorable and has_unifieddyes_mod then
local name = row[1] -- overwrite attributes on the "uncolored" node
local desc = row[2] node_def.palette = "unifieddyes_palette_extended.png"
local light = row[4] node_def.groups.ud_param2_colorable = 1
-- Node Definition node_def.airbrush_replacement_node = "scifi_nodes:"..name.."_colored"
minetest.register_node("scifi_nodes:"..name, { end
description = desc,
tiles = {"scifi_nodes_"..name..".png"}, -- register node
groups = {cracky=1}, local nodename = "scifi_nodes:" .. name
minetest.register_node(nodename , node_def)
-- unified dyes registration
if def.colorable and has_unifieddyes_mod then
minetest.register_node("scifi_nodes:"..name.."_colored", {
description = def.description,
tiles = tiles,
groups = {
cracky = 1,
ud_param2_colorable = 1,
not_in_creative_inventory = 1
},
is_ground_content = false,
palette = "unifieddyes_palette_extended.png",
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "color",
light_source = light, light_source = def.light,
sounds = default.node_sound_glass_defaults() sounds = scifi_nodes.node_sound_glass_defaults(),
on_construct = unifieddyes.on_construct,
on_dig = unifieddyes.on_dig
}) })
end end
-- moreblocks registration (default to register all except if "false" encountered)
if has_moreblocks_mod and def.moreblocks ~= false then
stairsplus:register_all("scifi_nodes", name, "scifi_nodes:"..name, {
description = def.description,
tiles = tiles,
use_texture_alpha = "clip",
groups = {cracky=1, dig_generic = 3},
paramtype = "light",
paramtype2 = "facedir",
light_source = def.light,
sounds = sounds,
})
end
if def.ambience then
for soundname, opts in pairs(def.ambience) do
scifi_nodes.register_ambience(nodename, soundname, opts)
end
end
-- advtrains platform registration
if has_advtrains_mod and def.advtrains_platform then
advtrains.register_platform("scifi_nodes", "scifi_nodes:" .. name)
end
if has_signs_api_mod and def.signs_banner then
signs_api.register_sign("scifi_nodes", name .. "_banner", {
depth = 1/16,
width = 5,
height = 1,
entity_fields = {
maxlines = 1,
color = def.signs_banner_color or "#fff",
},
node_fields = {
visual_scale = 1,
description = name .. " banner",
tiles = tiles,
inventory_image = "scifi_nodes_" .. name .. ".png",
use_texture_alpha = "clip",
},
})
end
if has_slats_mod and def.slat then
slats.register_slat(
name,
"scifi_nodes:" .. name,
table.copy(node_def.groups),
"scifi_nodes_" .. name .. ".png^slats_slat_overlay.png^[makealpha:255,126,126",
def.description .. " Slat",
sounds
)
end
end

53
octagon_glass.lua Normal file
View File

@@ -0,0 +1,53 @@
local has_unifieddyes_mod = minetest.get_modpath("unifieddyes")
local function register_glass(key, name)
local tiles = {"scifi_nodes_" .. key .. ".png"}
minetest.register_node("scifi_nodes:" .. key, {
description = name .. " Octagon Glass",
sunlight_propagates = true,
drawtype = "glasslike",
tiles = tiles,
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = "blend",
light_source = 10,
groups = {
cracky = 2,
dig_generic = 3
},
is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults(),
})
end
register_glass("octppl", "Purple")
register_glass("octbl", "Blue")
register_glass("octgrn", "Green")
register_glass("octrng", "Orange")
register_glass("octwht", "White")
if has_unifieddyes_mod then
minetest.register_node("scifi_nodes:octwht", {
description = "Octagon Glass",
sunlight_propagates = true,
drawtype = "glasslike",
tiles = {
"scifi_nodes_octwht.png",
},
palette = "unifieddyes_palette_extended.png",
paramtype = "light",
paramtype2 = "color",
use_texture_alpha = "blend",
light_source = 10,
groups = {
cracky = 2,
dig_generic = 3,
ud_param2_colorable = 1
},
is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults(),
on_construct = unifieddyes.on_construct,
on_dig = unifieddyes.on_dig
})
end

155
octagon_panes.lua Normal file
View File

@@ -0,0 +1,155 @@
local function register(basename, color, texture)
local nodename_single = "scifi_nodes:" .. basename .. "_pane"
local nodename_double = "scifi_nodes:" .. basename .. "_pane_double"
local nodename_offset = "scifi_nodes:" .. basename .. "_pane_offset"
local nodename_slope = "scifi_nodes:" .. basename .. "_slope"
local recipe_ingredient = "scifi_nodes:" .. basename
local base_decription = color .. " octagon glass"
-- single height
minetest.register_node(nodename_single, {
description = base_decription .. " pane",
drawtype = "nodebox",
tiles = {
texture
},
wield_image = texture,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
node_box = {
type = "fixed",
fixed = {{-0.5, -0.5, -0.03125, 0.5, 0.5, 0.03125}},
},
selection_box = {
type = "fixed",
fixed = {{-0.5, -0.5, -0.25, 0.5, 0.5, 0.25}},
},
groups = {
cracky = 3,
oddly_breakable_by_hand = 3
},
use_texture_alpha = "blend",
sounds = scifi_nodes.node_sound_glass_defaults()
})
-- double height
minetest.register_node(nodename_double, {
description = base_decription .. " pane (double)",
drawtype = "nodebox",
tiles = {
texture
},
wield_image = texture,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
node_box = {
type = "fixed",
fixed = {{-0.5, -0.5, -0.03125, 0.5, 1.5, 0.03125}},
},
selection_box = {
type = "fixed",
fixed = {{-0.5, -0.5, -0.25, 0.5, 1.5, 0.25}},
},
groups = {
cracky = 3,
oddly_breakable_by_hand = 3
},
use_texture_alpha = "blend",
sounds = scifi_nodes.node_sound_glass_defaults()
})
-- single height with offset
minetest.register_node(nodename_offset, {
description = base_decription .. " pane (offset)",
drawtype = "nodebox",
tiles = {
texture
},
wield_image = texture,
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
is_ground_content = false,
node_box = {
type = "fixed",
fixed = {{-0.5, -0.5, 0.96875, 0.5, 0.5, 1.03125}},
},
selection_box = {
type = "fixed",
fixed = {{-0.5, -0.5, 0.75, 0.5, 0.5, 1.25}},
},
groups = {
cracky = 3,
oddly_breakable_by_hand = 3,
not_blocking_trains = 1
},
use_texture_alpha = "blend",
sounds = scifi_nodes.node_sound_glass_defaults()
})
-- slope pane
minetest.register_node(nodename_slope, {
description = base_decription .. " pane (slope)",
sunlight_propagates = true,
drawtype = "mesh",
mesh = "scifi_nodes_slope_simple.obj",
tiles = {
texture
},
paramtype = "light",
paramtype2 = "facedir",
use_texture_alpha = "blend",
light_source = 10,
groups = {
cracky = 2,
dig_generic = 3
},
selection_box = scifi_nodes.slope_box_simple,
collision_box = scifi_nodes.slope_box_simple,
is_ground_content = false,
sounds = scifi_nodes.node_sound_glass_defaults()
})
-- register recipes
minetest.register_craft({
output = nodename_single .. " 16",
recipe = {
{recipe_ingredient}
},
})
minetest.register_craft({
output = nodename_slope .. " 16",
recipe = {
{"", "", recipe_ingredient},
{"", recipe_ingredient, ""},
{recipe_ingredient, "", ""}
},
})
minetest.register_craft({
output = nodename_double .. " 16",
recipe = {
{recipe_ingredient},
{recipe_ingredient}
},
})
minetest.register_craft({
output = nodename_offset,
type = "shapeless",
recipe = {nodename_single},
})
end
register("octrng", "Orange", "scifi_nodes_octrng.png")
register("octgrn", "Green", "scifi_nodes_octgrn.png")
register("octbl", "Blue", "scifi_nodes_octbl.png")
register("octppl", "Purple", "scifi_nodes_octppl.png")
register("octwht", "White", "scifi_nodes_octwht.png")
register("glass", "Dark Glass pane", "scifi_nodes_glass.png")

View File

@@ -22,6 +22,8 @@ local function activate_palm_scanner(pos, node, player)
-- check protection -- check protection
minetest.after(2, function() minetest.after(2, function()
if minetest.get_node(pos).name ~= node.name then return end
if minetest.is_protected(pos, name or "") then if minetest.is_protected(pos, name or "") then
-- clicker has no access to area -- clicker has no access to area
minetest.chat_send_player(name, "Access denied !") minetest.chat_send_player(name, "Access denied !")
@@ -36,6 +38,7 @@ local function activate_palm_scanner(pos, node, player)
-- reset state -- reset state
minetest.after(1, function() minetest.after(1, function()
if minetest.get_node(pos).name ~= node.name then return end
node.name = "scifi_nodes:palm_scanner_off" node.name = "scifi_nodes:palm_scanner_off"
minetest.swap_node(pos, node) minetest.swap_node(pos, node)
mesecon.receptor_off(pos, scifi_nodes.get_switch_rules(node.param2)) mesecon.receptor_off(pos, scifi_nodes.get_switch_rules(node.param2))
@@ -56,13 +59,14 @@ minetest.register_node("scifi_nodes:palm_scanner_off", {
paramtype = "light", paramtype = "light",
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1},
is_ground_content = false,
mesecons = { mesecons = {
receptor = { receptor = {
state = (has_mesecons and mesecon.state.off) state = (has_mesecons and mesecon.state.off)
} }
}, },
on_rightclick = (has_mesecons and activate_palm_scanner), on_rightclick = (has_mesecons and activate_palm_scanner),
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_node("scifi_nodes:palm_scanner_checking", { minetest.register_node("scifi_nodes:palm_scanner_checking", {
@@ -79,8 +83,9 @@ minetest.register_node("scifi_nodes:palm_scanner_checking", {
paramtype = "light", paramtype = "light",
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1},
is_ground_content = false,
drop = "scifi_nodes:palm_scanner_off", drop = "scifi_nodes:palm_scanner_off",
sounds = default.node_sound_glass_defaults() sounds = scifi_nodes.node_sound_metal_defaults()
}) })
minetest.register_node("scifi_nodes:palm_scanner_on", { minetest.register_node("scifi_nodes:palm_scanner_on", {
@@ -97,13 +102,14 @@ minetest.register_node("scifi_nodes:palm_scanner_on", {
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
light_source = 5, light_source = 5,
groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1},
is_ground_content = false,
drop = "scifi_nodes:palm_scanner_off", drop = "scifi_nodes:palm_scanner_off",
mesecons = { mesecons = {
receptor = { receptor = {
state = (has_mesecons and mesecon.state.on) state = (has_mesecons and mesecon.state.on)
} }
}, },
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_metal_defaults(),
}) })
minetest.register_craft({ minetest.register_craft({

View File

@@ -10,7 +10,7 @@ xpanes.register_pane("doompane", {
diggable = false, diggable = false,
buildable_to = true, buildable_to = true,
air_equivalent = true, air_equivalent = true,
textures = {"scifi_nodes_doompane.png","scifi_nodes_doompane.png","default_wood.png"}, textures = {"scifi_nodes_doompane.png","scifi_nodes_doompane.png","scifi_nodes_wood.png"},
inventory_image = "scifi_nodes_doompane.png", inventory_image = "scifi_nodes_doompane.png",
wield_image = "scifi_nodes_doompane.png", wield_image = "scifi_nodes_doompane.png",
groups = {cracky=1, pane=1}, groups = {cracky=1, pane=1},

View File

@@ -1,11 +1,11 @@
local plants = { local plants = {
{"flower1", "Glow Flower", 1,0, default.LIGHT_MAX}, {"flower1", "Glow Flower", 1,0, minetest.LIGHT_MAX},
{"flower2", "Pink Flower", 1.5,0, 10}, {"flower2", "Pink Flower", 1.5,0, 10},
{"flower3", "Triffid", 2,5, 0}, {"flower3", "Triffid", 2,5, 0},
{"flower4", "Weeping flower", 1.5,0, 0}, {"flower4", "Weeping flower", 1.5,0, 0},
{"plant1", "Bulb Plant", 1,0, 0}, {"plant1", "Bulb Plant", 1,0, 0},
{"plant2", "Trap Plant", 1.5,0, default.LIGHT_MAX}, {"plant2", "Trap Plant", 1.5,0, minetest.LIGHT_MAX},
{"plant3", "Blue Jelly Plant", 1.2,0, 10}, {"plant3", "Blue Jelly Plant", 1.2,0, 10},
{"plant4", "Green Jelly Plant", 1.2,0, 10}, {"plant4", "Green Jelly Plant", 1.2,0, 10},
{"plant5", "Fern Plant", 1.7,0, 0}, {"plant5", "Fern Plant", 1.7,0, 0},
@@ -29,11 +29,10 @@ for _, row in ipairs(plants) do
description = desc, description = desc,
tiles = {"scifi_nodes_"..name..".png"}, tiles = {"scifi_nodes_"..name..".png"},
drawtype = "plantlike", drawtype = "plantlike",
inventory_image = {"scifi_nodes_"..name..".png"}, inventory_image = "scifi_nodes_"..name..".png",
groups = {snappy=1, oddly_breakable_by_hand=1, dig_immediate=3, flora=1}, groups = {snappy=1, oddly_breakable_by_hand=1, dig_immediate=3, flora=1},
paramtype = "light", paramtype = "light",
visual_scale = size, visual_scale = size,
buildable_to = true,
walkable = false, walkable = false,
damage_per_second = dmg, damage_per_second = dmg,
selection_box = { selection_box = {
@@ -44,5 +43,6 @@ for _, row in ipairs(plants) do
}, },
is_ground_content = false, is_ground_content = false,
light_source = light, light_source = light,
sounds = scifi_nodes.node_sound_plant_defaults(),
}) })
end end

91
protected_switch.lua Normal file
View File

@@ -0,0 +1,91 @@
--------------
-- Switches --
--------------
local has_mesecons = minetest.get_modpath("mesecons")
local function toggle_switch(pos, _, player)
local node = minetest.get_node(pos)
local name = node.name
if name == "scifi_nodes:protected_switch_on" then
-- toggle off
minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos})
minetest.set_node(pos, {name = "scifi_nodes:protected_switch_off", param2 = node.param2})
mesecon.receptor_off(pos, scifi_nodes.get_switch_rules(node.param2))
elseif name == "scifi_nodes:protected_switch_off" then
-- toggle on, check protection first
if player and minetest.is_protected(pos, player:get_player_name()) then
-- position is protected, abort
minetest.sound_play("scifi_nodes_scanner_refused", {max_hear_distance = 8, pos = pos})
return
end
minetest.sound_play("scifi_nodes_switch", {max_hear_distance = 8, pos = pos})
minetest.set_node(pos, {name = "scifi_nodes:protected_switch_on", param2 = node.param2})
mesecon.receptor_on(pos, scifi_nodes.get_switch_rules(node.param2))
minetest.get_node_timer(pos):start(2)
end
end
minetest.register_node("scifi_nodes:protected_switch_on", {
description = "Protected wall switch",
sunlight_propagates = true,
buildable_to = false,
tiles = {"scifi_nodes_switch_on.png",},
inventory_image = "scifi_nodes_switch_on.png",
wield_image = "scifi_nodes_switch_on.png",
drawtype = "signlike",
node_box = {type = "wallmounted",},
selection_box = {type = "wallmounted",},
paramtype = "light",
paramtype2 = "wallmounted",
light_source = 5,
groups = {
cracky=1,
oddly_breakable_by_hand = 1,
not_in_creative_inventory = 1,
mesecon_needs_receiver = 1
},
is_ground_content = false,
mesecons = {
receptor = {
state = (has_mesecons and mesecon.state.on)
}
},
sounds = scifi_nodes.node_sound_metal_defaults(),
on_rightclick = (has_mesecons and toggle_switch),
on_timer = (has_mesecons and toggle_switch)
})
minetest.register_node("scifi_nodes:protected_switch_off", {
description = "Protected wall switch",
tiles = {"scifi_nodes_switch_off.png",},
inventory_image = "scifi_nodes_switch_on.png",
wield_image = "scifi_nodes_switch_on.png",
drawtype = "signlike",
sunlight_propagates = true,
buildable_to = false,
node_box = {type = "wallmounted",},
selection_box = {type = "wallmounted",},
paramtype = "light",
paramtype2 = "wallmounted",
groups = {
cracky = 1,
oddly_breakable_by_hand = 1,
mesecon_needs_receiver = 1
},
is_ground_content = false,
mesecons = {
receptor = {
state = (has_mesecons and mesecon.state.off)
}
},
sounds = scifi_nodes.node_sound_metal_defaults(),
on_rightclick = (has_mesecons and toggle_switch)
})
minetest.register_craft({
output = "scifi_nodes:protected_switch_off 2",
type = "shapeless",
recipe = {"scifi_nodes:switch_off", "default:steel_ingot"}
})

View File

@@ -1,2 +1,5 @@
# Doors can only be opened by mesecon signal # Doors can only be opened by mesecon signal
scifi_nodes.doors_open_with_mesecon_only (disables right click on doors) bool true scifi_nodes.doors_open_with_mesecon_only (disables right click on doors) bool false
# Teleporter recipe flag
scifi_nodes.teleporter_enable_crafting (enables the teleporter recipe) bool false

57
sounds.lua Normal file
View File

@@ -0,0 +1,57 @@
-- sound definitions with fallback to empty sound-table
function scifi_nodes.node_sound_defaults(param)
if minetest.get_modpath("default") then
-- default game
return default.node_sound_defaults(param)
end
return {}
end
function scifi_nodes.node_sound_wood_defaults(param)
if minetest.get_modpath("default") then
-- default game
return default.node_sound_wood_defaults(param)
end
return {}
end
function scifi_nodes.node_sound_glass_defaults(param)
if minetest.get_modpath("default") then
-- default game
return default.node_sound_glass_defaults(param)
end
return {}
end
function scifi_nodes.node_sound_metal_defaults(param)
if minetest.get_modpath("default") then
-- default game
return default.node_sound_metal_defaults(param)
end
return {}
end
function scifi_nodes.node_sound_stone_defaults(param)
if minetest.get_modpath("default") then
-- default game
return default.node_sound_stone_defaults(param)
end
return {}
end
function scifi_nodes.node_sound_dirt_defaults(param)
if minetest.get_modpath("default") then
-- default game
return default.node_sound_dirt_defaults(param)
end
return {}
end
function scifi_nodes.node_sound_plant_defaults(param)
if minetest.get_modpath("default") then
-- default game
return default.node_sound_leaves_defaults(param)
end
return {}
end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

3
stealthnodes.lua Normal file
View File

@@ -0,0 +1,3 @@
stealthnode.register_stealthnode("scifi_nodes", "forcefield")
stealthnode.register_stealthnode("scifi_nodes", "wall")

View File

@@ -33,13 +33,19 @@ minetest.register_node("scifi_nodes:switch_on", {
paramtype = "light", paramtype = "light",
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
light_source = 5, light_source = 5,
groups = {cracky=1, oddly_breakable_by_hand=1, not_in_creative_inventory=1, mesecon_needs_receiver = 1}, groups = {
cracky=1,
oddly_breakable_by_hand = 1,
not_in_creative_inventory = 1,
mesecon_needs_receiver = 1
},
is_ground_content = false,
mesecons = { mesecons = {
receptor = { receptor = {
state = (has_mesecons and mesecon.state.on) state = (has_mesecons and mesecon.state.on)
} }
}, },
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_metal_defaults(),
on_rightclick = (has_mesecons and toggle_switch), on_rightclick = (has_mesecons and toggle_switch),
on_timer = (has_mesecons and toggle_switch) on_timer = (has_mesecons and toggle_switch)
}) })
@@ -56,13 +62,18 @@ minetest.register_node("scifi_nodes:switch_off", {
selection_box = {type = "wallmounted",}, selection_box = {type = "wallmounted",},
paramtype = "light", paramtype = "light",
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
groups = {cracky=1, oddly_breakable_by_hand=1, mesecon_needs_receiver = 1}, groups = {
cracky = 1,
oddly_breakable_by_hand = 1,
mesecon_needs_receiver = 1
},
is_ground_content = false,
mesecons = { mesecons = {
receptor = { receptor = {
state = (has_mesecons and mesecon.state.off) state = (has_mesecons and mesecon.state.off)
} }
}, },
sounds = default.node_sound_glass_defaults(), sounds = scifi_nodes.node_sound_metal_defaults(),
on_rightclick = (has_mesecons and toggle_switch) on_rightclick = (has_mesecons and toggle_switch)
}) })

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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