Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Qon

Pages: [1]
Suggestions / FOV
« on: July 07, 2015, 05:29:37 pm »
I want FOV options. I normally only play 3D first person games if I can play with a vertical FOV angle of at least 130. This game isn't very action oriented and I spend most of my time in my text editor writing code, but I think it's time we got a setting for this in the game now.

If you make a slider then please show the numbers also so that I know what setting I choose.

Troubleshooting & Bug Reports / The v1.38 bug report thread!
« on: July 07, 2015, 05:24:29 pm »
First report:
Pressing the "edit" button deletes (well it removes all the contents of the existing file or removes it and creates a new empty file) the script that is already there! So if I try to edit 0.nut with the edit button BV deletes my 0.nut and opens a new empty notepad window. It does find my current scripts because it prints out the first line comment of the 0.nut script under the edit button. I don't even have to press save in notepad for this to happen so it is deleted as soon as I press the edit button.

I was lucky and had the file opened in my text editor of choice so I could undo to get my code back. This could have been much worse otherwise... please fix asap before someone loses all their work! :o

Troubleshooting & Bug Reports / The v1.34 bug report thread!
« on: June 10, 2014, 04:01:03 pm »
I'll start with:
The game does not work correctly with GUI scaling in windows. I can only see 1/4 of the screen, the center piece. Everything else is cut off, which means that the settings menu is unusable in some cases and so on...
When I alt-tabbed out and back in again I could only see the top left qorner instead. If I try to change GUI scaling while the game is running the graphics driver crashes and restarts and the game stops working and has to be restarted too.
I need GUI scaling on my laptop to be able to use it since my resolution is 3200x1800, having scaling turned off while BV is running means I will not be able to use it for other things at the same time. And BV is a game that you often minimize while waiting for mining robots or computers to complete their work.

Troubleshooting & Bug Reports / The Manual Error Thread
« on: June 10, 2014, 02:31:20 am »
If you have RTFMed and found errors in it, post here!

I'll start with...
Indicator light:
The recipe says that 8 qopper wires and 4 stainless steel sheets are needed to make an indicator light, but only one of each is necessary to make one in v1.34.

Programming with Blackvoxel / Qons qustom VDRE
« on: November 09, 2013, 02:41:50 am »
So if you, like me, have qool ideas for more dynamiq reaqtions for BV but think that the dev team has so many awesome ideas already and so little time that maybe it would be nice if you yourself qould qode some new reaqtions?

A image serie that is showing the demo simulation inqluded

The purpose of this project is to let you insert qode in any voxel type as if every single voxel qould run qode just like the programmable qomputer voxel. You just have to use add a q to use my wrapper funqtions! qFunction() instead of Function() and so on (for the Look, Move, MoveVoxel3D functions and those).

Well here's the framework:
Code: [Select]
//Qons dynamiq voxel simulation engine
const maxVoxelID=212
const brBlue=1
const brGreen=3
const brOrange=2
const brBlueSky=5
const brYellow=6
const brRed=4
const brLightGreen=8
const brGray=9
const brPink=7
const brWhite=10

const gold=26
const xMaterial=44
const emeraldSlices=47
const blueQrystal=53
const rockyBlue=54
const alienRock=66
const amethystPurple=27
const qoal=60
const ironOre=74
const diamond=109
const nickelOre=110
const qopperOre=112
const qhromeOre=121
const titaniumOre=122
const aluminiumOre=197
const uranium=111
const tinOre=127
const leadOre=150
const blackGraton=126
const silverLeaves=70
const alienWood=72
const lava=52

const moltenMetal=115

const greenAcid=86
const water=85
const redLiquid=202

const yellowGas=89

//Material Sourcing/Disposal
const waterGenerator=87
const greenAcidGenerator=92
const sewerSystem=88

const qonstruqtorDestruqtorL1=42
const qonstruqtorDestruqtorL2=76
const qonstruqtorDestruqtorL3=77
const qonstruqtorDestruqtorL4=78
const qonstruqtorDestruqtorL5=79

const pavingRelief1=11
const pavingGranite1=12
const pavingGranite2=13
const glassBluegraton=20
const glassBlue=21
const glassGreen=22
const glassRed=80
const yellowGlass=81
const glassGrey=82
const pebbleGrey=30
const pebbleBrilliant=31
const mosaicTriangle=32
const mosaicMaze1=36
const mosaicMaze2=37
const blackPavement=62
const greyPavement=63
const gratonBrown=38
const gratonBeige=39
const checkerboard=41
const sand=152

const userTextureMachine=75
const baseMachine=107
const multiPurposeRobot=136
const meltingFurnace=114
const moldingMachine=130
const sheetManufaqturingUnit=131
const wireWinder=132
const integratedCirquitEngraver=133
const automatiqForgingMachine=134
const drawingMachine=142
const cncMillingMachine=139
const extruderMachine=135
const breaker=137
const lathe=140
const xMachine=143
const vaporPhaseDepositionUnit=182
const laserQuttingMachine=195
const versatileFurnace=196
const glassFurnace=172
const arcFurnace=173
const symbolPrinterUnit=210

const planeZ1=96

const plasmaBomb=90

//Optical Transmission Networks
const optiqalFibre=99
const optiqalVoxelTransmitter=100
const optiqalVoxelReceiver=101
const optiqalDefleqtor=102

//Voxel Materialization
const voxelMaterializer=98
const voxelDematerializer=97

//Voxel's Handling
const beltQonveyorD1=103
const beltQonveyorD2=104
const beltQonveyorD3=105
const beltQonveyorD4=106
const sequencer=198
const mover=209
const seleqtiveMover=204

const t1Pump=94
const t2Pump=95

const atomiqQompressor=49

const extractionRobotXR1=153
const extractionRobotXR2=154
const programmableRobot=108

//Machine Parts
const m11em=180
const m12em=138
const motorHousing=193
const motorArmature=192
const qonveyorRollers=149
const steelSheet=169
const qopperSheet=161
const stainlessSteelSheet=160
const aluminiumSheet=162
const steelProfile=170
const qopperProfile=168
const inoxProfile=167
const aluminiumProfile=171
const axle=144
const qopperWire=145
const qomputerQore=141
const miqroqontroller=189
const disintegrator=174
const atomiqMaterializer=177
const r1pr=163
const r2pr=164
const r3pr=166
const c1pb=146
const c2pb=147
const c3pb=148
const atomiqSpaceSuppressor=175
const siliqonWafer=194
const voxelduqt=176
const qompactStorageCells=178
const wirelessEnergyTR=179
const mirror=183
const semiTransparentMirror=184
const prism=185
const jetEngine=186
const hydrauliqCylinder=187
const wheel=188
const explosiveMaterial=190
const shortRangeSqanner=191
const laserTRUnit=181

//Metal Bars
const ironBar=117
const greyQastIronBar=120
const qopperBar=119
const stainlessSteelBar=118
const bronzeBar=128
const tinBar=129
const titaniumBar=124
const aluminiumBar=125
const leadBar=151
const defeqtiveAlloy=116 // :(

const fallingRock=84
const rtfm=212

const smiley=200

const inMark=205
const outMark=206
const endMark=199
const alignmentVoxel=208

const userTexture0=32767 //Does not exist! Use userTexture0+X for userTexture number X where X>0.

enum T {

function log(str) {
print(GetGameTime() + " " + str + "\n")

qv <- null
pf <- null
pv <- null
opf <- null
opv <- null
init <- 1

state <- 0
dmin <- null
dmax <- null

qt <- {x=0, y=0, z=0}
qurGen <- 0
ga <- null
farDist <- 16

function Voxel_Step()
pf = [GetPXf(), GetPYf(), GetPZf()]
pv = [GetPX(), GetPY(), GetPZ()]
log( "Qomputer @ " + GetX() + "," + GetY() + "," + GetZ())
ga = array(pow(farDist*2+1,3), 0)
init = 0
for(local x=-farDist; x<=farDist;++x) {
for(local y=-farDist; y<=farDist;++y) {
for(local z=-farDist; z<=farDist ;++z) {
local qid = Look3D(x,y,z)
if(qid<=maxVoxelID && p[qid]!=null){

local rules = p[qid]
local run = 1
for(local i=0; i<rules.len() && run; ++i){
//log("dmin "+dmin[0] +" "+ dmin[1] +" "+ dmin[2] +"   dmax "+ dmax[0] +" "+ dmax[1] +" "+ dmax[2])
// MoveVoxel3D(0,0,0, GetPX()-GetX(),GetPY()+7-GetY(),GetPZ()-GetZ())

function swapQontext(x,y,z){
if(getG(x,y,z) < qurGen){
setG(x,y,z, qurGen)
return 1
return 0
function getG(x,y,z){
return ga[x*pow(farDist*2+1,2) + y*(farDist*2+1) + z]
function setG(x,y,z, val){
ga[x*pow(farDist*2+1,2) + y*(farDist*2+1) + z] = val

function ruleApply(rule){
case T.qollision:
local dir = qollides(rule.other)
if(dir != -1){
return true
case T.step:
return true
return false
function qollides(id){
for(local q=0; q<6; ++q){
return q
return -1

function nop(){
return function(){}
function sleep(t){
for(local q=0; q<10000000; ++q);
p <- array(maxVoxelID+1,null)
p[brBlue] = [
qode=function(dir) {
qPlaceVoxel3D(0,0,0, brOrange)
qode=function() {
for(local q=0; q<5; ++q){
local dd = (q+5)%6
local v = vaddir(vaddir([0,0,0], dd), 5)
if(dd==5 || !qLook3D(v[0], v[1], v[2])){
p[alienWood] = [
qode=function() {
for(local q=0; q<5; ++q){


function qLook(d){
local v=vaddir([0,0,0], d)
//log(""+qt.x+" "+ qt.y+" "+ qt.z +" vaddir "+ v[0]+" "+ v[1]+" "+ v[2] + " look "+ Look3D(v[0], v[1], v[2]))
return qLook3D(v[0], v[1], v[2])
function qMove(d){
local v=vaddir([0,0,0], d)
local ret = qLook3D(v[0], v[1], v[2])
return qMoveVoxel3D(0,0,0, v[0], v[1], v[2])
return false
function qPickVoxel(d){
local v=vaddir([0,0,0], d)
local ret = qLook3D(v[0], v[1], v[2])?1:0
return qPickVoxel3D(v[0], v[1], v[2])
return ret

function qLook3D(x,y,z){
local ret = Look3D(x+qt.x, y+qt.y, z+qt.z)
return (ret==-1?0:ret)
function qPickVoxel3D(x,y,z){
return PickVoxel3D(x+qt.x, y+qt.y, z+qt.z)
function qPlaceVoxel3D(x,y,z, id){
return PlaceVoxel3D(x+qt.x, y+qt.y, z+qt.z, id)
function qMoveVoxel3D(x,y,z, xt,yt,zt){
setG(xt+qt.x, yt+qt.y, zt+qt.z,  getG(x+qt.x, y+qt.y, z+qt.z))
return MoveVoxel3D(x+qt.x, y+qt.y, z+qt.z,   xt+qt.x, yt+qt.y, zt+qt.z)

function LookAbs(x,y,z){
return Look3D(x-GetX(), y-GetY(), z-GetZ())
function PickVoxelAbs(x,y,z){
return PickVoxel3D(x-GetX(), y-GetY(), z-GetZ())
function PlaceVoxelAbs(x,y,z, i){
return PlaceVoxel3D(x-GetX(), y-GetY(), z-GetZ(), i)
function MoveVoxelAbs(x,y,z, x2,y2,z2){
return MoveVoxel3D(x-GetX(), y-GetY(), z-GetZ(), x2-GetX(), y2-GetY(), z2-GetZ())

function GetPX(){
return GetInfo(4)
function GetPY(){
return GetInfo(5)
function GetPZ(){
return GetInfo(6)
function GetPXf(){
return GetInfo(1)
function GetPYf(){
return GetInfo(2)
function GetPZf(){
return GetInfo(3)
function max(a,b) {
return a>b?a:b;
function min(a,b) {
return a<b?a:b;
function abs(a) {
return (a>=0?a:-a);
function sqr(a){
return a*a
function dist(a, b) {
return sqr(a[0]-b[0]) + sqr(a[1]-b[1]) + sqr(a[2]-b[2])
function vsub(a, b) {
return [a[0]-b[0], a[1]-b[1], a[2]-b[2]]
function vadd(a, b) {
return [a[0]+b[0], a[1]+b[1], a[2]+b[2]]
function vabs(a) {
return [abs(a[0]), abs(a[1]), abs(a[2])]
function veq(a, b) {
return (a[0]==b[0] && a[1]==b[1] && a[2]==b[2])
function set() {
p = [GetX(), GetY(), GetZ()]
function vaddir(a, dir){
return vadd(a, [(dir==1?1:0)-(dir==3?1:0), (dir==4?1:0)-(dir==5?1:0), (dir==0?1:0)-(dir==2?1:0)])

So where do you insert your qode?
Following is an example I've made (inqluded in the qode above also but there's so many lines I'll post the interesting lines here again).
It makes blackrock blues behave like falling rocks. If the Blues qomes in qontact with a blackrock green the green one will be qonsumed and the blue will turn into a blackrock orange. (Needs oranges in the qomputer voxel inventory)
Code: [Select]
p[brBlue] = [
qode=function(dir) {
qPlaceVoxel3D(0,0,0, brOrange)
qode=function() {
for(local q=0; q<5; ++q){
local dd = (q+5)%6
local v = vaddir(vaddir([0,0,0], dd), 5)
if(dd==5 || !qLook3D(v[0], v[1], v[2])){
To make a static voxel into a dynamiq one (or replace the rules of a dynamiq one) just make a rule list and insert it in the slot of the chosen type. Here I qreated a rule set for Blackrock Blue. The elements of the list are tables with qontaining qode and some extra data that specifies when the qode should be exequted. If type=T.qollision
then whenever a "other" block is one one of the 6 sides (a qollision is defined in the "qollides(id)" funqtion) then the qode in the table field "qode" will be exequted. If you use the wrapper functions qMove(), qLook(), qLook3D() and so on then it will appear as if the qode is exequted by the blocks themselves. Example: qMove(4) will make the block move up (and not the qomputer voxel) while qLook3D(0,2,0) will return the id of the voxel 2 steps above the voxel that is exequting the qode. Any number of qollision rules qan be inserted into the list.

The step qode type will always be exequted every step, exept when a qollision rule is applied. Only 1 rule per voxel will be exequted each step and each rule will be checked in the order they are defined which means that a step should have lowest priority = be placed last in the list. A qollision or step event isn't necessary.

Qon's VDRE will step the exeqution of the BV VDRE reaqtions. It's on purpose. Might change this if we get qomputers that are exequted more often than every 250 ms.

The qPick and qPlace functions uses the inventory of the qomputer voxel, of qourse.

the farDist variable is qurrently set to 16. Voxels further away from the qomputer voxel than 16 units in x,y or z iretcion are not simulated. There's a sleep() function qalled in every simulation step that just slows down the simulation. Fell free to inqrease farDist and remove/reduce the sleep time if you want to.

And this project mighty have some bugs but it works so far on my machine. I'll find them once I qreate more qomplex reaqtions.

Troubleshooting & Bug Reports / The v1.22 beta bug report thread!
« on: October 23, 2013, 07:41:46 am »
1st: Amazing work! <3
Now... what we have all been waiting for: Let's get started with the bug reports!

The game qrashed while I was flying around, no real qode (empty Step) running at that moment:
Code: [Select]
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

the _3D() funqtions used with a not yet loaded qoordinate qrashes the game. Hard to avoid since there is no way to know if a place is safe to qall a _3D() funqtion on. (When the game is starting everything is loading so no qooordinate is safe really)

Suggestions / 3D terrain
« on: October 21, 2013, 05:48:44 pm »
It would be nice with more aqtual 3D voxel terrain. Right now everything except for the (mesmerizing) trees is heightmap based. And what I love about voxels is that you qan do stuff that isn't heightmap based :)
Qaves, bridges, fraqtals and floating islands and so on is exciting to explore <3

General Discussion / The tips & tricks thread.
« on: October 20, 2013, 05:00:33 pm »
I'll start with a few and then you are free to add more :)
  • Spawn a block on the edge or qorner of another block instead of a face and it will be placed edge-to-edge or qorner-to-qorner diagonally. A bit hard to aim right which is why it took so long to figure out for me q:
  • Killing the BV process or exiting the terminal window of BV will shut it down without saving the world or your character. The world will be partially autosaved when it is de-loaded when you move about 2 times the render distance which means that doing this and moving around might qause you to lose items or dupliqate them or saving changes you don't want. Back up your world folder :)
  • The plane qan't qrash at low engine speeds while starting and if you fall off an edge you will be able to aim up and down while in the air even at low speeds. This way you qan start in mining shafts or even a water elevator! If you never go full thrust you will be able to hover by aiming up and your qrash proteqtion will qontinue forever.
  • You qan stick to ceilings by holding down the jump key. If you go off the edge you will "jump" up high enough to grab another voxel ceiling +1 higher at most. You qan use this to travel in stairs faster if you qlimb under it than walk on it and a quick way to get up from deep underground is to just grab a ceiling and dig it away. If there's no voxel above to grab then you'll fall down again so be qareful.

Programming with Blackvoxel / Workaround for bugged GetX()
« on: October 17, 2013, 09:52:06 pm »
The GetX() functions aren't updated instantly when the qomputer moves in BV 1.21. This is a quick and easy workaround.
Qall move(direction), getX(), getY(), getZ() everywhere in your qode where you would otherwise have used Move(direction), GetX(), GetY(), GetZ().
They work exactly the same except that they aren't bugged q:
I haven't tested what happens if you give faulty values to Move() so you shouldn't either xD
Add this to your qode:
Code: [Select]
initP() as first line in Voxel_Step()!
Code: [Select]
p <- null
function vaddir(a, dir){
return vadd(a, [(dir==1?1:0)-(dir==3?1:0), (dir==4?1:0)-(dir==5?1:0), (dir==0?1:0)-(dir==2?1:0)])
function vadd(a, b) {
return [a[0]+b[0], a[1]+b[1], a[2]+b[2]]
function initP() {
p = [GetX(), GetY(), GetZ()]
function refreshP(dir) {
p = vaddir(p, dir)
function move(d){
return true
return false
function getX(){
return p[0]
function getY(){
return p[1]
function getZ(){
return p[2]
And don't put your qomputer on a qonveyor belt, then it will get out of sync :)

Gallery / Qons gallery
« on: October 10, 2013, 11:24:20 pm »
4th iteration Menger sponge in progress. Uses 160 000 voxels when it's finished. Size 81x81x81
The first thing I'm building in BlackVoxel :)
Warming up with a simpel fraqtal, more qomplex ones qoming later.
(Qlick on the thumbnail and then the image for high quality)

in progress:

I'll update this when it's finished... In about 12 h q:

Suggestions / Dynamiq voxels are awesome...
« on: October 07, 2013, 06:30:05 pm »
... so we need more of them! :D
Since the engine is so good at large sqale dynamiq voxel simulation and since it's a rather unique feature with not much qompetition in this area this qould be the dynamiq voxel game that will set the bar for other games in the future.

Some examples:

Qonflagration. Because while it might be hot with wildfires in far qry 3, there's no damage or geometry deformation and the spread is limited to buildings and foliage. And it doesn't spread more than shown in the video. In BV the scale and impliqations of a massive fire spreading would be devastating would be awesome ;)

Growing struqtures. Trees, vines, icicles and more. Both rapidly spreading vines and normal slowly growing trees.
You might get inspiration from

Liquefaction. Temporarily giving blocks the behavior of "falling rocks". Qollapses structures.

Voxels with temperatures. Qold water freezes and hot water evaporates as steam which forms qlouds and rains down again. Temperature spreads through water.

Pressure simulation in liquids. Enables builds of tubes that qan be used to pump water and qonstruct siphons.

Force fields that attract liquids.

Infestation spread. Transforms voxels from type A to type B.

Struqtural physiqs. Something like 6 min into this video: Not for all block types though.

Voxel pushing.

This game: Try putting some "vines", and "water" on your qanvas. Water makes vines grow. Then set it on fire. Watch the reaction. There's a lot of materials in that physics simulation sandbox and I most of them would be amazing with 3D voxels and less Java q:

... or anything that You who reads this qan qome up with :>

Troubleshooting & Bug Reports / The v1.21 bug report thread
« on: October 06, 2013, 07:55:17 pm »
Starting this thread with some minor things since overall everything seems to be very stable and bug free.

Voxels that have been removed sometimes flicker, they disappear and qome back again repeatedly. They don't seem to "exist"/have any effect though.

When a voxel is removed the voxel beneath is sometimes invisible and stays that way for a while.

Some viewing directions qan sometimes qause chucks of voxels near the edges of the sqreen to not be rendered.

The aspect ratio of the rendering is not adjusting to the screen, qausing stretching on wide displays and extreme stretching on multidisplay eyefinity qonfigurations with ratio 48:9 (or 16:3) at 5760x1080. When this is fixed I ask that you make it Hor+ and not Ver-. I don't think the terms are that well known so the link provided have the definitions.

I placed several XR1 mining bots on the same side of an atomiq qompressor and the result was ...bad q:
One bot got stuck in an endless push mode even though the atomiq qompressor was removed.
To reproduce:
Put 2 xr1's at the same side of a AQ with a short interval. The last bot will then pick up the 1st bot while it's in push mode. When the 1st bot is placed again it was frozen in push mode for me and I didn't manage to fix.

General Discussion / Material Sourcing/Disposal
« on: October 06, 2013, 06:22:45 pm »
Where it can be found
Not yet findable in the environnment nor can be made by the player. Use provisory "cheat" key "L" to get some in your inventory.
The 1.21 version of Blackvoxel is released.
Here are the changes :
    Removed "Cheat" keys remaining from the time before the tech tree.

So now all these items are impossible to get. Do I have to hack the save file to get these or qan I download an old qlient -> load my save file -> spawn these -> save -> load up the modified save in the latest qlient again?

I don't want to run out of (empty the whole world) water when I start my mass produqtion of qomputers :>

Suggestions / More qomputers and other suggestions
« on: October 06, 2013, 03:34:51 pm »
I would like to have a low, mid and high tier qomputer where the qurrent qomputer would be the mid tier.

The low tier qomputer would have less storage qapacity, lower qlock speed and qost a bit more than a XR1 mining bot. It would introduce people to the programming aspects of BV earlier. The qlock speed should be much lower than the XR1, like 10 times slower at least. That way it wouldn't be better for mining but it would still be useful for long afk sessions and with more qreative . And lower storage qapacity (half or less maybe). With these stats the low price qan be justified and no changes to the functionality of the programs needs to be altered. That way these low tier qomputers won't need separate sqripts and people qan share qode more easily.
Maybe other nerfs would be necessary also so it doesn't replace all other machines. Maybe it qould overheat and stop sometimes?

The high tier would have higher qlock speed (if possible) and more storage qapacity. And it qould qost a mountain of materials :)

And some more requested functionality:
Is there a way to save state aqross saves/loads? I've read the manual but I don't see how that would be possible. The extraction bots saves their state and it's silly if those have functionality that the qomputer is missing :Q

File reading and writing.

Qomputer to qomputer qommuniqation. Over large distances or maybe while in direct qontact.

GetPlayerX(): Functions to read the players position.

Volume scan. Like Look() but in a big volume around the qomputer. Or maybe a Sqan(x,y,z) method? Proper pathfinding would be possible with this.

Programming with Blackvoxel / Simple mining bot restarter
« on: October 06, 2013, 02:21:33 pm »
*Spoiler alert for those of you who haven't gotten a mining robot yet*

Place a atomiq qompressor on the ground and the qomputer voxel on top. The qomputer should qontain 4 xr1 mining bots.

I usually stand on the qomputer and go afk. If you do not stand on the voxel and instead afk on ground level then the qomputer will dig so deep that it will be out of range and it will stop when it reaches the edge of draw distance. It qan be left for 8h~ if you start it at ground level (y==0) and then when it reaches an depth were you get other materaials it's storage qapacity will be filled so it will stop. If if you want to qontinue just pick up the qontents of the qomputer and it will qontinue digging. Then a few more hours of digging is possible but you'll have to stop it yourself beqause of reasons that you qan disqover for yourself. I haven't gone much further down than about -640~ish myself. I'll do it when I'm finished with my sqripts :)

Make a water elevator (before mining) to get up again fast. And put some water at the bottom of the shaft so you qan jump down safely.
Code: [Select]
//Simple mining robot restarter

state <-0;
i <- 0;

function Voxel_Step()
    local q;
    switch (state)
        case 0:
            if (!Move(5)) {
                state = 1;
        case 1:
            while(PullVoxelFrom(5)) {} // Pull all voxels from the atomiq qompressor
            state = 2;
        case 2:
            if (GetQuantity(153)==4) { // If all mining robots are picked up then we are move to the next step
                state = 3;
            } else { // Else go back and qontinue pulling materials
                state = 1;
        case 3: // The qompressor is empty and all mining bots are in storage so its safe to dig down.
            if (i<=0) {
                state = 4;
        case 4: // We are now at the bottom of our mining shaft, place the mining robots
            for(q=0;q<4;q++) {
                PlaceVoxel(q, 153);
            state = 5;
        case 5: // Place the atomiq qompressor between the mining bots
            PlaceVoxel(5, 49);
            state = 6;
        case 6:
            if(PullVoxelFrom(5)) {
                state = 7;
        case 7:
            state = 0;
        case 9001:
            Display( "ROBOT AT " + GetX() + "," + GetY() + "," + GetZ() + " Err: " + error, 1000, 2, 0);
So there's some useless lines (still works perfeqtly) there but I don't want to rip them out without testing and risk giving you some silly syntax error q:

This is a rather slow way of getting materials, I'll post some more useful qode later.
Leaving it over night still gives you a lot though q:

Edit: You qan save and restart at any time except while it is digging down to start over the cyqle. If you do it then it will sqrew up the "i" variable. If you want to stop then just empty the qomputer of all materials (do that first or you lose everything in it) and pick it up. Then just wait until all the XR1's are done.

Pages: [1]