local lib = starlit.mod.lib
do -- chemlamp
local burnTime = 60*60
local maxBright = 12
local stages = maxBright
local stageTimeout = burnTime / stages
local function chemLampID(n)
if n == stages then return 'starlit_tech:chem_lamp' end
return string.format('starlit_tech:chem_lamp_%s',n)
end
local fab = starlit.type.fab {
element = { carbon = 4, magnesium = 1 };
cost = { power = 100 };
flag = { print = true };
time = { print = 5 };
};
for i = stages, 0, -1 do
minetest.register_node(chemLampID(i), {
short_description = 'Chem Lamp';
description = starlit.ui.tooltip {
title = 'Chem Lamp';
desc = "A simple carbon-frame chemical light source powered by ambient oxygen. Cheap, quick to print, and biodedragable, without any need for an electric grid or complex power storage mechanism. However, the light only lasts a few days, after which the lamp must be recycled or discarded.";
color = lib.color(1,.4,.1);
props = {
{title = 'Burn Remaining', desc=lib.math.timespec(stageTimeout * i), affinity=i > 4 and 'good' or 'bad'};
{title = 'Mass', desc='10g', affinity='info'};
};
};
drawtype = 'nodebox';
groups = {
object = 1;
attached_node = 1;
};
node_box = {
type = 'fixed';
fixed = {
-.4, -.5, -.20;
.4, -.3, .20;
};
};
tiles = {
lib.image 'starlit-tech-lamp-glow.png'
:fade(1 - i/stages)
:blit(lib.image 'starlit-tech-lamp.png')
:render();
};
paramtype = 'light';
paramtype2 = 'wallmounted';
wallmounted_rotate_vertical = true;
light_source = math.floor(lib.math.lerp(i/stages, 0, maxBright));
on_construct = i ~= 0 and function(pos)
local t = minetest.get_node_timer(pos)
t:start(stageTimeout)
end or nil;
on_timer = i ~= 0 and function(pos)
local me = minetest.get_node(pos)
minetest.swap_node(pos, {name=chemLampID(i-1), param2=me.param2})
return i > 1
end or nil;
_starlit = {
mass = 10;
reverseEngineer = {
complexity = 1;
sw = 'starlit_tech:schematic_chem_lamp';
};
recover = starlit.type.fab {
element = {
carbon = 8;
magnesium = math.floor(lib.math.lerp(i/stages, 0, 2));
};
time = {
shred = .5;
shredPower = 2;
};
};
};
})
end
starlit.item.sw.link('starlit_tech:schematic_chem_lamp', {
name = 'Chem Lamp Schematic';
kind = 'schematic';
input = fab;
output = chemLampID(stages);
size = 32e6;
cost = {
cycles = 8e9;
ram = 16e6;
};
rarity = 1;
})
end
minetest.register_node('starlit_tech:crate', {
short_description = 'Crate';
description = starlit.ui.tooltip {
title = 'Crate';
desc = 'A sturdy but lightweight storage crate woven from graphene.';
props = { {title='Mass', affinity='info', desc='100g'} };
};
drawtype = 'nodebox';
node_box = {
type = 'fixed';
fixed = {
.4, .2, .4;
-.4, -.5, -.2;
};
};
groups = {
object = 3;
attached_node = 3;
};
paramtype2 = 'facedir';
tiles = {
'starlit-tech-crate-top.png';
'starlit-tech-crate-bottom.png';
'starlit-tech-crate-side.png^[transformFX';
'starlit-tech-crate-side.png';
'starlit-tech-crate-back.png';
'starlit-tech-crate-front.png';
};
_starlit = {
mass = 100;
reverseEngineer = {
complexity = 1;
sw = 'starlit_tech:schematic_crate';
};
recover = starlit.type.fab {
element = { carbon = 100; };
time = {
shred = 1;
shredPower = 3;
};
};
};
on_construct = function(pos)
local m = minetest.get_meta(pos)
local inv = m:get_inventory()
inv:set_size('starlit:contents', 12)
end;
on_rightclick = function(pos, node, luser)
if not luser then return end
local user = starlit.activeUsers[luser:get_player_name()]
user:openUI('starlit:box', 'index', {
inv={
{id = 'starlit:contents', pos=pos};
};
})
end;
})
starlit.item.sw.link('starlit_tech:schematic_crate', {
name = 'Crate Schematic';
kind = 'schematic';
input = starlit.type.fab {
element = { carbon = 100; };
flag = {print = true};
time = {print = 25};
cost = {power = 250};
};
output = 'starlit_tech:crate';
size = 48e6;
cost = {
cycles = 12e9;
ram = 16e6;
};
rarity = 1;
})