Skip to content

Latest commit

 

History

History
4254 lines (3674 loc) · 227 KB

pfaa.org

File metadata and controls

4254 lines (3674 loc) · 227 KB

Per Fabrica ad Astra: Through craft, to the stars

Goal

Add more realistic and educational aspects to the Minecraft experience. We want to teach science (geology, physics, chemistry, biology, …), math, statistics and engineering (algorithms).

Premise

Extraction and Chemistry

The basic idea is to add many realistic raw materials to the world and then allow the player to mine them and perform chemistry with them to make useful things, including with machines and items from other mods.

Star travel

A relatively advanced player will be capable of building a spaceship, in order to seek out resources on other planets. All items must be discarded prior to launch, due to weight limitations. The player first must colonize the moon. Colonization would initially involve programming of robots to perform most tasks. A progressively larger network/system of domes would be constructed, with a livable atmosphere. Eventually, an interplanetary ship would be constructed in low gravity. Then there is a choice to go towards the sun (Venus, then Mercury) or away (towards Mars). Once on Mars (or Venus) the player must colonize and harvest enough food to make the next jump. From Mars, the player travels to Ganymede (or back to Earth). From Ganymede, the player must build a smaller ship to visit other moons of Jupiter. Or refuel the interplanetary ship and fly to Titan. The player may visit other notable moons of Saturn. Eventually, the player has colonized all planets and notable moons and obtained a resource unique to each. By combining those resources, the player may build an interstellar ship and begins traveling to known exoplanets or psuedo-randomly generated moons. We might also require the user to construct special sensor stations on every planet in order to triangulate the position of the exoplanet. As an alternative to travel, the player may decide to settle down and terraform.

Concepts

Science

Physics

Most of the physics concepts will enter through chemistry. Some of the key concepts would be:

  • Mechanics
  • Thermodynamics
  • Light
  • Electricity and magnetism

Overall, these concepts seem too low-level to easily introduce directly.

Chemistry

This seems like the right level, and is most directly applicable when it comes to mining and crafting things from mined material. This would extend from inorganic to organic chemistry, and even on to some simple biochemistry.

Reactions

Mined materials will be modeled as chemical compounds, and those can then be converted into other compounds using reaction chambers. Initially, technology will only allow the simplest of chambers, such as cauldrons and stills. Eventually, there are BuildCraft machines. Different chambers will carry out different types of reactions. Reaction rates will depend on the free energy. This of course depends on the temperature and pressure.

Knowledge

How to model chemical knowledge? How does the player “learn” that a particuar reaction is possible? The periodic table represents the fundamental knowledge of chemistry, and it is also discrete, so conveniently breaks down into units of achievement. For every mineral or other compound, the player performs a number of simple assays and eventually discovers an element. Once all elements in a particular compound are known, the chemical formula and other information (depending on the general level of technology/knowledge) are revealed. This information includes some subset of the recipes including that compound, as long as the technology exists to achieve the recipe, and all compounds in the reaction are known.

Elements are discovered by solving a puzzle that is roughly inspired by how the element was discovered according to history. The book of the elements will convey hints.

The Book of Elements slowly reveals those secrets. It is created by sending a book into a 1x1 portal and having it reappear as the Book of Elements. This is to simulate a trip to the future.

Biology

High-level biological concepts like plant growth, ecology, etc, are already modeled in the game. Perhaps those models could be improved. The low-level concepts like molecular biology would be too complex to model outside of simple e.g. bacterial systems. Genetics is a real possibility. The bees and tree-breeding of Forestry are a good example.

Engineering

Most of Minecraft could be construed as civil engineering. Some disciplines that might need more attention:

Mechanical

Would require much better physical modeling. This would be tough.

Aerospace

Like mechnical, requires more physical modeling.

Chemical

This comes about naturally by constructing the machines necessary to carry out chemistry (see that section).

Electrical

Already exists to some extent with red stone cicuits. Good enough.

Computer Science

The key direction would be robotics. ComputerCraft already offers that, and we should integrate with it.

Economics/trade

Production is motivated by the economy, and trade would enhance gameplay by encouraging specialization, investment in transportation, etc. To drive tade, we need a non-uniform distribution of resources. This means that minerals should be concentrated in large but infrequent deposits and limited to particular biomes. Crops should be biome-specific. Geologica has achieved this for minerals, but it is still possible to farm crops in any biome. But the villages could be constrained to only produce the appropriate crops (like Millenaire).

History

In terms of the history of the Earth, Minecraft is situated somewhere in the agricultural age, with some industrial aspects. The technical mods place the game firmly in the industrial age. The Millenaire mod brings real world cultures to Minecraft, although these are limited to those of the Middle Ages. We could extend Millenaire to model the industrial age. We could also target pre-human time periods, such as the age of the dinosaurs. This would mostly require a mod in the vein of ExtraBiomes and Mo’ Creatures that presents prehistoric flora and fauna. That would be fun, but the artwork would be challenging. The wildlife would be located in separate dimensions, perhaps accessible through Mystcraft.

In the next sections, we have started outlining the main periods of history. It is not clear whether this will generate interesting gameplay; what would the different plants and animals offer compared to the existing game? Perhaps we should focus on recent (human) history and work our way backwards.

Mesozoic: Age of Reptiles

Triassic

Hot and dry, with no ice, jungle or swamp biomes. Instead, more deserts, plains and temperate forests.

Jurassic

Cretaceous

Cenozoic: Age of Mammals

Paleocene

Eocene

Oligocene

Miocene

Pliocene

Modern Era

Modern Age (1900-now)

Age of Empires (1500-1900)

Middle Ages (600-1500)

This is the setting of base Millenaire. Important cultures missed by Millenaire:

  • Pueblos
  • Mississippians
  • Arabs
  • Chinese (Song)
  • Korean

Classical Age (700 BC - 600 AD)

Like the roman empire…

Agriculture

We could add some aspects to agriculture:

Aquaculture

  • Kelp

Feces

Cows and pigs and other animals could be made to poop. Uses of poop:

  • Fertilizer
  • Fuel
  • Tanning (dog or pigeon)
  • Cement for adobe bricks

Genetics ideas

There is a need to genetically engineer crops. This is way more realistic and relevant than bee and tree breeding.

Here is a phylogenetic resource: http://botanistinthekitchen.wordpress.com/the-plant-food-tree-of-life/phylogenetic-tree-view/

List of crops: http://en.wikipedia.org/wiki/List_of_domesticated_plants

Wild relatives (where to find them): http://en.wikipedia.org/wiki/Crop_wild_relative http://en.wikipedia.org/wiki/Center_of_origin

The main idea is to follow a phylogenetic tree. The player obtains some basic crops (maybe the vanilla ones, or foods found in the wild) in the world. There are two main ways of determining phylogenetic relationships: ultrastructure (comparing structure with electron microscope) and molecular sequence comparison. We focus on the latter for now.

Somehow the player analyzes the genome of two crops and then enters a mini-game dimension which involves aligning two sequences, where the bases are blocks. An alignment tool (with durability) held by the player shifts blocks around. Obviously, the more closely related the species, the easier it is to align them. Depending on the quality of the alignment, the common ancestor is more or less well known. The better known, the more options for evolving that ancestor to other species, and the easier it is to find its ancestor. Species might evolve in two ways: cross-breeding and mutations. Cross-breeding is something like Forestry. Mutation is a mini-game dimension where the goal is to change a DNA sequence to a target protein. One block per amino acid, with the target sequence on top of the source. Each block would be visually partitioned into the three bases. The player uses a mutagenesis tool (light, chemical, etc) to convert the bases. Each mutation costs some amount of resources, either through direct consumption or tool durability. Transitions should be cheaper than transversions. One has to figure out the cheapest path, given the genetic code.

It may be that the molecular manipulations are too complex. Instead, we could start with something bee-driven in the way of Forestry trees. In fact, we could adopt the Forestry mechanism entirely. It is reasonably derived from Mendelian inheritance. Hybrids between related species will represent the common ancestor, and mutations can form to one of the other descendents. The less related the two species, the less likely for them to breed.

This design requires that we have a sufficient diversity of wild edible plants. These could be wild forms of the crops (which in the real world are highly localized) and/or the set of widespread wild edible plants. Or we just take the vanilla set. If we take the wild crop path (along the lines of PHC bushes), then there is really no need for breeding, unless some wild crops are omitted. Then we have the question of which to omit, and the the wild crops would need to be very rare for the sake of realism. Tracking down rare crops might not be much fun, although people do it for bees. The alternative, generating realistic edible plants, is more interesting: it introduces unconventional (at least for this part of the world) foods and makes the world richer. Call it ForageCraft or WildCraft.

Here is a list of what might be found in the wild:

PlantPhylogeneticsModBiomeValueUseNotes
BerriesNat,PHC,BOPTemperate2Eat fruit
MushroomsVanilla--Eat whole
Dandelionsasterid/asteralesVanilla-1Eat; white juice as glue
Acacia treerosid/fabaceaeBOP,Forestry-1Eat leaves
Agavemonocot/asparagalesDesert1Eat, stringBOP has inedible bromeliad
Alfalfa
Almond treerosid/rosaceae/prunusETTropics, desert, evergreen scrub3Eat nuts
Amaranth (Pigweed)caryophyllales/amaranthaceaeWidespread1Eat leaves, seedsWeed
Arctic willowrosid/malpighialesTundra1Eat raw shoots
Arrowrootmonocot/zingiberalesTropical3Boil roots
AsparagusPHCTemperate2Boil stems
BaelHills and plains, forests2Eat fruit
BambooBOP,PHCMoist, tropical2Eat shoots
BananaPHC,ETTropics3Eat fruit
Baobab treeForestrySavanna2Eat roots, fruit, stringForestry has no fruit
Batoko plumRainforest2Eat fruit (best as jam)
BearberryArctic2Eat fruitSimilar: cloud berry
BeechETForest3Eat nuts
Bignay treerosid/malpighialesRainforest2Eat fruit
Breadfruit treerosid/rosaceae/moraceaeTropics, forest2Cook fruit; sap is glue, pulp paper
BurdockTemperate2Boil roots
Canna (lily)monocot/zingiberalesTropical2Eat roots; string, seeds purple dye
Cashew treerosid/sapindales/…Tropical3Eat nuts
Cattailsmonocot/poalesBOP-2Eat shoots; weaving
Cactus fruitcaryophyllales/cactaceaePHCDesert2Eat fruit
Chestnut treerosid/fagalesForestryForest3Roast nutsForestry not edible
ChicoryPlains1Eat
ChickweedTemperate fields1Eat leaves
ChufaMoist sandy2Eat; oil from tuber
CloverBOP-1Boil to eat
CoconutBeach3Eat; string
CrowberryTundra2Eat fruit
Date PalmDesert1Eat fruit; weaving
DaylilyTropic, temperate2Eat roots
Desert parsleyDesert1Eat roots
Elderberry treeETSwamps2Eat fruit
FireweedTemperate plains, arctic1Eat all
Fishtail PalmWarm/moist mountains3Eat juice from top
Ginsengasterid/apialesForest (hills)0No food value, but medicinal buffs?
Hawthorn bushTemperate2Eat fruit (apple)
Hazelnut treeETTemperate, outside forests3Eat nuts
Horseradish treeTropical forests1Eat leaves, roast seeds
Iceland mossArctic1Eat whole
Indian potatoTemperate3Better cookedA wild potato?
Jerusalem artichokeTemperate2Eat rootsLooks like sunflower
JewelweedMountain woods2Eat stems
JuniperDry temperate1Eat berries
Kudzu vinesTropical forests2Every partMany uses, ways to eat
KumquatETTropical forests2Eat fruit
LotusRiver3Cook roots
MalangaTropical plains3Cook roots
Mango treePHCMoist tropics3Eat fruit
ManiocTropical3Cook roots
Marsh marigoldSwamp, arctic1Cook it
Maypop vinerosid/malpighialesRiver bank, thicket, pasture2Eat fruit
Mulberry treeForest; string2Eat fruit
NettleMoist temperate3Eat shoots, leavesDamage, unless cooked
Nipa PalmMangrove3Eat fruit on top; sugar-rich sap
Oakvanilla-0Acorn (from ET) flour, bark tanning
Oliveasterid/lamialesETDry coastal1Eat fruit; oil
OrachBeach1Eat entire plant
PapayaPHCRainforest3Eat fruit
PersimmonPHCForest3Eat fruit
PineBOP-1Eat various parts; sap as glue
PlantainET-2Eat fruit
ReedBOPSwamp1Eat anything
Rose AppleTropical forests2-3Eat like an apple, but tropical!
Saskatoon berryLow altitude mountain terrain2Eat fruit
SaxaulDesert-Water from bark
Sea OrachTropical scrub, steppe, desert1Eat leaves
SicklepodFields (weed)1Eat leaves, meat substituteTea is medicinal
(Wild) SorghumPlains-Use as wheat substitute
Sterculia treeTropical forest2Eat seed pods
StonecropTemperate1Eat leaves
SugarcaneVanilla-1Eat raw
SunflowerVanilla-1Eat seeds
Sweetsop treeTropical forest2Eat fruit
Tamarind treeDrier tropics2Eat fruit
TaroTropical fields3Cook roots
TiTropical forest3Cook roots; rope, weaving
Tropical almondTropical forest, beach3Eat seeds
WalnutForestry, PHCForest3Eat nuts
Water chestnutRiver2Eat fruit
Water lillyVanillaRivers/swamps2Eat all, fruit
Water plantainRivers3Cook roots
Wild appleVanilla-2-3Fruit
Wild caperDry scrub, desert2Eat fruit
Wild carrotBOP-?Eat tuber
Wild desert gourdDesert2Eat seeds from gourd
Wild sorrelFields1Eat leaves
Wild figPHCTropical forest2Eat fruit
Wild gourdRainforest2Boil fruit
Wild grapeForest2Eat fruit
Wild mintasterid/lamiales
Wild onion/garlicPHCPlains2Eat bulbsAlso, ginger
Wild pistachioDesert, scrub, evergreen forests3Cook nuts
Wild ricePHCTropical2Eat rice
Wild roseVanilla-1Eat flower
Winged BeanTropical plains2Eat beans (2), tuber (4)
Wooly lousewortTundra2Eat steam after steaming
YamTropical, coniferous forests3Boil root
Yam beanTropical3Eat tuber, better boiled

Hunger key: 1 :: Refills 0.5 shank 2 :: Refills 1.5 shanks 3 :: Refills 3 shanks (like bread) 4 :: Refills 4 shanks, high saturation (like steak)

These are wild plants; not cultivatable. Trees do not yield saplings, plants do not yield seeds, but they can be replanted directly. Breeding is the only means of reproduction and can lead to cultivation, through mutation. The breeding needs to integrate with existing tree breeding in Forestry and Extra Trees. The mutation (speciation) probabilities depend on phylogenetic tree.

Mod integration: if a mod like ET is loaded, we should use the blocks from that mod. We could require certain mods, but it would be nice to be functional independently. Obviously, breeding will depend on Forestry.

Currently about 80 plants. Proposals for simplification:

  • Have one palm tree (+coconut); BOP already has them
  • Have one type of wild herb (mint?), instead of all herbs.

These already exist wild from PHC (? are questionable):

  • Berries (and BOP, Natura, etc)
  • Bamboo shoots
  • Cactus fruit
  • Grapes
  • ?Kiwi
  • ?Rhubarb
  • ?Rutabaga
  • Seaweed
  • Spice leaves
  • Sunflower
  • White mushrooms

Balanced diet

If we have lots of plants, then we have lots of food. To make things more interesting, we should encourage balanced diets. Use something like the food pyramid.

  • Grains: 25%
  • Vegetables: 25%
  • Fruits: 20%
  • Protein: 15%
  • Dairy: 15%
  • Sweets: temporary buff, long term detriment

Balanced diets give buffs, imbalanced have negative effects.

Adapting existing mods

PHC provides many interesting crops, and Forestry brings fun automation and breeding. Possible improvements:

  • PHC juices should be Forge fluids
  • PHC needs to be integrated with Forestry farms and machines
    • Farms
    • Squeezer
    • Fermenter
    • Breeding mechanism
  • PHC needs to be integrated with Thaumcraft essences
  • PHC bushes and seed spawning should be biome-dependent
  • PHC crops should have biome-specific growth rates (hunger overhaul)
  • PHC crops should show up in village fields
  • PHC tools should have durability
  • PHC drinks should require a glass bottle

Some of the recipe tweaks (durability, glass bottle), can be achieved with MineTweaker. http://minetweaker.powerofbytes.com/wiki

Blocks

Rocks

Generating terrain with multiple rock types, instead of simply stone, would make mining much more interesting. Not only would it add variety (and thus more creativity in construction), it would also help the player find ores, since ores would be specific to certain rock types. This idea is from TFC, but it also reflects the reality. COG might allow us to generate the rocks, in addition to the ores. It looks like the substitution pattern would work, but it would need a height restriction. Also, we would need restrictions on relative height (percentage of altitude).

There are three types of rock: igneous, sedimentary and metamorphic. The igneous rocks are either intrusive (magma) and extrusive (lava). A second axis is the silicate content, which decreases with felsic, intermediate, mafic and ultramafic. Sedimentary rocks are either clastic or (bio)chemical. The metamorphic rocks can be formed by a number of different processes: hydrothermal, contact, barrovian, blueschist, and eclogite. The last two are probably too deep for us to care about. Unless otherwise indicated, rocks are generated as layers. So far, we have 21 rock types. It would be good to reduce this to 16, just for simplicity. We will need two block IDs anyway, in order to model soft vs. hard rock.

RockClassHardOccursUse
GraniteIn/FelsichardVery common, below sed on landbuilding
DioriteIn/IntervhardBelow granitetools, carving
GabbroIn/MaficvhardBelow basalt/diorite (mtns, ocean)sulfide ores
PeridotiteIn/UMaficvhardRarely under gabbrosulfide ores
*SyeniteIn/alkahardrare granite mtns vein
CarbonatiteIn/alkasoftwith syeniteRE, Nb, Ta
*ApliteIn/quartzhardgranite, < diorite/gabbro vein
RhyoliteEx/FelsichardMountains, topNH4Cl crystal drop (0.01)
AndesiteEx/InterhardMountains, below rhyoliteNH4Cl crystal drop
BasaltEx/MafichardTop ocean, islandsNH4Cl crystal drop
*KomatiiteEx/UMafic-Too deepsulfide ores
MudstoneSedsoftOcean, beach, river, glaciers
*SiltstoneSedsoft
ClaystoneSedsoft
ConglomerateSedsoft
BrecciaMixturesoftLike above, plus b/w rock layers
LimestoneSedmedHillsCaCO3, smelt => CaO + CO2, white dye
SlateMM/barromedUnder mud/clay/siltstone
SchistMM/barromedUnder slate, sometimes igneous
GneissMM/barrohardUnder schist, sometimes igneous
GreenschistMM/barrohardMafic-associated schist
PegmatiteMM/hydrohardVeins, granite, plainsRE, Li, Be, Cs, etc
SerpentiniteMM/hydromedVeins, umafic, no soil, ocean floorNi laterite, talc, asbestos
HornfelsMM/contactvhardb/w granite and lime/dolo
SkarnMM/contactmedb/w granite and lime/dolo, hornfelsCu, Pb, Zn, Fe, Sn, Au, etc
MarbleMM/contacthardb/w granite and lime/doloCentrifuge for CaCO3
QuartziteMM/contactvhardsandstone
*Amphibolite

We could drop pegmatite and serpentinite, because they are already so enriched for minerals. Tough call. They do serve a purpose: indicating that ores are nearby.

Placement of the rocks during world generation will be complex. Lets focus first on the bottom layer, which will consist of rock formed by cooling magma, i.e., igneous intrusive rock. These intrusions form dikes as the magma rises, and sills where the magma is deposited. The differentiation occurs by two major processes: fractional crystallization (multiple layers crystallizing from molten rock) and partial melting (where only some of the minerals melt, rise due to lower density, and recrystallize). This follows the order of ultra-mafic, mafic, intermediate, felsic, from bottom to top. We consider only partial melting, for simplicity.

When the magma breaches the surface, we then have extrusive rocks with different crystallization (much more rapid cooling) but the same chemical compositions. The type of rock that emerges depends on how much the rock has cooled, and whether water is present.

Land masses are formed by plate convergence, which occurs at the interface of land and ocean. The oceans then are undergoing plate divergence. Under the ocean, ultra mafic rocks (peridotite) partially melt and rise quickly due to the divergence, and hit the ocean as mafic melts, forming basalt. The melts that fail to reach the surface form the intrusive mafic gabbro. In the case of plate convergence, mountains and volcanoes are formed. Since water from the ocean is brought down into the subduction zone, the melting points of the rocks are lowered and thus more silicate-rich melts (intermediate and felsic) emerge from partial melting. So volcanic islands in the ocean are largely basaltic, while the volcanoes above subduction zones yield rocks like rhyolite and (from mixing of the rhyolitic and mafic magma) andesite. The more water, the more silicate content, and the more violent the eruption.

With that in mind, the oceans are clear: peridotite (too low to include), gabbro, basalt and sediments (mudrock). The vast majority of the land mass is formed from silicate-rich magma that cools before it reaches the surface. This is largely granite. Above subduction zones, granite is pushed up into mountains, above some diorite, then gabbro. In areas outside of the mountains and oceans, the world will only reach down into diorite. We ignore komatiite, because its intrusions happened long ago and has largely metamorphed. We will assume that the extreme hills are a volcanic mountain range, and the ice mountains are a result of sedimentary and metamorphic rock being uplifted (crumpled) by subduction forces.

The generation of the rock layers depends on the biome. The table below attempts to specify the rock combinations for each biome. For simplicity, we group all types of mudrock (claystone, conglomerate, etc) into a single rock. Metamorphic rocks will be listed separately, as their formation will be randomized and replace specific rocks.

The layers are numbered from top (1) to bottom. The final layer should be about half the size of the others.

RockFFHDDHPSJJHEHROMMSIPIMTTHB
Limestone-+1-----+1------+1-+1-
Sedimetary11111111-11--1+2/1111
Granite2222222212---22222
Diorite3333333323---33333
Gabbro--------3-333-----
Rhyolite--------+2---------
Andesite--------+1--1------
Basalt----------2+1/21/2-----

Generation

In the table we list sedimentary as a general class including mudstone, claystone, siltstone, sandstone and limestone. A layer of mudrock will typically consist of a mixture of layers from these rocks. Claystone and siltstone are two ends of the mudstone spectrum. There is currently no “silt” in the game, and it would probably not add much, so we might have siltstone just drop dirt, or just get rid of it altogether. Then we have claystone=>clay, and conglomerate/breccia=>gravel when harvested. Clay is somewhat of a limiting resource in minecraft, so we should limit claystone distribution. The beach and desert will be largely sandstone. The ocean bottom will be limestone, and limestone could also dominate hill biomes. Outside of the hills, lets say 65% mudstone, 10% sandstone, 10% conglomerate/breccia, 10% limestone, and 5% claystone.

Breccia should replace much of the gravel at depth.

What about mudstone? It consists of a mixture of silt and clay. It could drop a mixture of clay and sand, or should that require further processing?

Now for metamorphosis.

Mudrock will convert to slate, and slate, along with igneous rocks, can follow the sequence to schist and gneiss. This is most likely to happen in the ice mountain biome, and to a lesser extent the hill biomes, since more pressure will be put on the rock. Slate replaces the top half of the sedimentary layer, schist replaces the top third of the igneous (granite) layer, and gneiss replaces the next third down. Rocks can exist without rocks earlier in the sequence, but having an earlier rock doubles the chance of having a later one.

With regard to contact metamorphism, hornfel and marble will sometimes replace the mudstone between the limestone hills and the underlying granite. The sandstone under the desert hills will sometimes become quartzite.

Serpentinite will occur anywhere an ultra-mafic intrusion might have occurred. We will say that this is in the bottom (diorite) layer, except maybe in the extreme hills and ocean, where serpentinite is common throughout the crust. If it contacts soil, the soil needs to be converted to lateritic soil, which does not support growth. Pegmatites occur in granite and gneiss. Both of these will be large, thick veins that contain many ores.

Grinding

Perhaps claystone, conglomerate, mudstone, etc all yield a type of “debris” that could be processed? The debris would be similar to gravel, but distinct from it. Or it could be a type of gravel, but then what of the existing gravel? Either way, the debris would act much like gravel/sand. Maybe just coarser than gravel. Then, we have the following grinding recipes (for the broken/loose form):

  • Andesite: sand + (10%) feldspar
  • Breccia: 2 gravel
  • Carbonatite: sand + (20%) CaO
  • Conglomerate: sand + gravel
  • Claystone: 2 clay dust, each hydrates to 4 clays
  • Diorite: sand + (10%) feldspar
  • Gabbro: sand + (20%) feldspar
  • Gneiss: sand + (10%) feldspar
  • Granite: sand + (10%) quartz
  • Greenschist: sand + (10%) chrysotile
  • Hornfels: sand + (20%) mica
  • Limestone: sand + (50%) CaCO3
  • Marble: sand + (100%) CaCO3
  • Mudstone: sand + clay dust
  • Pegmatite: feldspar + (50%) quartz
  • Peridotite: sand + (50%) olivine
  • Rhyolite: sand + (10%) quartz
  • Schist: sand + (20%) mica
  • Serpentinite: sand + (10%) chrysotile
  • Slate: sand + (10%) mica
  • Skarn: sand + (10%) wollastonite
  • Quartzite: 2 sand

Stone variants

How do we handle variants of stone? These include:

  • Moss stone (moss form of cobblestone)
  • Mossy stone brick
  • Chiseled stone brick
  • Cracked stone brick

Till now, we have considered these as special items found in the world (strongholds, temples, etc). Not as building materials. But what happens when:

  • Forestry moisterizer generates mossy stone/brick
  • Gregtech hammer cracks stone brick
  • Gregtech file chisels stone brick

For now, it seems we could add recipes targeting the vanilla variants. Adding custom chiseled or mossy stone would probably not be very attractive in general. And craked stone brick? In general, these seem to have limited utility.

Metal Ore Minerals

MineralMetalsStateHardProdFe:xSymbolOccursRoastSlagBlastCentrifugeAlt Use
Magnetite*Feoxidestrong1600shaftBIF, placer, LImagnets
Hematite*Feoxidestrong*BIFred dye
Limonite*Fe(Ni/Co)hydrox(clay)*junglejungle/swamp claybrown dye
Rock saltNa(K)saltweak263:1desertevaporite
Chalcopyrite*Cu(Mo/Co/Ag/Au/Pt)sulfidemedium-shaftVMS, SEDEX, porphyry
SphaleriteZn(Cd)sulfidemedium-shaftco-chalco, limestone
Galena*Pb(Ag)sulfideweak-co-chalco, limestonewireless comm
LepidoliteLi(+Cs/Rb)phyllomedium0.0536:1pegmatite
SpodumeneLisilicatestrong0.2012:1
DolomiteMgcarbomedium2713:2Clay-like, ocean and desert
MagnesiteMgcarbomedium183:1peridotite, serp, skarn, dolomite
RutileTioxide(sand)0.6granitic mineral sand
IlmeniteTi(Fe)oxidestrong56:1upper LI, sand
PentlanditeNi(Fe)sulfidemediumlower LI, Kambalda
GarnieriteNihydroxmediumserp
Cassiterite*Snoxidestrong-placer, granitic veins
[Wolframite]Woxidemedium-pegmatite
Scheelite*Woxidemedium-SEDEX/pegmatite
Cinnabar*Hgsulfideweak0.002100:1veins ocean basalt, volcanicred dye
Bauxite*Alhydrox(clay)1902:1lateritic depositsAl2O3
ChromiteFeCroxidestrong104:1serp, upper LI+Al/Si=>FeCr
ZirconZrsilicate(sand)1granitic mineral sands
StibniteSbsulfideweak-co-galena in hydroSbO3+Fe=> 1.5 SbSb
Monazite*Ce/La/Nd/Pr/Sm/Uphosph(sand)0.007granitic mineral sands
UraniniteUoxidestronggrind conglom/peg, veins granite/sed
BoraxBoxideweak3lake evaporites
PyrolusiteMnoxideweak20hydro, co-Feviolet glass
[Pollucite]Cs(Rb)silicatestrongpegmatite
BastnasiteCe(+La/Y)fluoritemediumpegmatite, carbonatite, bauxite
TantaliteTa(Nb)oxidestrong-carbonatiteNb
MolybdeniteMosulfideweak0.212:1porphyry1% Re
BariteBasulfatemedium7BIF, Pb/Zn limestone veins, carbonatite
BerylBevstrong0.005w/ scheelite
CelestineSrsulfatemedium18:1w/ gypsum, limestone
[Xenotime]Y/REphosph(sand), pegmatite

In terms of gameplay, there is a limit to the number of ores. The player might constantly encounter ores and have difficulty sorting them. Solutions would include having ores occur rarely, or deriving metals as the by-product of processing other ores. Both support technology tiers, as advanced machines could be required to process the more advanced metals. Currently, that is modeled by the type of pickaxe. The first has the advantage of making discovery more challenging, while the processing approach could encourage automation, because large amounts of ore will need to be processed. It also requires the player to make a decision about how an ore should be processed. Thus, it adds strategy. Ore discovery could also be made more stategic by making deposits depend on the rock type or having deposits co-occur (better dig into that iron because it might have manganese). Some mixture of the two is probably best, and certain metals could be obtained by both approaches.

By changing the ore distributions to such an extent, gameplay is greatly affected. For example, a quarry might only gather one or two types of ore. Perhaps all generation could occur in a Mystcraft age. There could be a symbol for each type of ore, and one for adding the new rocks. Modifiers would also be supported, but they would add instability. Obtaining each symbol would involve some challenge. Many could be found in mineshaft chests, temples or villages (possibly specific villages from Millenaire?). Need to wait for COG to support the new Mystcraft API.

TE has the induction smelter which allows for complex smelting (two inputs, and a primary/secondary output), and EIO has something similar. The Foundry mod will likely have interesting options.

See this as a way to prioritize: http://www.theodoregray.com/periodictable/Elements/PopularInCollections/index.html

Getting balance from production levels is complicated. The ore production levels are confounded with the purity of the ore, while the metal production may represent only a minor application of the ore. We are interested in potential metal production and want to assume that each ore block contains the same amount of metal, across all metal elements. Another assumption: each ore block is the same weight; i.e., they have different densities. We then normalize everything to iron for convenience.

Other Minerals

MineralOccursHardProdUseFormula
Aluniteveins in rhyolitemediumpastalum
Chrysotileserpentiniteweak2asbestos (fireproofing)
Dolomiteclay pattern, ocean and desertmedium-
Malachitelimestone w/ copper oresmediumpastcopper ore, green dye
Gypsumevaporite, limestoneweak140CaSO4
Garnetbeach/river sandweak (sand)blast cobble to smooth, tiny red garnet dust
Glauconiteocean/beachweakgrinding (romans), fertilizer
*Corundumschist,gneiss,marble,pegmatitevery strongrubies and emeralds
Diatomitesed EH/desertweak1.5
Flouritebp of galena/sphalerite/quartzmedium
Graphiteschist,gneiss (strata)weak1
Kyaniteschist,gneiss,quartzite,pegmatitemedium0.4
Soapstoneserpitinite,carbonates(lower)weak7
Olivinegrind peridotite-
Perliteembedded in veins of obsidianstrong0.15
Apatitemarble,pegmatite*strong150
Pumicevolcanic (globular)strong12
Soda ashlake evaporiteweak13
Mirabilitelake evaporiteweak2Na2SO4
Wollastonitelimestone, dolo, skarn (w/ sandstone)medium0.5ceramics,paint,plasticsCaSiO3
Zeolitelake-shaped deposits near volcanoesmedium3adsorption, others
Feldsparprocess pegmatite-20
Quartzprocess pegmatite
Muscovite/Micain pegmatite, process pegmatiteweak0.3fireproof, insulation, lubricant

This gives a total of 16 weak, 16 medium and 14 strong minerals. And one very strong (corundum), but we might model that as chance-dropped gems, instead of as a separate block. Technically, Beryl is very strong, although we have it set as strong for now.

Sands

Here are some sand types we could model:

TypeOccurrenceUse
Mineral sandbeach/riverplacer deposit (see above)
Garnetbeachabrasive
Volcanic ashextreme hillsabrasive
Quartzdesertabrasive, quartz
Cassiteritebeach/rivertin

Currently, we have different types of mineral sands. These need to be separated into minerals like rutile, zircon, magnetite, etc. This is usually done with electrostatic separation. About 70% of the sand is “trash”. For granitic sands, this means quartz (50%) magnetite (35%), kyanite (15%); for basaltic: garnet (40%), magnetite (35%), chromite (15%) and quartz (10%). The more valuable minerals in the remaining 30% are: ilmenite (50%), zircon (30%), rutile (15%), monazite (5%). Total mineral sand production is 4.8 million tonnes / yr, or about 6:1 with Fe. Basaltic sands will have more ilmenite, while granitic will have less (and thus more zircon, rutile and monazite). Maybe ilmenite (30%), zircon (40%), rutile (20%), monazite (10%). There is a chance drop of diamond from basaltic sands.

Summary:

Granitic
35% quartz, 25% magnetite, 5% kyanite, 10% zircon, 15% rutile, 5% ilmenite, 5% monazite
Basaltic
10% quartz, 35% garnet, 25% magnetite, 5% chromite, 15% ilmenite, 5% zircon, 5% rutile + diamond drop

Clays

TypeOccurrenceProdUse
BentoniteEH (from ash)9absorbent, waterproof
KaoliniteJungle37many
Fuller’s earthdesert (sediment)3
LateriteJungleeasy bricks
Yellow/Brown LimoniteLateriteFe ore, dye
BauxiteLateriteAl ore
Vermiculitecarbonatite, skarn, w/phlogopite0.5furnace, fireproof, fertilizer, cement, absorbent

Hot springs

Some percentage of the water source blocks near bedrock will be converted to hot springs, which are infinite steam sources. Buildcraft (or some other mod) has apparently already added springs (infinitely pumpable water sources); just need hot ones.

Brines

Brines are a source of many minerals. We could add these as liquid source blocks in sets that form little lakes/wells. The wasteland water could be considered brine.

Types:

Owens Lake
Borax, NaCl, Na2SO4
Midland
Br, CaCl2, I, MgCl2, KCl, NaCl
Searles Lake
Borax, LiCl, Li2CO3, Mg(OH)2, KCl, NaBr, Na2CO3, NaCl, NaF, Na2PO4, Na2SO4
Silver Peak
Li2CO3, KCl

Do we really want these four, somewhat arbitrary, types? Probably not. Just take the union. Chemical processing will separate.

List of chemicals/minerals:

  • Borax
  • NaCl (halite)
  • NaBr
  • NaF
  • Na2CO3 (soda ash)
  • Na2SO4 (salt cake, mirabilite when hydrous)
  • Na3PO4
  • LiCl
  • Li2CO3 (also from spodumene)
  • KCl (sylvite)
  • MgCl2
  • Mg(OH)2
  • CaCl2
  • Bromine
  • Iodine

Only the ones in bold are commericially extracted.

Sea water

There are many minerals in sea water. But how to model those? We cannot replace the blocks, because that would break other mods. One could attempt to trace pipes back to the sea, but it would be brittle. Imagine an aqueous accumulator that is accumulating sea water; no other machines, like the liquid transposer, know that it is brine. There is a liquids API in forge now, so in theory things could be abstracted, but there is no way to create a new “subclass” of water. It is either water or brine. So maybe we just need to create brine wells/springs. Otherwise, the processing would need to be very slow, because water is so plentiful. Ensure that source blocks are not transportable by bucket. Or just use the water sources in the ExtraBiomes wasteland. Here is an idea: require that the initial processing (could be some filter or something) must occur in the ocean biome. This more or less achieves the desired effect.

Machines

There are three tiers of crafting complexity: manual, single-block machines and multi-block machines. Single block machines are cheap, compact but limited in terms of features and performance compared to the multi-block machines. These are mostly inspired by the notes in the Chemical Processing section.

Single-block

Solid-fluid Mixer

Mixes a solid and a fluid (stored in a liquid buffer). Has a temperature gauge and accepts steam input for heating. The mixing energy is provided by redstone. One liquid output, with buffer. Pressurized version permits boiling point elevation.

Fluid-fluid Mixer

Multi-block

Concrete

Minecraft needs concrete. One of the cool things about concrete is that one can pour it into molds and generate many objects of the same shape. The player could construct a shape out of microblocks, hook it up to a pipe (via some adjacent machine) and pump concrete into it. The machine will then, after some time, yield an item of the desired shape, consuming some amount of concrete.

Crystals

For the ore textures, we should indicate the mineral by its crystal habit, color, luster, and cleavage. Perhaps we can have a canonical crystal rendered in high resolution, and that is sampled multiple times to draw a number of crystals as an overlay on the rock. Since these are simple triangles, we could even consider direct rendering, which actually might be faster than drawing multiple textures. We will sketch up prototypes first, of course.

MineralHabitCleavageColorLuster
sphaleriteeuhedral110yellow-brownresinous
fluoriteeuhedral111purple+greenvitreous
baritetabular001whitevitreous
cassiteriteprism-dipyr100+110black-brownmetallic
lepidolitetabular001pink-purplepearly
cinnabar
bastnasitetabular
chalcopyrite
pentlandite
scheelite
wolframite
apatite
beryl
chromite
ilmenite
kyanite
*magnetite
pollucite
spodumene
tantalite
galena
molybdenite
pyrolusite
stibnite
uraninite

Vitreous should be semi-transparent (like stained glass), while resinous should be much more translucent.

Tabular cleavage can have a sloping edge on one side, like BDcraft lapis lazuli.

Other textures to fix:

  • Pegmatite should be a mixture of various crystals.
  • Banded iron should be redone as overlay

Items

Chemicals

Properties

We could model chemicals at a number of different levels of detail. For example, we could record every property, or simply consider the name. Optimal is somewhere in between.

Some obvious properties:

  • Formula (name would be in translations)
  • Color (black, blue, green, …)
  • Phase at room temperature (and standard pressure)
  • Hazards: health (0-4), flammability (0-4), reactivity (0-4), special (reacts with water, asphyxiant, oxidizer)

One could imagine adding more properties that might lead to automatic recipe generation, but this is not worth it.

Somehow, I refuse to take the above advice. The elegance of algorithmic recipe generation based on fundamental properties is somehow irresistible to me!

Things we want to automate:

  • Phase transitions: have machines that melt and freeze substances, as well as heat exchangers that e.g. use steam/water transition to add/substract heat to reactors, boilers, etc. Requires: critical temperatures, heat capacity integrated from standard temperature to critical temperature, enthalpy of fusion/vaporization (calculated from dS), need Antoine coefficients to compute boiling temperature by pressure, in theory we could also figure out the dHf for the non-standard states using the standard Hf and the heat capacity information.
  • Enthalpy of reactions: whether a reactor will need cooling, heating, etc. Requires: enthalpy of formation, sometimes enthalpy of solution? Enthalpy of formation could be calculated from the elements if we had the formation reactions, but those are not useful otherwise,
  • Free energy of reaction: whether a reaction can proceed at a given temperature, important for smelting. Requires: enthalpy of formation, entropy.
  • Solubility: for mixing, what dissolves in water? This relates to the dynamic equilibrium, i.e., kinetics, so we might need the direct solubility value, but maybe only a rough one, like insoluble, sparingly soluble, soluble. And maybe solubility will be according to the temperature of the liquid, which we roughly define as cold, standard, hot.
  • Density: for gravity-based separation, known for gasses (assuming ideal) if we know the molar mass,
  • Default oxidation state: for predicting oxide from thermal decomposition of metal carbonates, sulfates, nitrates, etc.

Summary of information needed for solid/liquid/gas/aqueous?:

  • Critical temperatures (relatively easy to find),
  • Shomate (or other function) parameters for heat capacity (tough to find, NIST), or perhaps an average value when not available, note that Shomate parameters additionally provide the entropy and (through some solving) the critical temperatures,
  • Antoine coefficients (tough to find, NIST),
  • Enthalpy of formation (not easy),
  • Standard molar entropy (not easy),
  • Rough solubility in different solvents (cold/standard/hot) (easy),
  • Density (easy),
  • Viscosity (easy for typical liquids, molten we assume lava-like),
  • Magnetic susceptibility (probably on an adhoc basis),
  • Atomic weight (elements only, easy),
  • Default oxidation state (elements only, easy),
  • Color (easy),
  • Hazard (easy)

The problem is that many of these properties are unknown/unpublished, even for well-known chemicals. If the enthalpy of formation and/or standard molar entropy are missing, then we depend on the temperature/energy being specified at the reaction level, or there are simply no reactions (for that phase). Calculating the phase change enthalpies becomes more problematic though. We could always simply not support conversion of the material to that phase, but that seems restrictive.

Assume we only have solid-phase properties. We could, with some effort, get the heat of fusion from the solubility, and from that derive the entropy, and the enthalpy (at that temperature). In fact, we could even assume that the lines in the ellingham diagram are linear, despite phase changes (only gas makes a big difference). But even with that, we do not know the heat capacity of the liquid, so how to heat it?

The basic problem is that we are designing an extension to a sandbox game and yet there is a point at which the player will move beyond what is well understood by Science (mostly due to a lack of interest). At that point, we need to either restrict or extrapolate.

For example, these guys extrapolate the thermodynamics of NiO https://www.msm.cam.ac.uk/teaching/partIB/courseC/BH.pdf. They guess the entropy (which would give us the enthalpy of fusion) and enthalpy of formation.

An approach to estimating the enthalpies of fusion from solubility: http://www.umsl.edu/~chickosj/JSCPUBS/mottpce.pdf Might only apply to organics, but who cares?

Extrapolation would probably take too much work and would require intuition that we are lacking. It is much better to restrict than to introduce poorly defined chemicals. But what happens when a substance is heated – we should not allow it to be heated infinitely (obviously the machine has some limit, but that may be far in excess of the critical point). Easiest option is to simply cease the heating and alert the user that the melting point has been reached, but that would be lame in a machine that is supposed to yield a molten product. But really, do we care about accurately modeling the transition to something that is essentially useless?

A bigger problem is the heat capacity: it has a complex dependency on temperature; i.e., there is no single value. Without that, it really does not matter whether we know the heats of phase transitions. We have to rely on the Shomate Equation, from the NIST webbook. Should we pre-integrate the Shomate equation to the transition point? This seems too limited. For example, we need to know how to heat substances to arbitrary temperatures, for thermal decomposition, arbitrary reactions, etc. If we knew the full parameter set, we could directly simulate the thermodynamic system. Unfortunately, most chemicals/phases do not have a set of Shomate parameters.

One possibility is using simpler forms of the equation. We have resources with Cp values for a range of temperatures, as well as standard enthalpies of formation and molar entropies. That might work, for the standard phase, at least.

Metals

MetalModsSourceProdFe:xMod BalUses (besides alloys)Current usesIssues
LithiumGTbrine, ore0.03522:12:1 clay
SodiumGTbrine, ore3:11:1 clay
PotassiumGTbrine, ore3:15:1 sp
MagnesiumGTbrine, ore0.610:18:1 obs
CalciumGTlimestone1:1 bone
TitaniumGTore
Vanadiummagnetite in gabbro0.0520:1V2O5 catalyst
FeCrGTore75:1
Molybdenumore0.2511:1
TungstenGTore0.112:1
ManganeseM2/GToreblack dye
CobaltCu/Ni0.0618:1
NickelGTore, Mn ocean27:1NiMH batties, green glass
CopperBC/IC2ore123:12:1Many
SilverRP2/TE/FZCu/Ni/Zn/Au/Pb0.01524:1catalyst
ZincM2ore123:1GT: Sub for Sn in adv alloyNeed more uses to equate with Sn
CadmiumZn0.0124:1
MercuryGTore
AluminumGT/Xyore
Silicon(GT)IS:sand+carbonCircuits (refined), SiH4 fuel
TinBC/IC2ore0.212:13:1Many
LeadTEore, Cu/Zn/Ag3.56:16:1radiation, batteries, early wirelessIC2: reactors; GT: soldering, batteries
Boronore
Bismuthore, Pb ore0.024
TelluriumCu/Ni5e-5192:1+Cd solars
PlatinoidGTNi/Cu/Cr/Co2e-496:1catalyst
Zirconiumore
Cesiumore2e-5
Neodymiumelectro: Monazite
UraniumIC2ore
Niobiumore0.00148:1
Tantalumore0.00148:1
ArsenicCu0.044
Antimonyore0.1412:1SbO3: flame retardants; LA batteries
GermaniumZn

Non-metal elements

ElementSourceProdUse
H2steam over coke (-CO2), H2O electrolysis
O2H2O electrolysis
N2cryogenic fractionation of atmosphere
Sprocessing gypsum, oil by-product (H2S)fertilizer, H2SO4
Papatite
Ibrines0.03
Fflourite (CaF2)5
Clelectrolysis of NaCl, etc
Brbrines
Henatural gas
Arcryogenic fractionation of atmosphere
Necryogenic fractionation of atmosphere
Krcryogenic fractionation of atmosphere
Xecryogenic fractionation of atmosphere

Elements too rare

  • Sc: 2 tons / yr production
  • Tc: almost non-existant in nature
  • Fr/Ra/Rn: radioactive

Alloys

Metals can be combined in a huge number of ways. Here are the available alloys:

AlloyMetalsProductionUse
Stainless steel6Fe+2FeCr+Mnblastmany
Galvanized steelFe+Zn
Mg+Al
Ca+Pbbatteries
Sb+Pbbatteries
BrassCu+Zn
Te+Fe/Cu/Pb

Properties of steel alloys:

  • Machinability: MnS, Bi, Pb, Se, Te
  • Corrosion resistance: Cr, Cu, Ni
  • Toughness: B, Cr, Mn, Mo, Ni, Cu, Si, V, W, Ti, Nb
  • Temperature tolerance: W, V

Other alloyants: Al, Co, Ce, Sn, Zn, Zr

We could model steel alloys by allowing up to 3 non-iron ingots to be included in the smelting. Those non-iron ingots could be all of the same material, or different materials. In addition, there could be “super alloys”.

How to model the different properties? One easy way is higher yield recipes. But what about differentiating the properties?

Types of steel alloys:

AlloyantsPropertiesUse
Mnhardened, abrasion (MnS: machinability)grinders, crushers, tracks
Nistrengthened, low temperaturestorage tanks, turbines, screws, bolts
2Ni+1Crtoughened, corrosion resistant” ” ”
Motoughenedeasy to roll, aircraft parts
3Cr+1Motoughened, corrosion resistant” ” ”
3Ni+2Cr+1Momore toughened, corrosion resistant
4Ni+Momore toughened
Crcorrosion resistant
3Cr+1Vtoughened, corrosion resistantshafts of cars, locomotives, aircraft
2W+1CrHT hardness, corrosion resistantcutting tools
Mo+Cr+VHT hardness, corrosion resistanthigh temp applications: shafts
2Si+1Mnmore toughenedsprings, punches, chisels

Stainless steel (Cr, Ni, C, Mn, Si, P, S, N):

Hazards

There are many fun possibilities when it comes to hazards. These rely on some model for chemical spills. Does this happen when a pipe or machine breaks (presumably due to some initial hazard?).

Health

Damages player without other environmental effects.

  • Level >1, starts to hurt if ingested (increasing damage with level).
  • Level >2, hurts if held in inventory (open container) or touched
  • Level 3: damage similar to cave spider poison
  • Level 4: like burning in lava (must drink milk to stop)

New idea: it seems that gases should apply effects when at eye level (inhaled) and liquids when contacted in the world. Ingestion of liquids should magnify effects.

Fluid contact:

  • Level >=2: Poison effect
  • Level >=3: Increased poison effect
  • Level >=4: Increased poison effect, usually lethal

Fluid ingestion (drinking a potion):

  • Level >=1: Nausea
  • Level >=2: Nausea + poison effect
  • Level >=3: Nausea + increased poison effect
  • Level >=4: Nausea + increased poison effect, usually lethal

Some liquids may have additional effects. They may also need custom countermeasures. For now, level >= 3 treated by milk.

If the boiling point is near room temperature, contact with liquid is equivalent to contact with the gas. Or we need to model liquids spawning gases, which would be cool.

Flammability

Will ignite when in contact with a flame/spark, depending on temperature. Temperatures for each level:

  • Level 1: > 200 C
  • Level 2: > 100 C
  • Level 3: > 23 C, flammable outside of ice biomes
  • Level 4: < 23 C, always flammable

At ordinary temperature, the difference between L3 and L4 is a matter of degree. If player catches on fire with flammable items in inventory, the items will burn up, damaging the player. For L3 and L4, using flint and steel will ignite items in inventory.

Adapting vanilla mechanics:

  • Lava should be capable of igniting anything >=L1. This means a custom material that is flammable.
  • Fire should spread according to a probability that is proportional to the flammability. This is easy to support. But what about modeling the ambient temperature? Not right now.

In vanilla, liquids (water) extinguish torches. But what happens when a flammable fluid attempts to flow into a torch? Probably should ignite with the same probability as fire spreading.

Reactivity

Will explode, depending on temperature/force:

  • Level 1: explodes if heated > 200 C
  • Level 2: explodes if heated > 100 C
  • Level 3: explodes if near any heating or another explosion
  • Level 4: explodes whenever thrown (or anything from L3)

L4 has explosive radius of TNT; otherwise creeper radius.

Special

  • Water reactive: obviously blows up when contacts water!
  • Asphyxiant: when exposed, count down as if underwater, then pain
  • Oxidizer: fuels existing fires

Solutions

A solution consists of a solvent and a solute, which is present in some concentration. Modeling the full continuous range of concentrations would be too complicated. Instead, we have two: dilute (0.1M) and concentrated (10M). The solubility of the solvent determines wheter a particular concentration is feasible. We therefore really only need three levels of solubility: very soluble (can form concentrated solutions), soluble (can form dilute solutions), and insoluble (does not form solutions).

Just for reference, from Sigma Aldrich (units in mL/g):

Very SolubleLess than 1
Freely Soluble1 to 10
Soluble10 to 30
Sparingly Soluble30 to 100
Slightly Soluble100 to 1000
Very Slightly Soluble1000 to 10,000
Practically InsolubleGreater than 10,000

Temperature

We will not model arbitrary temperatures of materials, except within machines. Instead, we assume room temperature or the transition temperature to the phase closer to room temperature.

There is a point at which thermal radiation becomes visible, and we essentially render liquids as lava.

TemperatureColor
480 °C (896 °F)faint red glow
580 °C (1,076 °F)dark red
730 °C (1,350 °F)bright red, slightly orange
930 °C (1,710 °F)bright orange
1,100 °C (2,010 °F)pale yellowish orange
1,300 °C (2,370 °F)yellowish white
> 1,400 °C (2,550 °F)white

Colored lighting is possible: http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/wip-mods/1446134-1-7-2-beta-colored-light-api-mod-writers-can

Chemicals from other mods

Some chemicals are obtained from other mods:

ModChemicals
FactorizationH2SO4
GregtechBe, Ca, CaCO3, C, Cl, D, H2, He, Th, W, U, Si, Na, Na2(SO4)2, CH4, K, N2, Pu

Tools

Batteries

In increasing order of cost and energy density:

  • Lead acid
  • NiMH
  • Lithium iron phosphate

Plastics

Plastics could serve as alternative to metal in many items. Would be produced from petroleum processing.

Chemical Processing

Unit Operations

These are the physical units of chemical engineering. Basically these are types of mixing, separation and reacting.

Fluid Flow

Transport

Fittings and valves

Fittings connect pipes, as well as measure and regulate flow through pipes. Buildcraft should provide enough here. The table below outlines this. We have excluded trivial connections between pipes.

TypeBCNotes
Cross/TeeIron pipe3>1 output, with cycling
On/Off valveIron/Wooden piperedstone signal
CheckIron pipe
RegulatingGates
Pipes

BC has us covered here. One issue is temperature. Might temperature (difference from ambient) degrade over time, much like electricity? Then there are different types of insulation. This will not match-up well with the existing use of steam, molten redstone, etc.

Pumps

BC has a pump.

Compressers

We can use BC pipes to move gases as a fluid, but we need the equivalent of a pump, except for gas. It would collect gas from the atmosphere. If nearby a machine that emits gas freely (like a furnace) it will collect the gas and output to a pipe. This is the fan from GasCraft.

Filtration

The idea here is to separate solid phase from liquid phase.

Fluidization

The inverse of filtration: turning a solid into a liquid by infusing it with water or gas. Just a type of mixing.

Heat transfer

Heat (energy) transfer from one substance to another. Applications:

  • Heat exchanger: efficient transfer between fluids
  • Thermal energy storage: e.g. insulated water tanks (could store Railcraft steam in a tank)
  • Electricity generation: thermopile (RP2)

Most interesting for processing (i.e., distillation) is the heat exchanger, which could either a condenser (cooling) or evaporator/boiler (heating). Railcraft already has a great boiler system that we could leverage. Need a condenser.

Mass transfer (separation)

Moving chemicals from one solution/phase to another. Forms the basis of fluid filtration. See section on separation.

Mechanical

Mostly working with solids.

Solid transportation

Trust BC/AE here.

Crushing, pulverizing

Many machines already perform this for ore processing. Examples:

  • IC2 macerator (1 output)
  • TE pulverizer (2 outputs)
  • GT industrial grinder (4 outputs)

Screening/sieving

Presumably this is how the pulverizer and grinder separate materials.

Unit Processes

These are types of chemical (rather than physical) processes. These are somewhat orthogonal to machines. But we list them to make sure we support these types of chemistry:

  • redox: ore reduction in furnace, electrolysis
  • (de)hydrogenation
  • hydrolysis
  • (de)hydration
  • (de)halogenation
  • (de)nitrification
  • (de)sulfonation
  • (de)alkylation
  • esterification
  • polymerization
  • polycondensation
  • catalysis

Separation

There are different methods of separating/purifying compounds:

  • Filtration: depending on filter media, the solid/liquid equivalent of solvent extraction
  • Decantation/Settling: tanks that over time would separate solid and liquid
  • Distillation: leverage heat transfer processes to partially evaporate, then condense. The Forestry still and the brewing stand are close, but neither of them would work. Probably best to model this as a combination of heat transfer components.
  • Precipitation: would happen in chemical reactor, but then the solid phase needs to be separated.
  • Crystallization: uses a special solvent to cause one fraction to crystallize; as in Factorization’s crystallizer.
  • Centrifugation: based on differences in density, basically an accelerated version of settling. The GT industrial centrifuge is the only real existing option.
  • Sieves: difference in particle size. We can imagine that the TE pulverizer and GT grinder work this way.
  • Extraction:
    • Leaching: Dissolve some fraction of a solid (usually via a reaction); simple if water, could use the Forestry carpenter, and then boil.
    • Liquid-liquid: Relies on solubility differences b/w solvents; this would typically involve mixing another solvent into a mixture and then letting it settle. Representing multi-solvent mixtures may be complicated. Another issue is that the two solvents will likely be water and a non-polar organic solvent; organic chemistry is complicated.
  • Adsorption: sticking to a surface, as in cyclonic separation; may be too similar to filtration
  • Magnetic: could work for magnetite, otherwise…

How to model this? We could track actual phase transition temperatures, densities, particle size, etc. But that would be crazy. A more abstract model: a list of chemicals that compose a particular ore/mixture, possibly with percentages. The number of separated chemicals will depend on the number of outputs for a machine. Are the outputs always pure (simplest) or could they also be mixtures themselves? This would present opportunities for chain processing. Are some only separatable by certain techniques?

Distillation

Components of a distillery:

  • Heater/boiler (e.g., steam powered)
  • Distillation column, consisting of multiple blocks

At each level of the distillation tower, gas may be extracted and condensed. The higher the tower, the finer the separation. The boiler sits next to the base of the tower. The “bottoms” liquid can be extracted from the bottom of the tower. Optionally, a vacuum can be attached to the top, for when the temperature has an upper limit (petroleum refining). In theory, the heat gained by the condensers could be transferred to the boiler, i.e, they would take in water and emit steam, which would flow to the boiler, although the boiler would need additional steam.

Gravity-based separation

This relies on materials having different specific gravities.

Types:

Settling
A multiblock settling tank could take a mixture at the top and yield one or more solids (one from each of the bottom blocks) depending on the relative densities. The more blocks, the more liquid that can be processed. This is simpler and cheaper than spiral separation, but proceeds much more slowly. One could claim that Gregtech’s support for throwing ore into a cauldron is similar to this. Could we support automation with hoppers?
Spiral
Spiral sluice relies on gravity to accelerate materials down the incline, with the denser materials tending toward the middle. No energy required.
Centrifuge
Spins an object so that its contents separate by density through centrifugal force. This requires a lot of energy. This already exists in IC2 and GT.
Cyclonic
A cyclone of fluid (liquid or gas) is established, denser particles hit the wall and fall out. Liquid/solid separators are called hydroclones. These require liquid under pressure and thus some energy.
Shaking Tables
Shake it, denser particles fall to bottom. No need for liquid here. Requires some energy, pretty slow.
Jig Beds
Fluidized bed with pulsing water instead of shaking. Works faster than shaking tables but material will need to be dried. This is most similar to the IC2 ore washing machine.

Centrifuge recipes:

InputOutput
Monazite ClCeCl:50 LaCl:25 NdCl: 15

Leaching

Some substances are obtained through water leaching and then boiling off the water. The leaching machine will take one solid and one liquid input, and yield a liquid, fairly slowly. Depends on solubility.

InputOutput
charcoalpearl ash (K2CO3)

Froth Flotation

Desired ore is derivatized (via a collector) to become more hydrophobic. It is mixed into a water bath, and air bubbles rise through the bath, capturing the hydrophobic ore constituents. This is mostly used for sulfide ores.

The machine would accept air (from a compressor) and the ore slurry (from mixer with collector).

Important collectors:

  • (K/S)EX (K/Na ethyl xanthate): Cu, Ni, Ag, Au extraction

Using froth flotation should double ore output. Should be possible to recover the collector.

Drying

This means removing water from an aqueous solution to yield a purer liquid from the solute. The fluid is passed over/through some matrix that reacts with the water, removing it from solution.

Electrostatic

Conductivity-based separation. Useful for small particles like mineral sands (rutile and ilmenite are conductive, the rest are not). Also, cassiterite. Requires some energy to maintain the electric field. No slurry required.

This lists some conductivity values and outlines sand processing: http://www.iluka.com/docs/mining-and-processing/mineral-separation.pdf

Magnetic

Uses a magnetic field instead of an electric field. Requires some energy for the electromagnet. Useful for magnetite ores. Advanced, high-powered separators can separate ores containing iron (like ilmenite).

See: http://pubs.usgs.gov/of/1999/ofr-99-0529/

Reactions

A chemical reactor performs some combination of these functions:

  • mixing
  • separating
  • heating
  • cooling
  • pressurizing

