BIOCODE X™

ADS ON THIS PAGE DO NOT REFLECT THE OPINIONS OF THE DEV

Want to leave a comment? Want to suggest new content? Click a video below! Or email me at moc.liamy|sitohtroid#moc.liamy|sitohtroid


Minimum System Requirements
2 GB available RAM or swap space.
100 MB Storage.
1.2 GHZ Dual Core
Dedicated Graphics Card.


updated on July 11, 2021

Current Version: 0.9.2.1


NOTES

If you receive a 'segmentation fault' error in linux, lower render distance. I am working to fix the issue. It is caused by your graphics card running out of RAM.


Fixed villages sometimes not generating. Improved biomes.

Rewrote the entire graphics engine from scratch to use Opengl 2.0 instead of Opengl 1.1. This has resulted in a huge performance increase.

Full Version now free for a LIMITED TIME ONLY!

BIOCODE X for Windows

BIOCODE X for Linux

BIOCODE X for Windows 100% free for a limited time!

BIOCODE X for Linux 100% free for a limited time!

https://www.mediafire.com/file/yth5c4ereesitj5/BIOCODE_X%25E2%2584%25A2_setup.exe/file

https://www.mediafire.com/file/6d2594c6x3kqwbc/BIOCODE_X-Linux_binary_X86-64.tar.gz/file

BIOCODE X for Windows 100% free for a limited time!

BIOCODE X for Linux 100% free for a limited time!

Welcome to the world of BIOCODE X™, this is the place for infinite fun and adventure, and where new possibilities are continuously unfolding. BIOCODE X™ is a game inspired by Minecraft. BIOCODE X™ is becoming a great and timeless classic, it is a brand new game unlike anything ever played before, a game created entirely from scratch by a single independent game developer. A new and exciting adventure that rewrites the rules of fun. It features a cutting edge in-game virtual computer that is fully programmable using a custom BASIC programming language, which includes png image loading and rendering onto an in-game cube screen array. This technological feat is very significant in the advancement of computer science, and provides the tools for users to create full games within the game BIOCODE X™. The community is most important, in order to connect us in ways we never thought possible. Within BIOCODE X™, structures may be encoded onto an in-game disc. This provides an effective way to share your builds easily with others, and connect you with people all around the world. Contribute, create and discover new things daily! your epic adventure awaits. Are you ready?

634459907.jpg

History

BIOCODE X™ is a high performance 3D first person building game written in "C++", "Opengl" and "SDL 2.0". The game saving and loading has been streamlined to allow nearly an instant response, and has an infinite terrain generator that uses randomized procedural generation NOT based on Perlin noise! This game is inspired heavily by Minecraft. The most simple and striking difference first encountered while playing BIOCODE X™, is the inability to have multiple items of the same kind occupy the same inventory or chest space. This is to provide a challenge to the removal of ground blocks when in search of ores. This limitation also encourages the creation of backpacks, which are able to also hold backpacks. A total of 5000 backpacks may be made. BIOCODE X™ has been in development since march 2015. This game is unique in many ways, it has very good performance on low end computers, and is still in development at this time.

Features

There are many features to discover and enjoy while playing BIOCODE X™. At night, zombie hordes come to eat you alive! This can be combated with the use of the desert eagle hand gun. The desert eagle is able to kill a zombie in one shot, if you can hit its head. There are many features that are planned to be made in the future, these include transportation devices, a bull and much more, suggestions are welcome. Wooden cubes and objects can be set on fire by holding a torch and holding CTRL and right click for a few seconds, quickly spreading to nearby wood. The barrel of black powder may only be detonated by holding a torch and right clicking, because of this, it does not damage the player yet. BIOCODE X™ will ALWAYS autosave upon exiting, UNLESS a new game is created and NOT saved. Upon saving a new game, the game will ALWAYS autosave upon exiting. Any two teleporters placed on the ground may be synced to enable instant transfer across any distance. Simply press the set button after right clicking the first teleporter, and press the sync button on the second teleporter.


