sorcery  Artifact [330ca92ebf]

Artifact 330ca92ebf83e478efad285d73f4ad4bc75d19ce463c94e02d9e026f66d589fd:


do
	local path = minetest.get_modpath('sorcery');
	local get = function(unit)
		return dofile(path .. '/' .. unit .. '.lua')
	end
	sorcery = {
		path = path;
		load = function(name) get(name) end;
		unit = function(ns,sfx)
			local target
			if ns then
				sorcery[ns] = {}
				target = sorcery[ns]
			else target = sorcery end
			return function(lst)
				for i=1,#lst do
					target[lst[i]] = get(((ns and ns..'/') or '')..lst[i])
				end
			end
		end;
	}
end

-- unfortunately we can't just iterate over the files
-- and load them automatically, as interdependencies
-- exist (especially with /lib) and we need to be very
-- careful about the order they're loaded in

sorcery.unit('data') {'ui'}
sorcery.unit('lib') {
	-- convenience
	'str';
	-- serialization
	'marshal', 'json';
	-- data structures
	'tbl', 'class';
	-- wrappers
	'color', 'image', 'ui';
	-- game
	'node';
}

sorcery.unit() { 'compat', 'matreg' }
sorcery.unit('data') {
	'compat';
	'affinities'; 'gods';
	'enchants', 'spells';
	'gems', 'metals';
	'potions', 'oils', 'greases',
		'draughts', 'elixirs',
		'philters', 'extracts';
	'register';
}

for _,u in pairs {
	'attunement'; 'context'; 'itemclass'; 'potions';
	'metal', 'gems'; 'leylines'; 'infuser'; 'altar';
	'wands'; 'tools', 'crafttools'; 'enchanter';
	'harvester'; 'metallurgy-hot', 'metallurgy-cold';
	'entities'; 'recipes'; 'coins'; 'interop';
	'tnodes'; 'forcefield'; 'farcaster'; 'portal';
	'cookbook', 'writing'; 'disassembly'; 'displacer';
	'gravitator';

	'admin';
} do sorcery.load(u) end