A key question is whether these tasks are performed by separate machines or one monolithic reactor. The most fun would be separate machines. See next sections for further discussion.

Model

We want to model the following aspects of reactions:

  • Reactions can be endothermic (require energy) or exothermic (require heat management, might explode!)
  • The feasibility and rate depend on the temperature
  • Reactions may need a catalyst

The heat released or absorbed would change the temperature according to some heat capacity. For a liquid reactor, one might use the heat capacity of water. If it boils, there will be an explosion if there is no way to pipe out the steam. The pressure exerted on the reaction vessel would be equal to the vapor pressure of the liquid.

Determining the heat of a reaction can be complicated if we are interested in modeling the temperature dependence. We could calculate the enthalpy and entropy for arbitrary temperatures if we had the parameters for the heat capacities. But those are a lot of parameters. The algorithm in the CHNOSZ R package would accurately model aqueous solutions. We could port the algorithm to Java. However, again, we would need to store data in a format like CSV, because there are just too many parameters. Moreover, it is not clear that we could even come up with parameters for all of the chemicals. It would be simpler to assume that the enthalpy (and entropy) is independent of temperature (and temperature would only affect the free energy and rate).

To determine whether a reaction is feasible, we consider the sign of the free energy. This has nothing to do with how fast the reaction proceeds; it only helps to decide the trajectory of the system: which one is most thermodynamically favorable? The magnitude of the free energy is an indicator of the completeness of the reaction (how much reactant is left at equilibrium). We will assume that all reactions proceed to completeness.

The rate also depends on the temperature. This dependency is pretty simple IF we know the activation energy: ln(k2/k1) = -(Ea/R)(1/T2 - 1/T1). We could calculate that by summing the bond energies: http://www.wiredchemist.com/chemistry/data/bond-energies-lengths That would be manual. We would still need to know the base rate ‘k’, and that will be difficult to determine, in general. Instead, we will need to come up with a base rate.

Perhaps we could have a base, reasonable rate that corresponds to the temperature at which a reaction becomes spontaneous. Increases in that rate then follow the Arrhenius equation.

So in summary, we need to know:

  • The dH and dS for the reaction, computed from the Hf and S of the reactants and products
    • OR the dH and the temperature for the reaction
  • The Ea/R for the reaction
  • Any catalysts

Sometimes, such as in liquid extraction, the required temperature is not derivable from chemical parameters. In those cases, we need to override the reaction temperature.

Model inspired by actual chemistry

We want to react two aqueous solutions. The machine mixes a certain amount of each, in molar proportion. The mixing is continuous, in sub-bucket increments, so there is no complete flush of the reactor. If the reaction is thermodynamically favored at the temperature (25 C), it begins at some base rate. Otherwise, heat exchangers (as separate blocks adjacent to the reactor) are necessary for bringing the temperature up to some pre-defined target temperature. The more heat exchangers, the quicker the heating. The reaction rate will change based on the temperature, and the temperature changes according to the heat of reaction. The reator will output at the maximum rate at which it can maintain the temperature. There will be some cap on the output rate, and if heat is in excess, and there is no cooling mechanism, the temperature will increase. Once the vapor pressure of the liquid matches the pressure, it will boil. If there is no gas output, the pressure will increase until it exceeds the pressure tolerance (which depends on the construction), and there is an explosion.

Model inspired by Minecraft smelting

Smelting is the closest thing in Minecraft to a chemical reaction. In fact, it is a chemical reaction. Key differences:

  • Chemical reactions usually involve at least one fluid-phase reactant, i.e., either a liquid or a gas; the gas in smelting is produced by burning fuel (how do electric furnaces work?).
  • A chemical reaction might be exothermic, unlike the typical reduction during smelting.
  • In general, an endothermic chemical reaction will need an external heat source, because there is no burning fuel.

One similarity is that the speed of the smelting depends on the input energy (e.g., TE smelters).

So the main difference is the need to model heat and temperature. That introduces the most complications.

Case study

Take as an example the Bayer process for producing aluminum from bauxite. Start with the first reaction, the pressurized extraction of aluminum hydroxide from bauxite in a concentrated NaOH solution. Aluminum hydroxide is insoluble in water, but it is soluble in hot NaOH (aq), because of the reaction that converts the Al(OH)3 to NaAl(OH)4 (aq). So we could simply say that the solubility depends on the rate of that reaction. But finding chemical parameters for compounds like NaAl(OH)4 is going to be tough. And in the end, they are unlikely to predict the reality of the Bayer process. After filtering the red mud, the solution is cooled, and Al(OH)3 precipitates.

These guys wrote a whole paper on modeling this: http://www.ysxbcn.com/down/upfile/soft/20120228/32-p0447.pdf

How could we simplify this?

  • Instead of modeling the exact thermodynamics, simply state that bauxite/Al(OH)3 is “hot” soluble in NaOH, and precipitates after cooling. The ore and NaOH solution would be mixed in a heated, HP reactor. In effect, we would just be coming up with all of our own parameters.
  • Simplify this to something like induction smelting, except with a heated liquid, instead of burning fuel, with red mud as the slag. The NaOH solution could just be a bucket in the induction smelter (but we would probably want our own machine with liquid pipe support). This may be too simple. We sure as heck would not want to use the induction smelter for every one of our reactions.

We could probably do both: the underlying model understands the solubility of Al(OH)3, and that translates to specific, simplified recipes.

A tougher problem: monazite, a mixture that consists of the poorly characterized rare earth phosphates. These would need to be coded as stubs. That is better than not at all.

Reactors

The reactor will be a multi-block structure, modeled after the Railcraft tanks. Like the Railcraft steam boiler, there will be a low and high pressure version of the reactor. The high pressure boiler can super-heat liquids to cause reactions to occur at a faster rate. There will be special blocks. Here is a list of blocks:

  • Mixer block: placed in bottom, middle; crafted like gauge, except using iron gears in place of glass, redstone engine in the middle.
  • Low/high pressure structure block
    • Must be uniform, all HP or LP
    • Use iron tank wall for LP, steel plate recipe for HP
  • Glass blocks: Railcraft gauge
  • Heat transfer components
    • Recipe: like valve, but with plates and bars switched
  • Temperature gauge: like tank gauge, with redstone coil in middle
  • Pressure gauge: like tank gauge, with pressure plate in middle
  • Liquid valve: just the Railcraft tank valve
  • Gas valve: tank valve but with steel instead of iron
  • Solid dispenser: tank valve with dispenser in middle
  • Safety valve: releases gas when temperature gets too high; replace middle of tank valve with trap door?

List

Within this reaction chamber, the following reactions could happen:

Reactant AReactant BCatalystProduct AProduct BMachine
MgCl2 (sea)Ca(OH)2 (s)Mg(OH)2 (s)CaCl2 (aq)mixer
CaO (s)H2O (l)Ca(OH)2 (s)mixer
Mg(OH)2 (s)HCl (aq)MgCl2 (conc)
MgCl2 (conc)e-Mg (l)Cl2 (g)electrolyzer
Lepidolite dustH2SO4 (aq)Li2SO4 (aq)
Li2SO4 (aq)Na2CO3 (s)Li2CO3 (s)Na2SO4 (aq)heated mixer
Li2CO3 (s)2HCl (aq)LiCl (aq)CO2 (g)mixer
2LiCl (l)e-2Li (s)Cl2 (g)molten electro
2NaCl* (aq)CaO (s) + CO2 (g)NH3Na2CO3 (s)CaCl2 (aq)mixer
SO2* (g)V2O5SO3 (g)mixer
SO3 (g)H2O (g)H2SO4 (l)
2NH4Cl (s)CaO (s)2NH3 (l)CaCl2 (s) + H2O (g)still
3H2 (g)N2 (g, atmos)magnetite2NH3 (l)
2H2O (l)e-2H2 (g)O2 (g)electrolyzer
CH4 (g)2H2O (steam)4H2 (g)CO2 (g)
FeVO3* (s)NaCl/Na2CO3 (s)NaVO3 (s)furnace
NaVO3 (aq)H2SO4 (aq)V2O5 (aq)
V2O5 (aq)5Ca (s)2V (s)5CaO
CaCO3* (s)HCl (aq)CaCl2 (aq)CO2 (g)mixer
CaCl2 (l)e-Ca (s)Cl2 (g)molten electro
2NaCl (aq)e-H2 (g)Cl2 (g) + NaOH (aq)electrolyzer
Cl2 (g)H2(g)glowstone2HCl (g)mixer
NaCl (s)H2SO4 (aq)HCl (g)NaHSO4 (aq)mixer
2NaCl (s)H2SO4 (aq)2HCl (g)NaSO4 (aq)heated mixer
2NaCl (l)e-2Na (s)Cl2 (g)molten electro
Na (s)KCl* (l)NaCl (s)K (s)furnace
TiO2 (s)Cl2 (g)TiCl4 (g)furnace
TiCl4 (g)2Mg/4Na (s)Ti (s)2MgCl2/4NaCl (s)furnace
8H2S (g)4O2 (g, atmos)Al2O3/TiO2 (2x)S8 (s)8H2Ofurnace
K2CO3 (s)2HCl (aq)2KCl (s)H2O (+ CO2 atmos)mixer
2KCl (aq)e-2KOH (aq)Cl2 (g)electrolyzer
2KOH (aq)CO2 (g)K2CO3 (aq)H2O (l)
Al2O3 (s)e-cryoliteAl (s)molten electro
Al2O3 (s)6Na/K2Al (s)3Na2O/K2Ofurnace
Monazite dustNaOHMonazite OHNa3PO4mixer
Monazite OHHClMonazite ClThOHmixer
ethanol (l)NaOH (s)Na Ethoxide (aq)H2O (l)mixer
2 ethanol (l)2Na (s)2Na Ethoxide (l)H2 (g)manual
2 methane (g)sulfur:8 (s)alumina2CS2 (l)4H2S (g)hot mixer
Na ethoxide (aq)CS2 (l)SEX

Solubility

It would be simple to model compounds as being soluble by groups of solvents (polar, non-polar, etc). The problem is temperature dependency: this can be huge. Solubilities in water are fairly well known, http://en.wikipedia.org/wiki/Solubility_table. But what about other solvents? Probably best to model solvation as a reaction (a phase change). Then we just have to worry about reactions.

Also, what about concentrations? Simplest would be to have one, fixed concentration. Slightly more complicated would be two levels: dilute and concentrated. Dilute might be one pile of dust in a bucket, while concentrated would be 10 piles.

Interestingly, one can approximate the temperature dependence on solubility via the Arrhenius equation, where the heat of fusion (the latent heat) is the activation energy. See: http://en.wikipedia.org/wiki/Enthalpy_of_fusion But since we are not modeling concentrations, how is the solubility meaningful? Perhaps as the rate? Technically no, the solubility only indicates the equilibrium point in terms of the amount of solute, relative to the amount of solvent. In other words, it decides whether a dilute and perhaps concentrated solution is feasible.

Also, we are ignoring boiling point elevation and melting point depression in solutions.

Mixing

Need a machine to mix solids, liquids and gases. Technically, this is a challenge, because it would require modeling mixtures of fluids. In theory, we could have a mixture liquid using damage. This would support up to ~16000 chemicals in binary mixtures. For arbitrary mixtures during processing, binary is probably sufficient. Ores will be more complex, but those can be modeled individually.

Types of mixers we would want:

  • combining two fluids or gases
  • dissolving a solid or absorbing a gas into a solution
  • combining a solid and fluid to a slurry
  • mixing two solid dusts

All of these take two inputs and emit one output, or two outputs when there is a solid/liquid plus a gas. The difference really are three types of input: two fluids, two solids or a fluid and a solid. These correspond to liquid agitators, dust blenders and fluidizing beds, respectively.

Temperature

Fluids will need to be heated and cooled. If a reaction occurring in a mixture releases or requires heat, then cooling or heating must be applied to the reaction chamber. One type of heater would be a simple electric heater, but heat transfer devices would be more efficient. Steam/water could be piped into the heat transfer device, and they would emerge in a cooled or heated form (steam would become water, water steam). Heat exchangers are typically made from stainless steel, as well as Cu/Ni and Ti.

Does the reaction mixing chamber itself require temperature control? In real life, this is the case, but how to model it? The device already has 3/4 material connections, plus power. This would be two more connections. May be workable. The simple electric heating chamber is also an option. Or a separate block. Multiblock structures sound the most attractive.

In fact, heating/cooling of fluids outside of the chamber may present technical complications: each “temperature” of each liquid would need to be registered. Or maybe we could analyze the network to determine what the temperature should be? That might work since the temperature is not an inherent property of the substance (like its composition). To store a chemical at a temperature, a heated/insulated tank is necessary. Wait for use cases.

The reaction chamber would need some temperature limit. If the temperature exceeds the limit, bad things happen.

Heat Capacity

We will mostly get this from the Shomate equation (Cp is temperature dependent), but here is a simple table for common substances (J/gK):

Cellulose1.34
Clay0.94
Coal1.09 to 1.55
Concrete0.65
Diamond0.61
Fireclay brick1.25 (1500° C)
Glass (pyrex)0.8
Limestone0.91
Rubber1.74
Sand0.8
Silk1.38
Steel0.50
Wood1.9 to 2.7
Wool1.36

More: http://www.engineeringtoolbox.com/specific-heat-solids-d_154.html

See here for CaCO3 (function of T): http://www.eng-tips.com/viewthread.cfm?qid=61961

Ice: 146.3+(7.253*T)

Pressure

Modeling pressure means modeling the atmosphere inside the reactor. There is some atmosphere inside the chamber. When the vapor pressure exceeds the internal pressure, gas from evaporation changes the pressure.

Vapor pressure

This is via the Antoine equation, which requires three constants. For mixtures, we can use the weighted average via Raoult’s Law. We only have the Antoine coefficients for common liquids; should be sufficient. In fact, might as well assume water for now.

Evaporation rate

This is Langmuir’s approximation: dn/dt = (pv - p)*sqrt(1/(2*pi*R*T))

Electrolysis

Electrolysis will reduce just about anything. If we know the chemical formula of the substance, we can easily calculate the product of redox reactions. IC2 has an electrolyzer for making energy cells, or something. GT has a much more interesting one. But we probably need a smelting electrolyzer to deal with e.g. bauxite processing.

Chloralkali process

Produces NaOH (aq) and Cl2 (g) from NaCl (aq). This happens in a membrane cell. This could be a multiblock structure that would essentially be two reactors combined, separated by a thin ion-selective membrane. Each reactor would have an electrode.

Electrowinning

A more complicated form is electrowinning/refining. This requires dissolving the metal in H2SO4 and performing electrolysis. The anodes would be need to be transferred to a grinder for recovery of the metals. This means that electrodes need to be continually manufactured and replaced; perhaps every 10 buckets of electrolyte. Partial yields from grinding partially mature electrodes should be allowed. A number of minor outputs are possible from grinding the dust.

Smelting

Types of smelting:

  • Roasting/calcining: conversion of sulfide and carbonate ores to oxides. This occurs at low temperature; any furnace is capable.
  • Reduction: conversion of oxide to elemental metal. Requires reducing agent like coal or sand.

Furnaces and smelting is central to Minecraft, so we do not want to change that dramatically; however, we could add more sophisticated smelting options, with higher yield. Also, it is worth exploring the Foundry mod, as it supports the realistic notion that metals are typically liquids after smelting.

Some types of furnaces:

  • Electric arc: passes an electric current through the material, reaching temperatures of about 2000K, mostly for steel making.
  • Blast furnace: reduces metal, usually iron, by blasting air up through the furnace; with a pre-heated blast, can reach temperatures up to 2500K.
  • Induction furnace: induces current in metal using an electomagnet magnet; used for melting metals.
  • Bath smelting: blows O2-enriched air into a bath of slag at the bottom; useful for smelting sulfide ores.
  • Flash smelting: sulfide ore is mixed with O2, ignited, sulfur is produced as a solid, rather than SO2.

Possible reduction progression (ingot:ore/dust):

  • Vanilla furnace and other simple furnaces (1:1)
  • Induction smelter (1:1 + slag), requires coal/sand, lower energy
  • Industrial blast furnace Fe only (2:1 + 2 slag), requires coke, limestone flux and air input; oil, tar, natural gas can be added to the coke to lower energy requirements (and increase speed). GT has since added something with this name. Maybe blast smelter?

Possible roasting progression:

  • Vanilla furnace and other simple furnaces (1:1)
  • Fluidized bed roaster: twice as fast (2:1), requires air to be pumped into the chamber

Chemical/thermodynamic considerations of smelting:

  • After roasting/calcining, any sulfide, carbonate, or hydroxide ores have been converted to oxides.
  • A reducing agent is necessary, because the temperature required to achieve thermodynamic feasibility would be impractically high for many metal oxides, even with positive entropy change of O2 gas production.
  • Carbon is the typical reducing agent, because its oxidation to CO2 is favorable, especially at high temperatures; by combining the metal-producing reduction step and CO2-producing oxidation step, the overall process becomes favorable.
  • There is one complication: some metals react with carbon to form carbides. This includes Cr, Al, …
  • This can be solved by using metals with less favorable reduction potential, i.e., metals that want to be oxidized more. An example is oxidizing Al to reduce the oxide of Cr. Note that while this favorability holds true for a large range of temperatures, there is a high activation energy that requires some initial ignition. See the notes on the aluminothermic reaction – we need a charge in a crucible, not a smelter.
  • By registering carbide reactions, we can avoid adding smelting recipes for them.
  • But for Al, we need to rely on electrolysis, and that is tricky.
  • Otherwise, we will use thermodynamic considerations to determine the smelting temperature, and could even allow reducing agents other than carbon in a principled way.

Reactivity could give us:

  • Rough decomposition temperature of hydroxides, carbonates and nitrates
  • Reduction potential (electrolysis vs. smelting)
  • Reactivity with water, acids
  • Single displacement reactions

Some of that could be derived from thermodynamics, but the reactivity also includes some notion of kinetics.

Possible breakdown:

Low
Ge Sb Bi Cu Hg Ag Mo As Pt W Au
Medium
Mn Nb V Zn Cr Ta U Fe Cd Co Ni Sn Pb (H)
High
Li Ba Sr Ca Mg Be Al Ti (C)
Very High
Cs Rb K Na

But for some things, like reduction and single displacement, we need an actual ordering.

Decomposition temperature by reactivity for each type of compound:

CompoundLowMediumHighVery High
CarbonatesLowLowMed/High/VHighNA
Sulfates
Nitrates
HydroxidesLowLowNA

See this for thermal decomposition: http://www.docbrown.info/page07/sblockb.htm#11.

Smelting energy depends on the necessary temperature.

Mod integration

Many mods add basic furnaces. Those are integrated via the ore dictionary. But we also need realistic smelting with reductants.

Possible machines for reduction:

  • Multi-smelter [Engineer’s Toolbox]
  • Induction smelter [Thermal Expansion] : 2=>1(+1)
  • High oven [Tinker’s Steelworks] : 1(+3 modifiers)=>liquid

One problem is that mods tend to conflate metal dusts with crushed metal ores. Obviously, the metal dust is already reduced (and might result from grinding an ingot), while the ore still requires processing. Even mods that distinguish metal dusts from ores do so only with regard to purity, not chemistry. Tinker’s Steelworks is the only one that pretends to do chemistry (but has no idea what it is doing). The player will get whatever the grinder/pulverizer/macerator/etc produces. We need to be careful with the ore dictionary, so that only crushed ores are valid input to smelting. These would be the keys “crushed” and “crushedPurified” (eg: crushedTin).

Pyrolysis

Another type of cooking is pyrolysis, thermal decomposition without combustion: http://en.wikipedia.org/wiki/Pyrolysis. We could use the coke oven for this. If a distillation tower is employed to separate the products, we have destructive distillation.

Destructive distillation

Here is one recipe: Coal => Coke + NH3 (l) + coal tar (l) + coal gas This will not work in the coke over, obviously, because coal directly yields creosote oil. Perhaps we could distill (using the Forestry still) creosote oil to yield NH3?

More: wood => charcoal + guaiacol + tar + terpenes + turpentine + methanol bituminous coal => coke + naphthalene + anthracene + pyrene rubber => isoprene compost/plantballs => biochar + NH3

Ore processing

More complex chemistry happens when extracting metals from ore. Preprocessing of mineral ores involves these unit operations:

Comminution
Simply grinding/pulverizing
Sizing
Selecting the particles by size; could be simple screens or could rely on different settling velocities (things like cyclones and trommels). We can probably ignore this step.
Concentration
Concentrating the ore is more complicated, and there are many methods (see separation section):
  • Gravity/density-based
  • Chemical, e.g. froth-flotation
  • Electrostatic (for mineral sands)
  • Magnetic (mostly for iron-containing minerals)
Dewatering
If a slurry is formed during separation, the water needs to be removed. Perhaps by filtering, sedimentation, or drying (requires more energy).

The rest of this section describes how each specific ore can be processed into economic material.

Magnetite

Iron

Typical smelting of oxide ores.

Vanadium

Vanadium is typically isolated from magnetite and ilmenite ore, and some times carnotite (uranium) ore. It can also be extracted from flue dust of heavy oil, phosphate ore slag and bauxite. Here we focus only on extraction from magnetite.

In the induction smelter, magnetite ore + sand => iron + magnetite slag. That slag is then resmelted with sodium carbonate/chloride/sulfate, or lime at 850 C to produce crude NaVO3 dust. This is leached with water and ammonium vanadates are precipitated with ammonia. The ammonia is decanted and the precipitate is roasted to V2O5. To get elemental vanadium, we need to smelt V2O5 with CaCl2 or aluminum dust. Thus, the overall process is smelt, smelt, leach/precipitate/decant, roast and smelt. The roasting and smelting is already possible. A fluid reactor would mix the NaVO3 (aq) and ammonia, resulting in an mixture of aqueous ammonia and solid vanadate. A liquid/solid separator yields the vanadate powder for roasting.

Limonite

Iron

Basic smelting, 1250 C.

Nickel: yellow limonite only

High temperature (250 C) leaching of ore with sulfuric acid precipitates the iron as hematite. The NiSO4 can then be precipitated as a sulfide with H2S gas treatment (100 C). At this point, the sulfide could be roasted and smelted like pentlandite to yield Ni. If cobalt is desired, the sulfides need to be redissolved as sulfates by treatment with pure O2 at high temperature. Solvent extraction with Cyanex 272 separates the cobalt in the organic phase. The sulfates can then be reduced via electrolysis or H2 gas.

Another idea is to reduce the metal sulfides and add Cl2 or ozone to oxidize the Co to Co(OH)3, which is insoluble in acid. Say about 20 buckets of Ni extract for one Co ingot.

Chalcopyrite

Copper

Optionally use froth flotation to double the dust. Induction smelting one dust with coal dust will yield 2x copper oxide. The oxide can be again smelted, or electrorefined. Here, there is an investment in the coal, pulverizing the coal and a second smelting step, but it doubles ore output. Can also be smelted directly, with no gains.

Cobalt

The copper oxide is dissolved in sulfuric acid, and the cobalt is CoSO4. The copper is electrolyzed, and NaOH is added to the spent electrolyte to precipitate Co(OH)2, which is electrolyzed to Co. Lets say 20 buckets of spent electrolyte are required for one Co ingot.

Molybdenum

After froth flotation, perform another flotation with NaHS added, which keeps copper from frothing, thus separating the molybdenite, which is processed as normal.

Minor: Silver, Gold and Platinum

Electrorefining of copper oxide.

Antimony

Pentlandite

Nickel

Typical sulfide ore extraction.

Cobalt

The same as with chalcopyrite.

Sphalerite

Zinc

As with all sulfide ores.

Cadmium

Fractional distillation, or: Crude zinc oxide (after initial roasting) is treated with H2SO4, and seeded with zinc dust to precipitate metal impurities, which are filtered out. An excess of zinc dust is added to precipitate CdSO4. That is redissolved in H2SO4 and electrolyzed with Al(+) and Pb(-), and Cd is deposited at the cathode.

Gallium

Crude zinc oxide is treated with H2SO4 to yield various sulfates. Neutralizing the solution precipitates the iron, aluminum and gallium sulfates. Treatment with NaOH brings the aluminum and gallium back into solution. Neutralization precipitates, and HCl treatment produces gallium and aluminum chloride. GaCl3 is dissolved in ether, treated with NaOH and electrolyzed to produce Ga.

Germanium

GeS2 is roasted with GeO2, and the Zn and Ge are extracted with sulfuric acid. The solution is neutralized to precipitate only GeO2. This is converted to GeCl4 by Cl2 gas or HCl, and the GeCl4 is purified by distillation. GeCl4 is hydrolyzed back to GeO2, which is reduced with H2 or C to Ge.

Indium

Galena

Lead

Like any other sulfide ore.

Silver

TE pulverizer already yields silver dust from lead ore.

Antimony

Vanadium (vanadinite)

Just like with magnetite, roasted (850 C) in presence of Na2CO3 or NaCl to produce sodium metavanadate.

Spodumene

Lithium carbonate

Treat with H2SO4, roast, leach with water and precipitate with Na2CO3.

Lepidolite

Lithium

Like spodumene => Li2CO3. See lepidolite ore dust reaction.

Caesium

Need to figure this out.

Rubidium

Dolomite

Magnesium

Ground dolomite is roasted in the presence of ground FeSi to produce a mixture of CO2 and Mg gas, as well as CaSiO3 (wollastonite) mixed with iron dust. Distillation tower separates and condenses the Mg.

FeSi results from induction smelting sand and iron (maybe an iron nugget, because the ingot recipe already exists).

Calcium

Rock salt

NaCl

Just grind it up.

KCl

Dissolved in brine and heated, so that the KCl and NaCl are enriched in a solution. Heat transfer pipe cools the solution, and the steam can be used for the heating of the brine. The cooling causes the KCl to precipitate. This is separated through e.g. centrifugation (settling will not work, because the NaCl will precipitate). The left over solution can serve as the brine in the initial step.

Or aminate the KCl and use froth flotation.

Carnallite

This is MgCl2*KCl*6H2O, i.e., MgCl2 and KCl complexed by water. Dehydration (in a dryer), followed by melting the MgCl2 (but not the KCl) at 700-750C leads to separation of MgCl2 and KCl, with a small amount of MgO produced through hydrolysis. The MgO can be converted back to MgCl2 through chlorination during melting (MgO + C + Cl2 => MgCl2 + CO/CO2, worth it?).

Limestone/Marble

Calcite (GT)

Grind to yield CaCO3, plus a 5% chance of CaMg(CO3)2 (dolomite).

Calcium

Electrolysis of CaO (roast product of CaCO3) or aluminothermic reaction, which involves the reduction of CaO with Al, under high temperatures. These temperatures are typically attained by surrounding the CaO/Al charge with a mixture of Mg and BaO2.

Something like: 3CaO + 2Al => Al2O3 (slag) + 3Ca

Could allow crafting of an aluminothermic charge (Al+Mg+BaO2). It would be placed in a fired clay crucible and ignited with flint and steel. There will be flames; nearby things could burn.

BaO2 comes from oxidizing BaO (roasting or O2 absorbtion), and BaO results from heating BaCO3 with carbon. BaCO3 is formed by heating (60-70 C) BaS (barite) with NaCO3 (soda ash). Or heated CO2 absorbtion. The absorbtion would need to happen in a mixer, while the other recipes could be handled by the induction smelter.

Skarn

Calcium

Uraninite

Uranium

Most uranium ores (UO2) are acid leached with sulfuric acid, which might be preceded by roasting.

The uranium is extracted from the sulfuric acid leach via liquid/liquid extraction, with the solvents di(2-ethylhexyl) phosphoric acid and a secondary/tertiary amine (2.5% amine, 2.5% isodecanol and 95% kerosene) as the solvents.

Kerosene comes from oil refining, but the tertiary amine that reacts with uranium would be complicated to synthesize. For simplicity, let us aim for only ethyl or methyl amines. Those can be synthesized from ethanol/methanol and ammonia using a zeolite catalyst.

Reference: https://publications.csiro.au/rpr/download?pid=csiro:EP112117&dsid=DS3

Anyway, the acid leach is treated with ammonia, which precipitates yellowcake: (NH4)2U2O7. There are other types of yellowcake, like UO3 and U3O8. (NH4)2U2O7 thermally decomposes to UO3 at 500 C. This in turn decomposes to U3O8 at 750C.

Anyway, for enrichment, yellowcake must be refined by treatment of (NH4)2U2O7 with nitric acid to yield UO2(NO3)2. Uranium is extracted from the solution using two solvents: tributyl phosphate and kerosene. This yields a purified UO2(NO3)2. It should be noted that during reprocessing of nuclear fuel, fuel rods can be dissolved with HNO3 to UO2(NO3)2.

This is converted to UO2 via thermal decomposition at 500C to yield UO3, which is reduced with H2 gas to UO2. This is the ceramic form of unenriched uranium, and it is useful for fuel rods and heavy-water reactors.

The UO2 is treated with HF to yield UF4. To produce U metal, use magnesium/calcium/aluminum thermite reduction (essentially UF4 is enveloped in a Mg charge that is ignited in a crucible; highly exothermic). Ignition occurs between 500-700 C and reaches in excess of 1300 C. The slag is 2MgF2.

For enrichment, the UF4 is instead oxidized with fluorine to UF6 and enriched for 235 by fractional distillation or one of the other enrichment methods. UF6 then is brought back to UO2 by reacting as a gas with water vapor to UO2F2-H2O, which is reduced with H2 gas to UO2.

Vanadate

After treating ore with the tertiary amine, mix with the sodium carbonate and follow the steps for magnetite. This is actually the mineral carnotite, which is probably associated with uraninite.

Chromite

Ferrochromium

Smelt with coal at high temperature (2800 C); lots of energy. As a reference, iron is smelted around 2000 C.

Magnesite

Magnesium

Calcined to MgO (magnesia), which is then smelted with Si in induction furnace to produce Mg (s) and SiO2 (sand). Could be combined into one step.

Rutile

Refining

Rutile is TiO2. It is refined by mixing in a fluidized bed at 900C with Cl2 to make TiCl4 (caution: exothermic), fractionally distilling it and then oxidizing TiCl4 back to TiO2 in a pure O2 flame (caution: exothermic, the Cl2 gas can be recovered).

Titanium

See the reactions for TiO2.

Ilmenite

Titanium

Convert to TiO2 (rutile), then follow the listed reactions. TiO2 is produced by treating ilmenite with sulfuric acid at 100C (Ea 64 kJ/mol), which separates the iron as FeSO4. The FeSO4 is crystallized and filtered out. This requires a settling out the liquid FeSO4 and then cooling it to a solid. The solid phase in the settling tank is washed to obtain TiOSO4. That is hydrolyzed (boiled) to hydrous TiO2, which needs to be roasted to pure TiO2.

Garnierite

Nickel

Simply smelt it. In an induction furnace, include a sulfur source, like gypsum, for flux.

Or perhaps more realistic are hydrometallurgical processes, by which metals are leached with sulfuric acid at 250C and high pressure (or wait 3-4 months!). The leach solution is neutralized with limestone, and the precipitated Ni hydroxide is roasted to NiO and smelted.

Cassiterite

Tin

From smelting.

Niobium/Tantalum

Wolframite

Gravity concentration.

Tungsten

WO3 is reduced at 800C with H2 (producing steam). Getting to WO3 is more complicated. Mix ore with aqueous soda ash, add ammonia to form ammonium para tungstate (APT), which precipitates (after boiling off the water) and is calcined to WO3.

WC (tungsten carbide)

Induction smelt tungsten ore with coke.

Scheelite

Concentrated by froth flotation.

Tungsten

The same as wolframite.

Cinnabar

Mercury

http://mysite.du.edu/~jcalvert/phys/mercury.htm#Prod Looks like it is found only in fine-grained massive forms, so very little metal will be obtained per ore. The ore is roasted, and mercury is distilled from the vapors.

Bauxite

Aluminium

Dissolved in concentrated NaOH (aq) at 150-200 C (in pressure vessel) to yield aluminate. The red mud is filtered out, and Al(OH)3 is precipitated by bubbling CO2 through the solution (neutralizing the NaOH with carbonic acid). That is calcined to become Al2O3. Cryolite is added as a flux and the mixture is melted at 1000 C. Then electrolysis yields Al (s). The GT electrolyzer requires a lot of energy to process bauxite dust. We could have Al2O3 increase yield significantly. But that would not incorporate the notion of the cryolite.

Cryolite is Na3AlF6, which can be synthesized as: 6 NaOH + Al2O3 + 12 HF → 2 Na3AlF6 + 9 H2O

Note that the cryolite is not consumed in the process.

This will require some special machine, a smelter/electrolyzer, that requires less energy than using straight electrolysis.

Gallium

Gallium can replace Al in gibbsite, Al(OH)3. Ga(OH)3 ends up in solution with Al(OH)3. Even after precipitation of the aluminum, there is still too much aluminum in the solution. This is removed by either adding CaCO3 (precipitating the Al as CaAl(OH)5?) or by passing CO2 through the solution to neutralize it and precipitate Al(OH)3. The concentrated gallium solution is electrolyzed to produce Ga.

Red mud

In theory, one could mix the mud with coke and and smelt with an electric arc furnace. The Fe2O3 is converted to pig iron. The slag could be made into rock wool. This is not cheap but is barely economically viable.

Zircon

Separated from sand using spiral separators. The rutile and ilmenite are removed by magnets.

Zirconium

Same process as for rutile=>titanium.

Stibnite

Antimony

Much like other sulfide ores. Enriched with froth flotation, roasted to oxide, then reduced in an induction smelter with coke. Or directly induction smelted with Fe, producing Sb and FeS slag.

Borax

Boron

Three methods, increasing purity:

  • Smelting of B2O3 with Mg or Al. The B2O3 is obtained by treating borax with H2SO4 in a fusion furnace (750 C).
  • Reduction of volatile boron halides with H2 at high temperature.
  • Thermal decomposition of diborane.

Pyrolusite

Pollucite

Caesium

Caesium is highly reactive, with both water and air. Seems like this is mostly produced during Li production, but here are some options:

Acid digestion

Add Hcl to eventually yield CsCl (evaporate water). Analogous reactions happen with HBr and HF.

Or add sulfuric acid => caesium alum, induction smelt with coke and leach with water to yield Cs2SO4 (aq). This could be used for caesium formate production.

CsCl is reduced at 700-800C with Ca or Ba in induction smelter.

Alkaline decomposition

Induction smelt with mixture of CaCO3 and CaCl2, leach with water to yield CsCl.

Direct reduction

Induction smelted with Na, K or Ca metal (expensive, maybe consumes twice the metal).

Electrolysis

Elecrolyze CsCN. How to get this?

Thermal decomposition

Cook CsN3 at 400C. Seems complicated. Should increase yield. Relevant reactions:

2 CsSO4 + Ba(N3)2 → 2 CsN3 + Ba(SO4)2 2 NaN3 + BaX → 2 NaX + Ba(N3)2 2 NaNH2 + N2O → NaN3 + NaOH + NH3 2 Na + 2 NH3 → 2 NaNH2 + H2

Rubidium

The caesium alum can be fractionally crystallized to yield tiny amounts of rubidium.

Bastnasite

Cerium

Treated with H2SO4 to make water soluble sulfates. NaOH is added and thorium hydroxide precipitates. Ammonium oxalate precipitates rare earths as oxalates. They are heated to oxides and dissolved in HNO3, leaving behind insoluble cerium salts. Those can be induction smelted with Ca or melted and electrolyzed.

Oxalic acid: NH4OH + oxalic acid -> ammonium oxalate glucose + HNO3 (or air) –V2O5–> oxalic acid

Nitric acid:

  • Large scale at 500K, pressurized air for O2: 4 NH3 (g) + 7 O2 (g) → 4 NO2 (g) + 6 H2O (g) [platinum/Rh catalyst] 4 NO2 (g) + 2 H2O (l) → 4 HNO3 (aq)
  • Small scale: 2 NaNO3 (s) + H2SO4 (aq) → 2 HNO3 (aq) + Na2SO4 (s)

NaNO3 is produced from NH3, perhaps via HNO3 (air with platinum catalyst, 700-850 C). 2HNO3 + soda ash => 2NaNO3 + H2O + CO2. There are other ways, like via NH4NO3. Should also be obtainable from RC saltpeter (various nitrate salts).

Tantalite

Gravity separation.

Tantulum/Niobium

Treated with HF to yield complex fluorides. Those are separated by liquid extraction, with water/cyclohexanone as the solvents. Both niobium and tantalum are extracted. The tantalum (or niobium) fluoride is precipitated by addition of KF, and the result is reduced with molten Na.

Cyclohexanone results from oxidizing cyclohexane in air with Co catalyst. Cyclohexane results from reducing benzene. This means mixing gaseous benzene and H2 with a Pt or Raney Ni catalyst under high temperature. Cyclohexane is then condensed.

Benzene results from oil refining.

Molybdenite

Molybdenum

Like any sulfide, it is roasted to an oxide at 700C. It can then distilled (sublimated at 1100C) or dissolved in ammonia. To get molybdenum metal, reduce with H2 gas.

Ferromolybdenum for steel

Aluminothermic reaction w/ the purified oxide and iron.

Rhenium

Rhenium oxide is filtered from the gas during roasting, leached with water and treated with NH4Cl to precipitate ammonium perrhenate. It can be reduced with hot H2 gas.

Malachite

Copper

Smelt it.

Glauconite

Fertilizer

Smelt, and leach with HCl to make KCl.

Alunite

Alum

Calcined at low heat, leached with water, evaporated.

Potassium

Roasted at 1000C to produce K2SO4 and Al2O2. The K2SO4 is water soluble and can be leached off, filtered and the water is evaporated.

Aluminum

Alumina is the filtrate after roasting and water leaching.

Fluorite

HF

Dissolve in H2SO4. CaF2 + H2SO4 → 2 HF + CaSO4 HF is also a by-product of making phosphoric acid from apatite.

Cryolite

See Bauxite section.

Graphite

Graphene

Barite

Barium

Like any sulfide ore (froth flotation, etc). Except if induction smelted with aluminum or silicon dust, the yield is doubled.

Celestine

SrCO3

Two methods:

Direct leaching
Leach with Na2CO3.
Black ash
Induction smelt with coal dust to 2 black ash, leach SrS with hot water, treat with Na2CO3/NH4CO3. This doubles yield vs. direct leach.

Strontium

Produce 2x SrO dust by induction smelting SrCO3 with coal dust. Roast that to Sr. Or smelt SrCO3 directly for one yield. Or directly smelt SrSO4, which consumes a lot of energy and offers no gain via the black ash method.

Apatite

Beneficiation: after grinding, purify through froth flotation after coating with fatty acid (doubles yield).

Fertilizer

Fertilizer needs to provide some combination of three nutrients: nitrogen, phosphorous and potassium.

Pure phosphorous fertilizer is phosphate, P2O5, but it is typically combined with NH3 for N+P fertilizer. Treat with H2SO4, separate out resulting gypsum and H3PO4. Neutralize H3PO4 with NH3. Yields 2 fertilizer per dust.

Alternative for N+P: treat apatite with HNO3 to make H3PO4 and Ca(NO3)2 mixture.

Pure N fertilizer is typically NH4NO3, formed by treating NH3 (g) with HNO3 (aq). And then dried. The reaction is extremely exothermic.

For K, simply add KCl (2 NP fertlizer + 1 KCl -> 3 NPK).

Arsenic sulfides

Many sulfide ores contain arsenic sulfide minerals like realgar and arsenopyrite. These volatilize upon roasting of the ore at 500-800C. The gases are burnt in O2 to produce As2O3, which is condensed at ~100C, leaving SO2 in the gas phase.

Arsenic

Arsenic metal results from reduction of As2O3 with carbon at 500-800C.

Beryl

Oil and natural gas refining

This is the most complex chemical process. Many materials will be derived from petroleum.

Here is a good book: “Petroleum refining in nontechnical language”. Available from the Palo Alto library.

Resources

Oil can be found in liquid deposits, or can be produced from kerogen-rich oil shale, with veins of so-called liquid “tight” oil. Oil shale also contains pockets (perhaps vein-like fractures) of natural gas (called shale gas). Alternatively or in addition, shale could yield shale gas by chance when broken (like gravel yielding flint). However, most natural gas occurs in isolation or in association with oil (above).

Natural gas is mostly methane (95%), with some amount of ethane (3%), and propane (0.2%).

There are about 150 types of crude oil on the market, typically classified along two axes: heavy/light (density) and sweet/sour (sulfur content). The two variables are correlated: the heavier, the sourer. Extremely heavy/thick oil is called bitumen. The chemical composition can also vary. Hydrocarbons up to C4 (butane) are usually dissolved gas (natural gas).

With regard to shale, while tight oil is light, shale oil probably falls under the “extra heavy” category.

From this we could come up with this composition for each type:

TypeAlkanesNaphthaAromaticAsphaltH2SOccurrence
Light50%45%5%0%0.5%10%
Medium40%48%10%2%0.75%20%
Heavy30%50%15%5%1%15%
Extra heavy15%45%30%10%2%25%
Oil sand10%20%50%20%3%30%

Densities from light to extra-heavy: 0.8, 0.9, 1.0, 1.1

But that is just chemical composition. In terms of crude fractions and products:

TypeFuel gasL NapthaH NapthaKeroseneLGOHGORes
Light10%40%30%10%5%0%5%
Medium5%15%35%20%10%5%10%
Heavy0%5%15%25%25%10%20%
Extra heavy0%0%5%10%15%20%50%
Bitumen0%0%5%10%15%20%50%

The main difference between extra heavy and bitumen is the viscosity: bitumen is highly viscous.

GasCraft generates shale oil and gas, and Buildcraft generates oil, although in weird fountains.

Unit Operations

Atmospheric distillation

Desulfonation

Sulfur compounds will interfere with catalysts, so they are removed by treatment with H2 to form H2S (g). That is then removed by: H2S + ZnO -> ZnS + H2O.

Catalytic reforming

Reforms the heavy and sometimes light naphta streams into more complex, higher octane hydrocarbons. There are four reactions:

Dehydrogenation
changes naphtenes to aromatics like toluene
Isomerization
creates isoparaffins from paraffins
Aromatization
creates aromatics from paraffins
Hydrocracking
breaks paraffins into shorter paraffins

The liquid naphta is mixed with H2, the mixture is heated to vaporize the naphta and they enter the reactor with the platinum/rhenium catalyst. The result is cooled to condense the hydrocarbons. This process must be preceeded by desulfurization.

Aromatics can be separated by extraction with diethyl glycol or sulfolane. Distillation separates compounds like benzene.

Diethyl glycol comes from reacting ethylene with air (or O2 is faster) w/ Ag catalyst to produce ethylene oxide. Ethylene oxide is useful for all sorts of things. It is converted into ethyl glycols by mixing with water at 200C. Distillation separates mono/di/tri-ethyl glycols.

Sulfolane results from reacting butadiene with SO2 and reacting the resulting sulfolene with H2 (g) w/ Pt or Raney nickel catalyst. Raney nickel is an Ni/Al alloy, activated by Zn or Cr.

Steam cracking

This breaks naphtas into smaller hydrocarbons. Naphtas are mixed with steam and heated to 850C, then cooled. Light naphta generates ethylene (and propylene/butadiene), while heavier naphtas generate benzene (and toluene/xylene). Distillation separates the components.

Steam reforming

Produces H2 from hydrocarbons: At 700-1100 C, endothermic, via Ni catalyst, CH4 + H2O => CO + 3H2

Gas-shift

Produces H2 from the CO left over from steam reforming. At 300 C, with magnetite catalyst, CO + H2O => CO2 + H2

Streams

Light naphta

Heavy naphta

Recovered waste products

Vanadate

Coke from oil refineries contains vanadium. The coke is leached using sulfuric acid and then ammonium vanadates are precipated, as from magnetite.

Food processing

http://www.nzifst.org.nz/unitoperations/

Manufacturing

Processes

Basic processes:

  • Casting/molding: shaping a material as liquid, then solidifying.
    • Perhaps the only mod that casts molten metal is Tinker’s Construct.
    • Perhaps no mods attempt to model plastics.
  • Forming: reshaping of solid metals, plastics, without losing material.
  • Machining: cutting a material into a specific shape.
  • Joining: connecting two objects.

Casting

Types:

Centrifugal
For making cylindrical shapes, like pipes and buckets. Materials: iron, steel, glass, aluminum, copper, nickel.
Continuous
Produces billets, blooms and slabs for easier rolling. This usually happens at the time of smelting. Metals: steel, aluminum, copper.
Die
Forcing molten metal into a cast. Metals: Zn, Cu, Al, Mg, Pb, pewter, Sn. Produces large quantity of small castings.
Investment
For most intricate casts; traditionally based on beeswax, now foam. Expensive. Metals: Fe, Al alloys, steel, Ni alloys.
Sand
Sand casts are the most common. Actually a mixture of sand, clay and refactory materials.
Permanent mold
Mold made from metal.
Shell mold
Like sand casting, but mold is a shell formed with sand mixed with resin. Since mold is expendable, more complex shapes can be cast.
Spray
Semi-liquid metal is sprayed onto a substrate.

We could have smelting machines that output molten metal prior to casting. The metal could be piped to a particular casting unit, such as a continuous caster to produce billets that are cheaper to form in e.g. a rolling machine. With the exception of centrifugal casting, the different casting methods are mostly distinguished by the type of mold. Thus, we could have one primary casting machine that accepts different types of molds. The type of mold required depends on the product.

Molding

Powder metallurgy
Metals shaped as powder, then heated to bind. This could be a heater using metal dusts as input
Plastics

Forming

Forging
Applying localized pressure to draw out, shorten, squeeze, etc, a metal. Like the GT Forge Hammer.
Rolling
Squeezes metal between two rollers to make plates and rods. Provided by RC.
Extrusion
Pushing/pulling a substance into a mold.
Pressing
Pressing a pattern onto a material.
Shearing
Cutting stock into smaller pieces.

The RC rolling machine and GT forge hammer may be sufficient.

Machining

Milling
Rotary cutter, workpiece advanced at angle to tool to remove material.
Turning
Workpiece is turned against linear cutter. The Gregtech lathe is one example.

It seems the simple GT lathe is sufficient. There is also a potential manual equivalency in forge multipart and its diamond saw.

Joining

Products

Research

Chemical Compounds

The player could research the properties of chemical compounds in a realistic manner. Lab equipment and instruments would be crafted and applied to some compound. The lessons learned would be recorded in a lab notebook, which has limited durability (becomes filled with notes). Once all properties are known, the compound may be used in industrial processes (put into production). The trick is to research efficiently, without wasting notebooks and other resources. All knowledge ends up in a searchable chemical reference book.

Worldgen

Ore deposits

By default, all ores will be modeled as veins. PFAA will not actually generate any ores. Instead, we will provide a COG config.

First, internal deposits. Magmatic processes separate ores either along a temperature gradient or through solubility differences. The latter generates metal sulfides. Hydrothermal action also typically generates sulfides, since sulfur is able to carry the metal in the aqueous phase.

The surficial deposits generally consist of oxides. These need to be processed very similarly to sulfides. Do we distinguish between oxides and sulfides? It would present interesting chemistry. Sulfides are a source of PGEs, especially with Ni, Cu, Cr and Co. Perhaps more importantly, the SO2 produced by smelting can be reclaimed as sulfuric acid. The obvious disadvantage would be the need for additional block IDs. It also opens the door to modeling specific minerals. The advantage would be that minerals could be used for other purposes. Mostly, these relate to coloring and other decorative aspects. Nothing wrong with that.

Some specific types of ore deposits:

DepositOccursOresMinerals
Banded Iron FormationSedFe
Volcagenic Massive SulfideOcean, ice mountainsCu Zn Pb Au Ag (bp: Co Sn Ba S Se Mn Cd In Bi Te Ga Ge)
Sedimentary ExhalativeSedPb Zn Ba (less: Ag Cu Au Bi W)
PorphyryBreccia veins in dioriteCu (rare: Mo, Ag, Au)
Layered intrusionsPeridotite, gabbro, dioriteCr Ni PGE Ti Vn
KambaldaSerpentineNi
PlacerRivers: gravel, sandFe(mag) Sn RE Cr granite:Ti(ru)/Zr basalt:Ti(il)Au drop, granitic: W drop, basaltic: diamond, sapphire drop
PegmatitePlains: graniteW-rich, Li-rich: Li Cs Nb Ta (Be)aquamarine tourmaline topaz fluorite apatite corundum
SerpentiniteAnywhere, more common deep, EH/OceanNi, chlorite, magnesite, chrysotile
CarbonatiteMountains: graniteFe(mag) Th Ba Cu U Ti REapatite, verm, fluorite
EvaporitePlains, desert
Iron Oxide Copper GoldBreccia veins under BIF in graniteCu, Au
Conglomerate Au/UVeins in bowl of conglomerateAu, U
Granitic Cu/Au (Sn/W)Veins in graniteCu Au (less: Sn/W)
Carbonate Zn/PbLimestoneZn Pb
GreenstoneGreenschistCu+Au Zn/Pb

Placer deposits could be modeled by shoveling a black sand, with a gold nugget as a rare drop. Pulverizing generates 1 magnetite dust, with a 10% chance of gold nugget. Use of a magnet (factorization) would also separate magnetite.

Banded Iron Formations consist of a single, banded block. Pulverizing yields 2 hematite dust, with 20% chance of magnetite dust. The hematite can be hydrated to red dye, or smelted to iron, like magnetite.

Laterite soils are a type of clay, except cooking is not necessary to produce bricks. They can be simply crafted into bricks. It is found only within jungles. Within the laterite, there will be child veins of bauxite (25%), and iron ore (75%). The lateritic iron ore is of two types: yellow and brown (ochres). When pulverized, they yield the corresponding dust, plus a 5% chance of nickel ore dust. The dusts can be smelted to iron, or hydrated to brown or yellow dye. Smelting is a one-step process for the blast furnace, while for other furnaces the ore is first smelted to hematite, which is smelted to iron.

Marine evaporite deposits will consist of limestone, under gypsum, under rock salt. Grinding limestone yields calcite + some chance of dolomite. Grinding gypsum yields the mineral itself + 20% native sulfur. Grinding rock salt yields halite + 50% sylvite. Perhaps grinding sylvite could yield MgCl2, say 20% of the time. Borax and soda ash occur in lake evaporites (desert-hills only).

The VMS deposits occur through feslic volcanic activity in mid-ocean rifts and continental back-arcs (ice mountains). The morphology is globular, with chalcopyrite at the bottom and sphalerite/galena towards the top. Gold at the top.

There is some desire to balance the distribution of ores between biomes, so we outline them here by biome:

BiomeRocks
Continentalsedimentary, granite, diorite
Extreme Hillsrhyolite, andesite, granite, diorite, gabbro
Oceaniclimestone, basalt, gabbro
BiomeOres
Continentaldolomite, coal, BIF, LI, SEDEX
Extreme Hillsvolcanic ash, 2*LI, carbonatite
(Frozen) Ocean2*dolomite, 2*VMS, LI, 2*SEDEX, 2*BIF

These are all considered continental:

(Ice) Plainsevaporite, 2*iron
Beachbasaltic/granitic/garnet sand
(Frozen) Riversgranitic sand
Desert (Hills)quartz sand, evaporite
Swamp2*coal, laterite
Jungle (Hills)laterite
Ice MountainsVMS, 2*iron, granitic/garnet sand
Taiga (Hills)2*iron
Forest (Hills)conglomerate bowls

Special consideration: Biomes o’ Plenty

Most BOP biomes will be caught by the biome dictionary matching. There are some that are special though:

Alps
Collision of European and African plates, was once an ocean between. The tallest reaches are metamorphic, i.e., gneiss (primarily), schist, greenschist, etc, while the rest tends to be sedimentary, consisting of greywacke (a sandstone that is like a fine-grained breccia), limestone (primarily) and mudstone. Beneath the alps one finds the gabbro/basalt that underlied the ancient sea, as well as some granitic intrusions. Perhaps we could model all folded mountains as being mudstone, then limestone and then gneiss at the peak, in other words, start with the ocean but instead of the basalt islands, switch to continental.
Wasteland
Evaporite deposits.
Badlands
Formations largely sedimentary, inter-mixed ash.
Volcano
Basalt instead of sediment.
Hot Springs
Rhyolite near the surface, instead of sed. Intermixed with volcanic ash, pumice, etc.
Outback
Primarily sandstone.
Highlands
Modeled as the Scottish Highlands, we would have (green)schist/slate on top, with lower regions consisting of sandstone (primarily) and conglomerate. Serpentinite veins throughout.
Glacier
Could model as Yosemite, with granite domes.

BOP bugs:

  • Chapparal is not plains but rather hills.
  • Are the tropical and plain rainforest mixed up in temp/rain?
  • Mountain has its min/max height set twice?
  • Why are fen and moor not typed as a swamp?

Native metals

The following native metals are relatively common:

  • Gold
  • Silver (usually w/ gold as electrum)
  • Copper

And various PGE metals occur, often as alloys:

  • Platinum
  • Osmium (+ Ir, Ru)
  • Iridium (+ Os + Ru)
  • Ruthenium (+ Ir)
  • Palladium (+ Pt)
  • Rhodium (+ Pt)

Native copper (10%), gold (10%), electrum (5%) could be dropped from conglomerate. The other native elements would require more advanced processing. Realistically, copper nuggets are much rarer than gold nuggets, but in terms of gameplay, it would be interesting to force initial copper extraction to nuggets.

Extra planets and moons

Eventually, we want to include all planets (including exoplanets) and moons (including psuedo-randomaly generated ones).

Mars

Physical properties

  • Mass: 0.107 Me
  • Gravity: 0.376 g
  • Temperature: -143/-63/35
  • Pressure: 6 mb (Humans require: 61.8 mb)
  • Atmosphere: 95% CO2, 3% N2, 2% Ar
  • Crust thickness: 50km (Earth: 40km)
  • Light intensity: 44% of Earth

Crust composition

There is a thin layer of dust (regolith). The red color is caused by iron oxide, mostly in the form of magnetite (TFC), and hematite (TFC) + goethite (TFC). The magnetite causes the dust to be magnetic. The bulk of the dust consists of pulverized plagioclase feldspar (say, labradorite), zeolite, and to a lesser extent pyroxine and olivine. There is an enrichment for sulfur and chlorine. The dust is only millimeters thick, so we might be able to model the dust like “snow” and have dust storms.

Beneath the dust is finely broken up basalt, enriched with sulfur and chlorine. These deposits are not concentrated enough to mine, but it may be that plants could grow in the soil, with some nitrate fertilizer, perhaps, and a greenhouse to control the temperature and pressure and filter out the radiation. More about soil: http://chapters.marssociety.org/winnipeg/soil.html

The primary type of rock near the surface is basalt (TFC), followed by andesite (TFC), which is more common in the northern hemisphere. In the lower layers of the crust, andesite dominates, intermixed with other igneous rocks like dacite (TFC) and granite (TFC).

In fluvial landforms (where water was present), near the surface, one can find hematite (TFC), kaolinite (TFC), kieserite, jarosite (uninteresting), opal (TFC) and gypsum (TFC). Sandstone is also present. Maybe limestone (TFC). Also, the Columbia Hills (in Gusev Crater) have minerals formed in the presence of water: http://en.wikipedia.org/wiki/Columbia_Hills_%28Mars%29

Mineable resources

Ores:

  • Magma action: Ni-Cu-platinoid clusters, Ti, Fe, Cr
  • Hyrdothermal action: Cu, Zn, Pb, Se, Sb, Cd, As, Ag, Au, Te
  • Soil deposits: basaltic soil might contain chromite (CrO2), magnetite (Fe3O8), ilmenite (TiFeO3)
  • Fluvial deposits: Mg + SO4 (kieserite), Ca + SO4 (gypsum), hematite blueberries
  • Pegmatite deposits near granite: Li

By platinoid, we mean the elements Pt, Pd, Os, Ir, Ru, Rh (very rare). These could be produced as a by-product of processing Ni/Cu, or even from nuclear reactors. Mostly used for catalysts (especially Pd).

Ores produced by magma action will commonly occur near the surface in the volcanic regions. Otherwise, one needs to dig really deep. The hydrothermally concentrated ores will be present throughout at moderate depths, and at low depths in impact craters and volcanic regions. Soil is uniform throughout, except in the fluvial deposits, which have their own surface composition and are found in the valleys of the southern hills and impact craters.

Water ice will be a minable resource on Mars (and other cold planets). This will be found as ice in the polar regions (perhaps covered by a layer of dry ice) and also under the surface. The northern lowlands and basins will have ice near the surface, while one will need to dig deeper in the southern highlands. Volcanic regions are unlikely to have any ice, perhaps a little liquid water.

Also important are geothermal energy sources. This “heat” could be modeled similar to lava (as a flow) and some machine could be attached to such a heatflow to capture it.

“Geomes”

The two hemispheres of Mars are quite different:

  • Northern hemisphere (lower, younger, smoother, 32km crust thickness)
  • Southern hemisphere (higher, older, craters, 58km crust thickness)

The Northern hemisphere accounts for 1/3 of the surface area.

Straddling both is the Tharsis volcanic bulge, which are extremely tall volcanoes, with sharp ravines running outward. 7-10 km above the surroundings. May account for 25% of the total surface area.

There are several large, ancient impact basins, surrounded by low volcanoes. Deepest point at 8km below “sea level”. Full of sedimentary material. Possibly 10% of surface.

There are large ice caps on both poles. 10%?

Huge canyons (Valles Marineris), 4000km long, 10km deep. There are similar, huge outflow channels, with lots of sediment.

In summary, we might have the following biomes:

  • Plains (25%) [ocean] [plains]
  • Southern hills (25%) [ocean] [desert hills] [+basins] [+canyons]
  • Volcanic bulge (25%) [minor: hills] [extreme hills] [+canyons]
  • Ice caps (10%) [minor: plains, hills] [ice plains]
  • Impact basins (10%) [generated]
  • Canyons (5%) [generated] [ravine]

To really communicate the scale of these features, compared to Earth and all of its weathering and balanced igneous activity, we would probably need to increase the height of the world 4-5X. Without insane hacking of the code, the true upper limit is to increase terrain generation up to 256 (2X). We will defer this until we get functioning biomes.

Portal

To be most realistic, we would want the player to construct a space ship and lauch to Mars. The amount of resources required for such a trip would be generally prohibitive. Therefore, we can rely on inspiration from rituals related to Mars/Ares. Ideas:

  • Kill a puppy at night (reflects the sacrifice of puppies). Do we want this to be on an altar? Like a 1x3 stone surface, with torches. Or any stone?

Terraforming

Venus

Mercury

Asteroids

4 Vesta??

Sure, it is tiny, but it is also fairly well characterized.

Jupiter’s moons

Ganymede

Io

Europa

Callisto

Saturn’s moons

Titan

Enceladus

Uranus’s moons

None worth it

Neptune’s moons

Triton

Pluto, other KBOs

Exoplanets

Exoplanet Generation

