Ejemplo n.º 1
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);

            Unknown2       = br.ReadBytes(6);
            LightRadius    = br.ReadInt32();
            NumOfColors    = br.ReadInt32(); //
            LightIntensity = br.ReadByte();; //gradient amount 32 00
            UnknownVal     = br.ReadBytes(21);
            // Unknown5 = br.ReadInt32(); //
            // Unknown6 = br.ReadInt16(); //
            ChangeIntensity = br.ReadInt16(); // Color change speed 15
            Color1          = br.ReadColor();
            Color2          = br.ReadColor();

            /*
             * R1 = br.ReadByte();
             * G1 = br.ReadByte(); // Flags2?
             * B1 = br.ReadByte(); // Some flag
             * R2 = br.ReadByte();
             * G2 = br.ReadByte(); // Flags2?
             * B2 = br.ReadByte(); // Some flag
             */


            Unknown3   = br.ReadBytes(74);
            PulseSpeed = br.ReadByte();
            Unknown4   = br.ReadBytes(18);

            /*
             * //ChangeColors = new Color[16];18
             * //for (int i = 0; i < 16; i++) ChangeColors[i] = br.ReadColor();
             * //  Unknown3 = new byte[16];
             * //for (int i = 0; i < 16; i++) ChangeIntensity[i] = br.ReadByte();
             * ChangeRadius = new byte[16];
             * for (int i = 0; i < 16; i++) ChangeRadius[i] = br.ReadByte();
             * ColorChangeIndex = br.ReadInt16();
             * IntensityChangeIndex = br.ReadInt16();
             * RadiusChangeIndex = br.ReadInt16();
             * ObjExtentID = br.ReadInt32();
             * Unknown13 = br.ReadInt16(); // some flags
             * Unknown14 = br.ReadInt16();
             * Unknown15 = br.ReadByte();
             * // Probably type of light (0 = emitter, 1 = absorber?)
             * if (ParsingRule >= 42)
             *  IsAntiLight = br.ReadInt32();
             * else
             *  IsAntiLight = br.ReadByte();
             */
            return(true);
        }
Ejemplo n.º 2
0
        public int IsAntiLight;            // 0xAC Emits light?

        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);

            UnknownVal     = br.ReadInt32(); // unused?
            Unknown2       = br.ReadBytes(12);
            Unknown3       = br.ReadInt16(); // Color Flags?
            Unknown4       = br.ReadInt16();
            Unknown5       = br.ReadInt32(); // Flags2?
            Unknown6       = br.ReadInt16(); // Some flag
            LightRadius    = br.ReadInt32(); //484290
            NumOfColors    = br.ReadInt32(); // 2 normally
            LightIntensity = br.ReadSingle();


            ChangeColors = new Color[16];
            for (int i = 0; i < 16; i++)
            {
                ChangeColors[i] = br.ReadColor();
            }
            ChangeIntensity = new byte[16];
            for (int i = 0; i < 16; i++)
            {
                ChangeIntensity[i] = br.ReadByte();
            }
            ChangeRadius = new byte[16];
            for (int i = 0; i < 16; i++)
            {
                ChangeRadius[i] = br.ReadByte();
            }
            ColorChangeIndex     = br.ReadInt16();
            IntensityChangeIndex = br.ReadInt16();
            RadiusChangeIndex    = br.ReadInt16();
            ObjExtentID          = br.ReadInt32();
            Unknown13            = br.ReadInt16(); // some flags
            Unknown14            = br.ReadInt16();
            Unknown15            = br.ReadByte();
            // Probably type of light (0 = emitter, 1 = absorber?)
            if (ParsingRule >= 42)
            {
                IsAntiLight = br.ReadInt32();
            }
            else
            {
                IsAntiLight = br.ReadByte();
            }
            return(true);
        }
Ejemplo n.º 3
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);
            // частота появления монстров
            int spawnRateNum = (int)br.ReadByte();

            MonsterSpawnRate = new byte[spawnRateNum];
            for (int i = 0; i < spawnRateNum; i++)
            {
                MonsterSpawnRate[i] = br.ReadByte();
            }
            // число уже созданных монстров
            SpawnedMonsters = br.ReadByte();
            // заменяется при загрузке на MonsterSpawnLimit
            SavedSpawnLimit = br.ReadByte();
            // должно быть 0 если карта не была сохранена игрой
            LastSpawnFrame = br.ReadUInt32();
            // скриптовые обработчики
            ScriptOnDamage  = br.ReadScriptEventString();
            ScriptOnDestroy = br.ReadScriptEventString();
            ScriptOnCollide = br.ReadScriptEventString();
            ScriptOnSpawn   = br.ReadScriptEventString();
            // монстры
            int           monsters      = (int)br.ReadByte();
            byte          spawnLimitNum = 0;
            List <string> monsterNames  = new List <string>(monsters);

            MonsterData = new byte[monsters][];
            for (int i = 0; i < monsters; i++)
            {
                // именно так
                if (!br.ReadBoolean())
                {
                    monsterNames.Add(null);
                    continue;
                }
                string monsterName = br.ReadString();
                short  unknown     = br.ReadInt16();            // увеличивается для следующего монстра
                // SkipToNextQword
                br.SkipToNextBoundary();
                long entryLenMB = br.ReadInt64();
                MonsterData[i] = br.ReadBytes((int)entryLenMB);

                /*
                 *      MonsterData - типичная инфа об обьекте
                 * short parsingRule1 = br.ReadInt16();
                 * short parsingRule2 = br.ReadInt16();
                 * br.ReadInt32(); // extent
                 * br.ReadInt32(); // globalID
                 * br.ReadSingle(); // X
                 * br.ReadSingle(); // Y
                 * byte term = br.ReadByte();
                 * result.MonsterData[i] = MonsterXfer.FromStream(br.BaseStream, ThingDb.Things[monsterName], parsingRule1);
                 */
                monsterNames.Add(monsterName);
            }
            spawnLimitNum = br.ReadByte();
            MonsterNames  = monsterNames.ToArray();
            // максимальное число создаваемых монстров, берется из gamedata.bin
            MonsterSpawnLimit = new byte[spawnLimitNum];
            for (int i = 0; i < spawnLimitNum; i++)
            {
                MonsterSpawnLimit[i] = br.ReadByte();
            }
            // настройки спавна: 0 - отключен, 1 - рандом позиция, 2 - зависит от игрока
            if (ParsingRule >= 63)
            {
                GenerationFlags = br.ReadInt32();
            }
            return(true);
        }
Ejemplo n.º 4
0
        public static MonsterGeneratorXfer FromStream(Stream mstream, short ParsingRule)
        {
            MonsterGeneratorXfer result = new MonsterGeneratorXfer();

            NoxBinaryReader br = new NoxBinaryReader(mstream);
            // частота появления монстров
            int spawnRateNum = (int) br.ReadByte();
            result.MonsterSpawnRate = new byte[spawnRateNum];
            for (int i = 0; i < spawnRateNum; i++)
                result.MonsterSpawnRate[i] = br.ReadByte();
            // число уже созданных монстров
            result.SpawnedMonsters = br.ReadByte();
            // заменяется при загрузке на MonsterSpawnLimit
            result.SavedSpawnLimit = br.ReadByte();
            // должно быть 0 если карта не была сохранена игрой
            result.LastSpawnFrame = br.ReadUInt32();
            // скриптовые обработчики
            result.ScriptOnDamage = br.ReadScriptEventString();
            result.ScriptOnDestroy = br.ReadScriptEventString();
            result.ScriptOnCollide = br.ReadScriptEventString();
            result.ScriptOnSpawn = br.ReadScriptEventString();
            // монстры
            int monsters = (int) br.ReadByte();
            byte spawnLimitNum = 0;
            List<string> monsterNames = new List<string>(monsters);
            result.MonsterData = new byte[monsters][];
            for (int i = 0; i < monsters; i++)
            {
                // именно так
                if (!br.ReadBoolean())
                {
                    monsterNames.Add(null);
                    continue;
                }
                string monsterName = br.ReadString();
                short unknown = br.ReadInt16(); // увеличивается для следующего монстра
                // SkipToNextQword
                br.SkipToNextBoundary();
                long entryLenMB = br.ReadInt64();
                result.MonsterData[i] = br.ReadBytes((int) entryLenMB);
                /*
              					MonsterData - типичная инфа об обьекте
                short parsingRule1 = br.ReadInt16();
                short parsingRule2 = br.ReadInt16();
                br.ReadInt32(); // extent
                br.ReadInt32(); // globalID
                br.ReadSingle(); // X
                br.ReadSingle(); // Y
                byte term = br.ReadByte();
                result.MonsterData[i] = MonsterXfer.FromStream(br.BaseStream, ThingDb.Things[monsterName], parsingRule1);
                */
                monsterNames.Add(monsterName);
            }
            spawnLimitNum = br.ReadByte();
            result.MonsterNames = monsterNames.ToArray();
            // максимальное число создаваемых монстров, берется из gamedata.bin
            result.MonsterSpawnLimit = new byte[spawnLimitNum];
            for (int i = 0; i < spawnLimitNum; i++)
                result.MonsterSpawnLimit[i] = br.ReadByte();
            // настройки спавна: 0 - отключен, 1 - рандом позиция, 2 - зависит от игрока
            if (ParsingRule >= 63)
                result.GenerationFlags = br.ReadInt32();
            return result;
        }
Ejemplo n.º 5
0
        public override bool FromStream(Stream mstream, short ParsingRule, ThingDb.Thing thing)
        {
            NoxBinaryReader br = new NoxBinaryReader(mstream);

            Unknown2       = br.ReadBytes(6);
            Unknown7       = br.ReadByte();
            Unknown8       = br.ReadByte();
            LightRadius    = br.ReadInt16();
            NumOfColors    = br.ReadInt32();   //
            LightIntensity = br.ReadInt16();;; //gradient amount 32 00
            R  = br.ReadByte();
            R2 = br.ReadByte();

            UnknownR  = br.ReadByte();
            UnknownR2 = br.ReadByte();

            G         = br.ReadByte();
            G2        = br.ReadByte();
            UnknownG  = br.ReadByte();
            UnknownG2 = br.ReadByte();

            B         = br.ReadByte();
            B2        = br.ReadByte();
            UnknownB  = br.ReadByte();
            UnknownB2 = br.ReadByte();

            UnknownVal = br.ReadBytes(8);

            ChangeIntensity = br.ReadInt16(); // Color change speed 15
            Color1          = br.ReadColor();
            Color2          = br.ReadColor();
            Color3          = br.ReadColor();
            Color4          = br.ReadColor();
            Color5          = br.ReadColor();
            Color6          = br.ReadColor();
            Color7          = br.ReadColor();
            Color8          = br.ReadColor();
            Color9          = br.ReadColor();
            Color10         = br.ReadColor();

            Unknown3 = br.ReadBytes(18);           //-21//39
            ChangeIntensitySingle = br.ReadByte(); //max radius
            Unknown10             = br.ReadByte(); //min radius

            MaxRadius2 = br.ReadByte();
            MinRadius2 = br.ReadByte();

            MaxRadius3 = br.ReadByte();
            MinRadius3 = br.ReadByte();

            MaxRadius4 = br.ReadByte();
            MinRadius4 = br.ReadByte();

            MaxRadius5 = br.ReadByte();
            MinRadius5 = br.ReadByte();

            MaxRadius6 = br.ReadByte();
            MinRadius6 = br.ReadByte();

            MaxRadius7 = br.ReadByte();
            MinRadius7 = br.ReadByte();

            MaxRadius8 = br.ReadByte();
            MinRadius8 = br.ReadByte();

            MaxRadius9 = br.ReadByte();
            MinRadius9 = br.ReadByte();

            MaxRadius10 = br.ReadByte();
            MinRadius10 = br.ReadByte();

            Unknown30        = br.ReadBytes(12);//30
            PulseSpeed       = br.ReadByte();
            Unknown11        = br.ReadByte();
            PulseSpeedSingle = br.ReadByte();
            Unknown4         = br.ReadBytes(11);//13


            Unknown80 = br.ReadByte();
            type      = br.ReadByte();
            Unknown9  = br.ReadBytes(3);
            return(true);
        }