private void RemoveSpace(uint offset, uint amount) { // move the data byte[] block = _owner.m_Overlay.ReadBlock(offset + amount, (uint)(_owner.m_Overlay.GetSize() - offset - amount)); _owner.m_Overlay.WriteBlock(offset, block); _owner.m_Overlay.SetSize(_owner.m_Overlay.GetSize() - amount); // update the pointers for (int i = 0; i < _owner.m_PointerList.Count; i++) { LevelEditorForm.PointerReference ptrref = _owner.m_PointerList[i]; if (ptrref.m_ReferenceAddr >= (offset + amount)) { ptrref.m_ReferenceAddr -= amount; } if (ptrref.m_PointerAddr >= (offset + amount)) { ptrref.m_PointerAddr -= amount; _owner.m_Overlay.WritePointer(ptrref.m_ReferenceAddr, ptrref.m_PointerAddr); } _owner.m_PointerList[i] = ptrref; } // update the objects 'n' all UpdateObjectOffsets(offset + amount, (uint)-amount); }
private void AddSpace(uint offset, uint amount) { if ((_owner.m_Overlay.GetSize() + amount) > NitroROM.LEVEL_OVERLAY_SIZE) { throw new Exception("This level has reached the level size limit. Cannot add more data."); } // move the data byte[] block = _owner.m_Overlay.ReadBlock(offset, (uint)(_owner.m_Overlay.GetSize() - offset)); _owner.m_Overlay.WriteBlock(offset + amount, block); // write zeroes in the newly created space for (int i = 0; i < amount; i++) { _owner.m_Overlay.Write8((uint)(offset + i), 0); } // update the pointers for (int i = 0; i < _owner.m_PointerList.Count; i++) { LevelEditorForm.PointerReference ptrref = _owner.m_PointerList[i]; if (ptrref.m_ReferenceAddr >= offset) { ptrref.m_ReferenceAddr += amount; } if (ptrref.m_PointerAddr >= offset) { ptrref.m_PointerAddr += amount; _owner.m_Overlay.WritePointer(ptrref.m_ReferenceAddr, ptrref.m_PointerAddr); } _owner.m_PointerList[i] = ptrref; } // update the objects 'n' all UpdateObjectOffsets(offset, amount); }