The main challenge will be creating semi-realistic exoplanets, with interesting, playable and challenging combinations of resources and conditions.

High-level Considerations

Let us begin with purely physical considerations. A planet will have a certain:

  • gravity,
  • temperature (orbital zone, albedo, greenhouse effect of atmosphere),
  • weather, like rain (presence/type of atmosphere)
  • length of day (spin rate; could be tidally locked),
  • atmosphere composition (mass, temperature, crust composition),
  • crust composition (raw material, orbital zone, volcanism, water),
  • potential for alien life (temperature, atmosphere, surface liquids)

Here are some simple relationships:

  • Mass depends on radius and density.
  • Orbital zone depends on the type/size of the star, and the distance from the star.
  • Albedo depends on the atmosphere and surface; we might just work off of the Kepler assumptions.
  • Volcanism depends on the density of the planet.

We know these values from Kepler:

  • mass
  • gravity
  • orbital zone
  • temperature (need to somehow adjust for atmosphere)

The other things are more complicated.

Crust composition

Planets are formed from material left over from star formation, so the composition of the raw material will be similar to that of the star. Since the material must be solid to accrete into a planet, the composition also depends on the the orbital zone. There are three basic types of material:

  • Metals (Fe, Ni)
  • Silicates (Si)
  • Ices (C, N, O, S)

We have measurements for C, O, Si, S, Fe, and Ni. Notably, we are missing N, so we will need to assume the solar fraction for that. All other minor elements not mentioned here will be assumed present at solar fractions.

Metals

The metals will be complexed to form:

  • sulfides like FeS (assume 3/4 of S is consumed),
  • then oxides like FeO, and finally (probably just ignore)
  • carbides (when C dominates O, i.e., where it is very hot).

This is really just important for calculating the amount of remaining oxygen.

Silicates

For the silicates, Si will mostly form compounds with Mg, and to a much lesser extent with Ca, Al, Na and Ti (in decreasing order). These include MgSiO3 and Mg2SiO4. Let us just assume that oxygen is consumed at 3X the rate of silicon.

Volatiles

The remaining volatiles will condense in the form of clathrates (gas trapped in water crystals), hydrates and pure condensates. This depends on two variables: the temperature of the disk and whether the environment is oxidizing or reducing.

First, for low temperature, in an oxidizing setting, we have:

  • water
  • carbon monoxide (CO)
  • carbon dioxide (CO2)
  • methanol (CH3OH)
  • methane (CH4)
  • nitrogen (N2)
  • ammonia (NH3)
  • hydrogen sulfide (H2S)
  • phosphine (PH3)

Assume these ratios:

  • CO/CO2/CH3OH/CH4: 70/10/2/1
  • N2/NH3: 10/1
  • H2S/S: 1/2

In the reducing environment, carbon is only found in methane, and we flip the N2/NH3 ratio.

Oxidation is only possible for C/O < 4/5. Just below the boundary, the oxygen is consumed by oxidation, and there is none left for water. Reducing conditions occur for any C/O value, so low C/O values will be high in water, and even high C/O values will have some water.

At warmer temperatures, solids are converted to gases. CO and N2 will be the first to convert as temperature increases. It seems reasonable to assume that planets initially form in the cold, and then as the disk clears up, the temperature increases and the most volatile compounds reenter the gas phase. However, this is complicated: http://phys.org/news/2012-07-earth.html

Atmospheric composition

A planet will capture a tenuous atmosphere prior to formation (mostly H and He), but this is likely to change according to complex, geophysical processes that are beyond our ability to model. Sorry. For interest in the case of Earth, see: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC31109/

We can say, however, that a planet must have a sufficient mass to retain an atmosphere. This is due to gravity, and the extent of the magnetosphere. So far, we have not found any exoplanets that small, but we can model the thickness of the atmosphere by the mass.

It comes down to plate tectonics, major impact events, and complex systems. We will assume outgassing is the major player, because other events like comet impacts probably are not generally significant. Roughly, the bigger the planet, the more geological activity and the more outgassing. Usually, the outgassed material will be water vapor, nitrogen or carbon-based. In colder regimes, ammonia or hydrogen sulfide are possible. Once released, the compounds are oxidized by photoreactions (and other things). This means that a carbon-based degassing will eventually end up as CO2, H2S as SO2, PH3 as PO3, and NH3 as N2. The temperature does not necessarily be high enough to maintain the compounds in the gas phase, as long as their is replenishment (from life or volcanism). The oxidation of methane would lead to heavy hydrocarbons that would form seas.

Once the gases are established, we can model the temperature by the amount of greenhouse gases. The more greenhouse gases, the higher the temperature (above the Kepler lower limit) and pressure. That will help determine the liquid phase elements on the surface, and establish a geochemistry. If we determine that biochemistry is possible, this will lead to production of other gases.

Types of Geochemistry

In the below, we assume life is carbon-based. We might go after silicon-based life later.

Water

This is like the Earth. Requires liquid water on the surface. Water cycle produces water vapor in the atmosphere. And life would produce oxygen. For simplicity, we assume a planet has a single geochemistry.

Carbon

So-called diamond planets. Requires a very low oxygen content, so that metals and silicate form carbides. Any oxygen gets tied up into CO. Lots of methane, which could form hydrocarbons that rains down to produce tar lakes. Life would breathe CO2 (a major component of the atmosphere, with CO), and breathe out O2 (minor component). Where does all that oxygen come from? Probably deposited by impact events, in the same way that Earth got carbon.

Sulfur

Would have sulfuric acid (H2SO4) instead of water. There would be trace sulfuric acid vapor in the atmosphere, and life would produce O2. Animals would breathe as on Earth. N2 would be the other major component. Why would H2SO4 be favored over water? There would need to be a lot more sulfur. Would also tend to be hotter (around 88 C).

Methane

Would be very cold, around -179 C, so that methane could serve as an alternative to water. Life would produce O2 and N2 from trace amounts of NO (oxidized from the dominant N2).

Phosphorous

Based on phosphoric acid (H3PO4) instead of water. Atmosphere will contain a lot of PO3. The animals would breathe that and exhale PH3 and CO2. Would need to be really hot (171 C). And probably a lot of initial PH3.

Ammonia

Very cold (-115 C), so any water is frozen and NH3 replaces it. Life would produce N2 and O2 from NH3 and CO2. Animals would breathe the O2 and exhale CO2, like on Earth.

Iron

Nothing but an iron core. These are probably uninteresting. Exclude them?

Putting it all together

Here is an algorithm:

  • Choose an exoplanet with a known mass, radius, distance from sun, gravity, and temperature. We assume its star has a known chemical composition.
  • Determine a spin rate for length of day. How?
  • Determine the stone/mineral/ore/metal compositions from observed Fe, Ni, and Si = Mg amounts, assuming other metals are like Earth.
  • For the volatile C, N, O, S, P, determine amount of volatiles.
    • First decide redox state: C/O > 0.8, reducing, otherwise 50/50.
    • For oxidizing, oxidate C according to ratios.
    • The rest of O becomes water.
  • Estimate the temperature in the protoplanetary disk to determine which volatiles were stable enough to condense. For simplicity, we assume the planet temperature is the same as its embryonic temperature.
  • Simulate outgassing, establish an atmosphere.
  • Simulate any greenhouse effect, increase temperature accordingly.
  • Establish a geochemistry. To keep things interesting, this should also include a biochemistry.
  • Regenerate the atmosphere, based on the chemistry.

Simple classification

Because we need to ensure playability, it is not feasible to simply randomly assign all of the parameters indepedently. Instead, we should have classes of planets (sort of like biomes, although planets should have multiple biomes). Within a class, there is a small amount of variability.

The broadest classification would be something like:

  • Gas giant
  • Ice giant (really a gas giant with supercritical water/methane)
  • Terrestrial (rocky)

Gas giants would be a tough environment, since it would not be possbile to survive on the core, if any. In theory, things could be made placeable on gas blocks, while the player would still move through them. It would be totally trippy though.

If we chemically classify terrestrial planets, we have:

  • Silicate planets (like Earth and Minecraft), most common (~96%) in galaxy
  • Carbonate planets (diamonds)
  • Iron planets (one big core)
  • Chlorine (rarest)
  • Ammonia
  • Phosphorous
  • Methane (like Titan)
  • Sulfur
  • Water (like Earth)
  • Ocean

Since the biogeochemistries other than silicate/water are extremely rare, we should probably stick to the familiar, especially given our educational motivation.

The physical classifications are perhaps more relevant:

  • Lava (protoplanets, close orbiting), making up almost 50% of exoplanets
  • Crater (due to lack of atmosphere)
  • Bare rocks (lifeless)
  • Desert
  • Ice
  • Ocean
  • Forest
  • Civilized

But who really wants to play on planets that are entirely desert, or ocean, or lava, or lifeless? Well, there would still be:

  • Interesting crust composition for mining, with possible subterranean life. Depending on the planet radius and silicate content, the crust can be quite deep.
  • The technical challenges of constructing, configuring and managing the colony structure and the robots.
  • The terraforming challenge.

The surface could be made more interesting by having supply pods scattered all over the planet that were dropped during the crash.

Star travel

Goals

On any planet, the goals are:

  • To survive
  • To build a spaceship and fuel for traveling onward
  • To terraform the world for long term settlement

Traveling onward

This goal solves the end-game problem, where the player has solved all challenges. The player is given the opportunity to leave the conquered world behind, and to start a-new. However, there is some continuity: the player is allowed to stock the ship with supplies, and subsamples of that inventory appear as supply modules strewn about the new world.

Terraforming

It is not clear how we will model this, or how it would benefit the robot player. It would be cool though to have NPC colonies appear as the conditions were improved.

Robotic player

The idea is to initially model the player as a cyborg. This puts less constraints on the player in hostile environments. It also opens up interesting possibilities for modular player abilities. The robot should be humanoid, for simplicity. We still want to model the environment, because one goal is to bring NPCs (non-cyborgs) to the world.

Component-based abilities

The player abilities will be based on a component system, which replaces the armor system. Instead of having a helmet, breast plate, etc, the robotic explorer will have the following component slots. There is a basic, built-in component of each type that never wears down. The others have a limited life-span.

It turns out that IC2 already has the battery backpack and solar helmet, which behave pretty much as we imagined. The gravitation suite addon even extends the batpack to support flight. And electric armor is essentially a shield. Really, our only contribution will be fuel cells as battery alternatives, plus different levels of batteries and solar cells.

This is also related to the mecha-armor of Factorization.

Solar panels

There will be different levels of solar panels, with increasing efficiency and cost. Solar panels yield electrical power, at a rate depending on the type of panel and the amount of light. When the energy is not being used (i.e., when the player is not moving or working), the energy is deposited into the battery.

Battery

Better batteries: more storage, slower discharge.

Fuel cell

This provides power in addition to the solar panels and is necessary for powering heavy duties, like drilling/digging. The energy output will depend on the type of fuel. Excess energy is deposited into the battery.

Question: could the fuel cell and battery fill the same slot? Batteries should be capable of powering heavy machinery (at least the type of machinery a humanoid robot would operate). An alternative would be to support only batteries, and fuel cells would charge the batteries. It makes sense to generalize: a fuel cell and battery are both energy sources; the difference is that the battery requires electricity for recharging, whereas a fuel cell simply needs to be refilled with fuel.

Auxiliary system

There will be one auxiliary that will consume power. Possibilities:

  • Balloon/dirigible
  • Shield (combat, lava diving)

Respiration

The cyborg has a built-in air tank that automatically recharges when in breathable atmosphere. The tanks will store much more air than a single lung’s worth, so the constraint is more similar to hunger than swimming. The player can carry additional air tanks, along with food.

Environmental Modeling

Atmosphere

Important atmospheric properties are:

  • Temperature (depends on day/night)
  • Pressure
  • Composition

Possible to do this by having special breathable air blocks that change properties when they become adjacent to cold or raw atmosphere. This may be too complicated though. Easier to use force-fields (via MFFS) and then detect when a player is outside of a force-field. Non-cyborgs have a limited amount of time before death. This depends on the three properties above, but comes out to around 30 seconds maybe for Mars.

If there are missing life support systems within the force-field, the atmosphere will slowly deteriorate (over the course of say, one day) and then things start dying. The HUD can show the current temperature and composition status (green, yellow red; not exact values) for the current dome.

Radiation

Planets with thin atmospheres and magnetospheres will not be able to block the light from the sun. Depending on the type of star and distance, this could mean lethal doses of radiation. Effects of this radiation would be long-term, however, so it is tough to model. Perhaps it would affect the growth of plants.

Life Support

Machines, mechanical or biological, will be capable of conditioning the air. These include:

  • Heater/Cooler (increases/decreases temperature, pressure)
  • Oxygen generation (electrolysis, biomass)

Both types of oxygen generation require water. The ship will come with a finite water source. The occupant will produce water as water vapor (exhalation) and as waste (urine, feces). The life support system must recover that. Otherwise, it needs to be provided externally.

The obvious advantage of a farm is the consumption of CO2 and the production of food, thanks to photosynthesis. The light could come from the star, or artificial lighting.

So, in summary, there are three machines:

  • Heater[Factorization]/cooler
  • Greenhouse: <= free CO2, <= H2O, => O2, => food
  • Water reclaimer [TE Aq Accumulator]: <= free H2O, => captured H2O

And the “world” inside the habitat converts O2 to CO2 and generates free H2O (waste, water vapor).

Note that we will avoid detailed modeling of this process. if a machine breaks, bad things happen. The number of plants needed in a greenhouse depends on the population. The better the conditions, the more colonists, the more human resources. Note that water could be obtained from indigenous sources. This is why a heater/cooler is needed: it requires the user to maintain a power source.

Eventually we might add an alternative to the greenhouse:

  • Oxygen generator [IC2 electrolyzer]: <= H2O, => O2
  • CO2 scrubber: <= free CO2, => captured CO2

Progression

An important gameplay mechanic is progression through tiers of technology/development. Some mods model this using history: how one idea led to the next over time. Since we are focused on the present, historical progression is not relevant. Instead, we might follow the technical complexity gradient: one technology depends on having another. The robot is stranded on another world with limited supplies, and the lofty goals of either leaving the planet or terraforming it.

Initiation

How does one become the robot? This could happen through a long string of technological developments, based e.g. on IC2, or we could enable early entry.

Modules

It seems like these ideas are too numerous to pack into a single, monolithic mod. Instead, we could have separate modules:

  • Geologica: rocks and minerals (ores), generated by MOG, biome-based regolith and atmospheric composition.
  • Chemica: Provides chemical recipes and machinery, using the materials provided by geologica.
  • Fabrica: High-level crafting as a result of chemistry.

Similar mods

AstroCraft [1.2.5]

MineCraft floating around in outer space. Gather iron from satellites to build tools and fight aliens.

Solar System Mod [1.2.5]

Implements all planets in the solar system, semi-realisically. Probably the best one out there, and may actually be updated for 1.3.2.

Night Sky + Space Mod [1.2.5]

Similar to Solar System Craft. Adds some goofy planets. Revives the dead Moon and Mars mods.

SpaceCraft [1.2.5]

Revives the Moon mod. Interesting poll on forum: people want realistic planets, not unrealistic ones.

TerraFirmaCraft

This makes survival mode more realistic and challenging. It adds a huge number of ores, stones, minerals, metals, gems, and trees. These can be very useful for teaching geology and (on some planets) biology. We would like to present a similar challenge level; however, it is unclear whether such a low level of technology (starting with bare hands) would be both interesting and an effective means of education. Right now, we are just learning from its code, especially with regard to the world generation. Handling multiple rock types is a pain.

Underground Biomes

This is probably the most similar to geologica: adds 8 types of igneous, metamorphic and sedimentary rock, with ores spawning only in certain rock types. New types of cobblestone, half slabs, etc. Sort of has a different goal though. It wants to make the underground more interesting, including underground villages, etc, while we just want to add more substances to the game.

Gasses in Minecraft

Adds gas sources, transport and processing. About 5-10 gasses are supported; apparently there is an API for adding more. Unfortunately, does not seem to integrate with BC.

GasCraft

Not as mature as “Gasses in Minecraft” but integrates with BC.

FrogCraft

IC2/GT addon that adds industrial chemistry. More similar than MineChem, but we want to be more principled/comprehensive and independent of GT.

Mod Integration

We define a complex chemical model and programmatically manifest it through integration with other mods. Eventually, we might have our own system of machines, but for now, our model is sufficiently detailed such that any external representation is a reduction of its complexity.

Below is a list of the targeted mods and how we might integrate with them. Most of the integration is implicit, i.e., through the ore dictionary, but we will also need to add custom recipes.

Gregtech

Waila

While we will endeavor to have blocks that rely on rendering rather than GUIs, clarity will be limited. Thus, Waila tooltips may help.

RailCraft

  • Coke oven could be generalized to any type of pyrolysis.
  • Rock crusher should handle ores via ore dictionary.

Forestry

  • Ore dictionary should allow rocks/ores in backpacks.

IndustrialCraft

BuildCraft

Generates oil, but Geologica could/should easily do this. The planned distillation tower will be useful.

Applied Energistics

Electrical Age

Mekanism

Witchery

The most chemical of all of the magic mods. Uses actual chemicals in e.g. distillation.

Thermal Expansion

Induction furnace

Could potentially support enhanced reduction. Currently, sand is supported for flux; presumably the electric current is the reductant. But then this should be called an electric arc furnace. An induction furnace is only for melting.

Pulverizer

Mapping from strength to MJ cost:

StrengthMJ
Weak200
Medium300
Strong450
Very Strong675

EnderIO

Provides TE-like facilities for energy storage, item/liquid/power transfer, etc.

Machines:

Ore Smelter
3 inputs (one more than Induction Smelter), one output.
SAG Mill
Grinder with 4 outputs

Resonant Induction

Galacticraft

Obvious base for exploration of other worlds.

Thaumcraft

We should add magical aspects to every item, so that we mesh with magic-based gameplay. The ore dictionary should handle this somehow.

MineChem?

Sort of a scientific mix of EE3 and Thaumcraft. Substances are broken down into chemicals (as revealed by a microscope), and those chemicals can be broken down into their elements. By recombining elements and then combining those compounds, substances are (re)created. Even has BuildCraft and ComputerCraft turtle integration. Models are cool, and the overall concept is as well, but the equivalent exchange mechanic bothers me. Its a lot cooler though than EE itself.

Presumably we could define our chemicals within this system, but for now we can hopefully rely on the ore dictionary.

Electrodynamics

Seems too immature right now, but looks like it has potential.

Libraries

Enchiridion

A library for making custom books; we will have a lot of explaining to do. But can they be generated dynamically? Or do we want to use HQM here to interactively guide the player?

Brewing API

Add new brewing recipes and potions. Perhaps useful for primitive chemistry?

Other resources

Forge tutorials

Books

Chemistry

General reference

Inorganic

Organic

Software Design

Chemicals

Definition

A GeoMaterial represents something naturally occuring that is often extracted for industrial uses. Anyway, a GeoMaterial has a specified material and strength, which corresponds to a particular hardness and resistance, upon manifestation of the substance as a GeoBlock.

GeoMaterials are currently aggregates and ores. The aggregates and have no formalized composition, because it is complex and variable. The ores are also technically aggregates; however, they are primarily composed of one material, i.e., sphalerite ore consists of zinc sulfide, plus impurities. We can therefore claim that sphalerite corresponds to crude zinc sulfide. So while not all GeoMaterials have a one-to-one relationship with a crude material, the ores do. We would include non-stoichiometric compounds in the crude category, so even pure olivine is a crude material.

A true chemical would be produced through purification of a crude material. For example, zinc sulfide would result from extensive processing of sphalerite. While the crude material is obviously not equivalent to the pure substance, they are essentially the same at some level of abstraction. Thus, there could be a link from GeoMaterial to crude material, and from crude material to pure chemical.

