Uranium enrichment via centrifuge
authorZefram <zefram@fysh.org>
Sun, 27 Jul 2014 01:48:08 +0000 (02:48 +0100)
committerZefram <zefram@fysh.org>
Mon, 28 Jul 2014 12:18:51 +0000 (13:18 +0100)
Replacing the extractor-based system, uranium to be used as reactor fuel
must now be enriched in stages using the centrifuge.  Uranium metal can
exist at 36 levels of fissile content, from 0.0% to 3.5% in steps of 0.1%.
One round of centrifuging splits two dust of a particular grade in to one
dust each of the two neighbouring grades.  Uranium of each grade can exist
as dust, ingot, and block, with all the regular metal processes to convert
between them.  Uranium from ore exists in lump form, and is 0.7% fissle.
The blocks are radioactive to a degree dependent on fissile content.
Thus the chemical refinement and processing of uranium now follows the
standard pattern for metals, and is orthogonal to isotopic enrichment.
Each form of uranium (dust, ingot, block) intentionally looks identical
regardless of fissile grade.

If technic_worldgen is used alone, it defines only one grade of uranium
(as before), but defines it in the regular metal pattern, with lump, ingot
produced by cooking lump, and block crafted from ingots.  It identifies
the metal only as "uranium".  The multiple grades of uranium are defined
by the technic mod, which identifies each grade as "N.N%-fissile
uranium".  The single grade that was registered by technic_worldgen
is redefined to be described specifically as "0.7%-fissile uranium".
For the redefinition to work, technic_worldgen must load before technic,
so technic now declares a dependency on technic_worldgen.

Each fuel rod is made from five 3.5%-fissile ingots, each of which in
turn requires one to start with five 0.7%-fissile dust, so each fuel rod
is now derived from 12.5 uranium lumps (or 25 if the lumps were first
cooked rather than being ground).  This replaces the 20 lumps required
by the former recipes.  After setting up and priming the centrifuge
cascade, enriching a full set of fuel for the reactor (six fuel rods)
takes 14700 centrifuge operations.  It's intended to be a practical
necessity to automate the centrifuge.  In the absence of EU upgrades
for the centrifuges, these operations consume 5.88e8 EU, about 0.97%
of the 6.048e10 EU that the fuel set will produce in the reactor.
The intent is that, in this respect as in others, operating a reactor
should carry a very high up-front cost, but ultimately be very profitable.

22 files changed:
technic/depends.txt
technic/items.lua
technic/legacy.lua
technic/locale/de.txt
technic/locale/es.txt
technic/locale/it.txt
technic/locale/template.txt
technic/machines/HV/nuclear_reactor.lua
technic/machines/register/centrifuge_recipes.lua
technic/machines/register/compressor_recipes.lua
technic/machines/register/extractor_recipes.lua
technic/machines/register/grinder_recipes.lua
technic/textures/technic_enriched_uranium.png [deleted file]
technic/textures/technic_uranium_dust.png [new file with mode: 0644]
technic/textures/technicx32/technic_uranium_dust.png [new file with mode: 0644]
technic_worldgen/crafts.lua
technic_worldgen/locale/de.txt
technic_worldgen/locale/template.txt
technic_worldgen/nodes.lua
technic_worldgen/textures/technic_uranium.png [deleted file]
technic_worldgen/textures/technic_uranium_ingot.png [new file with mode: 0644]
technic_worldgen/textures/technic_uranium_lump.png [new file with mode: 0644]

index eec4a14876de96e5ede0846521a9a811bbcfbe3b..c2671c5fdce7220bd5e6c87196894dcabfd41307 100644 (file)
@@ -1,5 +1,6 @@
 default
 pipeworks
+technic_worldgen
 bucket?
 mesecons_mvps?
 intllib?
index a9029470338a9c2550221351eb1ee3e0b09c305f..b974b95dbb39bc4188298a73360d2fcf91abb2ef 100644 (file)
@@ -11,11 +11,6 @@ minetest.register_craftitem( "technic:doped_silicon_wafer", {
        inventory_image = "technic_doped_silicon_wafer.png",
 })
 
-minetest.register_craftitem("technic:enriched_uranium", {
-       description = S("Enriched Uranium"),
-       inventory_image = "technic_enriched_uranium.png",
-})
-
 minetest.register_craftitem("technic:uranium_fuel", {
        description = S("Uranium Fuel"),
        inventory_image = "technic_uranium_fuel.png",
@@ -163,3 +158,37 @@ minetest.register_node("technic:machine_casing", {
        tiles = {"technic_machine_casing.png"},
        sounds = default.node_sound_stone_defaults(),
 })
+
+for p = 0, 35 do
+       local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
+       local psuffix = p == 7 and "" or p
+       local ingot = "technic:uranium"..psuffix.."_ingot"
+       local block = "technic:uranium"..psuffix.."_block"
+       local ov = p == 7 and minetest.override_item or nil;
+       (ov or minetest.register_craftitem)(ingot, {
+               description = string.format(S("%.1f%%-Fissile Uranium Ingot"), p/10),
+               inventory_image = "technic_uranium_ingot.png",
+               groups = {uranium_ingot=1, not_in_creative_inventory=nici},
+       });
+       (ov or minetest.register_node)(block, {
+               description = string.format(S("%.1f%%-Fissile Uranium Block"), p/10),
+               tiles = {"technic_uranium_block.png"},
+               is_ground_content = true,
+               groups = {uranium_block=1, not_in_creative_inventory=nici, cracky=1, level=2, radioactive=math.floor(math.sqrt(p) + 0.5)},
+               sounds = default.node_sound_stone_defaults(),
+       });
+       if not ov then
+               minetest.register_craft({
+                       output = block,
+                       recipe = {
+                               {ingot, ingot, ingot},
+                               {ingot, ingot, ingot},
+                               {ingot, ingot, ingot},
+                       },
+               })
+               minetest.register_craft({
+                       output = ingot.." 9",
+                       recipe = {{block}},
+               })
+       end
+end
index c8359371eb279bfc42ecbcaacdd39155f5229988..8360a71040492249668500bfcfb2a2b20c5e2a9c 100644 (file)
@@ -29,6 +29,7 @@ technic.legacy_nodenames = {
        ["technic:generator"]        = "technic:lv_generator",
        ["technic:generator_active"] = "technic:lv_generator_active",
        ["technic:iron_dust"] = "technic:wrought_iron_dust",
+       ["technic:enriched_uranium"] = "technic:uranium35_ingot",
 }
 
 for old, new in pairs(technic.legacy_nodenames) do
index 984296ba9edec72a9f71df653390ad138e59673d..1a1e82a5557b3a5107984b7787fe935bc68e32a9 100644 (file)
@@ -29,6 +29,8 @@ Graphite = Graphit
 Carbon Cloth = Kohlefasergewebe
 Raw Latex = Rohlatex
 Rubber Fiber = Gummifaser
+%.1f%%-Fissile Uranium Ingot =
+%.1f%%-Fissile Uranium Block =
 
 ## Machine misc
 Machine cannot be removed because it is not empty = Die Maschine kann nicht entfernt werden, weil sie noch nicht leer ist.
@@ -162,6 +164,7 @@ Talinite = Talinite
 Tin = Zinn
 Wrought Iron = Schmiedeeisen
 Zinc = Zink
+%.1f%%-Fissile Uranium =
 
 ## Tools
 RE Battery = Akkubatterie
index 2323abc478de19f5de59ed8face1abd1cc014090..9d58ebded64044e5c4b88658fffc62682260c55e 100644 (file)
@@ -29,6 +29,8 @@ Graphite = Grafito
 Carbon Cloth = Tela de Carbon
 Raw Latex = Latex Crudo
 Rubber Fiber = Fibra de Hule
+%.1f%%-Fissile Uranium Ingot =
+%.1f%%-Fissile Uranium Block =
 
 ## Machine misc
 Machine cannot be removed because it is not empty = La maquina no puede removerse porque no esta vacia
@@ -152,6 +154,7 @@ Talinite = Talinita
 Tin = Estanio
 Wrought Iron = Hierro Forjado
 Zinc = Zinc
+%.1f%%-Fissile Uranium =
 
 ## Tools
 RE Battery =
index 70da24eafc70005f7c05cabe83610b84d209b62c..234a858a868877d3af6244efaaf4ae55a0afd2b2 100644 (file)
@@ -26,6 +26,8 @@ Graphite = Lastra in graffite
 Carbon Cloth = Fibra di carbonio
 Raw Latex = Latex grezzo
 Rubber Fiber = Fibra di gomma
+%.1f%%-Fissile Uranium Ingot =
+%.1f%%-Fissile Uranium Block =
 
 ## Machine misc
 Machine cannot be removed because it is not empty = La macchina non può essere rimossa perchè non è vuota
@@ -159,6 +161,7 @@ Talinite = Talinite
 Tin = Stagno
 Wrought Iron = Ferro Battuto
 Zinc = Zinco
+%.1f%%-Fissile Uranium =
 
 ## Tools
 RE Battery =
index 3d18f3b567e8b29abd040f09a2b23a3d2d7828b3..0d4797485224e789039f6a2dd6e1270918e8ffa4 100644 (file)
@@ -29,6 +29,8 @@ Graphite =
 Carbon Cloth =
 Raw Latex =
 Rubber Fiber =
+%.1f%%-Fissile Uranium Ingot =
+%.1f%%-Fissile Uranium Block =
 
 ## Machine misc
 Machine cannot be removed because it is not empty =
@@ -167,6 +169,7 @@ Talinite =
 Tin =
 Wrought Iron =
 Zinc =
+%.1f%%-Fissile Uranium =
 
 ## Tools
 RE Battery =
index e5d7a1bf71dbe120414e37ca4818eb0bfe62b6d9..c4587bbae55c56ed5d54c049f6c4251710ebef61 100644 (file)
@@ -493,7 +493,6 @@ local default_radiation_resistance_per_node = {
        ["technic:mineral_uranium"] = 71,
        ["technic:mineral_zinc"] = 19,
        ["technic:stainless_steel_block"] = 40,
-       ["technic:uranium_block"] = 500,
        ["technic:zinc_block"] = 36,
        ["tnt:tnt"] = 11,
        ["tnt:tnt_burning"] = 11,
@@ -501,6 +500,7 @@ local default_radiation_resistance_per_node = {
 local default_radiation_resistance_per_group = {
        concrete = 16,
        tree = 3.4,
+       uranium_block = 500,
        wood = 1.7,
 }
 local cache_radiation_resistance = {}
index 0f33c66d7616d0be0f3d7606f808cb6f70d689da..7f252b63a1a12656a182fb5351b3c9b54daa8931 100644 (file)
@@ -20,6 +20,21 @@ local recipes = {
        { "moretrees:rubber_tree_trunk",       rubber_tree_planks.." 4",      "technic:raw_latex"     },
 }
 
+-- Refining uranium via centrifuge is intended to make it a practical
+-- necessity to set up an automated cascade of centrifuges.  Once the
+-- cascade has been primed, production of one 3.5%-fissile dust requires
+-- input of five 0.7%-fissile dust and 490 centrifuge operations, and
+-- produces four 0.0%-fissile dust as a byproduct.  The busiest stage
+-- of the cascade is the one taking 0.7%-fissile dust, which performs 28
+-- of the 490 operations.  The least busy is the one taking 3.4%-fissile
+-- dust, which performs 1 of the 490 operations.
+local function uranium_dust(p)
+       return "technic:uranium"..(p == 7 and "" or p).."_dust"
+end
+for p = 1, 34 do
+       table.insert(recipes, { uranium_dust(p).." 2", uranium_dust(p-1), uranium_dust(p+1) })
+end
+
 if minetest.get_modpath("bushes_classic") then
        for _, berry in ipairs({ "blackberry", "blueberry", "gooseberry", "raspberry", "strawberry" }) do
                table.insert(recipes, { "bushes:"..berry.."_bush", "default:stick 20", "bushes:"..berry.." 4" })
index 5c5fe9190ac4c8cceb7c9ec9e762c4e3c3f47ceb..4fba03bb941518fd0867ebb2d1248328ec7c88d2 100644 (file)
@@ -15,7 +15,7 @@ local recipes = {
        {"default:copper_ingot 5",     "technic:copper_plate"},
        {"technic:coal_dust 4",        "technic:graphite"},
        {"technic:carbon_cloth",       "technic:carbon_plate"},
-       {"technic:enriched_uranium 4", "technic:uranium_fuel"},
+       {"technic:uranium35_ingot 5",  "technic:uranium_fuel"},
 }
 
 for _, data in pairs(recipes) do
index 41cf56d53a1a06efa1e4590c973302c11d6fb517..f7521449bb07c9c1b58afc8e2974cdf175076725 100644 (file)
@@ -24,9 +24,6 @@ local recipes = {
        {"technic:raw_latex",                 "technic:rubber 3"},
        {"moretrees:rubber_tree_trunk_empty", "technic:rubber"},
        {"moretrees:rubber_tree_trunk",       "technic:rubber"},
-       
-       -- Other
-       {"technic:uranium 5",                 "technic:enriched_uranium"},
 }
 
 for _, data in pairs(recipes) do
index df696656b1a253b26b6e16dd99f6c42400768d52..6ab19e72058c2e2f35b6565d495793cea34eb06b 100644 (file)
@@ -16,6 +16,7 @@ local recipes = {
        {"default:gold_lump",       "technic:gold_dust 2"},
        {"default:iron_lump",       "technic:wrought_iron_dust 2"},
        {"technic:chromium_lump",   "technic:chromium_dust 2"},
+       {"technic:uranium_lump",    "technic:uranium_dust 2"},
        {"technic:zinc_lump",       "technic:zinc_dust 2"},
        
        -- Other
@@ -87,6 +88,41 @@ if minetest.get_modpath("gloopores") or minetest.get_modpath("glooptest") then
        register_dust("Talinite",        "glooptest:talinite_ingot")
 end
 
+for p = 0, 35 do
+       local nici = (p ~= 0 and p ~= 7 and p ~= 35) and 1 or nil
+       local psuffix = p == 7 and "" or p
+       local ingot = "technic:uranium"..psuffix.."_ingot"
+       local dust = "technic:uranium"..psuffix.."_dust"
+       minetest.register_craftitem(dust, {
+               description = S("%s Dust"):format(string.format(S("%.1f%%-Fissile Uranium"), p/10)),
+               inventory_image = "technic_uranium_dust.png",
+               on_place_on_ground = minetest.craftitem_place_item,
+               groups = {uranium_dust=1, not_in_creative_inventory=nici},
+       })
+       minetest.register_craft({
+               type = "cooking",
+               recipe = dust,
+               output = ingot,
+       })
+       technic.register_grinder_recipe({ input = {ingot}, output = dust })
+end
+
+local function uranium_dust(p)
+       return "technic:uranium"..(p == 7 and "" or p).."_dust"
+end
+for pa = 0, 34 do
+       for pb = pa+1, 35 do
+               local pc = (pa+pb)/2
+               if pc == math.floor(pc) then
+                       minetest.register_craft({
+                               type = "shapeless",
+                               recipe = { uranium_dust(pa), uranium_dust(pb) },
+                               output = uranium_dust(pc).." 2",
+                       })
+               end
+       end
+end
+
 minetest.register_craft({
        type = "fuel",
        recipe = "technic:coal_dust",
diff --git a/technic/textures/technic_enriched_uranium.png b/technic/textures/technic_enriched_uranium.png
deleted file mode 100644 (file)
index 8759e65..0000000
Binary files a/technic/textures/technic_enriched_uranium.png and /dev/null differ
diff --git a/technic/textures/technic_uranium_dust.png b/technic/textures/technic_uranium_dust.png
new file mode 100644 (file)
index 0000000..9c211dc
Binary files /dev/null and b/technic/textures/technic_uranium_dust.png differ
diff --git a/technic/textures/technicx32/technic_uranium_dust.png b/technic/textures/technicx32/technic_uranium_dust.png
new file mode 100644 (file)
index 0000000..d8095c3
Binary files /dev/null and b/technic/textures/technicx32/technic_uranium_dust.png differ
index 759d8edcb3d05caab9ead063a7bf15e69b12b6ea..39652586321c467d8d11f4b627ca5fe4f0e42fce 100644 (file)
@@ -1,11 +1,19 @@
 
 local S = technic.worldgen.gettext
 
-minetest.register_craftitem(":technic:uranium", {
-       description = S("Uranium"),
-       inventory_image = "technic_uranium.png",
+minetest.register_craftitem(":technic:uranium_lump", {
+       description = S("Uranium Lump"),
+       inventory_image = "technic_uranium_lump.png",
        on_place_on_ground = minetest.craftitem_place_item,
 })
+minetest.register_alias("technic:uranium", "technic:uranium_lump")
+
+minetest.register_craftitem(":technic:uranium_ingot", {
+       description = S("Uranium Ingot"),
+       inventory_image = "technic_uranium_ingot.png",
+       on_place_on_ground = minetest.craftitem_place_item,
+       groups = {uranium_ingot=1},
+})
 
 minetest.register_craftitem(":technic:chromium_lump", {
        description = S("Chromium Lump"),
@@ -74,7 +82,7 @@ local function register_block(block, ingot)
        })
 end
 
-register_block("technic:uranium_block", "technic:uranium")
+register_block("technic:uranium_block", "technic:uranium_ingot")
 register_block("technic:chromium_block", "technic:chromium_ingot")
 register_block("technic:zinc_block", "technic:zinc_ingot")
 register_block("technic:brass_block", "technic:brass_ingot")
@@ -94,6 +102,12 @@ minetest.register_craft({
        output = "technic:chromium_ingot",
 })
 
+minetest.register_craft({
+       type = 'cooking',
+       recipe = "technic:uranium_lump",
+       output = "technic:uranium_ingot",
+})
+
 minetest.register_craft({
        type = 'cooking',
        recipe = minetest.registered_aliases["technic:wrought_iron_ingot"],
index 1dacb41b28968cac35f7bdb4f40a329b1f97ed68..401c94c5495ac46ecbe8dff697619b26ffbcfb84 100644 (file)
@@ -3,7 +3,8 @@
 # by Xanthin
 
 ## crafts.lua
-Uranium = Uran
+Uranium Lump = Uranklumpen
+Uranium Ingot = Uranbarren
 Chromium Lump = Chromklumpen
 Chromium Ingot = Chrombarren
 Zinc Lump = Zinkklumpen
index a4a6e4d2aa9a64a2429ac57e878f92eba00529a1..594e0ce72e4e8235e21c01c7d8591f669ce6f889 100644 (file)
@@ -2,7 +2,8 @@
 # technic_worldgen translation template
 
 ###crafts.lua
-Uranium = 
+Uranium Lump = 
+Uranium Ingot = 
 Chromium Lump = 
 Chromium Ingot = 
 Zinc Lump = 
index 29ea5fb558df1354f1eccfaf535610ba75fc296c..20cf159fa31fef92af45db46f38a012ee8edcc2c 100644 (file)
@@ -7,7 +7,7 @@ minetest.register_node( ":technic:mineral_uranium", {
        is_ground_content = true,
        groups = {cracky=3, radioactive=1},
        sounds = default.node_sound_stone_defaults(),
-       drop = 'craft "technic:uranium" 1',
+       drop = 'craft "technic:uranium_lump" 1',
 }) 
 
 minetest.register_node( ":technic:mineral_chromium", {
@@ -56,7 +56,7 @@ minetest.register_node(":technic:uranium_block", {
        description = S("Uranium Block"),
        tiles = { "technic_uranium_block.png" },
        is_ground_content = true,
-       groups = {cracky=1, level=2, radioactive=3},
+       groups = {uranium_block=1, cracky=1, level=2, radioactive=3},
        sounds = default.node_sound_stone_defaults()
 })
 
diff --git a/technic_worldgen/textures/technic_uranium.png b/technic_worldgen/textures/technic_uranium.png
deleted file mode 100644 (file)
index 2f5a66c..0000000
Binary files a/technic_worldgen/textures/technic_uranium.png and /dev/null differ
diff --git a/technic_worldgen/textures/technic_uranium_ingot.png b/technic_worldgen/textures/technic_uranium_ingot.png
new file mode 100644 (file)
index 0000000..38978f8
Binary files /dev/null and b/technic_worldgen/textures/technic_uranium_ingot.png differ
diff --git a/technic_worldgen/textures/technic_uranium_lump.png b/technic_worldgen/textures/technic_uranium_lump.png
new file mode 100644 (file)
index 0000000..2f5a66c
Binary files /dev/null and b/technic_worldgen/textures/technic_uranium_lump.png differ