From 32cedbc3a0c1f9d6a2aa3681355e91e41093eb1b Mon Sep 17 00:00:00 2001 From: Sokomine Date: Sun, 14 Dec 2014 13:29:28 +0100 Subject: [PATCH] added replacement function for village types --- init.lua | 6 ++--- replacements.lua | 62 ++++++++++++++++++++++++++--------------------- village_types.lua | 36 ++++++++++++++++++--------- 3 files changed, 61 insertions(+), 43 deletions(-) diff --git a/init.lua b/init.lua index 9ff82ad..3b116c3 100644 --- a/init.lua +++ b/init.lua @@ -27,6 +27,9 @@ dofile(mg_villages.modpath.."/nodes.lua") -- the default game no longer provides helpful tree growing code dofile(mg_villages.modpath.."/trees.lua") +-- replace some materials for entire villages randomly +dofile(mg_villages.modpath.."/replacements.lua") + -- multiple diffrent village types with their own sets of houses are supported -- The function mg_villages.add_village_type( village_type_name, village_type_data ) -- allows other mods to add new village types. @@ -40,9 +43,6 @@ dofile(mg_villages.modpath.."/buildings.lua") -- been added using the functions above dofile(mg_villages.modpath.."/init_weights.lua") --- replace some materials for entire villages randomly -dofile(mg_villages.modpath.."/replacements.lua") - -- generate village names dofile(mg_villages.modpath.."/name_gen.lua"); diff --git a/replacements.lua b/replacements.lua index 07a5ea5..dfcf095 100644 --- a/replacements.lua +++ b/replacements.lua @@ -75,6 +75,8 @@ mg_villages.replace_materials = function( replacements, pr, original_materials, end end +--[[ + -- deco is used by BigFreakingDig; as that one lacks default nodes, it doesn't work out here if( wood_found and minetest.get_modpath('deco')) then local bfd_treelist = {'birch', 'cherry', 'evergreen', 'oak' }; for _,v in ipairs( bfd_treelist ) do @@ -83,6 +85,7 @@ mg_villages.replace_materials = function( replacements, pr, original_materials, end end end +--]] if( wood_found and mg_villages.ethereal_trees ) then for _,v in ipairs( mg_villages.ethereal_trees ) do @@ -285,10 +288,17 @@ mg_villages.get_replacement_list = function( housetype, pr ) table.insert( replacements, {'default:obsidian_glass', 'default:glass' }); end + if( housetype and mg_villages.village_type_data[ housetype ] and mg_villages.village_type_data[ housetype ].replacement_function ) then + return mg_villages.village_type_data[ housetype ].replacement_function( housetype, pr, replacements ); + end + return replacements; +end - local wood_type = 'default:wood'; - -- Taokis houses from structure i/o - if( housetype == 'taoki' ) then + + +-- Taokis houses from structure i/o +mg_villages.replacements_taoki = function( housetype, pr, replacements ) + local wood_type = 'default:wood'; if( mg_villages.realtest_trees ) then wood_type = mg_villages.replace_materials( replacements, pr, @@ -343,10 +353,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) 'brick' ); return replacements; - end + end - if( housetype == 'nore' ) then +mg_villages.replacements_nore = function( housetype, pr, replacements ) mg_villages.replace_materials( replacements, pr, -- {'default:stonebrick'}, @@ -374,11 +384,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) table.insert( replacements, {'stairs:slab_cobble', 'default:stone_bricks_slab' }); end return replacements; - end +end - if( housetype == 'lumberjack' ) then - +mg_villages.replacements_lumberjack = function( housetype, pr, replacements ) -- replace the wood - those are lumberjacks after all local wood_type = mg_villages.replace_materials( replacements, pr, {'default:wood'}, @@ -392,10 +401,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) table.insert( replacements, {'bell:bell', 'default:goldblock' }); end return replacements; - end +end - if( housetype == 'canadian' ) then +mg_villages.replacements_canadian = function( housetype, pr, replacements ) table.insert( replacements, {'4seasons:slimtree_wood', 'default:fence_wood'}); if( true) then return replacements; end -- TODO @@ -447,10 +456,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) end return replacements; - end +end - if( housetype == 'logcabin' ) then +mg_villages.replacements_logcabin = function( housetype, pr, replacements ) -- for logcabins, wood is the most likely type of roof material local roof_type = mg_villages.replace_materials( replacements, pr, @@ -489,10 +498,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) 'default:junglewood'); end return replacements; - end +end - if( housetype == 'chateau' ) then +mg_villages.replacements_chateau = function( housetype, pr, replacements ) if( minetest.get_modpath( 'cottages' )) then -- straw is the most likely building material for roofs for historical buildings @@ -545,10 +554,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) 'cobble'); return replacements; - end +end - if( housetype == 'tent' ) then +mg_villages.replacements_tent = function( housetype, pr, replacements ) table.insert( replacements, { "glasspanes:wool_pane", "cottages:wool_tent" }); table.insert( replacements, { "default:gravel", "default:sand" }); -- realtest needs diffrent fence posts and doors @@ -562,11 +571,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) mg_villages.replace_saplings( replacements, wood_type ); end return replacements; - end +end - if( housetype == 'grasshut' ) then - +mg_villages.replacements_grasshut = function( housetype, pr, replacements ) table.insert( replacements, {'moreblocks:fence_jungle_wood', 'default:fence' }); if( pr:next( 1, 4) == 1 ) then table.insert( replacements, {'dryplants:reed_roof', 'cottages:roof_straw'}); @@ -587,10 +595,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) table.insert( replacements, {'default:desert_sand', 'default:dirt_with_grass' }); return replacements; - end +end - if( housetype == 'claytrader' ) then +mg_villages.replacements_claytrader = function( housetype, pr, replacements ) -- the walls of the clay trader houses are made out of brick mg_villages.replace_materials( replacements, pr, { 'stairs:stair_brick', 'stairs:slab_brick', 'default:brick' }, -- default_materials @@ -643,10 +651,10 @@ mg_villages.get_replacement_list = function( housetype, pr ) 'sandstone'); end return replacements; - end +end - if( housetype == 'charachoal' ) then +mg_villages.replacements_charachoal = function( housetype, pr, replacements ) if( mg_villages.realtest_trees ) then local wood_type = mg_villages.replace_materials( replacements, pr, {'default:wood'}, @@ -660,13 +668,11 @@ mg_villages.get_replacement_list = function( housetype, pr ) table.insert( replacements, {'stairs:stair_loam', 'cottages:loam'}); end return replacements; - end +end - -- wells can get the same replacements as the sourrounding village; they'll get a fitting roof that way - if( housetype ~= 'medieval' and housetype ~= 'well' and housetype ~= 'cottages') then - return replacements; - end +-- wells can get the same replacements as the sourrounding village; they'll get a fitting roof that way +mg_villages.replacements_medieval = function( housetype, pr, replacements ) if( not( minetest.get_modpath('bell' ))) then table.insert( replacements, {'bell:bell', 'default:goldblock' }); diff --git a/village_types.lua b/village_types.lua index b86e837..b03b9e9 100644 --- a/village_types.lua +++ b/village_types.lua @@ -19,26 +19,38 @@ -- plant_frequency = 1 The higher this value is, the less plants are placed. local village_type_data_list = { - nore = { min = 20, max = 40, space_between_buildings=1, mods={}, texture = 'default_stone_brick.png'}, + nore = { min = 20, max = 40, space_between_buildings=1, mods={}, texture = 'default_stone_brick.png', + replacement_function = mg_villages.replacements_nore }, taoki = { min = 30, max = 70, space_between_buildings=1, mods={}, texture = 'default_brick.png' , - sapling_divisor = 5, plant_type = 'farming:cotton_8', plant_frequency = 1 }, + sapling_divisor = 5, plant_type = 'farming:cotton_8', plant_frequency = 1, + replacement_function = mg_villages.replacements_taoki }, medieval = { min = 25, max = 60, space_between_buildings=2, mods={'cottages'}, texture = 'cottages_darkage_straw.png', -- they often have straw roofs - sapling_divisor = 10, plant_type = 'farming:wheat_8', plant_frequency = 1 }, - charachoal = { min = 10, max = 15, space_between_buildings=1, mods={'cottages'}, texture = 'default_coal_block.png'}, + sapling_divisor = 10, plant_type = 'farming:wheat_8', plant_frequency = 1, + replacement_function = mg_villages.replacements_medieval }, + charachoal = { min = 10, max = 15, space_between_buildings=1, mods={'cottages'}, texture = 'default_coal_block.png', + replacement_function = mg_villages.replacements_charachoal }, lumberjack = { min = 10, max = 30, space_between_buildings=1, mods={'cottages'}, texture = 'default_tree.png', name_prefix = 'Camp ', - sapling_divisor = 1, plant_type = 'default:junglegrass', plant_frequency = 24 }, - claytrader = { min = 10, max = 20, space_between_buildings=1, mods={'cottages'}, texture = 'default_clay.png'}, - logcabin = { min = 15, max = 30, space_between_buildings=1, mods={'cottages'}, texture = 'default_wood.png'}, - canadian = { min = 40, max = 110, space_between_buildings=1, mods={'hdb','nbu'}, texture = 'wool_white.png'}, - grasshut = { min = 10, max = 40, space_between_buildings=1, mods={'dryplants'}, texture = 'dryplants_reed.png'}, - tent = { min = 5, max = 20, space_between_buildings=2, mods={'cottages'}, texture = 'wool_white.png', name_preifx = 'Tent at'}, + sapling_divisor = 1, plant_type = 'default:junglegrass', plant_frequency = 24, + replacement_function = mg_villages.replacements_lumberjack }, + claytrader = { min = 10, max = 20, space_between_buildings=1, mods={'cottages'}, texture = 'default_clay.png', + replacement_function = mg_villages.replacements_claytrader }, + logcabin = { min = 15, max = 30, space_between_buildings=1, mods={'cottages'}, texture = 'default_wood.png', + replacement_function = mg_villages.replacements_logcabin }, + canadian = { min = 40, max = 110, space_between_buildings=1, mods={'hdb','nbu'}, texture = 'wool_white.png', + replacement_function = mg_villages.replacements_canadian }, + grasshut = { min = 10, max = 40, space_between_buildings=1, mods={'dryplants'}, texture = 'dryplants_reed.png', + replacement_function = mg_villages.replacements_grasshut }, + tent = { min = 5, max = 20, space_between_buildings=2, mods={'cottages'}, texture = 'wool_white.png', name_preifx = 'Tent at', + replacement_function = mg_villages.replacements_tent }, -- these sub-types may occour as single houses placed far from villages tower = { only_single = 1, name_prefix = 'Tower at ', mods={'cottages'}, texture = 'default_mese.png'}, - chateau = { only_single = 1, name_prefix = 'Chateau ', texture = 'default_gold_block.png'}, + chateau = { only_single = 1, name_prefix = 'Chateau ', texture = 'default_gold_block.png', + replacement_function = mg_villages.replacements_chateau }, forge = { only_single = 1, name_prefix = 'Forge at '}, tavern = { only_single = 1, name_prefix = 'Inn at '}, - well = { only_single = 1, name_prefix = 'Well at '}, + well = { only_single = 1, name_prefix = 'Well at ', + replacement_function = mg_villages.replacements_medieval }, trader = { only_single = 1, name_prefix = 'Trading post ' }, sawmill = { only_single = 1, name_prefix = 'Sawmill at ' }, farm_tiny = { only_single = 1, name_prefix = 'House '},