Suggestion #3 Teleportation Conveyor Belts

RC-3197

Well-Known Member
Joined
Jan 5, 2018
Messages
23
Likes
51
Points
415
#1
With Reticule Research on the horizon I found myself asking the question, what could they add to the manufacturing system to make it better for everyone? I thought about conveyor belts and realized there wasn't much of a variety in the way we transport resources across a manufacturing system. Sometimes in a mining or manufacturing base we can have long stretches of conveyor belts for either transporting resource chunks across long distances or moving them from one vertical layer of to the other. This causes slowdowns in manufacturing systems which reduces efficiency. Now that we have established a problem, I will present to you a solution.

Reticule Research: Teleportation Conveyor Belts (Or Teleportation Pad, which sounds better)

These blocks are a 1x1x1 block with the same attachment points a GSO dropper has. As the name suggests this block teleports resource chunks across long (or if you just want to flex on the game for some weird reason, short) distances instantly. This will make it so we can instantly transport resource chunks to anywhere on our techs, virtually eliminating the logistical issue of moving resource chunks across long distances and up to higher vertical areas of our techs.

Now unfortunately all good things must have a downside. In this case the downside being you must have more than one of these blocks in order for it to work. One must act as a sender and the other as a receiver. The way this will work is like conveyor belts work, they can be reversed. By default the block is configured for sending and an arrow on it is green, but it can then be reversed by right clicking (like changing directions on a conveyor) to be a receiver which would be indicated by a red arrow. You can put down multiple senders and receivers and it will send the resource chunk from the first sending pad to receive a resource chunk to the first receiving pad that doesn't have a resource chunk on it already. The way this works is the sending pad will check to see if there are any receivers on the tech that don't have a “busy” status, if there is one it will accept a single chunk and send it to the “open” receiving pad. When a receiving pad receives a resource chunk it will gain the status “busy” until it is able to move the resource chunk off of itself and onto another manufacturing block such as a conveyor or silo, when it does this it changes the status of itself to “open” so that the sending pads can send another resource chunk to them. Other than that there really is not that much of a downside to using these parts. The only other limit that I would put on this block is that is only has one exit/entry point for resource chunks like a filter, but that is purely for logistical reasons (the developers will have to decide if more than one exit point is worth the effort). Some of you might say "This Is OP" "Everyone will use this", well that's the point, this block is supposed to make manufacturing better for everyone! And since you are never going to gain an unfair advantage over someone by being able to move resource chunks faster than them I don't really see how this is an issue.
 
Last edited:

RC-3197

Well-Known Member
Joined
Jan 5, 2018
Messages
23
Likes
51
Points
415
#2
By now you are probably asking yourself the following question:

How am I supposed to use teleportation pads for different purposes or only specific parts of my base if they are all connected together?

Luckily I had that question too, and the solution is quite simple yet robust and interesting.

The solution: Multiple Channels

Each teleportation pad would have 3 integers (numbers) that determine the pads it can send or receive from. You will be able to manually set the 3 numbers using the pad's right click menu. There will also be a way to reset them to their original channel which should also be the channel the pad is set to when it is pulled out of the block inventory. Like a filter it should retain its settings when it is saved on a tech. The three numbers will be limited to the range 0-255.

Now you might be asking yourself: “Why 3 numbers? Why limit the numbers to the range 0-255?”

Well, the reason for this is simple. Not only would having 3 numbers from 0-255 give you 16,777,216 different channels to choose from, it would also function as a color picker. These 3 numbers could represent the RGB values of a color that would visually indicate what channel the particular pad is connected to, it would display this color as about 25% of the arrow at the back of the direction it is pointing. I also think it would be fun to see what colors people choose for their teleportation pads and how they make them fit in with their tech aesthetically.

In case you are having trouble picturing in your head what a part like this would look like, I created some very rough concept art in paint, but it should be enough to help you visualize it.
Teleporting Conveyor Belt - Updated.png
You'll notice there is an optional (the developers will have to decide if it is worth the effort to add) Quality of life feature that will indicate on the arrow if there are other pads on the channel it is connected to.

Now I think it is important to emphasize that teleportation in a video game is relatively simple compared to the real world. All you have to do in a video game to teleport something is to manually set the X,Y,Z location of an object, which in this case is a resource chunk. The game moves resource chunks already using manufacturing blocks. If I were to program this I would make it so the sending pad and receiving pad act like two conveyor belts next to each other except the only difference being that they are physically separated. I would not recommend using the same movement physics due to how conveyors have a tendency to fling things when they get stuck, I would instead manually set the location of the resource chunk to the location of the receiver while keeping it connected like a conveyor belt.
 

Attachments

Last edited:

RC-3197

Well-Known Member
Joined
Jan 5, 2018
Messages
23
Likes
51
Points
415
#3
I will now provide some code that could be used to make this part a reality, but I will preface it with a disclaimer, I have no idea what the code for terratech looks like nor am I a game developer, I am just a person with some knowledge of coding and the purpose of this is to just give you a general idea of how it could be done, it is not the only solution nor is it the best solution:
 
Likes: Sokolov

RC-3197

Well-Known Member
Joined
Jan 5, 2018
Messages
23
Likes
51
Points
415
#4
Java:
public int getReciever(int SChannel1, int SChannel2, int SChannel3, int SBlockID) {
        int ReturnBlockID = -1;//By default it will be set to -1 which is the number we return when there are no valid recievers
        if (Channel1List.size() > 1) {//if the array list only has one entry it is the object we are currently trying to find a reciever for and there are no other parts
            for (int i = 0; i < Channel1List.size(); i++) {//check all the array lists
                if (Channel1List.get(i) == SChannel1) {//does channel 1 match?
                    if (Channel2List.get(i) == SChannel2) {//does channel 2 match?
                        if (Channel3List.get(i) == SChannel3) {//does channel 3 match?
                            //if it does we must check it
                            //This is where the code gets sketchy because
                            //in order for this to work there must be a method
                            //with the java object that can return the status of the pad
                            if (BlockIDList.get(i) != SBlockID) {//Make sure we aren't returning the source block
                                int TargetID = BlockIDList.get(i);
                                BlockTelPad targetPad = new BlockTelPad();
                                if (targetPad.state==1){ //is it a receiver?
                                    if (targetPad.isBusy() == false) {//if the pad is not busy
                                        ReturnBlockID = TargetID; //we have found a suitable pad to send this chunk to, return the ID
                                        i = Channel1List.size();//end the for loop
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return ReturnBlockID; //return the result, which is -1 if there is no suitable reciever detected
    }
 
Likes: Sokolov

RC-3197

Well-Known Member
Joined
Jan 5, 2018
Messages
23
Likes
51
Points
415
#5
Java:
//for the pad itself I am referring to this object as targetPad for simplicities sake
boolean BusyState = false; //for indicating if a reciever is busy
boolean AcceptChunk = false; //for indicating if a sender can send
int[] connectedBlockIDs = new int[5]{};
int State = 0; //indicates state, 0 for send, 1 for recieve
int currentChunkID = 0;//Keeps track of the ID of the resource chunk
tech ParentTech = new tech();//indicates the parent tech, will be set when the object is created
int Channel1 = 0;
int Channel2 = 0;
int Channel3 = 255;
int BlockID = 0;//this will be this pad's block ID which will also be set when this pad is created
Color channelColor = new Color(Channel1,Channel2,Channel3);
public boolean isBusy(){
    return BusyState;
}
public void reverse(){
    //stop us from recieving chunks
    AcceptChunk=false;
    BusyState=true;
    if(state==0){
        state=1;
    }else{
        state=0;
    }
    BusyState=true;
    updateArrow(); //I won't make this function, basically what it needs to do is have the arrow forward and green for a sender and backwards and red for a reciever
}
public void setChannel(int index,int newChannel){
    if(index==0){
        Channel1 = newChannel;
    }else if(index==1){
        Channel2 = newChannel;
    }else if(index==2){
        Channel3 = newChannel;
    }
    channelColor = new Color(Channel1,Channel2,Channel3);
}
public void orderSendChunk(){
    int recieverID = parentTech.getReciever(Channel1,Channel2,Channel3,BlockID);
    if(recieverID!=-1){
        if(currentChunkID==-1){//do we have a chunk?
            //get one to send
            AcceptChunk=true;
            getChunkSend();
        }else{
            //we have one, send it to the ID we just found
            sendChunk(recieverID);
        }
    }
}

public void getChunkSend(){
    int chunkID=-1;
    int sourceIndex = -1;
    if(AcceptChunk){
        if(Game.Global.getObjectFromID(connectedBlockIDs[1]).hasChunk){//1 should be the only attachment point that accepts a resource chunk
            Game.Global.getObjectFromID(connectedBlockIDs[1]).moveChunk(BlockID);//move the chunk to this pad
            AcceptChunk==false;
            orderSendChunk();//try to send the chunk again, this is to check if the recieving pad is still open
        }
    }
}

public void sendChunk(int targetPad){
    int[] targetLocation = Game.Global.getObjectFromID(targetPad).recieverLocation;//get the location we need to send the chunk to
    Game.Global.getObjectFromID(currentChunkID).location = targetLocation;//send the resource chunk to that location
    Game.Global.getObjectFromID(currentChunkID).conveyorBlockID = targetPad;//attach the resource chunk to the target reciever
}

public void getChunkRecieve(int newChunkID){
    BusyState = true;
    currentChunkID = newChunkID;
    if(Game.Global.getObjectFromID(connectedBlockIDs[1]).isOpen){//if the neighboring manufacturing block at attachment point 1 is open
        moveChunk(connectedBlockIDs[1])); //this would be the same method conveyers use to move chunks
        busyState = false;
    }
}

public void tryRecieverMove(){//a method to use in case getChunkRecieve doesn't move the chunk
    if(Game.Global.getObjectFromID(connectedBlockIDs[1]).isOpen){//if the neighboring manufacturing block at attachment point 1 is open
        moveChunk(connectedBlockIDs[1])); //this would be the same method conveyers use to move chunks
        busyState = false;
    }
}
 
Likes: Sokolov

RC-3197

Well-Known Member
Joined
Jan 5, 2018
Messages
23
Likes
51
Points
415
#6
So in conclusion I would like to say that I think this would be a very useful block for manufacturing. I personally would find it extremely useful for my mobile factory which needs to move resources across long distances and specific places on the tech quickly. I also think it would be a good fit for reticule research as it has some very exotic technology.

To the people who read this:
Thank you for reading this post I know it's extremely long and probably a seemingly insane idea. I appreciate feedback on posts like these, and hope to hear what you think about this. If you have any questions, ask them, I'll be happy to answer them. I also hope I conveyed my idea well enough for you to understand what it is and maybe even want it in the game yourselves.

If you like this post you might be interested in some of my other ideas:

Idea 1: Point Defense Laser
Idea 2: Tesla Gun

To the Developers:
Make it happen! You guys are talented and make this game better with every update! I legitimately do not care about getting credit for this idea at all, all I want is for this block to be in the game.

Edit:
I do not know if it would be physically possible to use this part to teleport resources between techs but that would be a cool feature if it could work. Also there could be an extra check before sending a chunk that would check to see what team it is on first (to prevent the chunk from being sent to enemy techs).
 
Last edited: