Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411423 Posts in 69363 Topics- by 58416 Members - Latest Member: JamesAGreen

April 19, 2024, 02:33:06 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsBlockenStein a new game concept/wip
Pages: [1]
Print
Author Topic: BlockenStein a new game concept/wip  (Read 888 times)
justthatrio
Level 0
*


View Profile
« on: July 07, 2021, 10:00:03 PM »

I've recently been really interested in block style games and I'm making a game similar in visual style to some that already exist, but I feel there are some things I could change about the mechanics and gameplay, and visuals and I wanna make the game extremely moddable. The name BlockenStein came from the idea in it you could seamlessly create mods in minutes ingame no external applications besides a text editor, and not only that new items can seamlessly interact and combine with old items, for instance, made a new type of wood with a blue and red texture? make a ax with it and the crafting system uses its woodblock group tag and a custom UV map on the ax handle to be automatically retextured with the new wood on its handle. The retextured ax is the same wood ax base item with a custom itemdata tag, beautiful. if that doesn't make you excited the list of updates ill be bringing in the future including that one will.

I'm doing this by adding all the blocks and items with a parser and text file, not in the source code. I programmed it myself and it parses my own programming language called FrankenType, I made the syntax myself, and it's bafflingly easy to add a new block and give it a texture. this means every item I added will be added with the same simple readable language anyone else can use to add or overwrite an existing item. A side effect of loading game content and resources this way is mods can be stored anywhere including the downloads folder and can be loaded without restarting the game or world your in if they don't add new biomes or change world gen features. FrankenType currently has selectable preset models but I'm gonna soon add the feature to select your own with a mere line of text, but first I'm prioritizing getting the player movement working, then before I tackle adding other entities I will release an alpha build for people to test out. I will continue releasing free builds for a while but if interest in the game grows enough I may charge a one-time fee then free updates after that.

I know it looks very similar to a game that already exists but all the textures are completely made by me and I'm gonna push it in my own direction as far as possible with completely unique blocks and items. Just because one game was made to look realistic, didn't stop other people from making their own realistic games. So I'm not gonna stop myself from making a block game in my own vision.



here are some screenshots from the game and its programming language, I embedded them but google has a tendency to switch its files location on its servers up so they may disappear, here's the google drive link with the screenshots. Anything and everything can and probably will change... after is a recap of my first devlog, I made a 20 minute video with narration but need to verify my youtube account before it will upload

https://drive.google.com/drive/folders/1uhyME7pzmwAvubjFSa-gHz0AVX0ZJQPA?usp=sharing
there are a total of 6 screenshots and 1 video of the inventory which I'm going to make darker to distinguish from the well-known blockgame
(side note, you may notice the inventory crafting system is unique only having 2 slots for ingredients and a third for recipes found during exploration to encourage exploration)




And now for the devlog portion:

so its been 2 weeks approximately I've been working on this but I got the idea a month ago and began experimentation with perlin noise, first 2d, then 3d, I ended up settling on a combination of both for my terrain generation, first a few 2d perlin noise maps are generated with scales exposed in the FrankenType mod file as "biomescale" and used to sample the temperature and rainfallamount and height at each block. Those values are used to pick the biome for that block.

the next step is generating each chunk. This is done in 2 steps, first create a array of every block in that chunk, then for each item loop through and place the appropriate terrain piece, this is done in 2 steps instead of 1 for 2 reasons, first when placing each block it needs to know the blocks adjacent to it inorder to place the correct connecting mesh. Unlike most voxel based games my game doesn't generate the meshes at runtime, it just doesn't render a mesh for hidden block and renders gpu instanced meshes (60 variations for each type of connecting terrain) but I've stress tested this and it didn't have a considerable hit on performance, whats killing performance is the chunkloading since its performed in multiple steps perchunk and im not even gonna detail the math for the 3d perlin portion because after hours of fideling with it I didn't understand what I had created, its in experimental stages the deform part in the frankentype file is responsible for controlling it, it can make cool archs setting ground thickness high and max height to like 10 or 15. Anywyas all that is actually kinda fine for performance, not good just playable, the problem is when its loading chunks between biomes, because the biomes have completely different terrain in each at the same block position. To solve this I average the 8 blocks centered around each block in a 2 block radius of a biome change. this is EXTREMELY expensive, to do this the 2d height map must be calculated 9 times for each one of these biome border blocks, it's still surprisingly runnable, and the moment the chunk loading stops the game becomes super super smooth over 60 fps for sure I actually haven't checked yet, but I think I have a solution, im just scared to implement it incase I break everything, I may take advantage of the fact the project is small enough I can back it up right now. But instead of averaging 9 blocks, I could just get the 4 blocks adjacent to it and average them or the ones after instead if I want a larger blur radius, this could have weird problems where the terrain change is unpredictable on both sides of the biome but I cant know until I test it

anyways that's what has been on my mind, here are the features of implemented, and the planned ones for the next 2 weeks

Features Implemented:
  • custom programming language syntax, parser, and documentation for using it
  • everything from biomes to items to blocks to textures are loaded with this
  • Inventory System working dragging and stacks of multiple items combine when dropped on each other if its the same itemtype
  • almost working flower spawning system, currently ignoring last item because of wrongly scaled noise value
  • 2d noise map terrain generation with additional 3d generation to create overhangs and unique terrain
  • slow working biome border smoothing function
  • 3d model for the player character and texture and animations for walking, running, idling and 2 sword attack animations


Features Currently Implementing:
  • creating switchable third and first-person controller(currently flys around for debuging)
  • block breaking and placing system(this should be super simple I just need to create a block update function for connecting surrounding terrain to placed terrain blocks which may not be as simple)
  • biome blocktype settings in FrankenType biome items for control over what biomes are generated with

Features Planned for next two weeks:
  • faster biome border smoothing
  • new block setting in frankentype for emitting light
  • entitys?
  • a couple new biomes?
  • more bug fixes... yup Lips Sealed

PS if your interested in checking it out here's the syntax for FrankenType https://docs.google.com/document/d/1rn-i8rc3GSWxEn3FrBypFH-uGddjqVKC6O7MVDg2sVU/edit?usp=sharing
« Last Edit: September 14, 2021, 02:24:15 AM by justthatrio » Logged
justthatrio
Level 0
*


View Profile
« Reply #1 on: July 08, 2021, 11:53:53 AM »

this is a quick update cause I didn't expect to suddenly fix 70% of chunk loading performance after a change that took 5 minutes to implement. It coulda taken me less if I had caffeine

but I just simply made the function that gets all the vertical block heights for each x and y pos save its results in a map variable with its XY location as its tag, then at the start before doing all the calculations I quickly check if the cache already contains the height information for this block, this is great because almost none of the foliage is floating now since the cache has al the smoothed terrain in it aswell as the normal but the generatefoliageforchunk function didn't redo the calculations for performance. now when im averaging 9 blocks in the blur operation its not also doing 9 more calculations to get height at block. basically now each block is limited to only being calculated once per render distance loading sweep

I loaded a bunch more chunks around the spawn chunks cause it wasn't making my computer move at what felt like .1 frames per second anymore. here's a video of what the terrain generation looks like and one showing the current performance during chunk loading

https://drive.google.com/drive/folders/1CafCls64g7iHwMbRQYMQEpvvnl4esSF3?usp=sharing
Logged
justthatrio
Level 0
*


View Profile
« Reply #2 on: July 16, 2021, 12:16:54 AM »

So some decent updates have been made, ill keep the list short and to the point. btw the progress bar on this post is counting down till the free alpha release.

Changes Made:
  • tuned player jumping and gravity
  • made chunks spawn starting from the player's position outward instead of left to right in a circle around the player
  • added an entire launcher for the already existing save system I made
  • third person view but not first person yet
  • third person view but not first person yet


Features Currently Implementing:
  • first-person controller(currently only has a thirdperson)
  • block breaking and placing system(this should be super simple I just need to create a block update function for connecting surrounding terrain to placed terrain blocks which may not be as simple)
  • biome blocktype settings in FrankenType biome items for control over what biomes are generated with


Features Planned for next two weeks:
  • faster biome border smoothing
  • new block setting in frankentype for emitting light
  • a couple new biomes? larger biome scale and height

so yeah knocked half a thing off of the last todo list but made some additions that were needed, specifically the laucher for testing block-breaking, placing and, saving

images link : https://imgur.com/a/LrE0T4P


Logged
justthatrio
Level 0
*


View Profile
« Reply #3 on: August 09, 2021, 11:05:35 AM »

https://imgur.com/a/kvgP6mn
/\/\ --that's a video of the cubic chunks with an overlay showing where they are, but there were some spawning that only had air in them and didn't need to be spawning however it doesn't do that anymore

(btw the devlog percent icon is counting down till the free alpha release no the game being done)

Things i've changed since last update:
  • Drastically changed biome settings
  • Added elevation to the biome mapping settings allowing for huge mountains with specific biomes on them, and for global height scaling
  • Added mod compiling/loading system (works when compiling and almost when loading a compiled mod)
  • Partially added multiplayer but worlds won’t load on the client’s screen, and now it needs to be updated for the 3d chunks but I started making the 3dchuynk framework with that in mind so it should be less problematic
  • Fully fixed terrain connecting wrong when blocks are broken (and then broke it with 3dchunks)
  • Added snow and snowy mountains
  • Added dead grass
  • Changed graphics API which fixed a bunch of crashes and improved shadows
  • Fixed player broken blocks respawning after being saved
  • Chunks are now cubic 3x3x3 shaped instead of 2d columns and therefore can now have an unlimited z spawning limit without affecting performance and as little can be spawned as possible improving performance insanely  (one of the implications is X-Ray texture mods won’t work since vertical chunks don’t spawn where they are not visible)
  • Created a custom live real-time world-saving system capable of saving worlds over 2gb and capable of staggering background loading for large worlds
  • /\ the system works but isn't implemented yet
  • Added block cache which saves on repeat calculations during chunk loading and improves performance
  • Chunks spawn from the player’s position instead of left to right around their position
  • Fixed layer of empty chunks spawning above the existing chunks in subsequent passes to the initial one
  • Added really fricking cool caves, with cubic chunk foliage spawning allowing foliage on the surface to be different from foliage in the same vertical z column
 
Logged
justthatrio
Level 0
*


View Profile
« Reply #4 on: August 12, 2021, 10:59:44 AM »

ok so this isn't as massive as an update as the last one but this one is an important and exciting one, I in the span of fewer than 48 hours have completely revamped the algorithm that decides where to spawn cubic chunks, and I LOVE IT SO MUCH. The chunks no longer spawn in a circle around the player in cubic columns (cause that's not much better than what most other block games do) now each chunk will queue up adjacent chunks to spawn based on whether or not there are blocks in each side of the chunks 1 block padding (because every chunk also calculates a block in every direction into adjacent chunks to properly calculate which terrain model is needed to connect the terrain blocks) then after it's finished running this process its iterative as every new chunk queued will queue more chunks upon spawning, and will only stop if the chunk including its padding is entirely filled. The entire cycle will stop when it runs out of chunks to spawn which it would never except for in closed caves, except for the fact ill stop a spawning chunk from queuing more chunks if it's outside of the player render range. each frame I can also sort an additional pair of queued chunks by their distance to the player in ascending order, that way each frame the order the chunks spawn will appear more correct and leave fewer unspawned chunks near the player.

why is this so important?
answer:  because in a cave that's 30 3x3x3 chunks tall 810 block positions noise values would have to be crunched and calculated vs the new method where only 108 blocks need to be calculated. THAT'S AN 8X CHUNK LOADING SPEEDUP

this allowed me to record a really cool video of some big caves
https://drive.google.com/drive/folders/1mIzezBG-EFiMLcNbgYffRz5PTbMNoHrm?usp=sharing

(note that the few missing chunks in the video arent chunks that are glitched they are chunks in the back of the queue, that's why it need to sort the queued chunk list by distance to the player, so missing chunks like that near the player will spawn first)

Logged
bartwe
Level 0
*


View Profile
« Reply #5 on: August 12, 2021, 03:09:23 PM »

Cool stuff, how are you finding unreal for rendering bloxels ?
Logged
justthatrio
Level 0
*


View Profile
« Reply #6 on: August 17, 2021, 01:23:56 AM »

Cool stuff, how are you finding unreal for rendering bloxels ?

thank you! Ive never made a block rendering system like the one I've made in unreal before. the intuitiveness of how unreals blueprints work has made it very streamline to render bloxels. However, in absence of generating a mesh at runtime, spawning hierarchical instanced meshes instead of actors is really important for performance, it makes updating or deleting them more involved but using hierarchical meshes you can use a box trace to get an array of hism components and arrays of int indexs for the hit elements for each component of the hism array.

the only problem I'm really having which is more with unreal and less with using it for rendering bloxels is every time I try and cook the project it fails with a soft reference error apparently has something to do with a variable I made a while ago having a corrupted default value of "0" but a mismatching type, and without being able to cook the project I cant build it or nativize the blueprints to test bumping up the chunks rendered per frame, cause atm with just editor blueprints playing in editor it can only render 4 chunks per frame while getting 30+ fps but supposedly nativizing blueprints literally gives an 800% performance boost so I may be able to load worlds as fast as other people block rendering solutions
Logged
justthatrio
Level 0
*


View Profile
« Reply #7 on: September 14, 2021, 02:23:41 AM »

New features since last update:
  • mod selecting ui for worlds
  • mod managing page to display version, description and compiled status of each installed mod
  • 95% working lan multiplayer worlds
  • first person view and some fpv animations
  • new multiuse pillar block type
  • File compression on saving and decompression on loading
  • TreeGenerator syntax for the FrankenType mod files
  • Blockgroups because im in the middle of adding procedural recipes that will allow mods to add crafting recipes that can modify items in separate mods the original mod wasn't programmed to specifically work with. Taking automatic mod compatibility and integration to another level
  • I modeled the first person arms to use a well-organized atlas and am going to re-uv-map the player to use the same atlas in order to allow skin changing for players
  • I Changed the postprocessing quite a lot to get a raytraced look without raytracing(my GPUs one version behind supporting raytracing smh)
  • Fixed modified chunks in the air not knowing to spawn once the world is reloaded by simply checking its surrounding chunks reiteratively until it finds the closest spawned chunk to save a connection in
  • Added a cellular Autonoma table that is supposed to be a lab type block and on top of it there are hundreds of simulated cells all moving around with emergent behavior interacting with each other, sometimes forming viruses with very similar genetics that will explode across the table killing the other cells. I don't know whether this will stay a feature and if it does it may be a creative only thing, but it has the potential to fit into the mycology aspect of the game which will be the player's source of buffs, so could have cool uses. only time will tell

I just closed the game engine so screenshots will come tomorrow if I remember, it's not like anyone is reading these anyways
Logged
Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic