Tuesday, April 22, 2014

Technology Tree Cont'd

Well that was fun!

For the most part, the algorithm is finished.  It may require a few tweaks here and there, and will ultimately be slightly customizable by the user in question (i.e. choosing x and y padding), but it will get the job done splendidly.

Well, I won't keep you in the dark any longer.  Bear in mind that this is generated on a per-user basis, however, it attempts to minimize # of connections, then total distance of lines, so it's very likely that most (if not all) of the trees end up looking like this one.

Any node without an icon is simply that - I just havn't gotten around to making art for everything yet.  The color of the line corresponds to the tech of the Technology it's leading towards.

Micro
Nano
Femto
Temporal
Dimensional

Voila.
Hmm...  looking at this now, it might be useful to prune unnecessary prerequisites.

 And here it is, pruned.

Saturday, April 19, 2014

Technology Tree

Technology

The technology tree is finally finished!  What I mean by this is that all of the major unlocks (new machines or major technology uplocks) are finally mapped to their Technologies.  Non-major Items used in crafting/assembling these machines will simply be bundled into the the existing technologies.

For your perusal, I'll link it here.
Femtocraft Technology Tree

Now something you may notice is that there are a LOT of connections.  Not only this, but these often span across technologies and overall make it difficult to read and understand.

Another problem is that this isn't extensible.  If I, or someone else, wants to add in technologies somewhere, they need to manually place where their technology goes, and pray that it doesn't overlap someone else's technology.  As such, I'm currently looking into acyclic directed graph drawing algorithms.  This will, when the mod is loading and all technologies have been registered, compute this graph in hopefully a neat and readable manner.  This will also allow for other mods to add in their Technologies and not have to worry about placing them. 

Yes, this will take time.  Yes, it might be buggy.  However, it'll solve a lot more headaches in the future than it'll cause now, and since I have the time to work on this at the moment, I feel it's something worth investing time into.  Plus, it'll be fun!

Also, as part of a mini-update.  Almost done with classes!  One week and one paper left.
Still waiting on hearing back from a University about a summer teaching position.  If I get in (which I dearly hope), then I've got the next two months free to try and pump this out before heading there.  If not, its likely that I'm going to pick up a research job at my University here, which means that it'll be competing for time with this.  Either way, I'm not going to give up on Femtocraft, and I still am intending to hold to my end of June deadline.

Saturday, April 5, 2014

Progress Update


Progress

 

...has not stopped!  I just have been working on many little things that I don't feel were worth individual posts, but now I have something big done I felt I could throw them in here.

I broke down the research data into individual files per character.  Thus, if one character's research got corrupted, it would be easier to save/restore/edit, and in the end wouldn't break anyone else's research. 

I've also been refactoring the majority of my industry TileEntity classes.  Long/short of it is that it is very simple to make the upgradeable tiers and I can pump each one out in under an hour.  Also, the 3 main machines (Furnace/Reconstructor/Deconstructor) all support working on an ItemStack whose size is greater than 1.  I.E.  Furnace can smelt a stack of Iron of size 8.  They also all support instant work.

I finished the Encoder TileEntity (look for an update concerning this and the Reconstructor) soon.  This finishes the Encoder/Deconstructor/Reconstructor trifecta.

The GUIs for the majority of the Industry/Power machines have been made.

Long and not least, the Tech Tree is almost finished.  I just need to wrap up the Femto tier technologies, and then put it all into code.  This also means that I have decided on a scope for release of Femtocraft, and will discuss that now.

 

What will be in the first release?

 

As I said in previous posts, Femtocraft is intended to be the core mod for several up and coming mods I intend to release.  As such, it will provide a solid base and not much else.

Each additional mod will address a portion of the game/Femtocraft and I will refer to these portions as "Submodules."

Current list of planned Submodules

  • Industry
    • Smelting/Ores/Deconstruction - Reconstruction, Mass
  • Power
    • Femtocraft  core Power generation
  • Research
    • Femtocraft Tech Tree system
  • Nanites
    • Player-based upgrades, World Generation (Nanite infested biomes, stable, unstable)
  • Creatures
    • Machine-based Creature harvesting.  Vats and Feeding.
  • Tools
  • Utility
    • Teleportation, Anti-Gravity fields.



Femtocraft will release with Industry, Power, and Research submodules.

 

 

 

finished
in progress
unfinished

 

Research

 

 TileEntities -
  • Research Console
    • For putting research materials into, and performing the actual work of researching.
  • Research Computer
    • Allows players to view their current Technologies, and see what is required to advance into other areas.
Items -
  • Portable Computer
    • Portable research computer

 

Industry 


Ores -
  • Titanium
  • Platinum
  • Farenite
  • Malenite - Nether
TileEntities -
  • Encoder
  • Reconstructor (Micro, Nano, Femto)
  • Deconstructor (Micro, Nano, Femto)
  • Furnace (Micro, Nano, Femto)
  • Crystallizer (Micro, Nano, Femto)
  • Horologe (Nano, Femto)
  • Entangler (Nano, Femto)
  • Vacuum Tube (discriminating)
  • Vacuum Relay
  • Suction Pipe
  • Compression Chest (Micro, Nano, Femto)
Items -
  • Ores
  • Schematics
  • Deconstruction/Reconstruction materials
  • Interface Devices (Micro, Nano, Femto)

 

Power

 

Ores -
  • Thorium
TileEntities
  • Cable (Micro, Nano, Femto)
  • MicroCube
  • MicroEngine
  • Atmospheric Charging Base (Micro)
  • Atmospheric Charging Coil (Micro)
  • Orbital Equalizer (Micro <-> Nano)
  • NanoCube Frame
  • NanoCube Port
  • Geothermal Charging Coil (Nano)
  • Geothermal Charging Base (Nano)
  • Fission Reactor Core (Nano)
  • Fission Reactor Housing (Nano)
  • Null Energy Equalizer (Nano <-> Femto)
  • FemtoCube Frame
  • FemtoCube Port
  • FemtoCube Chassis
  • Stellarator Core (Femto)
  • Stellarator Housing (Femto)
  • Stellarator Focus (Femto)
  • Stellarator Optical Maser (Femto)
  • Plasma Turbine (Femto)
  • Plasma Condenser (Femto)
  • Plasma Vent (Femto)


I have not yet thought about the items required to make these, and so they aren't listed as of yet.  This list is 90% set in stone.  I may add/remove minor things, as I come close to my intended release sometime in June.


TL;DR

 

Work hasn't stopped.  Lots of minor things.  Look for more soon.  First release is industry, power, research and ore gen, no biomes or monster entities. 

Friday, March 14, 2014

Research


Research Computer

 The research computer serves one simple purpose.  It allows you to view the technology tree as you understand it.  You start with a few technologies, such as knowledge of the new metals, basic understanding of the makeup of materials, and basic circuity.  The computer gives you insight into how the technologies you know may be combined together, with a hint towards what you're working towards.  Thus you can always see what is available for you to head towards next.

Technology

 Technologies are the individual milestones in the research tech tree.  Technologies are either hidden, discovered, or researched.  When all prerequisite technologies are researched, a technology becomes discovered, and visible in the tech tree.  Clicking on the technology at this point will give you a name, a crafting grid, and a small descriptor of what the possibility of this technology is.  Putting the listed materials into a Research Console allows you to create a data card with the information corresponding to this technology, which can be used to unlock it for a player.  Only players who have the technology discovered can use the data card.

Once a technology is discovered, it will give recipe patterns for all of the items associated with this particular technology.  It may also give additional information about the technology as a whole.

Research Console

This is where the research actually happens.  Placing the materials from a discovered Technology into the console, you can begin the process of analyzing these materials.  This takes time, but nothing else.  It will continue even if you walk away from the console.  Once this process is done, you receive a data card that can be used to change the corresponding Technology from discovered to research.

Additionally, certain technologies may generate items as part of the discovery process.  This is often the case when the technology research items correspond to a recipe, or portion of one.  By creating this object, you discover additional uses, and thus, technologies.

Tuesday, March 4, 2014

Utility

Suction Pipes


Suction pipes are liquid transportation pipes.  When attached to a non-pipe Liquid Tank, they automatically attempt to output liquid into said tank.  Pipes can be configured to pull liquid from said tanks, instead.  Pipes are always on - they either pull, or push, liquid.  Suction Pipes use a system similar to the power algorithm.

Pipes maintain a pressure value.  Pipes that are pulling from tanks have higher pressure, the greater the amount of liquid in said tank.  Pipes that are pushing into tanks have a negative pressure, where there is more negative pressure the more empty room in the tank this is.  As such, when a pipe distributes its liquid, it divides its storage among all neighboring pipes with lesser pressure.  This ensures that liquid flows from areas of high pressure to low pressure, with more liquid going to locations that have more room for it.

This continues the trend of being server friendly, for the same reasons as the power system.

Vacuum Tubes


Vacuum tubes are all-purpose item transportation devices.  These are one-directional tube systems whose sole purpose is simply to move items from one place to another.  A vacuum tube only has one input, and one output.  Pipes have 4 slots, with an emergency fifth overflow slot.  Every tick, vacuum tubes with their inputs attached to inventories pull an item stack from the inventory, and propagate forward all items already in the tube, 1 slot forward.  If a vacuum tube cannot move items out of it, such as if the inventory at its output is completely full, and no item stacks can be combined, then the pipe begins to overflow.  This is signified by the slot marker turning red.  This can cause backups down the pipe system as each next pipe fills up and begins to overflow.

 If vacuum tubes have empty space as their input, they attempt to suck in all items in a 1 block area of the end, pulling them into the system.  This behavior is disabled if the tube is overflowing.  Tubes with no output inventory, when moving the 4th slot, will eject the item into the world.  This keeps the flow of items moving, and can be used for trash disposal, etc.  Tubes, once placed, can be manipulated to change direction or attach to different tube systems.

Power System

 

Tiers of Power

 

Femtocraft is all about tiers and encapsulation.  Each tier, once researched, exposes another layer underneath it.  This theme propogates into the power system as well.  Each tier of decomposition has an accompanying tier of power - Micro, Nano, and Femto.

Each power storage is a wrapper around the previous tier.  The picture shown above is the Nano-Cube, which is the Nano-tier power storage device.  At the core of this multi-block is the Micro-Cube.  When the Femto-Cube is built, it is a wrapper around the Nano-Cube.  In this way, the latest tiers of Femtocraft still require infrastructure and items from the previous tiers.

Server-Friendly

 

The power system of Femtocraft is not coded using an energy net, nor does it require any pathfinding algorithm of any kind.  Each Femtocraft power block simply pushes power to neighboring blocks with less power.  In layman's terms, power flows from where it is generated to where it is needed.

In programming terms, each power block is a node in a greedy distribution system, where every tick a portion of the node's power is distributed among neighboring nodes with less power.

What this means is that there are no computational bottlenecks.  Power can't get lost in the system because there is no path-finding algorithm to confuse.  Power producers don't need to determine a path to every potential consumer, which could potentially require traversing hundreds of blocks.  Instead, they simply push their power out to the wire, which then pushes it out to the next wire, etc.  Each block only ever needs to perform a certain amount of computation every tick, and the amount of computation is capped to the number of neighbors it has.

This does mean that power does not propagate instantly when a new machine is connected to the system.  I feel that this fits the theme of Femtocraft better, and isn't much of a problem in usability.

Liquid Distribution

 

The liquid distribution system uses a near-identical algorithm.  This will be covered more in the following posts about utility transportation implementations.

Wednesday, February 26, 2014

What is Femtocraft?

 

Femtocraft is...

 

A tech mod for Minecraft.  Femtocraft is intended to be a late-game oriented utility mod that performs many functions that other mods currently do not.  

Theme

 

Femtocraft is based upon a world of Pseudo-science, where the chemistry of Minecraft is slowly being discovered by the player.  They begin with Tesla-inspired electrical masterpieces, progress into a Borg-ian universe of Nanites and green,  pulsating circuitry, and end with their attempts at manipulating the fabric of reality itself.  All Technological Tiers have their own primary color, enabling users to see at-a-glance what interactions are possible.   

What makes it Special?

 

Femtocraft's draw is its rich and detailed Tech Tree, with an immersive theme.  Those who play Femtocraft begin with Vanilla minecraft materials, but within the course of one or two hours find themselves deep inside of Femtocraft's Persistent Tech Tree.  Items in Femtocraft are made primarily with other items in Femtocraft.  The goal is to avoid recipe collisions as much as possible by mainly incorporating items other mods could not provide.  A united GUI theme and a simple but striking texture theme set apart Femtocraft machines from others.

Persistent Tech Tree

 

All player technological trees are stored separate from their player data.  This enables Femtocraft to look up a particular player's progression even while they are not online.  Research data is also safer in that it has no ties to any common data storage, meaning it's separate from potential corruption or unintended modification.  

The practical aspect of this is that player advancements in the Tech Tree can and do persist across their machines.  Finish the technology that is a 20% speed upgrade to your machines?  All machines you own from here on out have that 20% speed upgrade, whether you're online or not.

Multiplayer Design

 

A large percentage of Minecraft players play online with other players in servers.  Femtocraft attempts to accomodate and deal with potential hazards through various mechanisms.  The first is TileEntity ownership.  All Femtocraft TileEntities remember who placed them.  Only their owner, his authorized 'assistants', and moderators can interact with or destroy these TileEntities. 

The other side affect is as stated before.  Because machines know who owned them, they can interact with the Tech Tree to see what technologies their owner has researched, and how these technologies will affect how they perform.

 Configurability

 

 Femtocraft is being coded with the mentality of being used in modpacks.  To this end, there will always be unexpected naming collisions, ore generation modifications, and inter-mod exploits.  My goal is that any constant in Femtocraft will be loaded from Configurations.  From ore generation locations, amounts, to power generation constants.  I will not use this as a cop-out in attempting to balance the mod.  However, I understand that often it is the case that mod owners and pack creators have different ideas of what constitutes balance.  In this case, the pack creator often has a greater visualization of his end goals and a larger view of inter-mod interactivity that enables him to have a better understanding of what would or would not constitute balance.  To this end, I will leave the ultimate decisions up to them.

Cross-Mod Compatability 

 

It will be possible to play this mod completely stand-alone with Vanilla Minecraft, but I am developing it with the goal of it being used in major modpacks.  To this end, once I am far enough along in Femtocraft, I will attempt to keep up-to-date native cross-mod support as miniature child mods of Femtocraft.  This will be accomplished through the use of peripherals, such as Femtocraft Power -> MJ Engines, and visa versa. 


Femtocraft as a parent Mod

 

Femtocraft is Open Source.  I am also planning on having Femtocraft only be the core mod for a suite of addons that I intend to release, all based upon the Femtocraft Fundamentals - Technology, Power, and Theme.  To this end, Femtocraft is being designed as an API towards these main ideas - because, in the end, I myself will be using this mod as an API for other mods.  If you are interested in contributing to Femtocraft, or in developing an addon, please shoot me an email.  I want to know your opinions!




Femtocraft is currently in development.  I will be posting snapshot updates as I implement certain features.  I am planning on releasing, at the latest, by the end of June 2014.