Pure chemicals have better defined properties, in particular thermodynamic properties. But even chemicals will not have available values for all of the states. So we need missing/default values. This means that every process will need to handle missing values and do something by default, or nothing.

Obviously chemicals are either elements or compounds. It would be easy to determine whether a compound is a sulfide, oxide, etc, which are so common in ores. Once we get to organic chemistry, we will probably have to resort to adhoc approaches.

Phase

A chemical can exist in any phase: solid, liquid, or gas (we ignore the others for now). A chemical species is some physical manifestation of the chemical in a particular process. It has a definite phase. It is manifested in the game as an ItemStack (solid) or FluidStack (liquid/gas). There can be multiple types of Item/Fluid for a given chemical. For example, zinc could be a dust or an ingot; those would be two different items.

Most of the properties of a chemical depend on its phase. An Item/Fluid will know its phase and provide an accessor for the correct properties.

Formulas

The atomic stoichiometry is specified by a formula. Depending on the type of compound, formulae are written in different ways, usually to expose some aspect of their structure. We care about some of these aspects. For example, for salts, we want to know the cation and anion. For organic molecules, we want to know, e.g. the length of the carbon backbone and any (simple) functional groups. A Formula object, perhaps derived separately for salts and organic molecules, could represent such things. Every chemical would have a formula. That formula would refer to the atoms or groups of atoms that compose the compound. At the leaves are AtomicSymbols corresponding to elements, as well as some special cases like electrons and photons.

How does this work? Take an example “Na2SO4”. This formula consists of 2 components: “Na2” and “SO4”. Each of those are obviously formulae. “Na2” specifies the atomic symbol “Na” and a stoichiometry of 2. “SO4” is a molecule that could exist separately as an ion. The formula “SO4” refers to child formulae “S” and “O4”, which are analogous to “Na2”.

What about the elements? Elements are chemicals, and they correspond directly to the atomic symbols used in the formulas. Elements present at least two problems:

  1. How to define their formula?
  2. The Chemical element and the atomic symbol have the same name, which means we cannot import-static into Chemicals for convenient syntax. We cannot use straight Chemicals to define a formula, because a formula is constructed from formula Parts. Unless we explicitly did C._(1). But it is undesirable for any Chemical to become a Part (only elements make sense).

Solutions to #1:

  1. Do not define an explicit formula; instead just take the name of the enum value, and match it to an AtomicSymbol. A null Formula could be interpreted this way.
  2. Like #1, but do away with AtomicSymbol and introduce a circular reference to the Chemical. Also solves problem #2, but would be nice to limit formula parts to atomic symbols.

Solutions to #2:

  1. If we are not allowed to qualify atomic symbols by e.g. “AS” or “E”, then we need to change the name of the Chemical, e.g. “Al” to “Aluminum” or “_Al”. That is lame.
  2. Define the elements in a separate enumeration. Also lame.
  3. Merge AtomicSymbol and the Chemical elements, i.e., get rid of AtomicSymbol and introduce a new enumeration implementing Chemical that defines the elements. Removes that redundancy. It also solves Problem #1 by introducing a reference cycle (but a cleaner one than any old Chemical). Would have to do ._(1) to convert an Element into a Part, or introduce a PartFactory that provides a Part (basically the factory would be something coercible to a Part). Main downside: another enumeration of Chemicals means another set of items, but maybe just the dust?

For convenience, chemicals are listed in a enumeration. This means they have a name, and the formula is natural for their name. This raises a question: do we derive the formula from the name? Parsing might not be too bad, but how to infer salt, vs. something else? It starts to smell like a heuristic. Not deriving the formula from the name means redundancy; more chances to make an error. The problem is that we are dealing with two languages: Java and chemistry. We have to embed the chemical language in Java; using a Java symbol for a formula does not leverage the Java compiler. And for complex cases, it is insufficient; we would need to write things another way. So let us just construct formulae in a systematic way, and then assign to a Java symbol.

We could use some syntactic sugar for declaring formulas. For Fe2O3, this might be:

salt(Fe._(2), O._(3))
salt(Li._(2), mol(S, O._(4)))

And then a reaction:

LiSO4.plus(NaCO3).yields(LiCO3).plus(Na2SO4)

With stoichiometry:

Li2CO3.plus(2, HCl).yields(2, LiCl).plus(CO2).plus(H2O)

With phases:

term(Li2CO3, s).plus(2, HCl, aq).yields(2, LiCl, s).plus(CO2).plus(H2O)

When we specify “aq” as the state, what does it mean? What we are really saying is that we have liquid water with dissolved HCl. And in fact it is somewhat under-specified. We want to model solutions as either dilute or concentrated. So we want something like:

Li2CO3.plus(2, dilute(HCl)).yields(2, LiCl).plus(CO2).plus(H2O)

The dilute (or concentrated) methods will return a new chemical in the liquid state. That is a lot cleaner than borrowing the (aq) convenience from hand-written formulae.

Adjust a formula. Let us consider the use case of replacing “S” with “O” when roasting a sulfide. We want to do something like:

formula.replace(S, O);

Which is just shorthand for:

formula.replace(S._(1), O._(1));

But it seems like we want the formula to be immutable, i.e., the replace method should return a modified copy. Creating an immutable object in Java is tricky, especially with inheritance.

Fluids

We will have a fluid for every gas and every liquid. There is no limit on the number of fluids, and we can use item damage for liquid containers (just need two items, one filled, one empty). The problem is the fluid blocks. To have these chemicals in the world, we will probably need to rely on NBT tags. This means that we can only have a limited number of such blocks in the world. Since we are not generating these in the world, this should be OK. It would be neat to have liquid and gas blocks for every chemical, with pumps and fans moving them around. Not just in pipes. NBT here we come on that one.

Processing of crude materials

Here are some simple rules for ore processing:

  • Grinding an ore yields a dust of a crude material.
  • Smelting the ore block or the result of grinding the ore block should yield the same product, like an ingot.
  • Sulfide ores are roasted to oxides.
  • Hydroxides and carbonates are calcined to oxides.
  • Smelting reduces oxides to the metal.

Let’s review an example: generalized sulfide ore roasting. The recipe registration mechanism (think of it as a recipe compiler) loops over the pure materials. When it finds a sulfide, it knows that roasting (smelting) it will convert the sulfide to an oxide. It finds the corresponding oxide (replaces the S with O in the formula and looks up the corresponding chemical) and registers the recipe. The recipe should apply to both the sulfide chemical and the ore/mineral. That could use the ore dictionary or a more formal relationship between the ore and the chemical. If there is a vent attached to the furnace, it will detect (hopefully) when a sulfide ore is smelted and emit SO2.

Another example: processing of limonite into iron. Limonite is an ore that consists of a mixture of iron hydroxides. Assume it is mostly goethite, FeO(OH). Then, we need to calculate a calcining temperature. There is no exact value, due to impurities, different levels of hydration, etc, so we could specify a rough temperature, similar to the rock hardness. If the calculations are rough, perhaps we could derive the temperatures from a rough notion of the “reactivity” of the metal. Or we could just use thermodynamics. This is a bit tricky at low temperatures, where thermodynamics predicts a temperature below the boiling point of water, so it needs adjustment.

A complication: Ni can be incorporated into goethite (substituting for iron). This is true of many minerals, i.e., while a mineral is not really a mixture, there is non-stoichiometry. The question is whether to consider laterites as goethite (instead of limonite) and model goethite as a crude, non-stoichiometric substance, i.e., not a mixture. The alternative is to say that limonite is a mixture of FeO(OH) and NiO. Another alternative: say that limonite is primarily (an ore of) FeO(OH), but have a recipe/reaction that extracts NiSO4 after treatment with H2SO4 at a specified temperature. We need that reaction anyway, so that sounds reasonable.

Is an ore a mixture? Of course, it’s a special mixture with one component being the “concentrate”, but how to differentiate it from plain old rocks and soil, i.e., aggregates? Have an Aggregate interface, and a SimpleAggregate implementation. Those would correspond to Ore and SimpleOre.

Or what about simply having separate enumerations? One for rocks, one for ores. GeoBlock could still operate over both of them (they would both implement GeoMaterial). Downside: need to reimplement everything. So we either reimplement GeoMaterial or implement the Ore/Aggregate classes. The main objection to having multiple enums is that it seems arbitrary to separate ores and rocks – where does the laterite clay go? The composition is a natural parameter of the material.

Reactions

A reaction is a type of recipe with reactants and products with molar coefficients and states. There are multiple layers of abstraction, best worked out by the process. When a machine receives input items, it needs to map them (by name?) to a recipe. This is a special recipe that has a dynamic reaction model that is controlled and viewed by the machine interface. It yields one or more items as products. This low-level recipe needs to be registered and constructed by some factory. If we have a set of well-described chemicals, the reaction parameters should be determinable from the substances alone. We declare a “reaction” in terms of substances, and that is translated to one or more recipes. If we have crude materials without well-defined properties, we could either make up the properties or specify parameters at the reaction level (easier?). There, we declare an “ore operation” in terms of crude substances and chemicals, and that is translated to some recipes. So there are two layers: the abstract, process-level description, and the low-level recipes. One abstract process might correspond to multiple recipes (manual, machine, etc).

For the crude processes, we could have a CrudeReaction class, with crudes and chemicals, and reaction-level parameters. A bunch of CrudeReaction instances are registered, and a factory iterates over them, converting them to reaction recipes.

How does the reaction => recipe mapping occur? Some factory needs to perform two steps:

  1. Map the materials to item(stack)s.
  2. Generate a fully parameterized reaction model.

There might not be a need to actually have a Reation object. Instead, there is a method call with a signature that depends on the mode of reaction recipe construction. For crude materials, the materials and model parameters should be specified. For the pure chemical reactions, those parameters can be derived from the chemicals. This would be a Registrant object that would store recipes in a Registry object. It is given the registry, a ReactionTermToItemStack factory, and a ReactionModelFactory (to be used if the model is not given explicitly).

Block Construction

When creating a GeoBlock from a material, we need to decide who implements the construction. Currently, this is a mix between a static factory method in GeologicaBlocks, and the subclass constructors. Somehow, we should either put most everything inside the constructors or put everything in some sort of factory.

Here are the steps:

  • (factory) ID allocation/assignment, name
  • (constructor) material, creative tab, step sound
  • (constructor) meta blocks
  • (constructor) hardness and resistance

Is this a natural split? The ID allocation should happen up-front. The name then obviously needs to be set by the factory (probably via setter). The material is tied to the subclass (inheritance is used only to define the items dropped). If we know the material, then we know the step sound. The creative tab is always known to be a block.

The hardness/resistance are tied to the strength, and the meta blocks are tied to the material and strength. By putting the meta blocks, hardness/resistance and material into the same, low-level constructor, we ensure that all the values are consistent in terms of the strength. But we could make the block completely agnostic of strength: it would just take the given meta blocks and hardness/resistance, etc. If we then passed the texture file as a parameter, we could get rid of the intact/broken subclasses. But making the blocks agnostic of strength would be tricky, since they are given GeoMaterial objects, which have a strength. Is there a reason to demand such flexibility? Do we really need multiple strategies for finding meta blocks given a strength?

GeoMaterial as an Enum

The GeoMaterial would be convenient as an enum, as long as we do not expect substances to come from some other source. The convenience comes from both the syntax and automatic registration (via reflection). Other mods could add substances, for example. If that happened, there would need to be a configuration system to prevent ID conflicts. Why would they want to add new substances? Probably to take advantage of the chemical modeling. Since IDs are only necessary for meta/damage values, we could introduce an independent object, maybe Chemical, that would simply define a set of chemical properties. It is not yet clear whether we will have a sophisticated chemical model or if we will just add recipes for particular chemicals. If the latter, there may be no benefit to adding new substances. They would just be an internal utility for book-keeping of the meta blocks and items. Since those substances do not have any behaviors, it probably will not be necessary to extend them. They are simple tuples of data.

Substances and blocks, etc

We want to represent substances in the world. For now, let us limit the discussion to geological substances: rocks and minerals. A substance can assume many forms. In the world, it is as an intact block. If the block is broken, it yields a broken form. The granularity of the broken form depends on the intact strength. So weak stone becomes gravel, strong stone becomes cobblestone and very strong stone remains intact.

An intact block for a substance is more or less defined by the following properties:

  • Material/stepSound (from material)
  • Hardness/resistance (from strength)
  • Drop strategy (subclass)

Currently, we use the substance material to do two things: derive the material of the block and select substances for a particular drop strategy (block subclass). This is a problem, because both rocks and minerals can be of the “rock” material, but minerals have a different drop strategy. And direct-drop substances could be rocks, sands, or maybe even dirt or clay. This substance/material type could be a parameter of the substance, or we could imply it by keeping the substances in separate lists. Separate lists would probably mean separate enums, all of which implement some GeoMaterial interface. The separate enums could each have unique qualities. For example, a mineral could reference a chemical. If we did not go the separate list/enum route, every substance would have a chemical field, with non-minerals using a null value. The pain of separate enums is that we would need to reimplement substance for each type. The implementation is not complicated, but it is extra effort. Anyway, it is clear that the material and harvest strategy are two different parameters.

So if wanted to parameterize the drop/harvest strategy, what are the possibilities?

  • a single, broken block (stone)
  • multiple pieces (coal, redstone, clay)
  • self drop (ores, sandstone)

Claystone could follow the sandstone example, which essentially exists in a broken/cobble state. Then a machine like a pulverizer could convert claystone to clay (as it does sandstone to sand). So at this point, we will support the single-broken (stone) and self-drop strategies (minerals).

There are then three parameters:

  • Strength: weak, medium, strong, very strong
  • Harvest: self (default), broken, pieces
  • Material: rock (default), sand

The next debate is whether to add parameters for e.g. the chemical which would be yielded upon pulverizing or smelting a mineral. One issue is that it might become untenable to specify recipes through substance properties. There are so many machines, with so many recipes. Might be simplest to consider the recipes orthogonal. One might try to make the case that we need chemicals in order to add the chemical formula to e.g. a tooltip, or something. But this is not so important.

We could translate the harvest style to a “type” of substance:

  • Rock: broken (cobblestone)
  • Ore: self
  • Crystal: pieces

This makes a lot of sense. Rocks and ores should be a single block; no reason to have individual pieces. And ore does not matter whether it is broken or intact. Crystals though are easily obtained during mining. There is some question as to whether these represent all types of geological substances. If we wanted to support an arbitrary set, we would probably want to use polymorphism instead of a parameter.

Textures

If we use the substance IDs as indexes into the sprite maps, we will need a separate map for every manifestation of the substance. There will be several manifestations: intact (rocks and minerals in native form, metal ingots), broken (cobblestone, pulverized minerals, metal nuggets), and processed (bricks for stone, blocks of metal). As long as we are limited to these three, it makes sense to use a separate file for each. May need a fourth for arbitrary textures.

Processes

Once we have a material, we need to do something with it. That something is a process. A process turns one material, in a specific state, into one or more other materials, in a specific state. The set of processes can be modeled as a bipartite graph, with a set of nodes representing the materials (in some particular state) and a set of nodes representing the processes. Edges, at least from a process to a material, can be weighted. The material nodes are very close to being actual blocks and items, because they are in some state, like a dust or ore block. The question becomes whether it is worth abstracting the process graph or if low-level representation as recipes is sufficient.

We are currently representing processes as recipes, and it has become apparent that some abtraction might be useful, even if not at the level of the process graph. For example, a GeoMaterial has some composition, and and grinding will always output its primary componen as a dust. Both the dust and the original ore block can perhaps be smelted to a metal ingot. The point is that there is some equivalency through composition. This equivalency is very much related to the purpose of the ore dictionary. The ore dictionary is a fairly rudimentary abstraction, but it works, and is something we need anyway.

Tasks

Add more minerals

  • State “DONE” from “TODO” [2013-07-22 Mon 17:06]
  • uraninite
  • borax
  • pyrolusite,
  • alunite,
  • malachite
  • glauconite
  • diatomite
  • graphite, kyanite, muscovite
  • soapstone
  • apatite
  • pumice
  • soda ash
  • mirabilite
  • wollastonite
  • zeolite
  • mineral sand deposits to hill biomes

Consider mineral balance (by production)

  • State “DONE” from “TODO” [2013-07-22 Mon 17:07]

Fix rock tool recipes

  • State “DONE” from “TODO” [2013-07-22 Mon 17:07]

Register ores in dictionary

  • State “DONE” from “TODO” [2013-07-22 Mon 17:07]

Add rock grinding, smelting recipes

  • State “DONE” from “TODO” [2013-07-22 Mon 17:07]

Use substitute instead of cloud for primary strata

  • State “DONE” from “TODO” [2013-07-23 Tue 05:19]

Abstract biome restrictions (support BOP)

  • State “DONE” from “TODO” [2014-02-02 Sun 19:10]

Clays should break into piles upon harvesting

Add grinding recipes for ores

Special case ground rock salt => foodSalt

Add clay breaking crafting recipes

Define Mystcraft symbol for each deposit

Figure out Thaumcraft aspects for minerals

Compatibility with GT

http://forum.industrial-craft.net/index.php?page=PMView&pmID=17212&s=dedc43669a7d9e2e9149907f08ddc2d6bf5cb819#pm17212

Think about a saltpeter/KNO3 farming system

  • Like RC, except in tropical climates, with dead plant matter.

Stats

IDNameCountPer ChunkTargetNotes
(222:0)Bauxite2419597.085
(222:3)Brown Limonite327990.960.75
(222:4)Yellow Limonite330920.970.75
(222:5)Vermiculite376811.103
(223:0)Laterite64991419.0212
(224:0)Banded Iron135201539.5630
(224:2)Chromite2194876.427
(224:4)Ilmenite775592.272also in sand
(224:5)Magnetite399501.171.5
(224:6)Pollucite29040.080.05
(224:8)Tantalite291560.850.75
(224:9)Pitchblende611791.791.5
(224:10)Ferrovanadium390671.141.5
(225:1)Bastnasite471141.381.5
(225:2)Chalcopyrite3030148.8710x1.2
(225:3)Garnierite251090.730.5
(225:4)Lepidolite1016672.972.5
(225:5)Magnesite37854411.0810
(225:6)Pentlandite1674174.902/2
(225:7)Scheelite850352.492
(225:8)Sphalerite3205979.3810
(225:9)Wolframite289870.850.5
(225:11)Dolomite58306117.0615
(225:12)Kyanite1019002.982
(226:1)Cinnabar0.00
(226:2)Galena1734035.075
(226:3)Molybdenite630441.841.75also chalco
(226:4)Rock Salt946552.772
(226:5)Stibnite365391.071.5bp Cu/Pb
(226:10)Gypsum2696147.896
(226:12)Mica728372.132
(227:0)Basaltic Sand143770.420.5
(227:1)Garnet Sand437351.281.5
(227:2)Granitic Sand1002082.932.5
(227:3)Quartz Sand273640.800.5
(227:4)Volcanic Ash575821.681.7
(252:0)Limestone1063885303113.05250/10
(252:1)Schist8824584258.22150too much?
(252:2)Serpentinite111519232.63
(252:3)Slate255532174.77
(252:4)Skarn103238030.21
(253:0)Andesite107492431.45
(253:1)Basalt46724413.67
(253:2)Gneiss5143875150.52
(253:3)Granite1272065873722.21
(253:4)Greenschist1630984.77
(253:5)Marble110014632.19
(253:6)Pegmatite88497625.90
(253:7)Rhyolite2948468.63
(254:0)Diorite5888766172.31
(254:1)Gabbro8339424244.02
(254:2)Hornfels316996292.76
(254:3)Peridotite13949406408.18why so much?
(254:4)Quartzite106552131.18
(255:0)Breccia6691198195.79
(255:1)Carbonatite526531.54
(255:2)Claystone5754246168.38
(255:3)Conglomerate5700032166.79
(255:4)Mudstone768335332248.24