Fractal Block World
Version 1.02.00
Back
The engine has been expanded to include
"Icarus mode".
Updates
Version 1.02.00:
- Date: Not released yet
- Added a
truly amazing secret area
which required rewriting core parts of the engine!
The community can have fun searching for and exploring this area.
- Now certain "infertile" chunks are not created at all.
This is an example of "pruning the chunk tree".
For example, consider the block type
XAR_YING_FOREST_AIR.
This consists of a single gray block in the middle,
with sometimes a grower, a shrinker, or a goblin.
Now this block type has been set to
"prune when infertile" (PWI).
When a XAR_YING_FOREST_AIR chunk exists and is fertile,
it looks normal.
However, as soon as the chunk becomes infertile,
the chunk is removed.
If we had not set it to be PWI,
then when it is infertile it would just have its single
block in the middle but no growers, shrinkers, or goblins.
We would like to thank the user enzo for suggesting
a change like this.
One might even want to remove certain fertile chunks,
but there is a problem with doing this in general.
For example, we shouldn't be allowed to remove chunks on level L
if they intersect the "envelope" of level L+1.
The envelope of level L+1 is the bounding box of that
level but extended in all directions by 2 chunks.
This new pruning feature required changing parts of the engine.
For example, there was an old rule that when a chunk C is
created, if an adjacent chunk does not exist, then we
do not create any external squares on that side of C.
We have had to modify that rule.
Also, the visray algorithm has been modified.
It is true that you can have solid blocks
be PWI, but this might result in rendering artifacts because
the depth buffer is cleared after rendering each level.
To see how to create Lua block scripts that are PWI,
see the file Data/Packages/base/WorldNodes/Nodes/block_e.lua
which is the standard Lua block script for an empty block.
- The way moving entities (ments) are rendered has changed.
Before, when it was time to render an ment, we would compute
a bunch of variables.
Now, we compute them every discrete update (which happens 25
times per second).
The downside of this new approach is we are computing vars
for ments which might not intersect the view frustum
over the next few frames. Such ments will not be rendered
(but we cannot tell in advance because we don't know if the player will
suddenly move their head).
In a future update, the plan is to NOT update these vars 25 times
per second but instead only update them when a relevant change
is made to the ment.
- Now there is a menu to turn on/off the in game
memory counter.
It can be found at Options -> Engine -> Debug -> Memory Counter.
Once set, the program must be restarted for it to take effect.
The total memory used by the program is displayed in the main menu
in the upper left.
There is also a side display to display total memory.
- In addition to the memory counter there is a new tool
for memory debugging: the memory mom.
Every smart pointer in this program has a string name
describing the object that is pointed to.
When the memory mom is enabled, if you run the command
debug_mom_dump, it will dump to
stdout.txt the names of
all these objects and how many there are of each type.
When this mode is enabled, it will slow down the game slightly.
The memory mom will also dump twice during program shutdown
(if it is enabled).
Once set to enabled, you must restart the program for it to work.
- The xar block overrides
system has been improved.
Now when you override a xar block with a Lua block,
the texture of the Lua block will replace
the texture of the xar block.
Also, the "is solid" parameters of the Lua block
will replace those of the xar block.
To make sure that this new system is not tedious,
there is a way to copy the basic parameters
of a xar block into a Lua block.
What you do in the Lua block script is define
a function
__get_bt_to_copy
and have it return something like
"XAR_SMALL_YELLOW_FLOWER".
Then, you do not need to define the
__get_is_solid
and __get_tex function of the Lua block
(but you can if you want).
If you have the __get_bt_to_copy
function, it is required to return a string that starts with
""XAR_".
- For advanced modding there is a new body mode called "custom".
You enable this by calling the function
ga_move_set_body_custom.
When this mode is enabled, the engine does not perform any collision
detection to the player whatsoever, but the world is still rendered.