Beispiel #1
0
        private void CreatePointer(uint ptrId, uint luggageId)
        {
            _currentPtr = null;

            if (ptrId != 0)
            {
                MousePtr lugg      = null;
                MousePtr ptr       = new MousePtr(_resMan.OpenFetchRes(ptrId));
                ushort   noFrames  = _resMan.ReadUInt16(ptr.numFrames);
                ushort   ptrSizeX  = _resMan.ReadUInt16(ptr.sizeX);
                ushort   ptrSizeY  = _resMan.ReadUInt16(ptr.sizeY);
                ushort   luggSizeX = 0;
                ushort   luggSizeY = 0;
                ushort   resSizeX;
                ushort   resSizeY;

                if (Sword1.SystemVars.Platform == Platform.PSX) //PSX pointers are half height
                {
                    ptrSizeY *= 2;
                }

                if (luggageId != 0)
                {
                    lugg      = new MousePtr(_resMan.OpenFetchRes(luggageId));
                    luggSizeX = _resMan.ReadUInt16(lugg.sizeX);
                    luggSizeY = _resMan.ReadUInt16(lugg.sizeY);

                    if (SystemVars.Platform == Platform.PSX)
                    {
                        luggSizeY *= 2;
                    }

                    resSizeX = Math.Max(ptrSizeX, (ushort)((ptrSizeX / 2) + luggSizeX));
                    resSizeY = Math.Max(ptrSizeY, (ushort)((ptrSizeY / 2) + luggSizeY));
                }
                else
                {
                    resSizeX = ptrSizeX;
                    resSizeY = ptrSizeY;
                }
                _currentPtr           = new MousePtr(new byte[MousePtr.Size + resSizeX * resSizeY * noFrames]);
                _currentPtr.hotSpotX  = _resMan.ReadUInt16(ptr.hotSpotX);
                _currentPtr.hotSpotY  = _resMan.ReadUInt16(ptr.hotSpotY);
                _currentPtr.numFrames = noFrames;
                _currentPtr.sizeX     = resSizeX;
                _currentPtr.sizeY     = resSizeY;
                var ptrData    = _currentPtr;
                var ptrDataOff = MousePtr.Size;
                int dstDataOff = 0;
                ptrData.Data.Set(ptrData.Offset + ptrDataOff, 255, resSizeX * resSizeY * noFrames);
                if (luggageId != 0)
                {
                    dstDataOff = ptrDataOff + resSizeX - luggSizeX;
                    for (uint frameCnt = 0; frameCnt < noFrames; frameCnt++)
                    {
                        var luggSrc = MousePtr.Size;
                        dstDataOff += (resSizeY - luggSizeY) * resSizeX;
                        for (uint cnty = 0; cnty < (uint)(SystemVars.Platform == Platform.PSX ? luggSizeY / 2 : luggSizeY); cnty++)
                        {
                            for (uint cntx = 0; cntx < luggSizeX; cntx++)
                            {
                                if (lugg.Data[lugg.Offset + luggSrc + cntx] != 0)
                                {
                                    ptrData.Data[ptrData.Offset + dstDataOff + cntx] = lugg.Data[lugg.Offset + luggSrc + cntx];
                                }
                            }

                            if (SystemVars.Platform == Platform.PSX)
                            {
                                dstDataOff += resSizeX;
                                for (uint cntx = 0; cntx < luggSizeX; cntx++)
                                {
                                    if (lugg.Data[lugg.Offset + luggSrc + cntx] != 0)
                                    {
                                        ptrData.Data[ptrData.Offset + dstDataOff + cntx] = lugg.Data[lugg.Offset + luggSrc + cntx];
                                    }
                                }
                            }

                            dstDataOff += resSizeX;
                            luggSrc    += luggSizeX;
                        }
                    }
                    _resMan.ResClose(luggageId);
                }

                dstDataOff = ptrDataOff;
                var srcDataOff = MousePtr.Size;
                for (uint frameCnt = 0; frameCnt < noFrames; frameCnt++)
                {
                    for (uint cnty = 0; cnty < (uint)(SystemVars.Platform == Platform.PSX ? ptrSizeY / 2 : ptrSizeY); cnty++)
                    {
                        for (uint cntx = 0; cntx < ptrSizeX; cntx++)
                        {
                            if (ptr.Data[ptr.Offset + srcDataOff + cntx] != 0)
                            {
                                ptrData.Data[ptrData.Offset + dstDataOff + cntx] = ptr.Data[ptr.Offset + srcDataOff + cntx];
                            }
                        }

                        if (SystemVars.Platform == Platform.PSX)
                        {
                            dstDataOff += resSizeX;
                            for (uint cntx = 0; cntx < ptrSizeX; cntx++)
                            {
                                if (ptr.Data[ptr.Offset + srcDataOff + cntx] != 0)
                                {
                                    ptrData.Data[ptrData.Offset + dstDataOff + cntx] = ptr.Data[ptr.Offset + srcDataOff + cntx];
                                }
                            }
                        }

                        srcDataOff += ptrSizeX;
                        dstDataOff += resSizeX;
                    }
                    dstDataOff += (resSizeY - ptrSizeY) * resSizeX;
                }
                _resMan.ResClose(ptrId);
            }
        }
Beispiel #2
0
        private void CreatePointer(uint ptrId, uint luggageId)
        {
            _currentPtr = null;

            if (ptrId != 0)
            {
                MousePtr lugg = null;
                MousePtr ptr = new MousePtr(_resMan.OpenFetchRes(ptrId));
                ushort noFrames = _resMan.ReadUInt16(ptr.numFrames);
                ushort ptrSizeX = _resMan.ReadUInt16(ptr.sizeX);
                ushort ptrSizeY = _resMan.ReadUInt16(ptr.sizeY);
                ushort luggSizeX = 0;
                ushort luggSizeY = 0;
                ushort resSizeX;
                ushort resSizeY;

                if (Sword1.SystemVars.Platform == Platform.PSX) //PSX pointers are half height
                    ptrSizeY *= 2;

                if (luggageId != 0)
                {
                    lugg = new MousePtr(_resMan.OpenFetchRes(luggageId));
                    luggSizeX = _resMan.ReadUInt16(lugg.sizeX);
                    luggSizeY = _resMan.ReadUInt16(lugg.sizeY);

                    if (SystemVars.Platform == Platform.PSX)
                        luggSizeY *= 2;

                    resSizeX = Math.Max(ptrSizeX, (ushort)((ptrSizeX / 2) + luggSizeX));
                    resSizeY = Math.Max(ptrSizeY, (ushort)((ptrSizeY / 2) + luggSizeY));
                }
                else
                {
                    resSizeX = ptrSizeX;
                    resSizeY = ptrSizeY;
                }
                _currentPtr = new MousePtr(new byte[MousePtr.Size + resSizeX * resSizeY * noFrames]);
                _currentPtr.hotSpotX = _resMan.ReadUInt16(ptr.hotSpotX);
                _currentPtr.hotSpotY = _resMan.ReadUInt16(ptr.hotSpotY);
                _currentPtr.numFrames = noFrames;
                _currentPtr.sizeX = resSizeX;
                _currentPtr.sizeY = resSizeY;
                var ptrData = _currentPtr;
                var ptrDataOff = MousePtr.Size;
                int dstDataOff = 0;
                ptrData.Data.Set(ptrData.Offset + ptrDataOff, 255, resSizeX * resSizeY * noFrames);
                if (luggageId != 0)
                {
                    dstDataOff = ptrDataOff + resSizeX - luggSizeX;
                    for (uint frameCnt = 0; frameCnt < noFrames; frameCnt++)
                    {
                        var luggSrc = MousePtr.Size;
                        dstDataOff += (resSizeY - luggSizeY) * resSizeX;
                        for (uint cnty = 0; cnty < (uint)(SystemVars.Platform == Platform.PSX ? luggSizeY / 2 : luggSizeY); cnty++)
                        {
                            for (uint cntx = 0; cntx < luggSizeX; cntx++)
                                if (lugg.Data[lugg.Offset + luggSrc + cntx] != 0)
                                    ptrData.Data[ptrData.Offset + dstDataOff + cntx] = lugg.Data[lugg.Offset + luggSrc + cntx];

                            if (SystemVars.Platform == Platform.PSX)
                            {
                                dstDataOff += resSizeX;
                                for (uint cntx = 0; cntx < luggSizeX; cntx++)
                                    if (lugg.Data[lugg.Offset + luggSrc + cntx] != 0)
                                        ptrData.Data[ptrData.Offset + dstDataOff + cntx] = lugg.Data[lugg.Offset + luggSrc + cntx];
                            }

                            dstDataOff += resSizeX;
                            luggSrc += luggSizeX;
                        }
                    }
                    _resMan.ResClose(luggageId);
                }

                dstDataOff = ptrDataOff;
                var srcDataOff = MousePtr.Size;
                for (uint frameCnt = 0; frameCnt < noFrames; frameCnt++)
                {
                    for (uint cnty = 0; cnty < (uint)(SystemVars.Platform == Platform.PSX ? ptrSizeY / 2 : ptrSizeY); cnty++)
                    {
                        for (uint cntx = 0; cntx < ptrSizeX; cntx++)
                            if (ptr.Data[ptr.Offset + srcDataOff + cntx] != 0)
                                ptrData.Data[ptrData.Offset + dstDataOff + cntx] = ptr.Data[ptr.Offset + srcDataOff + cntx];

                        if (SystemVars.Platform == Platform.PSX)
                        {
                            dstDataOff += resSizeX;
                            for (uint cntx = 0; cntx < ptrSizeX; cntx++)
                                if (ptr.Data[ptr.Offset + srcDataOff + cntx] != 0)
                                    ptrData.Data[ptrData.Offset + dstDataOff + cntx] = ptr.Data[ptr.Offset + srcDataOff + cntx];
                        }

                        srcDataOff += ptrSizeX;
                        dstDataOff += resSizeX;
                    }
                    dstDataOff += (resSizeY - ptrSizeY) * resSizeX;
                }
                _resMan.ResClose(ptrId);
            }
        }