The Repopulation News — February 23, 2022
Aggregated from Steam, cross-tracked with Battle.net coverage on GamePatchNote.

Good morning, everyone!
We’ve officially rang in the New Year of 2022. While we hope everyone is well, some of our staff has had a bumpy start to 2022 so far. New years handed us Covid, a broken arm and hand, and other medical issues - setting us up for a rocky start in January. While we haven’t yet resorted to living in a bubble we have had to delay our big announcement for just a little longer. The good news is that the team is on the mend, and we have started to get back on pace.
This update will go into a bit more depth of what we have been working through the last three months. As many of you know we hit a snag last quarter regarding the optimizations of the animations and the female faces. We also have done some reductions to help optimize the island for players and to be able to account for the high overhead vs. the mem cache crashing issue. In addition, there were a few fixes as well we will go into.
Disclaimer: Each section we have broken down what we have done, and that individual performance boost. We have only touched upon a few specific areas, so each section is not the total optimization and performance boost.
In total, the performance boost these updates have produced is close to 22% of all overhead on the old mainland and close to 15% on the Island.

PHYSICS UPDATE/FIXES:
As some of you know, we came into the game a couple weekends ago to apply a live hotfix and testing. This has helped to bring down some of the overhead. Some of the players got to have a short time of having lanterns and lamps in their housing and guild plots while testing the overhead of the game, effect on the players present and over all mem cache size.
The first applied fixes were a few physics updates and fixes. We reverted a few of the scripts back to engine default and some minor adjustments to some custom files that were in place that override some of the defaults.
In a few of the guilds and personal housing plots we placed a multitude of lanterns and lamps. Players were able to move fine without any noticeable drop in FPS/performance, and they were able to celebrate the Lunar New Year in style.
In addition to fixing and updating some of the scripts, we also updated the physical physics capsule for many of the assets. This means we used HE’s physics tool panel (Physics Shape Editor http://hewiki.heroengine.com/wiki/Physics_panel#Physics_Shape_Editor ) and went from “exact mesh” physics to either “convex hull” or “box”. We chose the type that best fit the use and purpose of the asset.
A few of the older ABT assets that were causing issues (Either able to run through them or had a HUGE physics collision mesh around them) were also cleaned up and updated.
The script side seems to have helped the entire game performance very slightly, ranging between 2-6% depending on the area.
Dev Server:
- Assets mesh optimized: 650+
- Fixed changes made to the physics .ini
- Assets physics optimized: 800+
- Changed physics shape from “exact mesh” physics to “convex hull” on generic assets
- Changed physics shape from “exact mesh” physics to “box” for signs and other box shaped assets
- Changed physics duplication to replicated “physics nodes” where possible
This fix has improved the overhead by almost 10% and reduces the mem cache by almost 12%.

DYNAMIC LIGHTING (LIGHT SOURCE) UPDATE/FIXES:
One of the other things we tested with the players was a small hotfix applied to how lighting works on assets. ABT had in the past removed any dynamic lighting in housing due to how the assets were made, lights increasing draw calls and mem leaks. We believe we’ve partially fixed this issue.
During our live update and testing with the players, we placed several lights around the housing plots with both old and new assets, including the lanterns.
The best part, aside from being able to see our surroundings and other players at night, was that it did not cause anyone to crash or lag once we had a dozen in. Granted, we do not recommend adding that many in a single scene, but it was a great test. It was even better to be able to see other players and the great housing decorations/styles at night!
This fix reduce the overhead of having dynamic light sources in place by close to 12%, and fps/performance by 3-15% depending on connection and specs.
*This fix does not reduce draw calls.

NPC REDUCTION
In order to help with performance on the Island many NPC have been removed from the Area - RIN District: Strt_02. The remaining NPC are associated with missions. Once the new NPC System, and Character Models have been created NPC will no longer be such a burden and will once again be numerously populated in areas without issue.
The following NPC have been removed from Area - RIN District: Strt_02:
- Kathryn Gutteridge - Armor Vendor
- Stephanie Canak - Cybernetics Vendor
- Lisa Fain - Harvesting Tools Vendor
- Glenn Cunningham - Tailor
- Academic Advisor
- Ambassador
- Ambassador’s Guard
- Defense Advisor
- Officer of Energy
- Officer of Environment
- Officer of Infrastructure
- Carpentry Supplies
- Metallurgist Supplies
- Culinary Supplies
Please note players will still be able to find these vendor NPC on the mainland. The Advisor and Officer NPC remain in the FPR and OWON Embassies at this time. However, these NPC roles have not yet been added to any content lines. They are simply placeholders which give a visual for coming roles and content.
This fix reduce the overhead by 15%, andreduces mem cache by 15-25%

ANIMATION OPTIMIZATIONS AND THE OOPS:
Over the last three months we have learned more about how the characters were put together from the models, rigs, skin weights to the animations. It has been a long journey unraveling some of those, but it has also been rewarding as well. An older yet still very good and relevant video by Mike Pickton can be found here explaining rigging and skin weights: https://www.youtube.com/watch?v=fpU1yqsT8_A
The good news is that this gave us more of a boost in overhead and performance than we had expected. However, it has been tricky to figure out why and how the face skin weights were tied to the idle animations, and the different ways this was done backend.
We found a few different ways they attached animations to the characters, females were done completely differently, hence the weird looking face on them when we applied that initial update.
Females had used at least three different methods for assigning animations to the characters:
- the engine’s default generic animation controller
- default HJ’s _RP (RolePlay) controller
- modified _RP controller

The other oddity we found was that each animation was done separately and not in animation groups. Upon saying this, we have tested the fixes for the update and are now going through each of the animations to apply said fix to them. We are currently about 20% done as of this article.
We are still unsure why the skin weights or bones in the face were used for most of the animations, but we are happy we were able to find out the “how’s” and get those fixed and out to you soon.
We are still unable to find all the instances where animations are loaded and unloaded, nor why the ‘destroy” was overridden in several places. The cache still does build up over time, but it is smaller now, and does get destroyed when you enter a non-adjacent area (teleport to another location).
This fix has reduced the overhead by almost 45% and reduced the mem cache by near 31%.

Thank You!
We want to end this by saying thank you to all the players that participated in the live hotfix/update and testing. It was a lot of fun and we were able to get a nice jump start on the physics and dynamic light system fixes.
By mid march we should have a much better idea of when we will be able to push the next update. Our primary roadblock is the female animations, so by that time, we will be able to give you a much better idea of when the game update will be coming and what to expect.
As always we look forward to your feedback. Please feel free to join us on our main forum or our Discord channel to continue discussion there.
P.S. Below is a short list as an example of the process to get these all updated while keeping the overhead gains as well as what was done in the process. It does not go into what is left yet, as there is not an actual lookup list of all animations, nor who uses which ones.
THE PROCESS AND QUESTIONS WE ASKED:
1. action: need gender variable in repopmale1 biped agent.aas to use in branched logic
2. action: need setting of gender variable in the HSL animation agent script
3. action: in bipedagent.aas (repopmale1) branch logic based on Gender variable for idles
idle.asq - multiplexor for male animations
4. action: update animationset.dat in (repopmale1) to load new female based asqs
5. action: repopfemale idle.asq usages
- .AddSequence=idle_male 90
- .AddSequence=idle_male2 2
- .AddSequence=idle_male3 40
- .AddSequence=idle_male4 15
- .AddSequence=idle_male5 10
- - copy on disk to rename them
- - copy corresponding .gr2 or hgms to rename them corresponding to asqs
- idle_female_multiA.asq
- idle_female_multiB.asq
- idle_female_multiC.asq
- idle_female_multiD.asq
- idle_female_multiE.asq
6. action: update repopmale1 animationset.dat to add in
- idle_female_multiplexor.asq
- idle_female_multiA.asq
- idle_female_multiB.asq
- idle_female_multiC.asq
- idle_female_multiD.asq
- idle_female_multiE.asq
7. action: Assess necessity of moving certain dyc and par files to repopmale directory
ends up not needed, as the pathing is absolute not relative to the character specification folder
8. action: add Gender variable to repopmale bipedagent.aas
branch logic in idle, muted and combat idle situations
9. action: Modify RP_ACCCCharacterControllerClassMethods
use GetCharacterSpecification to get specification to imply gender
10. action: upload to repopmale1 directory structure
- repopmale1 - animationset.dat
- repopmale1 - bipedagent.aas
- idle_female_multiplexor.asq
- idle_female_multiA.asq
- idle_female_multiB.asq
- idle_female_multiC.asq
- idle_female_multiD.asq
- idle_female_multiE.asq
- idle_female_multiA.gr2 or hgm
- idle_female_multiB.gr2 or hgm
- idle_female_multiC.gr2 or hgm
- idle_female_multiD.gr2 or hgm
- idle_female_multiE.gr2 or hgm
- combat_idle_female.asq
- combat_idle_female_come_here.asq
- combat_idle_female_crit_blend.asq
- IDLE_AIM_SHOOTINGPISTOL_FEMALE_1H.asq
- combat_idle_female_dodge.asq
- combat_idle_female_melee.asq
- combat_idle_female_drawn_rifle.asq
- combat_idle_female_rifle.asq
- combat_idle_female_drawn_handgun
- combat_idle_female_drawn_shotgun
- combat_idle_female_handgun
- combat_idle_female_rifle
- combat_idle_female_melee
- combat_idle_female_come_here.gr2
- combat_idle_female_dodge.gr2
- combat_pistol_female_idle_shoot.hgm
- combat_idle_female_melee.hgm
- combat_rifle_idle_female_held.hgm
- idle_aim_female_rifle.hgm
- combat_pistol_idle_female_shoot.hgm
- combat_sword_female_idle.hgm
11. action: debug character selection
- why is gender being set to male? Script? No, default order in bipedagent...
- why isn't character accc controller properly setting gender
- why is it creating a default heroengine accc controller class?
- oh, repop overrode $ACCC but did not implement the method to specify
- create RP_ACCCClassMethods, implement proper override