Recent Updates:

Current game version: 0.9.1

PAST UPDATES

// 0.9.1.6
*Added Linux support.
*Fixed game crashing when removing adjacent chunk blocks. [FACE PALM]

// 0.9.0.4
* Improved lighting under water.
* Added Music.

// 0.9.0.3
* Added Recipe Book, found in starting village market chest.

// 0.9.0.2
* Added Ability to cure ANY Zombie by right clicking while holding a Diamond, then right clicking again while holding a Red Apple.

// 0.9.0.1
* Added More Villager Biomes.
* Bug Fixes.
* Removed Starting House Chunk

// 0.9.0
* Player now starts in a village.
* Added Market.
* Added Bank.
* Added Money Items.
* Added Villegers and Villages.
* Changed Stone tools to actually require stone instead of cobblestone.
* Holding CTRL (Aux) prevents items from being picked up.

// 0.8.9
* Improved Day and Night Transitions and Lightning effect performance.
* Fixed Teleporters.
* Removed Chest Sound.
* Added Drip sound underground.
* Fixed Removing bucket of lava at y=1 not revealing bedrock.
* Lowered RAM usage by 57%!
* Removed Multithreading, much more stable.

// 0.8.8
* Added automatic angled walking up ramps (slopes).
* Removed ability to fly after death due to respawn stuck bug when flying into the ground (will fix).
* Fixed Zombie collision error after falling.

// 0.8.7
* Fixed glitchy boarder jumping!

* Updated Stone and Maple wood textures.
* Fixed Windows 10 incompatability issue, all saves are now in %appdata%.
* Added key map in the settings menu.
* Fixed Virtual Computer Path
* Fixed error with zombies.
* Fixed Place Block Error
* Improved Rendering!
* Added Lightning Bolt
* Added Caves!!!
* Bug fixes
* And More!
* Added Sun and Moon
* Added Item Labels
* Added in-game computer functions
-.wav file loading
-.mp3 file loading
-SAVE and LOAD state functions
* Changed the inventory system to automatically shift items to allow easier building.
* Holding SHIFT and CTRL now work in CREATOR mode.
* To light fire, hold CTRL and hold right click for a couple of seconds.
* Added Creator Mode
* Added Surveyor
* Added ability to change in-game external screen per cube resolution to 16x16, 32x32, 64x64, 128x128, 256x256, 512x512
* Added Awake stat.
* Removed Hearts and meat stat indicators.
* Added Bed from hay bales and leather.
* Added Automaker, bug fixes!
* Added Item Ducts: Automatic furnaces!
* Added Zombies!
* Added Graphics API for in-game computer!
* Added Computers, Discs and Robots.
* Cows.
* Ocean Biome.

// 0.4.6 BETA
* Fixed lighting!
* Added Ocean Biome

// 0.4.5 BETA
* Added clouds
* Fixed copper ore texture
* Explosion properly removes chests and furnaces
* Improved Day/Night Transition times
* Fixed swimming bug

// 0.4.3 BETA
* Fixed tree growth on chunk boarder
* Fixed Sulfur Ore Block remove speed
* Created 60 minute playable demo!
* Added Ability to grow instantly using Potassium Nitrate (saltpeter)

// 0.4.2 BETA
* Added explosives
* Added Birch trees
* Added Ruby

// 0.4 BETA

// 0.3.7 BETA
* Added 9 different colored flowers.
* Fixed swimming.
* Expanded Chest size.
* Added Bucket and Birch Trees.

// 0.3.6 BETA
* Added ability to remove and place blocks on adjacent chunks.

// 0.3.5 BETA
* Added Iron Tools
* Diamond tools
* Diamonds and ingots of all ores.

// 0.3.4 BETA
* Torches!
* Item Durability.
* Ores!
* Multithreaded lightning and day/night transitions.

// 0.3 BETA
* Multithreaded chunk loading!
* Better world data compression.
* Added sounds.
* Added rain and thunderstorms.
* Added Biomes.
* Added Desert.

The version 1.0 release of BIOCODE X™ is coming someday!


To make a screen array, make the screen block. The first screen placed is considered the top left corner. The screen will only register completed rows.

In order to create programs, first you must make a disc item. The disc item is not formatted when first created. It is formatted by placing into the computer (hold shift with disc as current item and right click computer). Right click computer with an empty active item slot. Name the disc to format it. If you are trying to import a disc, currently the only method is to open the virtual disc directory on your computer. Open a search and type "%appdata% and locate the folder "/BIOCODE_X/PRG/" the disc is saved as a .prg file. When formatting an in-game virtual disc, if a disc name is already used, the disc will be imported instead of created.

Programming in-game computer tutorials

Welcome to the programming computer tutorials section of the wiki. Here you will learn how to write programs using an in-game computer.

This is a very easy and straight forward thing to do, thanks to a very user-friendly graphical user interface. If you have never programmed a computer before, this is an excellent starting point to begin.

June 29, 2020

It has come to my attention that the Virtual Computer is very similar to a Commodor 64, however, this was not intentional, as I have learned of the Commodor 64 after creating the Virtual Computer. The Virtual Computer Basic was inspired by the Texas Instruments 83+ graphing calculator's Basic programming language.


BASICS

Programming an In-game computer is very easy. It starts by first making a disc, which is used to store programs the computer can run. The disc may be inserted into the computer by holding the SHIFT key and right clicking on the computer, while the disc is being held by the player. The disc may also be ejected the same way, if the player is not currently holding an item.

The computer is accessed by right clicking, and exited by pressing the ESC key. The disc should be named, and is done by placing a disc into the computer (SHIFT+RIGHT CLICK), if the disc is not named, the user will be prompted to name it. If the user would like to change the disc name, simply click the disc image when accessing the computer, however, if you change the name, the images stored in the IMG folder found in the application root directory must be in a folder that reflects the new name for the images to be loaded properly, this also applies to the MP3 and WAV files. All programs are automatically saved. There is not currently an easy way to delete a program once it has been created using the NEW button, the only method is to open the .PRG file in a text editor (notepad), and remove the program manually (not recommended), however, a program's name may be edited from within the program by selecting it after pressing the EDIT button, the name of a program is stored at line 0. A program's name may only be 8 characters long, and typing a name longer than eight characters from within the program may have unexpected consequences.

After a disc has been inserted into a computer, the NEW button is used to create new programs on the disc. It should be noted, that a program may be written using any style that the programmer wishes. For example, a single program could be created that runs all of the code for the program. However, it is tedious and confusing to deal with a single large program, therefore, in these tutorials, I will be showing you a possible way to break up a program into more manageable parts made of separate programs. This has the effect of allowing code to be easily reused, as well as making the entire thing easier to manage and understand.

There are three basic things involved with programming, Commands, Variables and Programs. We have already briefly covered Programs, which are simple to create using the NEW button, as well as being easy to edit with the EDIT button.

Variables

Variable and program names cannot be larger than eight (8) characters. If you make them larger, they will not work.

Variables are the containers for data the computer uses while running a program. All variables are signed integers (signed means they can be negative). Each variable may be named any string of eight characters including special characters (=-+*/), however if they begin with a number, you will have problems and they will not work correctly, they also MUST be followed by a SPACE if not at the end of a line.

Variables are automatically created, and will not be destroyed until the program stops. All variables are global to all the programs stored on any given disc. This is in order to simplify the process of sharing variables among the different programs without the need to actually pass and return values. This has one drawback, that the programmer must be creative in there naming of variables, as well as careful to not reuse a variable without intending to do so.

Here is an example of creating a variable:

VAR = 1

It is customary to assign a value to a variable immediately after declaring it. An important thing to note about variable creation is that they will not be automatically created if it is the second variable in a statement, for example, the following is valid:

