I got a lot done. I was tempted to call this “The Great Refactor” update, because I just about gutted, and rebuilt from scratch, the entire half of the engine that handles data rather, than gameplay.
This set the stage for the much improved statistics system, more complex secrets and unlock-mechanics, inter-level backtracking, and far cleaner save/load code among many, many other things.
However, it took long enough to do all that, that I ended up updating and adding a variety of other features along the way, so that in the end it was not just a code infrastructure update, but rather it touched a lot of different areas of the game.
Some changes…
Game
Created a completely new Witness Glass Alcove area between the normal and secret levels. Also created a bunch of new tree graphics specifically for that area.
Secrets work on a new system now, which is explained via in-game text in the Witness Glass Alcove.
The Black Heart Mantle now appears in place of Soliel’s Mantle (the normal one), when playing any game mode other than “Mantle”. The black heart mantle, belonging to the adversary, confers no benefits to Gable when lit; other than completion of the Mantle side-pursuit, which you can still get if you’re an especially fidgety owl, and just need to light up everything in sight regardless.
Witness Pearl distribution reworked across all levels. Number of pearls per level are now grouped in stable sets instead of fluctuating between levels. e.g. All secret levels have 12 each.
Added a few types of translocation mechanisms, in-level and between-level teleportation.
Secrets and hub level progression set up via Translocation gates now.
The adjustable zoom feature, when holding the “Look” key, now uses an updated system that lets you zoom while at very low velocity, instead of only at zero. This prevents that weird lag that sometimes required you to wait perfectly still for a half second to be able to adjust zoom. The lag arose because you could still technically have an invisibly small velocity that just took slightly longer to dissipate than was visually intuitive.
Added a little sound for Gable’s crane-up animation, when zooming out.
Attacking the tower when it’s fully lit will now advance to next stage. This can be handy when backtracking to prior levels, as the tower will already be lit.
Mantles can now be repeatedly attacked and broken, in order to fully reset a map, discarding all side-pursuits, relevant tallies, and resetting all feathers and the tower. There is a cracking sound that pitches up with each hit that brings it closer to breaking, which is a queue for how far you’ve pushed it. Without giving too much away, this can be handy if you’re trying to complete a level in a specific way, or if you want to retry a different approach. You don’t suffer any penalties, and it does not count as a death.
Physics preserving player teleportation. Not used in-game yet, but it will be.
Hop up behavior fixed. When Gable walks up to a curb of 8 pixels or less, she will automatically hop up onto it if you move in that direction. Previously she would sometimes refuse to hop up a second time if the move key remained held. Sometimes she’s a fussy owl. (OvO)!
Visuals
Sword attacks will jostle leaves now.
Razorvine will now rattle or jostle when gable impacts it. This is especially noticeable in chains of razorvine, where an impact will ripple through the links, in fashion similar to the effect of jumping on a rope bridge.
The moon is now always visible. Previously it was only visible if you were completing the side-goals needed to reach the secret levels.
Statues: Created 20 variant statue ruins, which now reside within the level. Initially they are broken almost down to the ground level, so that only the haunches of the figure are visible. However, as you progress from level to level, you’ll see more versions of the figure, progressively more intact, revealing more of the original form, bit by bit.
Gable now flashes out in a strip of light several seconds after the tower’s main beam goes up.
For both Soliel’s mantle and the black heart mantle, repeated attacks will begin to show damage on the mantle, its light will flicker, and the final attack will break it, causing a screen-wide visual shatter effect.
Text stones (liaisoliths) font updated: I made an anti-aliased version of the font. It’s hard to say which is better as the AA and non-AA versions both have their strengths, especially at such a low resolution. I may eventually just add in a menu option, so the player can pick or switch as they see fit.
Created several new tree graphics and variants of existing trees.
Tower beam, now creates two beam graphics. One foreground and one background. After firing, the foreground beam fades out, leaving only the background beam. This ensures the beam will never hide pearls in prior levels, which would be a problem if a player returned to go looking for them.
Exit FLOFF! :3
Levels
Carven (map 5): Updated many visuals, and added some new areas to the map.
Hearts (map 6): Filled several small gaps between bricks, and added a significant amount of vines and foliage, among other visual updates.
Vinaflora (map 7): Added bands of stone behind the Spring Jump pillars area which greatly helps cut the glare of the moon. It also makes the scene quite a bit more dynamic as the moon gets sliced by several parallaxing layers, as you hop around in there. Many other minor updates as well.
Heron Slates (map 9): Structurally and visually redesigned a few areas. The bottom right-end room is a lot more spacious and open now, so it’s a bit more fluid feeling to fly through it.
Stack (map 10): Ton of vines and foliage added, many corners and hard edges rounded out to look more flowing via branching flora. Also used some of the new tree leaf variants to get a better sense of shading in some of the leaves. The far end of the map was also moderately altered. Now it drops much farther down to one of the shattered figure statues.
Tomb: Quite a bit of visuals updated, and the interior area now has some moderate hazards.
An unbroken statue of the figure, only half seen throughout the rest of the game, is present at the very top. This also allows you to see one of the aspects of the game’s secrets in its complete context for the first time.Arbourfringe Gate (secret map 1): Fixed a weird issue with the shadows, which I think must have been introduced in a prior update inadvertently. They look normal again now. Yay!
Grand Tower Veil (secret map 5): Updated visuals in numerous places, The upper tower now has all the ward tower cells bracketed into the central beam channel. Streamlined gameplay a bit, though it’s still quite hard. Also optimized its performance, by switching hundreds of razorvines over to the new system.
Stats
There are now side-pursuit icons for Mantle, Tower, Map-Name, and Liaisoliths (lee-AZ-oh-lith, from “liaison”, the text stones). Note that in maps that only contain a map-name stone, Striking it will grant both the Map-Name and Liaisolith completions. I plan to expand on the non-map-name text stones quite a bit in the future.
When browsing level stats (“local stats”), you can now leaf through stats from all levels you’ve been to, using the left and right chevron buttons at the top of the menu. You can return to the current level with the down chevron button.
On the “Local Stats” menu, the “T” button takes you to the related Totals menu page. On the Total stats page, the “L” button will take you back to the related “Local Stats” page you were just on. This way you can flip back and forth between the two easily.
Side-pursuit icons no longer show a dot for incomplete pursuits. Only completed pursuits will show up as icons.
Stats menu shows “(unknown)” for the title of pursuits that you’ve never completed.
“Local Stats” menu pages will show the name of the level you’re browsing, but only if Gable has actually learned it from a text stone. Otherwise the level will simply be named “area #” where the # is the number in which the level was encountered.
UI
Stats menu system significantly expanded, and now shows much more information.
In the “Local stats” submenu, you can browse your completed pursuits, tallies, distances, and time statistics for the current level, as well as any other you’ve been to.
Time in stats menus: Time starts counting the moment you move from the spawn point, and stops the moment you die, or execute a commit that will complete the tower. So the transitional time between levels and deaths is not counted. Nor is just sitting at the spawn point counted. The time menu shows best time only in hourglass mode, as there’s no sense in timing a single run that may only include one remaining feather, if the Mantle has been preserving your committed feathers.
In the “Total stats” submenu you can see your aggregated totals across all levels for applicable stats.
Updated the root level menu and others. (Still need to fix a minor issue where navigating the new root via arrows acts a bit odd when selecting “Stats”.)
Menu now shows little Gable icons for New Game options and Quit options.
The updated New Game menus, have been flipped vertically now, so that the start button is on the bottom, and the description is at the top. (Players frequently tried to click the bottom description area to proceed, which makes sense, because in most UIs, the Ok/Yes/Continue buttons are under the descriptive text. So now the UI has been change to work with that intuition.
All menu “back” buttons are now an “X”. Previously back was an up arrow, and exit was an “X”, but there are enough menu pages now that it’s not really important any more. Plus the up arrow could be confusing in some contexts.
Menu back controls and functionality added/refined for all relevant menus.
Crtl/Alt/Shift = Menu back.
Right mouse = Menu back.
Commited save confirmation now auto times out, thanks to the new scripting system.
Code
Created a new unified scripting system, to make engine much more flexible in certain areas. This script toolset lets just about any system in the game interact with any other system, which makes complex special case behavior much easier to set up. It’s already being used in everything from special menu behavior, to handling secret level accessibility.
Razorvines can now have their hazzard geometry disabled and replaced by much simpler stand-in geometry when applicable. e.g. A chain of 40 razorvine objects can be represented by just a few sticks of hazard geometry, thus cutting down on lots of superfluous objects. Likewise, unreachable razorvine doesn’t need to be creating lots of hazard geometry. The chandelier in the Labyrinth map is a good example of this.
Recall system now has much cleaner code for serializing and loading save states. It can also tell if an save state is being loaded that may have version compatibility issues, and it will notify the player before loading it as best it can.
Created a completely new hierarchy of state management objects, to split up the various kinds of information that need to be saved at different levels in the application. This is actually what has made the stats system possible, as well as the much streamlined recall code. It’s also by far what took the longest to get working, as it essentially replaces and refactors most of the original Down Ward back end. Basically it’s the entire side of the engine that doesn’t directly run gameplay.
Created MapInit system: A self-contained set of utilities responsible for initializing, resetting, or resuming levels. This was previously done with various persistence properties scattered across a range of different objects that never seemed to fully cooperate with eachother. So MapInit is a welcome change from the coding side of things, and makes expansion of the game mechanics a less chaotic undertaking.
Text stones integrate new unified scripting system.
Menu text can now request special formatting for things like time and distance.
Hourglass Timer system integrated into new state management system.
Menu text can now be flagged to update per-tick which is currently used for showing running timers.
Added a version number global variable, and a display function for it. you can see the version number on the main menu about 3 seconds after the menu appears. It will show up and fade out after a few seconds.
Console now has a log area, that will REPL out return values.
Bugs Fixed
Fixed: Main menu would open automatically after panning up over a scene, but it would do this even if you opened the menu manually before it triggered. Now it will not trigger if the player has already opened the menu manually
Any questions, comments, or feedback are always welcome. :)
3 comments