Here I am with yet another release. With this one we're starting the 0.3.x series of the engine, nearing usability for regular users very fast. So what are the changes?
New release system
I'm abandoning the biweekly release system, switching to a flexible "whenever it's ready" system instead. I expect the average release to still take about two weeks, though I can take a delay occasionally or release it sooner - whatever is required by the time. This also means releases won't necessarily be on Monday anymore.
I removed some obsolete GUI code and optimized the rest. The most important optimization is reduction of the expanding hbox/vbox mode to two passes, making it just a bit less efficient than the other modes.
Procedural API changes
I expanded the procedural API a bit further, allowing the user to lookup cubes, materials and textures at the given coordinates. This is intended for purposes of the Octacraft demo, which will have to wait a bit though.
Revamped player animation logic
The player can now use more animations - particularly, the logic handles movement animations in 8 directions, which means stuff like diagonal running, and also handles directional jumps.
New player model
The project got a new player model created by a new contributor, fleeky (http://fleekyflux.com). There will be screenshots and a video at the end of the announcement. Speaking of the player, I also revamped the player_class system to be simpler and less hacky, tweaked the default player values (such as eye height) to suit this model and added a playersfpsshadow variable to allow player's shadow to be displayed in first person mode.
New map and textures
Fleeky added a new testing map, "test". For the purpose of the map there were also some textures added, made by nobiax. The map is shown in the screenshots and in the video.
Extended newent command
You can now pass extra arguments to newent and they'll be interpreted specifically to the entity type. For example, you can pass the red, green, blue, radius and shadow values when creating lights. This works for all entities where it makes sense.
OctaForge got a brand new texture loading system that doesn't require pre-registering of textures anymore and thus is dynamic like everything else. It's based around a system of "texture packs", which are just rebranded .cfg files (with .tex extension). They define texture slots normally like a cfg file would.
What's changed is that you load these files differently and most importantly, you load them while mapping. There are three commands for this, "texpackload", "texpackunload" and "texpackreload" (the last one just combines the first two). The internal logic keeps track of them and for example when you unload a pack, it saves the vslots it provided to reuse them when you load it again (to correctly map textures onto surfaces). This allows for much more comfortable texture editing. Texture packs are isolated in a sense they always start with the standard world shader and any shader changes done inside them won't be visible outside.
Another change is that I added a system of texture groups to categorize textures. Texture groups can be nested. If you do changes such as setshader or setshaderparam in a texgroup, they respect the group scope (won't leak outside). The syntax looks like this:
texgroup groupname [
texture 0 foo .....
texgroup nested [
setshader foo // only for nested
texture 0 whatever ....
Another change is that I simplified the texture command. You can now write commands like:
texture 0ns foo/bar
which will automatically expand to
texture 0 foo/bar
texture n foo/bar_n
texture s foo/bar_s
If you provide an extension (for example, foo/bar.png) the suffix will be appended before the extension. This set could also be rewritten as:
texture 0 foo/bar
texture 0 foo/bar
As a last change I'll mention here in the texture system, there is a new
texcull command. It removes any slots from the map that are not used and compacts the rest into a minimal form. Note that if you do this then it'll discard texture packs that had at least 1 texture unloaded (thus you won't be able to reload these slots except by restarting the map).
Oh, one more thing - there is a system akin to texpacks for materials. Material packs have the .mat extension and they don't need unloading or reloading because they simply overwrite what was there previously. To load a material pack use the
matpackload command. For the purpose of material packs I extended the
materialreset command to allow fine-grained resetting of individual material slots.
Now, when you save the map, it'll write your texture setup (and optionally more) into a file called media.cfg, which will be executed next time to restore the state. You can also do this manually using the command
I fixed the replace/replacesel commands. From upstream there were particle/decal system improvements. I improved build system stuff. And fixed a lot of bugs. That's it for now.