DOG = 0

GOOD = 10

DOG = GOOD

However, the following is not valid:

DOG = 0

DOG = GOOD

This is because the variable GOOD has not been declared. Variables may also be used to return a value from a Command like the following example:

VAR = K.A

Where K.A is a key press command.

Variables can be manipulated using addition, subtraction, multiplication and division. Since all variables are not floating point (they do not have a decimal), division results in a truncated answer. For example:

VAR = 7

VAR / 2

This would make the variable VAR equal to 3, as opposed to 3.5 or 4 (if it rounded). The following is also valid:

TODAY = 14

RESULT + TODAY

This would make RESULT equal to 14, because all variables are initialized with a value of zero, and zero plus 14 is 14.

Commands

The basic commands are considered separate from the Robot API and Graphics API, and there are 5 total.

LABEL
GOTO
IF
END
RUN

The Key Commands, Image API, MP3 and WAV API, and SAVE/LOAD STATE API commands are listed here, and explained in more detail below.

KEYS
K.A
K.B

K.Z

K.LA (Left Arrow)
K.RA (Right Arrow)
K.UA (Up Arrow)
K.DA (Down Arrow)
K.ENTER (Return)

IMAGE API
IMAGE1 = IMG.L NAME
VAR = IMG.D IMAGE1 X Y
VAR = IMG.C R G B
VAR = IMG.F
VAR = BKG.D IMAGE1 X Y
VAR = BKG.P R G B X Y
VAR = BKG.C
VAR = BKG.F X Y

MP3 and WAV API
MP31 = MP3.L NAME
VAR = MP3.P MP31
WAV1 = WAV.L NAME
VAR = WAV.P WAV1

SAVE/LOAD STATE API
VAR = SAVE SLOT
VAR = LOAD SLOT

TICK/TIME API
VAR = T.A
VAR = T.B

LABEL

The LABEL command is used to create loops. Whenever the LABEL command is found, a corresponding GOTO should also be found. The label name is given after the command LABEL preceded by a space, for example:

LABEL A

GOTO

The GOTO command is used to loop a program to any LABEL within a program being ran. The label to go to, is given after the command GOTO preceded by a space, for example:

GOTO A

This would place the program execution point at the command LABEL A. The name of a label or goto can only be eight characters long, and may be the same as variable names without causing problems.

IF

The IF command is used to run (or not run) a specific section of code according to the value of a variable. Here is an example:

VAR = 1

IF VAR = 1

GOOD = 10

END

The conditions can be the following:

= Equal to
< Less than
> Greater than
! Not equal to

UPDATE sept. 2, 2018

Multiple variables may be checked with a single IF statement by separating the conditions with the ampersand symbol '&'.

example:

X = 20
Y = 100

IF X < 50 & Y = 100
GOOD = 10
END

If both the conditions are true, then the code before the END statement runs. But if at least one condition is false, it will skip to the END statement.

NOTE
If the program requires a nested IF statement, it is necessary to put the second IF statement in a separate program, otherwise it will find the first END statement and not execute properly.

END

If you have made it this far, good job, we are almost done! You may have noticed the command END used with the IF command. The END command tells the computer when the end of an IF statement is. It is very important to include this at the end of the IF section of code. An IF section of code may contain as many lines of code necessary, therefore, if the END statement is not included, strange results may occur.

RUN

The RUN command is the most important command to make it practical to code anything useful. This command will execute any program stored on the same disc. As mentioned earlier, programs are created by pressing the NEW button, and are edited by pressing the EDIT button and selecting it from the list of programs.

As an example, lets say the first program you created on the disc is called START, which is the name I usually use. I use the program START as the main loop for the thing to run. A program is simply an infinite loop of code run until the variable condition is changed. Here is an example START program:

RUN INIT
LABEL A

RUN TICK

IF LOOP = 1
GOTO A
END

Empty lines may also be added to make the code more readable. Here is the program INIT used in START:

LOOP = 1
BOOKS = 0

Here is the program TICK:

IF BOOKS < 10001
BOOKS + 1
END
IF BOOKS = 10000
LOOP = 0
END

This program first runs the program INIT, which declares two variables; LOOP and BOOKS, while also setting their initial values. The program TICK is then run as long as the variable LOOP is equal to 1, however, in TICK, the value BOOKS is incremented by one each time the program completes a cycle (frame), until the value of BOOKS is equal to 10,000. When this is true, the second IF statement runs. This makes the variable LOOP equal to zero, which makes the program skip the command GOTO A in the main loop, and the program stops. Whew, it should be noted that this programming language is fairly fast, and counting up to 10,000 on my computer did not take any noticeable time to stop executing, and appeared to occur instantaneously.

K.A

And last, but certainly not least, is the mysterious K.A. This is a very simple way to have key pressing detection for your program running on an in-game computer. The 'A' stands for the key being pressed, therefore K.A is for the 'A' key, K.B is the 'B' key etc. The basic idea, is to check for a keypress each frame. This is generally done within a separate program called KEYS or something. Also, if the key is pressed and detected, the variable indicating the keypress should be made zero. This will allow only a single keypress to be registered, instead of many. As usual, here is an example, I will simply modify the TICK program. After the key, the mode is specifed, '0' means continuous, '1' means a single press until the user releases the key.

IF BOOKS < 10000

BOOKS + 1

END

RUN KEYS

And here is the program KEYS:

KEYT = K.T 1

IF KEYT = 1

LOOP = 0

KEYT = 0

END

This program will check for a keypress each frame, and if the 'T' key is pressed the variable LOOP will be made zero, and the program will stop running. The variable KEYT is also set to zero, however, in this case it is not strictly necessary, because after the variable LOOP is set to zero, the program stops.

K.ENTER (Enter key)
K.UA (Up arrow)
K.DA (Down arrow)
K.LA (Left arrow)
K.RA (Right arrow)
K.A ('A' key)

K.Z ('Z' key)
K.0 ('0' key)

K.9 ('9' key)

T.A

This command will return the number of milliseconds elapsed since the SDL plugin was initialized.

T.B

This command will return the current in-game time of day in seconds.

Conclusion

This concludes the Basic programming tutorial. As I mentioned at the beginning, it is very easy to program computers in BIOCODE X™, thanks to the very user-friendly graphical user interface. This programming will primarily be used for two things within the game, the most obvious being the ability to have a robot mine and build automatically. However, the thing I am really excited for, is the Graphics API. This is very awesome, read more below.

Graphics API

Welcome to the Graphics API tutorial. Here you will learn how to use the Graphics API within BIOCODE X™. Be sure to read the Basics tutorial first. Let's get started!

The first thing to note about the graphics API, is that it is very easy to use. Each command must start with a variable, this is to check for errors or return a value. The images are rendered onto an external in-game screen array. The array may be up to 32x32 screen block, and must be kept within a single chunk. The resolution for the external in-game screen may be set using the command:

VAR = SET.R X Y

X is the horizontal screen resolution, Y is the vertical screen resolution
A maximum resolution of 512x512 may be set.

Any .png image up to 64x64 may be loaded by using this command:

IMG = IMG.L IMAGE

IMG is a variable that is assigned the index of the image loaded, this is used with the drawing command to draw the image to the screen, and can be any variable name not already used. IMG.L is the image loading command. It takes a single value, the name of the .png file located within the IMG folder within the root directory of the application BIOCODE X™.exe. The file name comes after the command with a SPACE separating them.

The Graphics API commands are all double buffered. This is in order to allow animations, and requires that the pixels drawn to the screen are flushed to the visible screen buffer:

VAR = IMG.F

In order to draw a .png image to the off-screen buffer, the following command is used:

VAR = IMG.D IMG XPOS YPOS

VAR is a variable that is assigned 1 if the command succeeds, and 0 if an error occurred. IMG.D is the drawing command to draw an image to an external screen. IMG is the index of the image that was loaded, while XPOS and YPOS are the pixel coordinates to draw the image. The coordinates may be constants or variables.

We are almost done! There are only two commands left to mention. The first one clears the screen, this requires a call to IMG.F to be visible.

VAR = IMG.C R G B

VAR simply checks for error.

R is the red component of the color, G is green, and B is blue. Any
Value may be a number or a variable name.

The last, but probably not least, is the command to draw a pixel on the screen of any RGB value:

VAR = IMG.P XPOS YPOS R G B

Again VAR will indicate errors. IMG.P is the pixel drawing command. This command takes 5 variables or constants indicating the XPOS and YPOS on the external screen to draw the pixel, as well as the R, G, B value of the color to draw. The R,G,B values may be any number from 0-255.

VAR = BKG.D IMG XPOS YPOS

This command draws an image that has been loaded using IMG.L command. The background is an array 4096x4096. The XPOS and YPOS is the position to draw the image within the background array.

The background is necessary when rendering a large scene made up of smaller images, because it is faster to load the images into the background array when the level loads.

VAR = BKG.P R G B XPOS YPOS

This command places a pixel into the background array with the specified R,G,B value.

VAR = BKG.C

This command clears the background array making it transparent.

VAR = BKG.F XPOS YPOS

This command flushes the background onto the offscreen buffer starting at XPOS and YPOS within the background array.

Conclusion

In conclusion, it is very easy and straight forward to use the Graphics API. Up to 9000, 64x64 images may be loaded total. A few things to note about the external screen, is that only one screen per world may be placed. Also, the screen may only be placed on a single chunk. The maximum external screen size is 32x32 cubes (256x256 pixel resolution). The external screen does not need to be touching a computer to have graphics drawn to it. Only complete rectangles are valid screens, and do not need to be square (widescreen). When placing an external screen array, the first cube placed is ALWAYS considered the top left corner of the screen, and the screen may only be built by placing cubes either on the right side of the screen cube array or under it.

MP3 and WAV loading

Recently the in-game computer has been upgraded, and now allows for mp3 and wav file loading and playing with the in-game computer. To load and play mp3 files, simply place the file into the folder called MP3 within the install directory. The default install directory is Program Files/BIOCODE X™/, the wav file loading is the same except the wav file goes into the WAV folder.

First you need to load the files:

TRACK01 = MP3.L FILENAME
SOUND01 = WAV.L FILENAME

These commands will load the specified file, do not include the file extension .mp3 or .wav in the FILENAME.

After you have loaded the files, you can play the files using the following commands:

V = MP3.P TRACK01
V = WAV.P SOUND01

The variable V is to check for errors (not really), while the variables TRACK01 and SOUND01 are simply integer variables assigned to the filename.

Here is an example of using the MP3 and WAV functions, the filenames are track01.mp3 and sound01.wav.

TRACK01 = MP3.L TRACK01
SND01 = MP3.L SOUND01
V = MP3.P TRACK01
V = WAV.P SND01

SAVE and LOAD state

The most recent update to the computer, is the ability to SAVE and LOAD the state of the in-game computer. This is necessary to allow saving and loading of an in-game game written with the in-game computer (demonstration coming soon). This is very powerful, as well as simple to use. The SAVE and LOAD state functions write and read all the in-game computer variables to a file within the SAV folder found in the game install directory.

V = SAVE SLOT
V = LOAD SLOT

The Variable V is used to check for errors (not really), while the variable SLOT, is the slot to save to. Currently there are only 9 slots available, more may be added in the future.

Here is an example of using the SAVE and LOAD functions using slot 0.

V = SAVE 0
V = LOAD 0

Random Number Generator

V = RAND X

V returns the random value, X is the value is the range starting from 0.

R = RAND 255

This would place a random value into the variable R from a value between 0-255.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License