OpenFetchRes() публичный Метод

public OpenFetchRes ( uint id ) : byte[]
id uint
Результат byte[]
Пример #1
0
        public Text(ObjectMan objMan, ResMan resMan, bool czechVersion)
        {
            _objMan = objMan;
            _resMan = resMan;
            _textCount = 0;
            _fontId = (uint)(czechVersion ? SwordRes.CZECH_GAME_FONT : SwordRes.GAME_FONT);
            _font = _resMan.OpenFetchRes(_fontId);

            _joinWidth = (ushort)(CharWidth((byte)' ') - 2 * Overlap);
            _charHeight = _resMan.ReadUInt16(new FrameHeader(_resMan.FetchFrame(_font, 0)).height); // all chars have the same height
        }
Пример #2
0
        public Text(ObjectMan objMan, ResMan resMan, bool czechVersion)
        {
            _objMan    = objMan;
            _resMan    = resMan;
            _textCount = 0;
            _fontId    = (uint)(czechVersion ? SwordRes.CZECH_GAME_FONT : SwordRes.GAME_FONT);
            _font      = _resMan.OpenFetchRes(_fontId);

            _joinWidth  = (ushort)(CharWidth((byte)' ') - 2 * Overlap);
            _charHeight = _resMan.ReadUInt16(new FrameHeader(_resMan.FetchFrame(_font, 0)).height); // all chars have the same height
        }
Пример #3
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);
            }
        }
Пример #4
0
        private ByteAccess LockText(uint textId, Language lang)
        {
            var addr = _resMan.OpenFetchRes(_textList[(int)(textId / ObjectMan.ITM_PER_SEC), (int)lang]);

            if (addr == null)
            {
                return(null);
            }
            var addrOff = Header.Size;
            // TODO:
            //if ((textId & ITM_ID) >= _resMan->readUint32(addr))
            //{
            //    // Workaround for missing sentences in some langages in the demo.
            //    switch (textId)
            //    {
            //        case 8455194:
            //            return const_cast<char*>(_translationId8455194[lang]);
            //        case 8455195:
            //            return const_cast<char*>(_translationId8455195[lang]);
            //        case 8455196:
            //            return const_cast<char*>(_translationId8455196[lang]);
            //        case 8455197:
            //            return const_cast<char*>(_translationId8455197[lang]);
            //        case 8455198:
            //            return const_cast<char*>(_translationId8455198[lang]);
            //        case 8455199:
            //            return const_cast<char*>(_translationId8455199[lang]);
            //        case 8455200:
            //            return const_cast<char*>(_translationId8455200[lang]);
            //        case 8455201:
            //            return const_cast<char*>(_translationId8455201[lang]);
            //        case 8455202:
            //            return const_cast<char*>(_translationId8455202[lang]);
            //        case 8455203:
            //            return const_cast<char*>(_translationId8455203[lang]);
            //        case 8455204:
            //            return const_cast<char*>(_translationId8455204[lang]);
            //        case 8455205:
            //            return const_cast<char*>(_translationId8455205[lang]);
            //        case 6488080:
            //            return const_cast<char*>(_translationId6488080[lang]);
            //        case 6488081:
            //            return const_cast<char*>(_translationId6488081[lang]);
            //        case 6488082:
            //            return const_cast<char*>(_translationId6488082[lang]);
            //        case 6488083:
            //            return const_cast<char*>(_translationId6488083[lang]);
            //    }

            //    warning("ObjectMan::lockText(%d): only %d texts in file", textId & ITM_ID, _resMan->readUint32(addr));
            //    return NULL;
            //}
            uint offset = _resMan.ReadUInt32(addr.ToUInt32((int)(addrOff + ((textId & ITM_ID) + 1) * 4)));

            if (offset == 0)
            {
                // TODO: Workaround bug for missing sentence in some langages in Syria (see bug #1977094).
                // We use the hardcoded text in this case.
                //if (textId == 2950145)
                //    return const_cast<char*>(_translationId2950145[lang]);

                // TODO: warning("ObjectMan::lockText(%d): text number has no text lines", textId);
                return(null);
            }
            return(new ByteAccess(addr, (int)(addrOff + offset)));
        }