Skip to content

Saver/newfactoriesrework#7009

Open
Saver27 wants to merge 15 commits intoFAForever:developfrom
Saver27:Saver/Newfactoriesrework
Open

Saver/newfactoriesrework#7009
Saver27 wants to merge 15 commits intoFAForever:developfrom
Saver27:Saver/Newfactoriesrework

Conversation

@Saver27
Copy link
Copy Markdown
Contributor

@Saver27 Saver27 commented Feb 10, 2026

### Redesign of all HQ and Support Factories 2.0

As described in the forum post (https://forum.faforever.com/topic/5790/redesign-of-all-hq-and-support-factories), the first step towards redesigning the factory models was started some time ago. Since this work was unfortunately never completed, I have picked up the project again and continued it.

Overview of Changes

All models were recreated and adjusted based on the FAF templates, enabling upgrades to HQ and Support factories

All models now have their own build animations

LOD1 models were largely adjusted to match the new LOD0 models

### Specific Changes
Build Area of Naval Factories

The required build area for all naval factories has been adjusted.
This change is based on the observation that when an existing factory was upgraded to a higher tech level, the build footprint shifted once the mesh expanded.

This adjustment prevents this issue/effect from occurring (see forum post
https://forum.faforever.com/topic/5790/redesign-of-all-hq-and-support-factories/26).

Visual Adjustments to Aeon T3 Naval Ship Construction

As described in forum post (19), the Mercury Pool visuals were displayed disproportionately large compared to the ships.

These visuals have now been adjusted to better match the ship sizes (https://forum.faforever.com/topic/5790/redesign-of-all-hq-and-support-factories/63).

Added Death Animation for Seraphim Naval Factories

While creating the death animations for the Seraphim faction, it was discovered that the animations were not being played.
This issue was fixed by adding the PlayAnimation(...) function to the relevant scripts.

See: (https://forum.faforever.com/topic/5790/redesign-of-all-hq-and-support-factories/90)

Adjustment of TargetBones for Land and Air Factories

During testing, I noticed that some units were unable to damage certain factories as intended. Since no changes have been made to the hitboxes so far, this issue is likely caused by the reorientation of various bones in the updated models.

2222

To verify this assumption, several tests were conducted with modified configurations. As a result, the UEF, Aeon, and Cybran factory models now use the following configuration:

AI = {
TargetBones = {
"Attachpoint",
},
},

I would suggest revising the hitboxes of the land and air factories. Since this issue was only briefly mentioned in the forum post, here are a few images to illustrate the point more clearly.

3 4 5 6

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Feb 10, 2026

Important

Review skipped

Too many files!

This PR contains 251 files, which is 101 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9fa32d89-568c-4f33-b980-2273e69d8117

📥 Commits

Reviewing files that changed from the base of the PR and between 987f66f and 571602b.

⛔ Files ignored due to path filters (49)
  • units/UEB0101/UEB0101_Albedo.dds is excluded by !**/*.dds
  • units/UEB0101/UEB0101_NormalsTS.dds is excluded by !**/*.dds
  • units/UEB0101/UEB0101_SpecTeam.dds is excluded by !**/*.dds
  • units/UEB0101/UEB0101_lod1_Albedo.dds is excluded by !**/*.dds
  • units/UEB0101/UEB0101_lod1_SpecTeam.dds is excluded by !**/*.dds
  • units/UEB0101/UEB0101_lod1_normalsTS.dds is excluded by !**/*.dds
  • units/URB0201/URB0201_SpecTeam.dds is excluded by !**/*.dds
  • units/URB0202/URB0202_SpecTeam.dds is excluded by !**/*.dds
  • units/URB0203/URB0203_SpecTeam.dds is excluded by !**/*.dds
  • units/URB0301/URB0301_SpecTeam.dds is excluded by !**/*.dds
  • units/URB0302/URB0302_SpecTeam.dds is excluded by !**/*.dds
  • units/URB0303/URB0303_SpecTeam.dds is excluded by !**/*.dds
  • units/XSB0202/XSB0202_lod1_Albedo.dds is excluded by !**/*.dds
  • units/XSB0302/XSB0302_lod1_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9501/ZEB9501_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9501/ZEB9501_NormalsTS.dds is excluded by !**/*.dds
  • units/ZEB9501/ZEB9501_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9501/ZEB9501_lod1_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9501/ZEB9501_lod1_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9501/ZEB9501_lod1_normalsTS.dds is excluded by !**/*.dds
  • units/ZEB9502/ZEB9502_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9502/ZEB9502_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9502/ZEB9502_lod1_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9502/ZEB9502_lod1_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9502/ZEB9502_lod1_normalsTS.dds is excluded by !**/*.dds
  • units/ZEB9502/ZEB9502_normalsTS.dds is excluded by !**/*.dds
  • units/ZEB9503/ZEB9503_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9503/ZEB9503_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9503/ZEB9503_lod1_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9503/ZEB9503_lod1_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9503/ZEB9503_normalsTS.dds is excluded by !**/*.dds
  • units/ZEB9601/ZEB9601_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9601/ZEB9601_NormalsTS.dds is excluded by !**/*.dds
  • units/ZEB9601/ZEB9601_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9601/ZEB9601_lod1_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9601/ZEB9601_lod1_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9601/ZEB9601_lod1_normalsTS.dds is excluded by !**/*.dds
  • units/ZEB9602/ZEB9602_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9602/ZEB9602_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9602/ZEB9602_lod1_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9602/ZEB9602_lod1_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9602/ZEB9602_lod1_normalsTS.dds is excluded by !**/*.dds
  • units/ZEB9602/ZEB9602_normalsTS.dds is excluded by !**/*.dds
  • units/ZEB9603/ZEB9603_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9603/ZEB9603_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9603/ZEB9603_lod1_Albedo.dds is excluded by !**/*.dds
  • units/ZEB9603/ZEB9603_lod1_SpecTeam.dds is excluded by !**/*.dds
  • units/ZEB9603/ZEB9603_lod1_normalsTS.dds is excluded by !**/*.dds
  • units/ZEB9603/ZEB9603_normalsTS.dds is excluded by !**/*.dds
📒 Files selected for processing (251)
  • units/UAB0101/UAB0101_ASupport.sca
  • units/UAB0101/UAB0101_Aopen.sca
  • units/UAB0101/UAB0101_Aopen2.sca
  • units/UAB0101/UAB0101_lod0.scm
  • units/UAB0101/UAB0101_lod1.scm
  • units/UAB0101/UAB0101_unit.bp
  • units/UAB0102/UAB0102_Aupgrade.sca
  • units/UAB0102/UAB0102_aopen_sup.sca
  • units/UAB0102/UAB0102_lod0.scm
  • units/UAB0102/UAB0102_lod1.scm
  • units/UAB0102/UAB0102_script.lua
  • units/UAB0102/UAB0102_unit.bp
  • units/UAB0103/UAB0103_Aopen.sca
  • units/UAB0103/UAB0103_Aopen2.sca
  • units/UAB0103/UAB0103_lod0.scm
  • units/UAB0103/UAB0103_lod1.scm
  • units/UAB0103/UAB0103_script.lua
  • units/UAB0103/UAB0103_unit.bp
  • units/UAB0201/UAB0201_Aopen.sca
  • units/UAB0201/UAB0201_lod0.scm
  • units/UAB0201/UAB0201_lod1.scm
  • units/UAB0201/UAB0201_script.lua
  • units/UAB0201/UAB0201_unit.bp
  • units/UAB0202/UAB0202_Aupgrade.sca
  • units/UAB0202/UAB0202_LOD0.scm
  • units/UAB0202/UAB0202_lod1.scm
  • units/UAB0202/UAB0202_script.lua
  • units/UAB0202/UAB0202_unit.bp
  • units/UAB0203/UAB0203_lod0.scm
  • units/UAB0203/UAB0203_lod1.scm
  • units/UAB0203/UAB0203_script.lua
  • units/UAB0203/UAB0203_unit.bp
  • units/UAB0203/uab0203_aopen.sca
  • units/UAB0301/UAB0301_lod0.scm
  • units/UAB0301/UAB0301_lod1.scm
  • units/UAB0301/UAB0301_script.lua
  • units/UAB0301/UAB0301_unit.bp
  • units/UAB0302/UAB0302_LOD0.scm
  • units/UAB0302/UAB0302_lod1.scm
  • units/UAB0302/UAB0302_script.lua
  • units/UAB0302/UAB0302_unit.bp
  • units/UAB0303/UAB0303_lod0.scm
  • units/UAB0303/UAB0303_lod1.scm
  • units/UAB0303/UAB0303_script.lua
  • units/UAB0303/UAB0303_unit.bp
  • units/UAS0302/UAS0302_unit.bp
  • units/UAS0303/UAS0303_unit.bp
  • units/UEB0101/UEB0101_Aupgrade.sca
  • units/UEB0101/UEB0101_Aupgrade2.sca
  • units/UEB0101/UEB0101_LOD0.scm
  • units/UEB0101/UEB0101_lod1.scm
  • units/UEB0101/UEB0101_unit.bp
  • units/UEB0102/UEB0102_Aplatform.sca
  • units/UEB0102/UEB0102_Aupgrade.sca
  • units/UEB0102/UEB0102_Aupgrade2.sca
  • units/UEB0102/UEB0102_lod0.scm
  • units/UEB0102/UEB0102_lod1.scm
  • units/UEB0102/UEB0102_script.lua
  • units/UEB0102/UEB0102_unit.bp
  • units/UEB0103/UEB0103_Aupgrade.sca
  • units/UEB0103/UEB0103_Aupgrade2.sca
  • units/UEB0103/UEB0103_lod0.scm
  • units/UEB0103/UEB0103_lod1.scm
  • units/UEB0103/UEB0103_script.lua
  • units/UEB0103/UEB0103_unit.bp
  • units/UEB0201/UEB0201_Aupgrade.sca
  • units/UEB0201/UEB0201_LOD0.scm
  • units/UEB0201/UEB0201_script.lua
  • units/UEB0201/UEB0201_unit.bp
  • units/UEB0202/UEB0202_Aplatform.sca
  • units/UEB0202/UEB0202_Aupgrade.sca
  • units/UEB0202/UEB0202_lod0.scm
  • units/UEB0202/UEB0202_script.lua
  • units/UEB0202/UEB0202_unit.bp
  • units/UEB0203/UEB0203_Aupgrade.sca
  • units/UEB0203/UEB0203_lod0.scm
  • units/UEB0203/UEB0203_script.lua
  • units/UEB0203/UEB0203_unit.bp
  • units/UEB0301/UEB0301_LOD0.scm
  • units/UEB0301/UEB0301_script.lua
  • units/UEB0301/UEB0301_unit.bp
  • units/UEB0302/UEB0302_Aplatform.sca
  • units/UEB0302/UEB0302_lod0.scm
  • units/UEB0302/UEB0302_script.lua
  • units/UEB0302/UEB0302_unit.bp
  • units/UEB0303/UEB0303_lod0.scm
  • units/UEB0303/UEB0303_script.lua
  • units/UEB0303/UEB0303_unit.bp
  • units/URB0101/URB0101_LOD0.scm
  • units/URB0101/URB0101_lod1.scm
  • units/URB0101/URB0101_unit.bp
  • units/URB0101/urb0101_aopen.sca
  • units/URB0101/urb0101_aopen_sup.sca
  • units/URB0102/URB0102_Abuild.sca
  • units/URB0102/URB0102_Aplatform.sca
  • units/URB0102/URB0102_Aupgrade.sca
  • units/URB0102/URB0102_Aupgrade2.sca
  • units/URB0102/URB0102_Aupgrade_sup.sca
  • units/URB0102/URB0102_lod0.scm
  • units/URB0102/URB0102_script.lua
  • units/URB0102/URB0102_unit.bp
  • units/URB0103/URB0103_Aupgrade.sca
  • units/URB0103/URB0103_Aupgrade_sup.sca
  • units/URB0103/URB0103_lod0.scm
  • units/URB0103/URB0103_lod1.scm
  • units/URB0103/URB0103_script.lua
  • units/URB0103/URB0103_unit.bp
  • units/URB0201/URB0201_Abuild.sca
  • units/URB0201/URB0201_LOD0.scm
  • units/URB0201/URB0201_lod1.scm
  • units/URB0201/URB0201_script.lua
  • units/URB0201/URB0201_unit.bp
  • units/URB0201/urb0201_aopen.sca
  • units/URB0202/URB0202_Abuild.sca
  • units/URB0202/URB0202_Aplatform.sca
  • units/URB0202/URB0202_Aupgrade.sca
  • units/URB0202/URB0202_lod0.scm
  • units/URB0202/URB0202_lod1.scm
  • units/URB0202/URB0202_script.lua
  • units/URB0202/URB0202_unit.bp
  • units/URB0203/URB0203_Abuild.sca
  • units/URB0203/URB0203_Aupgrade.sca
  • units/URB0203/URB0203_lod0.scm
  • units/URB0203/URB0203_lod1.scm
  • units/URB0203/URB0203_script.lua
  • units/URB0203/URB0203_unit.bp
  • units/URB0301/URB0301_Abuild.sca
  • units/URB0301/URB0301_LOD0.scm
  • units/URB0301/URB0301_lod1.scm
  • units/URB0301/URB0301_script.lua
  • units/URB0301/URB0301_unit.bp
  • units/URB0302/URB0302_Abuild.sca
  • units/URB0302/URB0302_Aplatform.sca
  • units/URB0302/URB0302_lod0.scm
  • units/URB0302/URB0302_lod1.scm
  • units/URB0302/URB0302_script.lua
  • units/URB0302/URB0302_unit.bp
  • units/URB0303/URB0303_Abuild.sca
  • units/URB0303/URB0303_lod0.scm
  • units/URB0303/URB0303_lod1.scm
  • units/URB0303/URB0303_script.lua
  • units/URB0303/URB0303_unit.bp
  • units/XAS0306/XAS0306_unit.bp
  • units/XSB0101/XSB0101_Adeath.sca
  • units/XSB0101/XSB0101_Aupgrade.sca
  • units/XSB0101/XSB0101_Aupgrade_sup.sca
  • units/XSB0101/XSB0101_lod0.scm
  • units/XSB0101/XSB0101_lod1.scm
  • units/XSB0101/XSB0101_unit.bp
  • units/XSB0102/XSB0102_Adeath.sca
  • units/XSB0102/XSB0102_Aupgrade.sca
  • units/XSB0102/XSB0102_Aupgrade_Sup.sca
  • units/XSB0102/XSB0102_lod0.scm
  • units/XSB0102/XSB0102_lod1.scm
  • units/XSB0102/XSB0102_script.lua
  • units/XSB0102/XSB0102_unit.bp
  • units/XSB0103/XSB0103_Adeath.sca
  • units/XSB0103/XSB0103_Aupgrade.sca
  • units/XSB0103/XSB0103_Aupgrade_Sup.sca
  • units/XSB0103/XSB0103_lod0.scm
  • units/XSB0103/XSB0103_lod1.scm
  • units/XSB0103/XSB0103_script.lua
  • units/XSB0103/XSB0103_unit.bp
  • units/XSB0201/XSB0201_Adeath.sca
  • units/XSB0201/XSB0201_Aupgrade.sca
  • units/XSB0201/XSB0201_LOD0.scm
  • units/XSB0201/XSB0201_lod1.scm
  • units/XSB0201/XSB0201_unit.bp
  • units/XSB0202/XSB0202_Adeath.sca
  • units/XSB0202/XSB0202_Aupgrade.sca
  • units/XSB0202/XSB0202_LOD0.scm
  • units/XSB0202/XSB0202_lod1.scm
  • units/XSB0202/XSB0202_script.lua
  • units/XSB0202/XSB0202_unit.bp
  • units/XSB0203/XSB0203_Adeath.sca
  • units/XSB0203/XSB0203_Aupgrade.sca
  • units/XSB0203/XSB0203_lod0.scm
  • units/XSB0203/XSB0203_lod1.scm
  • units/XSB0203/XSB0203_script.lua
  • units/XSB0203/XSB0203_unit.bp
  • units/XSB0301/XSB0301_Adeath.sca
  • units/XSB0301/XSB0301_LOD0.scm
  • units/XSB0301/XSB0301_lod1.scm
  • units/XSB0301/XSB0301_script.lua
  • units/XSB0301/XSB0301_unit.bp
  • units/XSB0302/XSB0302_Adeath.sca
  • units/XSB0302/XSB0302_LOD0.scm
  • units/XSB0302/XSB0302_lod1.scm
  • units/XSB0302/XSB0302_script.lua
  • units/XSB0302/XSB0302_unit.bp
  • units/XSB0303/XSB0303_Adeath.sca
  • units/XSB0303/XSB0303_LOD0.scm
  • units/XSB0303/XSB0303_lod1.scm
  • units/XSB0303/XSB0303_script.lua
  • units/XSB0303/XSB0303_unit.bp
  • units/ZAB9501/ZAB9501_Aopen.sca
  • units/ZAB9501/ZAB9501_lod0.scm
  • units/ZAB9501/ZAB9501_lod1.scm
  • units/ZAB9501/ZAB9501_script.lua
  • units/ZAB9501/ZAB9501_unit.bp
  • units/ZAB9502/ZAB9502_Aupgrade.sca
  • units/ZAB9502/ZAB9502_lod0.scm
  • units/ZAB9502/ZAB9502_lod1.scm
  • units/ZAB9502/ZAB9502_unit.bp
  • units/ZAB9503/ZAB9503_Aopen.sca
  • units/ZAB9503/ZAB9503_lod0.scm
  • units/ZAB9503/ZAB9503_lod1.scm
  • units/ZAB9503/ZAB9503_script.lua
  • units/ZAB9503/ZAB9503_unit.bp
  • units/ZAB9601/ZAB9601_lod0.scm
  • units/ZAB9601/ZAB9601_lod1.scm
  • units/ZAB9601/ZAB9601_script.lua
  • units/ZAB9601/ZAB9601_unit.bp
  • units/ZAB9602/ZAB9602_lod0.scm
  • units/ZAB9602/ZAB9602_lod1.scm
  • units/ZAB9602/ZAB9602_unit.bp
  • units/ZAB9603/ZAB9603_lod0.scm
  • units/ZAB9603/ZAB9603_lod1.scm
  • units/ZAB9603/ZAB9603_script.lua
  • units/ZAB9603/ZAB9603_unit.bp
  • units/ZEB9501/ZEB9501_Aupgrade.sca
  • units/ZEB9501/ZEB9501_LOD0.scm
  • units/ZEB9501/ZEB9501_script.lua
  • units/ZEB9501/ZEB9501_unit.bp
  • units/ZEB9502/ZEB9502_Aupgrade.sca
  • units/ZEB9502/ZEB9502_lod0.scm
  • units/ZEB9502/ZEB9502_script.lua
  • units/ZEB9502/ZEB9502_unit.bp
  • units/ZEB9503/ZEB9503_Aupgrade.sca
  • units/ZEB9503/ZEB9503_lod0.scm
  • units/ZEB9503/ZEB9503_script.lua
  • units/ZEB9503/ZEB9503_unit.bp
  • units/ZEB9601/ZEB9601_LOD0.scm
  • units/ZEB9601/ZEB9601_unit.bp
  • units/ZEB9602/ZEB9602_lod0.scm
  • units/ZEB9602/ZEB9602_script.lua
  • units/ZEB9602/ZEB9602_unit.bp
  • units/ZEB9603/ZEB9603_lod0.scm
  • units/ZEB9603/ZEB9603_script.lua
  • units/ZEB9603/ZEB9603_unit.bp
  • units/ZRB9501/ZRB9501_Abuild.sca
  • units/ZRB9501/ZRB9501_Aopen.sca
  • units/ZRB9501/ZRB9501_LOD0.scm
  • units/ZRB9501/ZRB9501_lod1.scm
  • units/ZRB9501/ZRB9501_unit.bp
  • units/ZRB9502/ZRB9502_Abuild.sca
  • units/ZRB9502/ZRB9502_Aplatform.sca
  • units/ZRB9502/ZRB9502_Aupgrade.sca
  • units/ZRB9502/ZRB9502_lod0.scm
  • units/ZRB9502/ZRB9502_lod1.scm
  • units/ZRB9502/ZRB9502_script.lua

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Tip

CodeRabbit can use luacheck to improve the quality of Lua code reviews.

Add a configuration file to your project to customize how CodeRabbit runs luacheck.

@Saver27
Copy link
Copy Markdown
Contributor Author

Saver27 commented Feb 11, 2026

While reviewing the files on GitHub, I noticed several issues (e.g., incorrect spacing and unwanted symbols). Additionally, some values were modified since my last update that were not intended to be changed (e.g., HP).
I will review the data again and correct these issues accordingly.

@BlackYps
Copy link
Copy Markdown
Contributor

Very nice writeup on the changes, good job!

Lowercase file paths
Revert whitespace changes
Revert changes to copyright symbol in unit scripts
Copy link
Copy Markdown
Contributor

@lL1l1 lL1l1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aeon factories reviewed:
Aeon T1->T2 land factory upgrade detaches the left arm which looks weird because its physically impossible and the factory becomes asymmetrical during the upgrade. Not sure about the solution, it is a difficult problem.

Aeon T1 navy fac water effects and hitbox do not match the mesh.

Image

Do you know if Scrolling = true was used on the aeon factor lod 0 meshes?

@Saver27
Copy link
Copy Markdown
Contributor Author

Saver27 commented Feb 21, 2026

@IL1I1 thank you very much for your testing.

Aeon T1 Land Factory Upgrade

Unfortunately, while creating the animation, I couldn’t come up with a better solution than the current one. Previously, both roof elements kept their positions during the upgrade process.

Since the tower positions change in the T2 HQ and Support models, I considered this approach to be the most reasonable way to visually represent the upgrade.

I may revise the entire Aeon Land Factory model again. I’ve received feedback from multiple sources expressing the wish for a model that more closely resembles the original design from before the changes.

Aeon Naval Factory – Hitbox / Effects

I have not implemented effects of this kind in the project so far. However, I am still aware of the hitbox issue.

If I decide to adjust the hitbox, I would also review other hitboxes as part of that process, since some of them do not fully match the updated model.

Description

The following hitboxes need adjustment, as they currently do not properly match their respective models:

Affected Units

Cybran Land Factory
The visual model is significantly wider than the current hitbox.

Seraphim Air Factory
The T3 hitbox should be applied to all tech levels, as the base structure of the model remains identical.

Aeon Naval Factory
The hitbox should be reduced to match the actual model size.
Note: Additional testing is required to ensure that the previously described bug is not triggered again.

Expected Behavior

Hitboxes accurately match the visible model dimensions.

Consistent hitbox structure for units sharing the same base model.

No regression of previously identified bugs.

To Do

Increase width of the Cybran Land Factory hitbox

Apply T3 hitbox to all Seraphim Air Factory models

Reduce Aeon Naval Factory hitbox size

Perform regression testing for the known issue

Below is a short overview along with images of the currently used hitboxes in the game.

Lines marked in yellow indicate a deviation from the other tech levels of the same
model.

5 6

7

3 4

8

1 2

9

Factory Hitbox.pdf

@Saver27
Copy link
Copy Markdown
Contributor Author

Saver27 commented Feb 26, 2026

I'm currently reviewing and correcting all the blueprints and scripts.

After that, I'll work on the hitboxes.

Since I haven't quite understood Git yet, I would be grateful if someone could review this work afterwards.

All Lua files in the factory models have been reviewed and revised.

Changes:

Removed unnecessary whitespace

Adjusted path naming to match the common convention (fixed upper/lower case)

Added the AverageDensity = parameter to support factories, as it is also present in all HQs

Corrected incorrect health values

Special Note:

Since each factory variant is based on the T1 variant, the DDS files (Albedo, NormalTS, SpecTeam, LOD1, etc.) are referenced from there.

Therefore, the files in the higher tech tiers are no longer required.

If this commit does not remove those files, the core team may handle their removal after confirmation through testing by other contributors.
Here are the minor hitbox adjustments for various units.

UEF

Land T1 & T2

Increased SizeZ from 4.4 to 4.8

Air T3

Increased SizeZ from 3.5 to 4.2

AEON

Air T1

Increased SizeX from 3 to 3.5

Increased SizeZ from 3 to 3.5

Naval T1

SizeZ = 13

This value remains unchanged because modifying it triggers a bug that shifts the build footprint (see first comment).

The issue was narrowed down to the Physics section under:

SkirtOffset

SkirtSize

It has now also been observed that the hitbox itself affects this issue.
Since the build footprint can influence the faction behavior, this value remains unchanged for now until a better solution is found.

Cybran

Land T1, T2, T3

Increased SizeX from 2.9 to 4.3

Increased SizeZ from 4.2 to 4.3

Naval T3

SizeX = 4

This value was intended to be adjusted.
However, since the model’s root bone is heavily aligned with the build cranes, a large empty space in front of the factory is included. Therefore, this value was not changed.

Seraphim

Air T1, T2, T3

Set SizeX to 3.5

Set SizeY to 2.7

Set SizeZ to 3.5

Since the model changes very little between tech levels, the hitbox has been standardized and averaged.
Previously, the dimensions were partially too small or too tall.

From my side, the project is now complete unless further issues are discovered.
@Saver27
Copy link
Copy Markdown
Contributor Author

Saver27 commented Mar 1, 2026

Proposal: Adjustment of the Aeon Naval Hitbox

The proposed adjustment should be carefully reviewed and evaluated.

Purpose of the change

The hitbox will be aligned more accurately with the existing model, ensuring better visual and technical consistency with the actual factory size.

image

Potential impact

The hitbox will more closely match the model.

However, when multiple factories are placed in a row, their build position may shift after upgrading to the next tech level.

The factories remain fully functional.

There is a possibility of model overlap if units were placed before upgrading to the next tech level.

image

Detailed Changes

Aeon Naval T1, T2, T3

T1

SkirtOffsetZ: -1 → -2

SizeZ: 13 → 10.5

T2

SkirtOffsetZ: -1 → -2

SizeZ: 13 → 12

T3

SkirtOffsetZ: -1 → 0

SizeZ: 13 → 14

The current state of the project only presents the possibility that the hitbox of the T1 version is slightly too large. However, all other errors have been corrected.

@Saver27 Saver27 requested a review from lL1l1 March 9, 2026 21:25
Minor adjustment to the size of the water effect, as this has partially disappeared under the new model.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants