Skip to content

WIP t6 custom map loading#539

Open
LJW-Dev wants to merge 129 commits into
Laupetin:mainfrom
LJW-Dev:bsp-compilation
Open

WIP t6 custom map loading#539
LJW-Dev wants to merge 129 commits into
Laupetin:mainfrom
LJW-Dev:bsp-compilation

Conversation

@LJW-Dev

@LJW-Dev LJW-Dev commented Oct 11, 2025

Copy link
Copy Markdown
Contributor

Notes:

  • Techsets are loaded and dumped with my custom implementation, I think it should use the official techset structure but this isn't super important.
  • The world asset uses a .fbx file and uses OpenFBX as it's loader
  • It doesn't use any xmodels apart from the skybox, as I found them too complicated to load from the world asset. Definitely should be implemented somehow though.
  • You need 6 gsc files for the link to be successful and for the map to load on bo2, but 4 of them are redundant (the _fx and _amb GSC files). This could be changed to make it simpler for users to create their custom maps, but i'm not sure if simplifying it is a good design choice.
  • Maps require footstep tables, but there's no loading/dumping of them right now. I add empty footstep tables so the map will load, we could change this so users can edit the footstep tables but i don't know how this would be done.

LJW-Dev added 23 commits July 7, 2025 15:53
note: techniques should be dumped in seperate files from technique sets, but compiling them all into the techset works as well but is harder to read.
…missing image check to the BSP compiler to reduce the output prints when an image is missing.
@Laupetin Laupetin added the enhancement New feature or request label Oct 11, 2025

@Laupetin Laupetin left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Hey there, thank you for the PR, the feature is pretty awesome :)
I've looked through a lot of the code by now, sorry it takes so long, it's a big PR 😅
I probably won't have that much time in the upcoming days, so i'll submit the comments I have currently.

I haven't looked at CustomMapLinker.h yet, though since I do not know that much about the BSPs yet, I probably won't be able to say about that part 😅
So generally my comments are more related to code structure and memory management for example.

Also please forgive that I'm adding a lot of comments, it's just my style of doing code review (I'm adding a comment when I have any special thoughts about some place so it ends up being pretty verbose) and does not mean that necessarly everything needs to be addressed or must be solved in a particular way necessarly.
Also I can address a lot of the stuff as well, you don't have to do everything 😛

Again, thanks for putting the work in :D Looking forward to this feature and how it evolves

Comment thread src/Common/Game/T6/T6.h Outdated
Comment thread src/Common/Game/T6/T6.h Outdated
Comment thread src/Common/Game/T6/T6.h Outdated
Comment thread src/Common/Game/T6/T6.h Outdated
Comment thread src/Common/Game/T6/T6.h Outdated
Comment thread src/ObjLoading/Game/T6/CustomMap/ProjectCreator.h Outdated
Comment thread src/ObjLoading/Game/T6/CustomMap/ProjectCreator.cpp Outdated
Comment thread src/ObjLoading/Game/T6/CustomMap/ProjectCreator.cpp Outdated
Comment thread src/ObjLoading/Game/T6/CustomMap/ProjectCreator.cpp Outdated
Comment thread src/ObjLoading/Game/T6/CustomMap/ProjectCreator.cpp Outdated
Done:
- Moved custom map structures to their own objcommon header file
- Updated GfxLightGridRow struct
- Reverted shader_bin file path
- Renamed Project Creator to BSP Creator
- Removed model loading from BSP creator
- Cleaned up BSP Creator and updated the names of structs
WIP:
- Update BSP calculation code to be more readable and use unique/shared ptrs
- Converted BSP tree generation to use unique ptrs
- Updated the linker to use BSP tree unique ptrs and use the new structure of custom map structs
- Updated names to allign with the BSP naming structure
- Updated constants file and assoicated uses
- Updated file structure to use BSP naming scheme
- Re-wrote BSP creator to use c++ more efficiently
LJW-Dev added 26 commits April 13, 2026 20:21
…imposed limits, beautified code, added comments where logic wasn't very obvious.
@LJW-Dev
LJW-Dev force-pushed the bsp-compilation branch from 95b8c68 to e4fb8b4 Compare May 1, 2026 15:56
@asajid2-cell

Copy link
Copy Markdown

Hey! I’ve been testing the T6 custom-map branch against Plutonium and got a generated zm_cosmodrome map to reach live Zombies gameplay/HUD. I'm still working on understanding the engine; however, currently, I've found two small upstreamable issues:

  1. FBX CullingOff was not honored for generated GfxWorld surfaces.
  2. T6 generated world surfaces can silently accept model-material families like mc/, but runtime rendering only became correct when using a wpc/ world material.

I have focused tests and runtime proof screenshots. Is there any way to contribute?

@LJW-Dev

LJW-Dev commented May 31, 2026

Copy link
Copy Markdown
Contributor Author

Right now i'm moving to using GLTF as i found it to not have these issues that FBX has had, hopefully switching over would fix the 1st issue (the branch is updated to use gltf ##now).

I agree a warning would be good when it sees not a world material, but when custom materials become possible i doubt many map makers would use the same wpc/wc/etc naming scheme so a full error would be too much. Maybe there's a way to tell if the material will/won't render apart from their naming scheme?

Feel free to add a pull request to the branch if you want to add changes though.

@asajid2-cell

asajid2-cell commented May 31, 2026

Copy link
Copy Markdown

Sounds good, I’ll keep any future PR small and re-check against the current GLTF path first.

For context, my local fork/runtime lane can get a generated zm_cosmodrome into Plutonium ZM gameplay, including player spawn/movement and basic zombie melee damage, but it is still very early and has local probe/staging scaffolding. It was also based on your earlier custom-map work, so I’m now trying to line up with the current branch instead of guessing.

I tried a quick sanity check on the current bsp-compilation head with a minimal GLTF test map, but hit an early runtime crash before InitGame, so I may be misunderstanding the expected source setup.

Is there a specific current commit/example GLTF you consider the known-good in-game smoke test? I can base any testing/PR work on that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants