Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }