1
Discussion / Call me crazy!
« on: April 18, 2017, 04:30:37 PM »
This may be crazy, but I'm remaking Terrablox again!
OK, put down the pitchforks and torches. I have lots of reasons.
So read through and let me know your thoughts.
Current Version:
I will likely be coming back to the current version to get it into a game/playable state. But it's going to be difficult to ever evolve it too much. And the time I can spend on it is very limited as it doesn't, and probably won't, generate money. So I have to concentrate on things that do. It also won't port to GMS2, the shaders are over-complex, which is my mistake, yes they are cool and fast but then YYG took out DX9 support and screwed them all over, and their support to DX11 was broken for so long and there's still issues. And even if it did port, the new IDE does not lend itself well to it's current structure.
The Hate:
On top of those issues, I'm finding GM just toxic these days. I no longer have belief in it. The experience of using GM is a bumpy road, from something always being broken, to fixes breaking other things, to rubbish/incorrect documentation, to the only decent reference material (the old GMC) vanishing from the internet (can't google it). I just got fed up.
The Solution:
Anyway, enough of the rant. I have a new plan. So I entered a game jam recently, and for it I decided to use pure Javascript, using HTML5 canvas for rendering. Now I was already familiar with JS, but I hadn't actually made and released a full game with it before. So I did and it went really well and was enjoyable. So for the sort of games I usually make, 2D pixel art stuff, I'm more comfortable with that now. But what about my 3d stuff? I only really have Terrablox. So, can I make that with pure Javascript?
The Attempt:
OK, so I have already set up a project and have things actually working. I'm using the Three.js library for all the 3d stuff at the moment, it's quick to set up and do stuff with and will demonstrate viability sooner. It manages things like the renderer, scene, camera, geometry, etc. Voxels are now objects, so they can have all the properties they need, rather than just being a single value. It has multi-threading using web workers, currently I have this building the mesh. Web workers are tricky as you can only transfer object data as strings, so string>object conversion still happens in the main thread.
Despite Javascript not having any "include" command by default, it does lend itself well to being modular. So this project will also be open source. That way I finally keep that promise, and can easily keep any game (art, audio, game logic, etc) separate from the engine. Not being able to easily separate engine and game before was the reason it didn't happen.
I have not much to show atm, currently there is a chunk that can fill up with voxels, and then build a mesh in a separate thread, and then return it, and finally add it to the scene. My next goal is to have the world object load in a bitmap (heightmap), create chunks and generate voxels based on the world heightmap data. There's also currently no culling or any optimizations. I'm still in the viability stage. So don't get too exicted. You'll see it when I get it looking like something.
So to recap, I know these are things that have been requested before:
EDIT:
OK, put down the pitchforks and torches. I have lots of reasons.
So read through and let me know your thoughts.

Current Version:
I will likely be coming back to the current version to get it into a game/playable state. But it's going to be difficult to ever evolve it too much. And the time I can spend on it is very limited as it doesn't, and probably won't, generate money. So I have to concentrate on things that do. It also won't port to GMS2, the shaders are over-complex, which is my mistake, yes they are cool and fast but then YYG took out DX9 support and screwed them all over, and their support to DX11 was broken for so long and there's still issues. And even if it did port, the new IDE does not lend itself well to it's current structure.
The Hate:
On top of those issues, I'm finding GM just toxic these days. I no longer have belief in it. The experience of using GM is a bumpy road, from something always being broken, to fixes breaking other things, to rubbish/incorrect documentation, to the only decent reference material (the old GMC) vanishing from the internet (can't google it). I just got fed up.
The Solution:
Anyway, enough of the rant. I have a new plan. So I entered a game jam recently, and for it I decided to use pure Javascript, using HTML5 canvas for rendering. Now I was already familiar with JS, but I hadn't actually made and released a full game with it before. So I did and it went really well and was enjoyable. So for the sort of games I usually make, 2D pixel art stuff, I'm more comfortable with that now. But what about my 3d stuff? I only really have Terrablox. So, can I make that with pure Javascript?
The Attempt:
OK, so I have already set up a project and have things actually working. I'm using the Three.js library for all the 3d stuff at the moment, it's quick to set up and do stuff with and will demonstrate viability sooner. It manages things like the renderer, scene, camera, geometry, etc. Voxels are now objects, so they can have all the properties they need, rather than just being a single value. It has multi-threading using web workers, currently I have this building the mesh. Web workers are tricky as you can only transfer object data as strings, so string>object conversion still happens in the main thread.
Despite Javascript not having any "include" command by default, it does lend itself well to being modular. So this project will also be open source. That way I finally keep that promise, and can easily keep any game (art, audio, game logic, etc) separate from the engine. Not being able to easily separate engine and game before was the reason it didn't happen.
I have not much to show atm, currently there is a chunk that can fill up with voxels, and then build a mesh in a separate thread, and then return it, and finally add it to the scene. My next goal is to have the world object load in a bitmap (heightmap), create chunks and generate voxels based on the world heightmap data. There's also currently no culling or any optimizations. I'm still in the viability stage. So don't get too exicted. You'll see it when I get it looking like something.

So to recap, I know these are things that have been requested before:
- Open Source
- Multi-threading
EDIT: