Uplift is a toy-box. Each of the components can be thought of as a toy from a compatible set. But it is also software, and some things rely on other things in order to function. Trees, for instance, need water to live. If you tried to play with trees without the concept of water, you wouldn’t get very far.
In order to simultaneously provide toy-box freedom alongside robust dependency visualization, while staying true to the nested voxel presentation, I decided to structure the component dependencies such that they form a voxel structure. Each block relies on all of the blocks beneath it.
This isn’t the final form by any means, but it’s a start. The foundation is composed of four layers, each of which has components which depend only on the underlying layer. So, here are the current…
Core Uplift Concepts
Magic(): Invalidates other physical systems in special cases. Teleportation, invincibility, antigravity, etc.
Light(): Transports energy and information.
Air(): Fills volumes, wind, breath, gasses of all kinds.
Water(): Fills low points, flows, incompressible.
Lava(): Wells up from the depths. Erupts violently.
Thermal(): Includes gravity. Transfers energy through contact and radiation. Causes natural thermal convection.
Portal(Magic): Physical locations that are in two places at once.
Water Plant(Water, Light): Algae, Kelp, etc.
Ice(Water, Thermal): Frozen water.
Luxovore(Magic, Light): Fantasy plant made of light.
Fungus(Water): Eats detretus, and other living things. Includes soil.
Air Plant(Magic, Light, Air): Fantasy plant made of air.
Weather(Air, Water, Thermal): Long-term atmospheric effects. Precipitation, wind patterns, seasons.
Magma Plant(Magic, Light, Lava): Fantasy plant that lives in/on lava.
Stone(Lava, Thermal): Frozen lava. Includes ores, varieties of stone, crystals and gems, etc.
Portal Plant(Portal, Luxovore, Air Plant, Magma Plant): Fantasy plant that exists in more than one place at a time.
Extremovore(Water Plant, Luxovore, Fungus, Air Plant, Magma Plant): Fantasy plant that lives and thrives in any fluid.
Land Plant(Water Plant, Weather, Stone): Grass, bushes, trees etc. Includes flowers, nuts, fruit etc.
Glacier(Ice, Weather): Flowing solid ice. Includes large scale abrasion and schist generation.
Storm(Weather): Short term atmospheric effects. Storms, huricanes, hail, lightning.
Erosion(Weather, Stone): Fluids cutting away solids.
Thermovore(Stone): Fantasy plant that lives off of temperature gradients (heat flow).
World Tree(Portal Plant, Extremovore, Land Plant): Humongous trees.
Living Iceberg(Portal Plant, Extremovore, Land Plant, Ice): Humongous plants made primarily of ice.
Living Storm(Portal Plant, Extremovore, Land Plant, Storm): Humongous plants made primarily of air.
Living Inferno(Portal Plant, Extremovore, Land Plant, Thermovore): Humongous plants made primarily of volcanic eruptions.
Ice Rot(Glacier): Plants that live within glaciers by breaking down ice.
Mechanical Plant(Glacier, Erosion): Plants that live off of mechanical gradients. Slopes of loose materials, shear zones, water flow, etc.
Stone Rot(Erosion): Plants that live within stone by breaking down minerals.
The Plant Example
Uplift is originally and fundamentally about trees, so let’s examine that aspect. Here are the bare minimum components you’d need to play with that support trees.
L3: Land Plants. this is the tree itself. It requires…
L2: Water Plant, Weather, and Stone which in turn rely on…
L1: Light, Air, Water, Lava, and Thermal.
No magic required! Plus there are a lot of other things that you don’t need. Ice, erosion, plants made of light, fungus, all of that stuff is unnecessary. Of course, you could include them too, if you like, but they are optional if all you care about is flowers and trees.
The Mod Example (Lantern Tree)
But what if you want to mod in your own stuff? For instance, a tree that grows on nothing but stone and light. Instead of building an entirely new framework (which you could, if you want, but for the examply let’s assume not) you could base it on the “stone” and “Luxovore” components. This would require that anyone running your mod include these components.
Then you simply build your Lantern Tree component off of the provided API, and it ends up in its own mod structure. You could have an unlimited number (well, okay, limited by storage media) of these, and even use mods that depend on other mods! The drawback being that anything they rely on needs to be included in your game. Hopefully, this will provide incentive for mod developers to write mods with elegant dependencies, since users are going to be able to see directly what kind of load the mod is placing on their game.
Within each component, there are multiple sub-components that the user can turn on and off. However, I suspect you’ll need many of the sub-components activated in order to support higher level components. The upshot is that you could play with just conductive heat transfer (no radiation), as long as you don’t have a need for weather (which relies on radiative heat transfer through the atmosphere for many of its effects).
Wait, there’s something missing!
Where are the animals? Where are the erupting volcanoes? Isn’t there a lot of stuff missing from these components?
Well, yes, and that’s intentional. A lot of the stuff in the game will be emergent. There’s no “volcano” component, because a volcano is an emergent structure that happens because of magma and air and thermal effects. If you have all of those components present (in the right quantities) you’ll get volcanoes for free.
But animals are different. When I sat down to make this structure, I considered putting animals in. They would live off of plants, right? Or, maybe they would live off of fungus, there are some insects that do that I think. Or perhaps they could live off of luxovores, or be lithovores and eat solid stone…
And the more I thought about it, the more it became apparent that animals aren’t part of the core at all. They are accessory elements… they are mods. So that’s how I’m planning on including animals. As mod elements that you can tinker with at will. Some things, like fruit, don’t make much sense without animals… and flowers are pointless without polinators, but I’m not too concerned at this point. I think there will likely be many parallel dependency tracks that exist alongside the core components.
The point of this initial structure isn’t to limit the scope of the software, but to give an idea of the kind of flexibility that we’re shooting for as far as game-play components are concerned.