Nodrog's Fortress cover
Nodrog's Fortress screenshot
Genre: Real Time Strategy (RTS), Role-playing (RPG), Strategy, Turn-based strategy (TBS), Tactical, Adventure, Indie

Nodrog's Fortress

V1.09 Sync and Performance Fixes

Sync Demon Hunting:
- The hunt continued for any and all sources of floating point inconsistencies in the simulation code. I can announce that we have had a very successful hunt, discovering that Map Tiles and Map Objects had their Virtual Transform relying on their Unity Transform for initial positions without reinitializing to the correct fixed point coordinates. I had thought this was fine but any float initialized fixed position is a ticking time bomb for inconsistency, especially since Map Objects and other spawns rely on the Map Tile's Virtual Transform fixed position for their own initializations. Now all objects are using correctly derived fixed point positions which should greatly improve the chances matches run exactly the same on each Client. Again, I will continue my patrols, but this greatly moves the ball forward towards fully eliminating sync errors in Multiplayer!

Performance:
- During the hunt above I discovered many places in the code that could use a cleanup/simplification and did many small things to address these areas. Also, there were some older sections that hadn't received a pass to eliminate garbage production or were instantiating new objects when we could just reuse that memory instead. This gave us more consistent frame times and probably even more speed during intense action.

UI:
- When choosing teams online with 3 or more entries, the teams should no longer get obstructed by chat.
- The Team Controller's 'Show Map Info' and 'Manual Action Cam' toggles were enlarged for easier use.

V1.081 Buttons HOTFIX

Apologies! The last version disabled all the buttons if the Steam Overlay was active, a silly oversight.

Please see the last Update Post for all major changes in V1.08.

V1.08 The Eightfold Bug Fix Path to True Determinism

Additions:
- Hovering over Map Tiles reveals their type, passability, and coordinates. Hopefully this aids communication in Multiplayer!
- The Tile and Character targetted by the camera is now labeled.

UI Fixes/Enhancements:
- I cleaned up the targetting FX to be less pixelated.
- The hover indicator is now displaying the correct team colors.
- Hovering over available Abilities in the Character Menu as well as when selecting targets now correctly highlights only the Character(s) a given Ability can interact with.
- Having an open Character select menu when Begin Match is clicked resulted in the camera being locked to the Sun until the Player Right Clicked to manually close the menu. This has been fixed :)


Ability Fixes:
- Stamina aura now works correctly, giving massive boosts to your allied Character's stamina if they are in the casting area or begin their Round within the Aura, just like Healing Aura's HP gains.

Fixed Navigation Bugs:
- Characters were abandoning their navigation before fully arriving at their claimed tile, causing undesired/unexpected path creation and indirect movement.
- Characters were not moving to accomplish attacks and other behaviors under some circumstances.
- Characters were getting stuck and stopped progressing their behaviors when blocked by other characters on the last tile of their chosen path.

>Sync Demon Hunting and Technical Jargon<
- During today's stream (well maybe yesterday's; all I know is that I haven't seen the Sun in a while), it became apparent that there were still issues with syncing round actions between clients and that true determinism had not yet been achieved. To address this I went deep, knowing floating point errors were a likely culprit even though I have made great strides to eliminate their influence on the game's simulation code...

Probable Cause: There is a fundamental problem with floating point being non-deterministic across different cpu architectures. Though there are standards and one would expect Math to be the same everywhere, manufacturers use different operations/hacks to achieve the super fast processing speeds we all love. This means a floating point result on one machine may be slightly different on another, resulting in an accumulation of small discrepancies and eventually a sync error.

Hopeful Solution: I discovered that of all things, Ability FX (all the sparkly bits), were being initialized using their Unity Transform's position and rotation. The Unity Transform uses Vector3 which uses floats for its fields and each FX was initializing its internal fixed point virtual transform with these values. Ability FX are basically everything! The chance that something might spawn on the edge of two tiles and choose to affect one over the other due to a floating point error only gets higher the longer matches go and the more complex they get... To fix this, a second step was added in the FX spawn code that sets their virtual transform's position and rotation to properly derived fixed point coordinates. This fix will likely not be the last of the Sync Demon, and I will be ever vigilant until it is finally killed (beyond actual memory errors and cosmic rays). Please enjoy a free point online if it ever reveals its ugly head.

V1.075 Minor Update, Camera Pass, and Pathfinding Fixes

Not much to see here!
- I took another pass at the camera controls. There should be less to no unnecessary cuts between rounds and at other events now.
- Pathfinding received some love for a couple edge cases.

V1.07 Feature Update | Enhanced Map Objects and more...

A list of changes:
- Various UI Fixes/Enhancements.
- Homegrown Physics enhancement/fixes.
- Fixed a navigation bug that lead to characters occupying the same tile. Tsk Tsk.
- Fixed Attractor! Also lowered the Mass of larger entities. Shin may be back on the menu...
- Geometons' models were slightly altered for more insanity AND clarity.
- Auras/Zones and Battlecry now properly highlight affected tiles.
- Map Edit: The Great Library had a navigation issue preventing Characters from reaching the center area. This has been fixed :)
- Map Objects: Added a new indicator to display a Map Object's properties when hovered over. Added new destructible states for trees, reeds, and more. You can now be damaged if knocked into certain Map Objects, doubly so if they are Burning or Frozen.

Performance Update 2 - Netbook Users Rejoice!!!

- Some UI Updates -
Tutorial Mode has a new descriptive text and missing UI elements were restored.
Fixed the Password Toggle Button in the Match Creator Online.

- Performance Updates -
Reported slowdowns as games progressed into their late stages led me to track down a lot of performance issues that have been discovered and fixed. Things should run much more snappily and happily even with dozens of Characters on screen. I am interested to know how these changes improved your round execution, especially on weaker hardware.

- Code Improvements -
General GC optimizations across lots of the codebase (this was big in some areas, negligible in others).
Characters' ClaimedTile property had a major bottleneck that slowed down nearly everything (this was really big).
Party Indicator/Character Highlight rework/optimizations.
Homegrown Raycast hit detection optimizations.
Minor UI optimizations.

V1.05 Nodrog's Unlocked - Performance and Network Codebase Update

This update enables Unity's ILL2CPP compilation, giving us some exciting performance gains. This change was on its way, but needed more testing to get everything stable and ensure these changes would work for everyone. Late round survival matches should see big performance gains from this, but every aspect of the game should get a bit of pep in its step.

Further GC optimizations were also made where able, squeezing us even more compute time for battle!

With that compiler change also comes a network codebase update. Shout out to Mirror Networking for Unity and their rock solid TCP transport for doing all the heavy lifting for us.

A new Unity Physics-free ray casting function should ensure we avoid network sync errors online. This and a few other changes completely eliminates our dependence on Unity physics in our core game loop which can cause determinism breaking errors.

HOTFIX 4 - When I saw this bug I hit the floor! Please no more!

The pre-release edits have proven formidable in their ability to surprise me with edge cases across the combat system.

Not to worry, another Hotfix is here to fix one! Characters were not removing themselves from tiles they had previously traversed correctly. It turns out this was causing "ghost hits" from area of effect attacks at range as mentioned in an earlier Hotfix today, as well as certain navigational and AI errors.

This should be the last issue regarding the pre-release edit woes, but I will be ever watchful and try to fix whatever computational sorrows my game may manifested for you...

Day 1 Hotfix 3 - UI Fixes and Updated Credits

This is just a minor update to fix and update a few UI features.

It became known to me that the button to leave the Guide screen was not working! This button and a few formatting issues on that screen have been fixed :) Please let me know if you find any other bugs or other strange/broken UI behaviors. I am here and dedicated to jump on these issues, especially as we start rolling out to more and more people and the game's code is exposed to more setups and hardware variants.

The game's version number is now accurate in the game's code and on Steam and for this update. Apologies for any confusion that may have caused.

Thank you again for your continued patience and support as I iron out the kinks on my first release!
- Chris, Lead Developer

Release Hotfix 2 - Forgetting to save, a programmer's tale.

One of the more minor changes in the last hotfix was not saved and could have led to strange behavior like ghost damage/targeting as characters were not clearing themselves from the last tile they were on.

This has been fixed! Please enjoy the [now complete] Day 1 Hotfix :)