Differences From
Artifact [6d0114ddbf]:
233 233 --[[if not how.gift then -- cheap hack to make starting batteries fully charged
234 234 E.battery.setCharge(st, 0)
235 235 end]]
236 236 E.battery.update(st)
237 237 end;
238 238 };
239 239 fab = def.fab;
240 + reverseEngineer = def.reverseEngineer;
240 241 dynamo = {
241 242 vtable = E.dynamo.kind.battery;
242 243 };
243 244 battery = def;
244 245 };
245 246 })
246 247 end)
................................................................................
484 485 return fab.size and fab.size.print or 1
485 486 else
486 487 return bType[s] * (bTier[s] or 1) * (bSize[s] or 1)
487 488 end
488 489 end
489 490
490 491 local swID = 'starlit_electronics:schematic_'..baseID
491 - fab.reverseEngineer = {
492 - complexity = bTier.complexity * bSize.complexity * bType.complexity;
493 - sw = swID;
494 - }
495 492 fab.flag = {print=true}
496 493
497 494 starlit.item.battery.link(id, {
498 495 name = name;
499 496 desc = table.concat({
500 497 bType.desc or '';
501 498 bTier.desc or '';
502 499 bSize.desc or '';
503 500 }, ' ');
504 501
505 502 fab = fab;
503 + reverseEngineer = {
504 + complexity = bTier.complexity * bSize.complexity * bType.complexity;
505 + sw = swID;
506 + };
506 507
507 508 capacity = batStat 'capacity';
508 509 dischargeRate = batStat 'dischargeRate';
509 510 leak = batStat 'leak';
510 511 decay = batStat 'decay';
511 512 })
512 513
................................................................................
540 541 -- chips --
541 542 -----------
542 543
543 544 E.sw = {}
544 545 function E.sw.findSchematicFor(item)
545 546 local id = ItemStack(item):get_name()
546 547 local fm = minetest.registered_items[id]._starlit
547 - if not (fm and fm.fab and fm.fab.reverseEngineer) then return nil end
548 - local id = fm.fab.reverseEngineer.sw
548 + if not (fm and fm.reverseEngineer) then return nil end
549 + local id = fm.reverseEngineer.sw
549 550 return id, starlit.item.sw.db[id]
550 551 end
551 552
552 553 E.chip = { file = {} }
553 554 do local T,G = lib.marshal.t, lib.marshal.g
554 555 -- love too reinvent unions from first principles
555 556 E.chip.data = G.struct {
................................................................................
612 613 elseif file.kind == 'note' then
613 614 local sz = 0x10 + #file.body.author
614 615 for _, e in pairs(file.body.entries) do
615 616 sz = sz + #e.title + #e.body + 0x10 -- header overhead
616 617 end
617 618 return sz
618 619 elseif file.kind == 'research' then
619 - local re = assert(minetest.registered_items[file.body.itemId]._starlit.fab.reverseEngineer)
620 + local re = assert(minetest.registered_items[file.body.itemId]._starlit.reverseEngineer)
620 621 return starlit.item.sw.db[re.sw].size * file.body.progress
621 622 elseif file.kind == 'sw' then
622 623 return starlit.item.sw.db[file.body.pgmId].size
623 624 elseif file.kind == 'genome' then
624 625 return 0 -- TODO
625 626 end
626 627 end
................................................................................
853 854 }
854 855 local n = 0
855 856 for _, e in pairs(chips) do
856 857 n = n + 1
857 858 if not e:is_empty() then
858 859 local ch = e:get_definition()._starlit.chip
859 860 c.cycles = c.cycles + ch.clockRate
860 - c.ram = c.ram + ch.clockRate
861 + c.ram = c.ram + ch.ram
861 862 c.flashFree = c.flashFree + E.chip.freeSpace(e)
862 863 c.powerEfficiency = c.powerEfficiency + ch.powerEfficiency
863 864 end
864 865 end
865 866 if n > 0 then c.powerEfficiency = c.powerEfficiency / n end
866 867 return c
867 868 end