Mineclone compatibility (#36)

* latest versions of mapgen_helper and subterrane

* initial work

* call it "minetest_game" compatibility instead of "default" compatibility

* Getting started on moving all default dependencies to a single root mod

* distilling out more dependencies

* fix some typos

* more default dependencies

* beds

* start getting some MCL equivalents set up

* mine gas dependencies

* reorganize

* add some mapgen stuff

* getting close to actually being able to run mineclone with this

* it actually runs! Crashes with out-of-memory error when you try to go below -64, but it's a start.

* hide flowing pit plasma from creative inventory

* mineclone 5 settings

* Update subterrane

* get rid of meselamp dependency, bring in ancient lanterns from deep roads

* stair dependencies

* add mcl fences

* add mcl blast resistance and hardness to everything. Also an alternate name for Nethercap in MCL, since "nether" has another meaning there.

* buckets of oil and syrup should work in mineclone now

* 'splosions!

* make hunters avoid repaired ancient lanterns

* mapgen torchspine wasn't having its timer set

* split mapgen compatibility code into its own file

* bypass dependency indirection for df_farming.

* apply threshold alpha to food items, they look better that way

* bypass dependency indirection for df_mapitems

* bypass dependency indirection for df_primordial_items

* bypass dependency indirection for df_trees

* bypass dependency indirection for df_underworld_items

* bypass dependency indirection for df_caverns

* fixing up the puzzle seal to work in both

* fix puzzle seal formspec for mcl

* create built-in substitutes for fireflies and bones mods for when those aren't available

* set up mcl dungeon loot for underworld warriors, port over some translations from default

* overlooked a debug

* add itemslot backgrounds for mcl

* added mineclone groups to all registered nodes. TODO: craftitems.

This was extremely tedious. Completely untested, aside from simply running the game.

* minor fixes to the built-in bones node

* eatable group for edibles

* clean up some TODOs

* adjust pit plasma abm conditions

* add df_ambience

* fixing up explosions. Also make slade sand diggable in mcl, and fix a bug in web generators

* make tower cap caves less chirpy, fix bigger goblin hut schematic, allow glowing spindlestem extract bottles

* avoid an undeclared global check

* alas, cave pearls aren't set up right for attached_node_facedir.

* bunch of work on mineclone ores, moved main config into df_dependencies

* add a few more ores

* update depends in mod.conf

* add opaque group to light-sensitive dirt types

Mineclone adds the "opaque" group only to non-light nodes, and torches check for the opaque group to decide whether they can be placed there. light-sensitive nodes need the "light" paramtype to work, though. So adding the opaque group manually to these.

* add a touch of reverb to one of the whisper tracks, it didn't fit with the others without it

* bloodthorn also needs to be set opaque

* add sound to torchspines

* isolate Nethercap translation name to make it easier to swap out in Mineclone contexts

* ambience tweak

* fix dirt spreads

https://github.com/FaceDeer/dfcaverns/issues/35

* adding achievements! Almost all untested yet.

* fix a few achievements glitches

* tweak some more achievements, add delay when achievements unlock other achievements

* fix farming achievements, fix spindlestem callbacks on place

* icons for farming achievements

* more achievement icons, fix ancient lantern achievement

* two more icons, update text

* add icons for upper cavern layers

* all achievements have icons now. Also add another sound to the magma sea ambience

* hook into awards' trigger system to get "x/y" progress displayed for the multi-achievement achievements

* ironically, Mineclone has an old version of awards that is incompatible with my trigger work.

* every award should now have a description and a difficulty.

* removing leftovers

* missing callbacks for farmables

* put growth restrictions on farmables so the achievement doesn't trigger inappropriately.

* enable ores in MCL2, fix some undeclared globals, fix icecap growth in MCL (achievements are a good debugging tool)

* get *all* the copper and iron containing nodes

* fix old awards mod's handling of grouped dig items

* Add a little bonus for players who activate a slade breacher - a handheld 'splosion tool

* used the wrong drop method

* beef up explosions in MCL, make slade brick craftable from slade sand and lava

* better creative mode checks, fix crash when digging walls in MCL

* Update subterrane

* various bugfixes and tweaks

* whipping up a simple puzzle chest to give a clue about ancient numbering

The coding is done, but UI and a node mesh need to be done

* prepare for some art tomorrow

* chest node and sounds

* images for the combination dials

* add puzzle chests to the underworld buildings

* update translations

* oops, can't initialize the contents of puzzle chests every time or players get endless stuff

* add backgrounds to item slots in MCL

* wrap the existing function rather than copy and pasting it

* fix bucket dependency in cooking recipes

* add _mcl_saturation to edibles
This commit is contained in:
FaceDeer
2022-08-28 23:48:44 -06:00
committed by GitHub
parent b2ee829c1a
commit 0a0c97b74e
435 changed files with 6100 additions and 1367 deletions

24
df_ambience/LICENSE.txt Normal file
View File

@ -0,0 +1,24 @@
Sounds are under various licenses, see the license.txt file in the /sounds directory for details and also the metadata in each sound file.
License for Code
----------------
Copyright (C) 2022 FaceDeer, TenPlus1 (Ambience Redo mod), Neuromancer (Immersive Sounds mod)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

138
df_ambience/init.lua Normal file
View File

@ -0,0 +1,138 @@
df_ambience = {}
local pplus = minetest.get_modpath("playerplus")
local S = minetest.get_translator(minetest.get_current_modname())
local modpath = minetest.get_modpath(minetest.get_current_modname())
local radius = 6
local registered_sets = {}
local set_nodes = {}
local muted_players = {}
local ensure_set_node = function(node_name)
for _, existing_node in pairs(set_nodes) do
if node_name == existing_node then
return
end
end
table.insert(set_nodes, node_name)
end
df_ambience.add_set = function(def)
assert(def)
assert(def.sounds)
if def.nodes then
for _, node_name in pairs(def.nodes) do
ensure_set_node(node_name)
end
end
def.frequency = def.frequency or 0.05
table.insert(registered_sets, def)
end
local timer = 0
local random = math.random
local get_player_data = function(player, name)
-- get head level node at player position
local pos = player:get_pos()
if not pos then return end
local prop = player:get_properties()
local eyeh = prop.eye_height or 1.47 -- eye level with fallback
pos.y = pos.y + eyeh
local nod_head = pplus and name and playerplus[name]
and playerplus[name].nod_head or minetest.get_node(pos).name
pos.y = pos.y - eyeh
-- get all set nodes around player
local ps, cn = minetest.find_nodes_in_area(
{x = pos.x - radius, y = pos.y - radius, z = pos.z - radius},
{x = pos.x + radius, y = pos.y + radius, z = pos.z + radius}, set_nodes)
return {
pos = pos,
head_node = nod_head,
biome = df_caverns.get_biome(pos),
totals = cn
}
end
local check_nodes = function(totals, nodes)
for _, node in pairs(nodes) do
if (totals[node] or 0) > 1 then
return true
end
end
return false
end
-- selects sound set
local get_ambience = function(player, name)
local player_data
-- loop through sets in order and choose first that meets its conditions
for _, set in ipairs(registered_sets) do
if random() < set.frequency then
local check_passed
local sound_check = set.sound_check
local set_nodes = set.nodes
if sound_check or set_nodes then
player_data = player_data or get_player_data(player, name)
end
if ((not set_nodes) or check_nodes(player_data.totals, set_nodes)) and
((not sound_check) or sound_check(player_data)) then
return set
end
end
end
end
minetest.register_globalstep(function(dtime)
-- one second timer
timer = timer + dtime
if timer < 1 then return end
timer = 0
local player_name
local number
local ambience
-- loop through players
for _, player in pairs(minetest.get_connected_players()) do
player_name = player:get_player_name()
if not muted_players[player_name] then
local set = get_ambience(player, player_name)
if set then
-- choose random sound from set
number = random(#set.sounds)
ambience = set.sounds[number]
-- play sound
minetest.sound_play(ambience.name, {
to_player = player_name,
gain = ambience.gain or 0.3,
pitch = ambience.pitch or 1.0,
}, true)
end
end
end
end)
minetest.register_chatcommand("mute_df_ambience", {
params = "",
description = S("Mutes or unmutes ambient sounds in deep caverns"),
func = function(name, param)
local message
if muted_players[name] then
message = S("Unmuted")
muted_players[name] = nil
else
message = S("Muted, no new sounds will start playing once current sounds finish")
muted_players[name] = true
end
return true, message
end
})
dofile(modpath.."/soundsets.lua")

View File

@ -0,0 +1,9 @@
# textdomain: df_ambience
### init.lua ###
Muted, no new sounds will start playing once current sounds finish=
Mutes or unmutes ambient sounds in deep caverns=
Unmuted=

4
df_ambience/mod.conf Normal file
View File

@ -0,0 +1,4 @@
name = df_ambience
description = Ambient wildlife sounds for DFCaverns
depends = df_caverns, df_dependencies
optional_depends = chasms, playerplus, df_underworld_items

View File

@ -0,0 +1,52 @@
CC-0:
howling 2 - https://freesound.org/people/PhonosUPF/sounds/499700/
howling 3 - https://freesound.org/people/PhonosUPF/sounds/499701/
howling 4 - https://freesound.org/people/PhonosUPF/sounds/499703/
howling 5 - https://freesound.org/people/PhonosUPF/sounds/499706/
howling 6 - https://freesound.org/people/PhonosUPF/sounds/499704/
howling 7 - https://freesound.org/people/PhonosUPF/sounds/499705/
howling 8 - https://freesound.org/people/PhonosUPF/sounds/499702/
cave monsters - https://freesound.org/people/Trebblofang/sounds/176930/
dark cave factory atmo - https://freesound.org/people/szegvari/sounds/583474/
bird noise - https://freesound.org/people/SpaceJoe/sounds/507257/
solitary bird song - https://freesound.org/people/nuncaconoci/sounds/623862/
pig grunting and grumbling - https://freesound.org/people/felix.blume/sounds/158746/
whalesong - https://freesound.org/people/taure/sounds/361423/
200614 fies, close buzzing, periodic, wide stereo 7am - https://freesound.org/people/TRP/sounds/567732/
howler_monkey_jungle_4 - https://freesound.org/people/itsmrjack/sounds/123044/
TRIBAL TOY BONGOS-89 - https://freesound.org/people/TA-AT/sounds/449811/
shamanic drum 1 - https://freesound.org/people/adharca/sounds/275376/
shamanic drum 2 - https://freesound.org/people/adharca/sounds/275377/
cave tribal song - https://freesound.org/people/szegvari/sounds/517317/
ghostly whispers - https://freesound.org/people/dimbark1/sounds/316797/
whisper trail 1 - https://freesound.org/people/Black%20Boe/sounds/22328/
whisper trail 2 - https://freesound.org/people/Black%20Boe/sounds/22329/
whisper trail 3 - https://freesound.org/people/Black%20Boe/sounds/22330/
frogs - https://freesound.org/people/derjuli/sounds/535066/
frog croaking (uk common frog) - https://freesound.org/people/shaunhillyard/sounds/532235/
glitched birds - https://freesound.org/people/soramoosic/sounds/256153/
bird song 03 - https://freesound.org/people/olliehahn12/sounds/474493/
pajaro_palenque - https://freesound.org/people/nicotep/sounds/619305/
CC-BY-A
exotic creature song - https://freesound.org/people/InspectorJ/sounds/469312/
crow slow - https://freesound.org/people/InspectorJ/sounds/418262/
long bird song slow - https://freesound.org/people/IESP/sounds/339907/
bird budgie song - https://freesound.org/people/danielfergusonmusic/sounds/404957/
horse neigh - https://freesound.org/people/dobroide/sounds/18229/
horse whinny - https://freesound.org/people/GoodListener/sounds/322445/
horse nicker - https://freesound.org/people/GoodListener/sounds/322449/
moan - https://freesound.org/people/GoodListener/sounds/322444/
horse snort 2 - https://freesound.org/people/GoodListener/sounds/322454/
braying donkey - ane brayant - https://freesound.org/people/beskhu/sounds/186704/
whale - https://freesound.org/people/Tritus/sounds/186899/
treBccc1 - https://freesound.org/people/tomerbe/sounds/546110/
Tribal memories - https://freesound.org/people/InSintesi/sounds/370353/
Celtic_Drum - https://freesound.org/people/13NHarri/sounds/263974/
whisper5 - thanvannispen
creepywhisper_ambient - https://freesound.org/people/ohnobones/sounds/412769/
bangkok frog - https://freesound.org/people/WIM/sounds/9099/
black casqued hornbill 5-https://freesound.org/people/ERH/sounds/56549/
exotic birds sound - https://freesound.org/people/bolkmar/sounds/423804/
avalanche - https://freesound.org/people/mystiscool/sounds/7141/

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.

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