Skip to content

fix: property model and brick by brick fixes - #2041

Open
aronwk-aaron wants to merge 6 commits into
mainfrom
fix/bbb-small-model-fixes
Open

aronwk-aaron wants to merge 6 commits into
mainfrom
fix/bbb-small-model-fixes

Conversation

@aronwk-aaron

Copy link
Copy Markdown
Member

On behalf of @aronwk-aaron (written by Claude).

Small fixes for property models and brick by brick, each checked against the 1.10.64 client.

  • PlaceModelResponse writes the model's rotation. The client's PlaceModelResponse::Deserialize (0x00dc0170) reads the rotation as an optional w, x, y, z quaternion, but the server wrote the 4-byte response after the rotation flag, so any model placed with a rotation other than identity sent a message the client ran out of data reading.
  • Naming a model no longer renames the property. The model info window sends UpdatePropertyOrModelForFilterCheck with isProperty false (client 0x00cc42e0); only the property editor sends it true (0x00c2e710). Storing a model's name and description is a follow-up.
  • A model item keeps its blueprint across saves. The blueprintid config of a brick built model item wasn't saved in the item XML, so a picked up model couldn't be placed again after a reload.
  • Model behaviors are written only for property and inventory models. The client reads the behavior info only when the object's config has propertyObjectID or inInventory (ObjectLoader2::LoadModelBehaviorsComponent); for other models it read those bits as the next component's data.
  • The model vault uses the models' inventory groups. The client maps VAULT_MODELS to MODELS for groups (m_VaultToPlayerInventory); the server refused group updates from the vault.
  • Tests: the server mock now keeps a copy of the last bitstream sent (it kept a pointer to the sender's stack). New tests for the place model response layout, model behavior info and vault groups.

🤖 Generated with Claude Code

aronwk-aaron and others added 6 commits October 16, 2026 20:09
The bitstreams sent are usually on the sender's stack, so the pointer it kept was dangling once Send returned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The client's PlaceModelResponse::Deserialize (0x00dc0170) reads the rotation as an optional w, x, y, z quaternion, but the server wrote the 4-byte response after the rotation flag, so with any rotation other than identity the client ran out of data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The model info window sends UpdatePropertyOrModelForFilterCheck with isProperty false (client 0x00cc42e0); only the property editor sends it true (0x00c2e710). A model's name and description aren't stored yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A brick built model item's config has blueprintid (lowercase), which the saved item XML didn't keep (only blueprintID), so a picked up model lost its blueprint on the next load and could not be placed again. It is now saved as bp.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The client makes the mutable model component, which reads the behaviors and editing info, only when the object's config has propertyObjectID or inInventory (ObjectLoader2::LoadModelBehaviorsComponent); every other model gets the plain one, which reads only the model block. Writing the behaviors for every model made the client read them as the next component's data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LWOInventoryComponent_Common::msgUpdateInventoryGroup (0x00c955b0) and msgUpdateInventoryGroupContents (0x00ce1f50) look the inventory type up in m_VaultToPlayerInventory first, which maps VAULT_MODELS to MODELS. The server refused group updates for the model vault.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aronwk-aaron

Copy link
Copy Markdown
Member Author

reviewed code myself and tested locally

@aronwk-aaron
aronwk-aaron marked this pull request as ready for review October 17, 2026 01:43
Comment thread dGame/dGameMessages/GameMessages.cpp
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.

2 participants