- }
- else if(cmd == GENERIC_CMD_SET_ATTACHMENT) {
- m_env->m_attachements[getId()] = readS16(is);
- m_children.push_back(m_env->m_attachements[getId()]);
+ } else if (cmd == GENERIC_CMD_ATTACH_TO) {
+ u16 parentID = readS16(is);
+ u16 oldparent = m_env->attachement_parent_ids[getId()];
+ if (oldparent) {
+ m_children.erase(std::remove(m_children.begin(), m_children.end(),
+ getId()), m_children.end());
+ }
+ m_env->attachement_parent_ids[getId()] = parentID;
+ GenericCAO *parentobj = m_env->getGenericCAO(parentID);
+
+ if (parentobj) {
+ parentobj->m_children.push_back(getId());
+ }
+