Inheritance: MonoBehaviour
Example #1
0
            internal Object(Script script, ScriptBlock block, AssetLoader loader)
                : base(script, block)
            {
                var reader = loader.Reader;

                loader.Expect((ushort)0x1234);
                LocalVariableOffset = reader.ReadUInt16();
                int functionSelectorListOffset = reader.ReadUInt16();

                int variableSelectorCount = reader.ReadUInt16();
                Codex <VariableSelector> variableSelectors = new Codex <VariableSelector>(variableSelectorCount);

                Variables = variableSelectors;
                for (int index = 0; index < variableSelectorCount; index++)
                {
                    variableSelectors.Add(new VariableSelector(this, loader));
                }

                int functionSelectorCount = reader.ReadUInt16();
                Codex <FunctionSelector> functionSelectors = new Codex <FunctionSelector>(functionSelectorCount);

                Functions = functionSelectors;
                for (int index = 0; index < functionSelectorCount; index++)
                {
                    functionSelectors.Add(new FunctionSelector(this, loader));
                }

                loader.Expect((ushort)0);
                for (int index = 0; index < functionSelectorCount; index++)
                {
                    functionSelectors[index].ReadCodeOffset(loader);
                }

                loader.ExpectPosition(block.EndOffset);
            }
Example #2
0
    public void Analyse(Codex codex)
    {
        if (curSample != null)
        {
            //temp
            TempTasksManager.instance.UpdateCurrentTask(1);


            particles.Play();
            codex.AddSample(curSample);
        }



        /*
         * if (!state)
         * {
         *  if (curSample != null)
         *  {
         *      AnalyserOn();
         *  }
         * }
         * else
         * {
         *  AnalyserOff();
         * }
         */
    }
Example #3
0
        internal Package(AssetLoader loader)
            : base(loader)
        {
            loader.MakeBigEndian();
            BinaryReader reader = Reader = loader.Reader;

            ushort versionMajor = reader.ReadUInt16();
            ushort versionMinor = reader.ReadUInt16();

            reader.RequireZeroes(4);

            int stringCount = reader.ReadInt32();
            Codex <PackageString> strings = new Codex <PackageString>(stringCount);

            for (int index = 0; index < stringCount; index++)
            {
                strings.Add(new PackageString(this, index, reader));
            }
            Strings = strings;

            int fileCount = reader.ReadInt32();

            for (int index = 0; index < fileCount; index++)
            {
                new PackageFile(this, index, loader);
            }
        }
Example #4
0
    static void ReloadDNAPool(Codex codex)
    {
        string DNAPath = codex.DNAPrefabPath;

        string[] fileList = null;
        if (System.IO.Directory.Exists(DNAPath))
        {
            fileList = System.IO.Directory.GetFiles(DNAPath, "*.prefab");
        }
        List <DNA> DNAPool = codex.DNAPool;

        //remove empty
        List <DNA> RemovedDNA = DNAPool.FindAll(dna => dna == null);

        RemovedDNA.ForEach(dna => DNAPool.Remove(dna));

        //insert new
        if (fileList != null)
        {
            foreach (string fileName in fileList)
            {
                GameObject dnaGOPrefab = AssetDatabase.LoadAssetAtPath <GameObject>(fileName);
                if (dnaGOPrefab == null)
                {
                    continue;
                }

                DNA dnaPrefab = dnaGOPrefab.GetComponent <DNA>();
                if (dnaPrefab != null && !DNAPool.Contains(dnaPrefab))
                {
                    DNAPool.Add(dnaPrefab);
                }
            }
        }
    }
Example #5
0
        internal MCP(AssetManager manager, AssetLoader loader)
            : base(manager, loader.Name)
        {
            var reader = loader.Reader;

            EndOffset = checked ((int)loader.Length);
            loader.Expect(Magic1 + 1);
            loader.Expect(Magic2);
            int table2Count  = reader.ReadInt32();
            int table2Offset = Table2Offset = reader.ReadInt32();

            int table1Offset = Table1Offset = HeaderDataSize;
            int table1Count  = (table2Offset - table1Offset) / MCPTable1.DataSize;

            reader.BaseStream.Position = table1Offset;
            var table1 = new Codex <MCPTable1>(table1Count);

            Table1 = table1;
            for (int index = 0; index < table1Count; index++)
            {
                table1.Add(new MCPTable1(this, index, loader));
            }

            reader.BaseStream.Position = table2Offset;
            var table2 = new Codex <MCPTable2>(table2Count);

            Table2 = table2;
            for (int index = 0; index < table2Count; index++)
            {
                table2.Add(new MCPTable2(this, index, loader));
            }
        }
Example #6
0
        protected virtual void CompileEntry(SuperGumpLayout layout, int x, int y, int idx, RuneCodexEntry entry)
        {
            var ui = UI;

            if (x >= ui.Category.Entries.Width || y >= ui.Category.Entries.Height)
            {
                return;
            }

            layout.Add(
                "entry/" + idx,
                () =>
            {
                ui = UI;

                int xOffset = 220 + (x * 70);
                int yOffset = 50 + (y * 70);
                int gx      = x + ui.EntryScroll.X;
                int gy      = y + ui.EntryScroll.Y;

                const int itemID = 7956;
                bool s           = entry != null && ui.Entry == entry;

                if (entry != null)
                {
                    AddButton(xOffset + 5, yOffset + 5, 24024, 24024, b => SelectEntry(gx, gy, idx, entry));
                }
                else if (Codex.CanAddEntries(User))
                {
                    AddButton(xOffset + 5, yOffset + 5, 24024, 24024, b => AddEntry(gx, gy, idx));
                }

                AddImageTiled(xOffset, yOffset, 60, 60, 2702);

                if (s)
                {
                    AddItem(xOffset + 10, yOffset + 4, itemID, 2050);
                    AddItem(xOffset + 10, yOffset + 2, itemID, 1);
                }

                if (entry != null)
                {
                    AddItem(xOffset + 10, yOffset, itemID, ui.Category.Hue);
                    AddHtml(
                        xOffset,
                        yOffset + 25,
                        60,
                        40,
                        GetEntryLabel(entry).WrapUOHtmlTag("center").WrapUOHtmlColor(Color.LawnGreen, false),
                        false,
                        false);
                }
                else if (Codex.CanAddEntries(User))
                {
                    AddImage(xOffset + 25, yOffset, 2511, HighlightHue);
                    AddHtml(
                        xOffset, yOffset + 25, 60, 40, "Add".WrapUOHtmlTag("center").WrapUOHtmlColor(Color.Yellow, false), false, false);
                }
            });
        }
Example #7
0
    static void UpdateCodex(Codex codex)
    {
        List <DNA>        DNAPool = codex.DNAPool;
        List <CodexEntry> Codex   = codex.CodexEntries;

        //remove empty
        List <CodexEntry> RemovedCodex = Codex.FindAll(c => c.MotherDNA == null || c.FatherDNA == null);

        RemovedCodex.ForEach(c => Codex.Remove(c));

        for (int fatherID = 0; fatherID < DNAPool.Count; fatherID++)
        {
            for (int motherID = 0; motherID < DNAPool.Count; motherID++)
            {
                DNA fatherDNA = DNAPool[fatherID];
                DNA motherDNA = DNAPool[motherID];
                if (fatherDNA == null || motherDNA == null)
                {
                    continue;
                }

                CodexEntry c = Codex.Find(entry => entry.FatherDNA == fatherDNA && entry.MotherDNA == motherDNA);
                if (c != null)
                {
                    continue;
                }

                c           = new CodexEntry();
                c.FatherDNA = fatherDNA;
                c.MotherDNA = motherDNA;
                Codex.Add(c);
            }
        }
    }
Example #8
0
        internal Effect(AssetLoader loader)
            : base(loader)
        {
            var reader = loader.Reader;

            loader.ExpectMagic(Magic);
            loader.Expect(0x10000);
            loader.Expect(ContentStart);

            int offsetOffset = reader.ReadInt32();
            int pointerCount = reader.ReadInt32();
            HashSet<int> pointers = new HashSet<int>();
            int functionCount = reader.ReadInt32();
            HashSet<int> functions = new HashSet<int>();

            loader.Position = offsetOffset;
            for (int index = 0; index < pointerCount; index++)
                pointers.Add(reader.ReadInt32());
            for (int index = 0; index < functionCount; index++)
                functions.Add(reader.ReadInt32());

            loader.Position = ContentStart;
            int tokenCount = (offsetOffset - ContentStart) / 4;
            Tokens = new Codex<EffectToken>(tokenCount);
            for (int index = 0; index < tokenCount; index++)
                Tokens.Add(new EffectToken(reader, pointers, functions));
            for (int index = 0; index < tokenCount; index++)
                Tokens[index].Link(Tokens);

            Instructions = new Codex<EffectInstruction>();
            for (int index = 0; index < tokenCount; )
                Instructions.Add(new EffectInstruction(Tokens, ref index));
        }
Example #9
0
    void Start()
    {
        Random.InitState(0xCA51B7);
        Codex = Resources.Load <GameObject>("codex").GetComponent <Codex>();

        Codex.DNAPool.ForEach(dna => DNANames.Add(dna.name));
    }
Example #10
0
 public static void AddCodex(string fileName)
 {
     if (!String.IsNullOrEmpty(fileName))
     {
         Codex.Add(fileName.ToLower());
     }
 }
Example #11
0
        protected virtual void AddEntry(int gx, int gy, int idx)
        {
            var ui = UI;

            ui.EntryPoint = new Point2D(gx, gy);

            User.SendMessage("Select a rune book or recall rune to add to the Codex...");

            Minimized = true;
            Refresh(true);

            ItemSelectTarget <Item> .Begin(
                User,
                (m, t) =>
            {
                if (Codex.Add(User, t, ui.Category, true))
                {
                    Minimized = false;
                    SelectEntry(gx, gy, idx, ui.Category.Entries[gx, gy]);
                }
                else
                {
                    AddEntry(gx, gy, idx);
                }
            },
                m =>
            {
                Minimized = false;
                Refresh(true);
            });
        }
Example #12
0
        protected virtual void AddCategory(int gx, int gy, int idx)
        {
            UI.CategoryPoint = new Point2D(gx, gy);

            SelectCategory(gx, gy, idx, Codex.Categories[gx, gy] ?? (Codex.Categories[gx, gy] = new RuneCodexCategory()));
            Codex.InvalidateProperties();
        }
Example #13
0
 public Player(PlayerProfile profile, Codex codex)
 {
     Profile     = profile;
     Codex       = codex;
     DrawPile    = new Pile(codex.GetStarter());
     DiscardPile = new Pile();
     Hand        = new Hand();
 }
Example #14
0
        protected virtual void CompileCategory(SuperGumpLayout layout, int x, int y, int idx, RuneCodexCategory cat)
        {
            if (x >= Codex.Categories.Width || y >= Codex.Categories.Height)
            {
                return;
            }

            layout.Add(
                "cat/" + idx,
                () =>
            {
                int xOffset = 220 + (x * 70);
                int yOffset = 50 + (y * 70);
                int gx      = x + UI.CategoryScroll.X;
                int gy      = y + UI.CategoryScroll.Y;

                const int itemID = 8901;
                bool s           = cat != null && UI.Category == cat;

                if (cat != null)
                {
                    AddButton(xOffset + 5, yOffset + 5, 24024, 24024, b => SelectCategory(gx, gy, idx, cat));
                }
                else if (Codex.CanAddCategories(User))
                {
                    AddButton(xOffset + 5, yOffset + 5, 24024, 24024, b => AddCategory(gx, gy, idx));
                }

                AddImageTiled(xOffset, yOffset, 60, 60, 2702);

                if (s)
                {
                    AddItem(xOffset + 10, yOffset + 4, itemID, 2050);
                    AddItem(xOffset + 10, yOffset + 2, itemID, 1);
                }

                if (cat != null)
                {
                    AddItem(xOffset + 10, yOffset, itemID, cat.Hue);
                    AddHtml(
                        xOffset,
                        yOffset + 25,
                        60,
                        40,
                        GetCategoryLabel(cat).WrapUOHtmlTag("center").WrapUOHtmlColor(Color.LawnGreen, false),
                        false,
                        false);
                }
                else if (Codex.CanAddCategories(User))
                {
                    AddImage(xOffset + 25, yOffset, 2511, HighlightHue);
                    AddHtml(
                        xOffset, yOffset + 25, 60, 40, "Add".WrapUOHtmlTag("center").WrapUOHtmlColor(Color.Yellow, false), false, false);
                }
            });
        }
Example #15
0
        internal void ReadDetailLevels(AssetLoader loader, int dataOffset, ArrayBackedList <byte> bufferData)
        {
            var detailLevels = new Codex <ModelDetailLevel>();

            DetailLevels = detailLevels;
            for (int index = 0; index < PartCount; index++)
            {
                detailLevels.Add(new ModelDetailLevel(this, index, loader, dataOffset, bufferData));
            }
        }
Example #16
0
        internal Message(AssetLoader loader)
            : base(loader)
        {
            using (BinaryReader reader = loader.Reader) {
                Version = (MessageVersion)reader.ReadInt32();

                int fileLength, addonOffset = -1;
                int count;
                Codex <MessageItem> items = new Codex <MessageItem>();
                Items = items;

                switch (MajorVersion)
                {
                case 3:
                    fileLength = reader.ReadUInt16() + 6;
                    count      = reader.ReadUInt16();
                    break;

                case 4:
                    addonOffset = reader.ReadUInt16() + 6;
                    Unknowns.ReadInt16s(reader, 1);
                    count = reader.ReadUInt16();
                    break;

                case 5:
                    addonOffset = reader.ReadInt32() + 6;
                    count       = reader.ReadUInt16();
                    break;

                default:
                    throw new NotImplementedException("Unimplemented version " + Version);
                }

                for (int index = 0; index < count; index++)
                {
                    MessageItem item = new MessageItem(this, index, loader);
                    items.Add(item);
                    AddChild(item);
                }

                foreach (MessageItem item in items)
                {
                    item.ReadText(reader);
                }

                if (addonOffset >= 0)
                {
                    reader.BaseStream.Position = addonOffset;
                    foreach (MessageItem item in items)
                    {
                        item.ReadAddOn(reader);
                    }
                }
            }
        }
Example #17
0
            internal Strings(Script script, ScriptBlock block, AssetLoader loader)
                : base(script, block)
            {
                Codex <string> list = new Codex <string>();

                Values = list;
                while (loader.Position < block.EndOffset)
                {
                    list.Add(loader.Reader.ReadStringz(Encoding.ASCII));
                }
            }
Example #18
0
            internal Locals(Script script, ScriptBlock block, AssetLoader loader)
                : base(script, block)
            {
                Codex <ushort> values = new Codex <ushort>(block.ContentSize / 2);

                Values = values;
                for (int index = 0; index < block.ContentSize / 2; index++)
                {
                    values.Add(loader.Reader.ReadUInt16());
                }
            }
Example #19
0
        protected virtual void OnSelected(int gx, int gy, int idx, RuneCodexEntry entry)
        {
            if (DoubleClicked && Codex.Recall(User, entry, true))
            {
                Minimized = true;
                Refresh(true);
                return;
            }

            Refresh(true);
        }
Example #20
0
        Lover(Stream stream, LoverDirection direction, ByteOrder defaultByteOrder, Encoding encoding, bool keepOpen = false)
        {
            this.direction = direction;
            Combinator = IsLoading ? LoaderCombinator : SaverCombinator;
            this.stream = stream;
            DefaultByteOrder = defaultByteOrder;
            Encoding = encoding;
            KeepOpen = keepOpen;

            if (IsLoading)
                SectionsMutable = new Codex<LoverSection>();
        }
Example #21
0
        public LuaFunction(BinaryReader reader, LuaModule module)
        {
            Module = module;

            Source = module.ReadString(reader);
            LineDefined = module.ReadInt(reader);
            UpValueCount = reader.ReadByte();
            ParameterCount = reader.ReadByte();
            HasVariableArguments = reader.ReadByte() != 0;
            MaxStackSize = reader.ReadByte();

            var lineInfoCount = module.ReadInt(reader);
            LineInfo = new Codex<int>(reader.ReadArrayInt32(lineInfoCount));

            var localVariableCount = module.ReadInt(reader);
            LuaLocalVariable[] localVariables = new LuaLocalVariable[localVariableCount];
            for (int index = 0; index < localVariableCount; index++)
                localVariables[index] = new LuaLocalVariable(reader, this);
            LocalVariables = new Codex<LuaLocalVariable>(localVariables);

            var upValueCount = module.ReadInt(reader);
            string[] upValues = new string[upValueCount];
            for (int index = 0; index < upValueCount; index++)
                upValues[index] = module.ReadString(reader);
            UpValues = new Codex<string>(upValues);

            var constantCount = module.ReadInt(reader);
            Codex<object> constants = new Codex<object>(constantCount);
            Constants = constants;
            for (int index = 0; index < constantCount; index++) {
                LuaType type = (LuaType)reader.ReadByte();

                switch (type) {
                    case LuaType.Nil: break;
                    case LuaType.Boolean: constants.Add(reader.ReadByte() != 0); break;
                    case LuaType.Number: constants.Add(module.ReadNumber(reader)); break;
                    case LuaType.String: constants.Add(module.ReadString(reader)); break;
                    default: throw new NotSupportedException();
                }
            }

            var functionCount = module.ReadInt(reader);
            LuaFunction[] functions = new LuaFunction[functionCount];
            for (int index = 0; index < functionCount; index++)
                functions[index] = new LuaFunction(reader, index, this);
            Closures = new Codex<LuaFunction>(functions);

            var codeCount = module.ReadInt(reader);
            LuaInstruction[] code = new LuaInstruction[codeCount];
            for (int index = 0; index < codeCount; index++)
                code[index] = new LuaInstruction(this, module.ReadInstructionCode(reader));
            Instructions = new Codex<LuaInstruction>(code);
        }
Example #22
0
        internal Picture(AssetLoader loader)
            : base(loader)
        {
            BinaryReader reader = loader.Reader;
            ushort       check  = reader.ReadUInt16();
            Codex <PictureInstruction> instructions = new Codex <PictureInstruction>();
            Codex <PictureCel>         cels         = new Codex <PictureCel>();

            if (check == 0x0E)               // VGA picture
            {
                int celCount = reader.ReadUInt16();
                Unknowns.ReadInt16s(reader, 1);                 // 0x2A
                int paletteOffset = reader.ReadInt32();
                Dimensions = new Vector2i(reader.ReadUInt16(), reader.ReadUInt16());

                reader.BaseStream.Position = paletteOffset;
                Palette = new Palette(loader);
                AddChild(Palette);

                for (int celIndex = 0; celIndex < celCount; celIndex++)
                {
                    PictureCel cel = new PictureCel(this, celIndex, loader);

                    cels.Add(cel);
                    AddChild(cel);
                    instructions.Add(new PictureInstruction.DrawCel(cel));
                }
            }
            else
            {
                Dimensions = new Vector2i(320, 190);
                reader.BaseStream.Seek(-2, SeekOrigin.Current);
                byte[] data   = reader.ReadBytes(checked ((int)reader.BaseStream.Length));
                Stream stream = new MemoryStream(data, false);
                PicturePatternFlags patternFlags = PicturePatternFlags.None;
                byte patternNumber = 0;

                while (true)
                {
                    PictureInstruction instruction = PictureInstruction.ReadInstruction(stream, ref patternFlags, ref patternNumber);
                    instructions.Add(instruction);
                    if (instruction.IsQuit)
                    {
                        break;
                    }
                }
            }

            Cels         = cels;
            Instructions = instructions;
        }
Example #23
0
        Lover(Stream stream, LoverDirection direction, ByteOrder defaultByteOrder, Encoding encoding, bool keepOpen = false)
        {
            this.direction   = direction;
            Combinator       = IsLoading ? LoaderCombinator : SaverCombinator;
            this.stream      = stream;
            DefaultByteOrder = defaultByteOrder;
            Encoding         = encoding;
            KeepOpen         = keepOpen;

            if (IsLoading)
            {
                SectionsMutable = new Codex <LoverSection>();
            }
        }
Example #24
0
    protected override void Awake()
    {
        base.Awake();

        inv = GetComponent <Inventory>();

        input       = new InputController(sensitivity);
        controller  = new PlayerController(input, GetComponent <Rigidbody>(), GetComponent <GravityObject>(), GetComponent <Animator>(), GetComponent <Collider>());
        cam         = new PlayerCamera(input, transform, cameraOffset);
        inventory   = new PlayerInventory(input, cam, GetComponentInChildren <InvArm>());
        interaction = new PlayerInteraction(this, input, cam, inv);
        mechanics   = new PlayerMechanics(this, input, interaction, toolbar);
        codex       = new Codex(codexParent);
    }
Example #25
0
    static GameObject CreateCodexPrefab(string prefabPath)
    {
        GameObject codexGo = new GameObject("Codex");
        Codex      codex   = codexGo.AddComponent <Codex>();

        ReloadCreaturePool(codex);
        ReloadDNAPool(codex);
        UpdateCodex(codex);

        GameObject prefab = PrefabUtility.CreatePrefab(prefabPath, codexGo, ReplacePrefabOptions.Default);

        GameObject.DestroyImmediate(codexGo);
        return(prefab);
    }
Example #26
0
        public static Models.Codex Load(ulong nodeId)
        {
            Codex result;

            if (idMap.TryGetValue(nodeId, out result))
            {
                return(result);
            }

            GomObject obj = DataObjectModel.GetObject(nodeId);
            Codex     cdx = new Codex();

            return(Load(cdx, obj));
        }
Example #27
0
        public static Models.Codex Load(string fqn)
        {
            Codex result;

            if (nameMap.TryGetValue(fqn, out result))
            {
                return(result);
            }

            GomObject obj = DataObjectModel.GetObject(fqn);
            Codex     cdx = new Codex();

            return(Load(cdx, obj));
        }
Example #28
0
        internal Codex <MCGTable1> GetTable1Slice(int count, int offset)
        {
            if (offset < Table1Offset || offset + count * MCGTable1.DataSize > Table2Offset || (offset - Table1Offset) % MCGTable1.DataSize != 0)
            {
                throw new InvalidDataException();
            }
            int start = (offset - Table1Offset) / MCGTable1.DataSize;
            Codex <MCGTable1> table = new Codex <MCGTable1>(count);

            for (int index = 0; index < count; index++)
            {
                table.Add(Table1[start + index]);
            }
            return(table);
        }
Example #29
0
        internal Message(AssetLoader loader)
            : base(loader)
        {
            using (BinaryReader reader = loader.Reader) {
                Version = (MessageVersion)reader.ReadInt32();

                int fileLength, addonOffset = -1;
                int count;
                Codex<MessageItem> items = new Codex<MessageItem>();
                Items = items;

                switch (MajorVersion) {
                    case 3:
                        fileLength = reader.ReadUInt16() + 6;
                        count = reader.ReadUInt16();
                        break;

                    case 4:
                        addonOffset = reader.ReadUInt16() + 6;
                        Unknowns.ReadInt16s(reader, 1);
                        count = reader.ReadUInt16();
                        break;

                    case 5:
                        addonOffset = reader.ReadInt32() + 6;
                        count = reader.ReadUInt16();
                        break;

                    default:
                        throw new NotImplementedException("Unimplemented version " + Version);
                }

                for (int index = 0; index < count; index++) {
                    MessageItem item = new MessageItem(this, index, loader);
                    items.Add(item);
                    AddChild(item);
                }

                foreach (MessageItem item in items)
                    item.ReadText(reader);

                if (addonOffset >= 0) {
                    reader.BaseStream.Position = addonOffset;
                    foreach (MessageItem item in items)
                        item.ReadAddOn(reader);
                }
            }
        }
Example #30
0
        internal Palette(AssetLoader loader)
            : base(loader)
        {
            BinaryReader reader = loader.Reader;

            Unknowns.ReadBytes(reader, 25);            // Offset 0-24
            int firstIndex = reader.ReadByte();        // Offset 25-25

            Unknowns.ReadBytes(reader, 3);             // Offset 26-28
            int count = reader.ReadUInt16();           // Offset 29-30

            Unknowns.ReadBytes(reader, 1);             // Offset 31-31
            byte format = reader.ReadByte();           // Offset 32-32

            Unknowns.ReadBytes(reader, 4);             // Offset 33-36
            // Offset 37

            PaletteColor[] colors = new PaletteColor[count];
            Colors     = new ReadOnlyCollection <PaletteColor>(colors);
            FlatColors = new Codex <Color>(256);
            for (int index = 0; index < firstIndex; index++)
            {
                FlatColors.Add(Color.Purple);
            }
            for (int index = 0; index < count; index++)
            {
                PaletteColor color;

                switch (format)
                {
                case 0:                         // Variable (byte used, byte red, byte green, byte blue)
                    color = new PaletteColor(reader.ReadByte() != 0, reader.ReadByte(), reader.ReadByte(), reader.ReadByte());
                    break;

                case 1:                         // Constant (byte red, byte green, byte blue)
                    color = new PaletteColor(reader.ReadByte(), reader.ReadByte(), reader.ReadByte());
                    break;

                default:
                    throw new NotImplementedException();
                }

                colors[index] = color;
                FlatColors.Add(color);
            }

            PaletteAsset = new PaletteAsset(Manager, Name ?? "Palette", FlatColors);
        }
Example #31
0
        internal ModelMesh(FolderAsset folder, int index, AssetLoader loader)
            : base(folder, index, loader)
        {
            var reader = loader.Reader;

            Unknowns.ReadInt32s(reader, 1);             // 1?
            MaterialIndex = reader.ReadInt32();
            reader.RequireZeroes(4 * 2);
            Unknowns.ReadInt32s(reader, 1);             // 0 or 1, seems to be material-related but is not transparency; second seems bones-related
            int boneCount = reader.ReadInt32();

            reader.RequireZeroes(4 * 1);
            int boneIndicesOffset = reader.ReadInt32();

            PartCount = reader.ReadInt32();
            int partIndicesOffset = reader.ReadInt32();

            reader.Require(1);
            int indexOffset = reader.ReadInt32();

            long reset = reader.BaseStream.Position;

            reader.BaseStream.Position = boneIndicesOffset;
            var bones = new Codex <ModelBone>();

            Bones = bones;
            for (int i = 0; i < boneCount; i++)
            {
                bones.Add(Model.Bones[reader.ReadInt32()]);
            }

            // Read the part indices.
            reader.BaseStream.Position = partIndicesOffset;
            int partStart = PartStartIndex;

            for (int i = 0; i < PartCount; i++)
            {
                reader.Require(i + partStart);
            }

            reader.BaseStream.Position = indexOffset;
            reader.Require(Index);

            reader.BaseStream.Position = reset;
        }
Example #32
0
        internal Effect(AssetLoader loader)
            : base(loader)
        {
            var reader = loader.Reader;

            loader.ExpectMagic(Magic);
            loader.Expect(0x10000);
            loader.Expect(ContentStart);

            int           offsetOffset  = reader.ReadInt32();
            int           pointerCount  = reader.ReadInt32();
            HashSet <int> pointers      = new HashSet <int>();
            int           functionCount = reader.ReadInt32();
            HashSet <int> functions     = new HashSet <int>();

            loader.Position = offsetOffset;
            for (int index = 0; index < pointerCount; index++)
            {
                pointers.Add(reader.ReadInt32());
            }
            for (int index = 0; index < functionCount; index++)
            {
                functions.Add(reader.ReadInt32());
            }

            loader.Position = ContentStart;
            int tokenCount = (offsetOffset - ContentStart) / 4;

            Tokens = new Codex <EffectToken>(tokenCount);
            for (int index = 0; index < tokenCount; index++)
            {
                Tokens.Add(new EffectToken(reader, pointers, functions));
            }
            for (int index = 0; index < tokenCount; index++)
            {
                Tokens[index].Link(Tokens);
            }

            Instructions = new Codex <EffectInstruction>();
            for (int index = 0; index < tokenCount;)
            {
                Instructions.Add(new EffectInstruction(Tokens, ref index));
            }
        }
Example #33
0
		internal Picture(AssetLoader loader)
			: base(loader) {
			BinaryReader reader = loader.Reader;
			ushort check = reader.ReadUInt16();
			Codex<PictureInstruction> instructions = new Codex<PictureInstruction>();
			Codex<PictureCel> cels = new Codex<PictureCel>();

			if (check == 0x0E) { // VGA picture
				int celCount = reader.ReadUInt16();
				Unknowns.ReadInt16s(reader, 1); // 0x2A
				int paletteOffset = reader.ReadInt32();
				Dimensions = new Vector2i(reader.ReadUInt16(), reader.ReadUInt16());

				reader.BaseStream.Position = paletteOffset;
				Palette = new Palette(loader);
				AddChild(Palette);

				for (int celIndex = 0; celIndex < celCount; celIndex++) {
					PictureCel cel = new PictureCel(this, celIndex, loader);

					cels.Add(cel);
					AddChild(cel);
					instructions.Add(new PictureInstruction.DrawCel(cel));
				}
			} else {
				Dimensions = new Vector2i(320, 190);
				reader.BaseStream.Seek(-2, SeekOrigin.Current);
				byte[] data = reader.ReadBytes(checked((int)reader.BaseStream.Length));
				Stream stream = new MemoryStream(data, false);
				PicturePatternFlags patternFlags = PicturePatternFlags.None;
				byte patternNumber = 0;

				while (true) {
					PictureInstruction instruction = PictureInstruction.ReadInstruction(stream, ref patternFlags, ref patternNumber);
					instructions.Add(instruction);
					if (instruction.IsQuit)
						break;
				}
			}

			Cels = cels;
			Instructions = instructions;
		}
Example #34
0
        /// <summary>Initialise the <see cref="Asset"/> loader.</summary>
        /// <param name="assetManager"></param>
        /// <param name="reader"></param>
        /// <param name="name"></param>
        /// <param name="fileManager">The <see cref="FileManager"/> to use to load any attached files. If this is <c>null</c> (the default), then the system file manager (<see cref="Glare.Assets.FileManager.System"/>) is used.</param>
        /// <param name="contextResource"></param>
        /// <param name="length"></param>
        public AssetLoader(AssetManager assetManager, BinaryReader reader, string name, FileManager fileManager, Asset contextResource = null, long?length = null)
        {
            if (assetManager == null)
            {
                throw new ArgumentNullException("assetManager");
            }
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            AssetManager = assetManager;
            Start        = reader.BaseStream.Position;
            Reader       = reader;
            Name         = name;
            FileManager  = fileManager ?? FileManager.System;
            Context      = contextResource;
            Length       = length.HasValue ? length.Value : reader.BaseStream.Length;
            Errors       = new Codex <AssetLoadError>();
        }
Example #35
0
        internal ViewAnimation(View view, AssetLoader loader)
            : base(loader)
        {
            BinaryReader reader = loader.Reader;

            View = view;

            var cells = new Codex <ViewCell>();

            Cells = cells;

            DataOffset = (ushort)reader.BaseStream.Position;
            var count = reader.ReadUInt16();

            Unknowns.ReadInt16s(reader, 1);
            for (int index = 0; index < count; index++)
            {
                reader.BaseStream.Position = DataOffset + 4 + index * 2;
                cells.Add(view.FindCell(loader, reader.ReadUInt16()));
            }
        }
Example #36
0
        internal ModelMesh(FolderAsset folder, int index, AssetLoader loader)
            : base(folder, index, loader)
        {
            var reader = loader.Reader;

            Unknowns.ReadInt32s(reader, 1); // 1?
            MaterialIndex = reader.ReadInt32();
            reader.RequireZeroes(4 * 2);
            Unknowns.ReadInt32s(reader, 1); // 0 or 1, seems to be material-related but is not transparency; second seems bones-related
            int boneCount = reader.ReadInt32();
            reader.RequireZeroes(4 * 1);
            int boneIndicesOffset = reader.ReadInt32();
            PartCount = reader.ReadInt32();
            int partIndicesOffset = reader.ReadInt32();
            reader.Require(1);
            int indexOffset = reader.ReadInt32();

            long reset = reader.BaseStream.Position;

            reader.BaseStream.Position = boneIndicesOffset;
            var bones = new Codex<ModelBone>();
            Bones = bones;
            for (int i = 0; i < boneCount; i++)
                bones.Add(Model.Bones[reader.ReadInt32()]);

            // Read the part indices.
            reader.BaseStream.Position = partIndicesOffset;
            int partStart = PartStartIndex;
            for (int i = 0; i < PartCount; i++)
                reader.Require(i + partStart);

            reader.BaseStream.Position = indexOffset;
            reader.Require(Index);

            reader.BaseStream.Position = reset;
        }
Example #37
0
        internal ViewAnimation(View view, AssetLoader loader)
            : base(loader)
        {
            BinaryReader reader = loader.Reader;

            View = view;

            var cells = new Codex<ViewCell>();
            Cells = cells;

            DataOffset = (ushort)reader.BaseStream.Position;
            var count = reader.ReadUInt16();
            Unknowns.ReadInt16s(reader, 1);
            for (int index = 0; index < count; index++) {
                reader.BaseStream.Position = DataOffset + 4 + index * 2;
                cells.Add(view.FindCell(loader, reader.ReadUInt16()));
            }
        }
Example #38
0
        internal Rom(AssetLoader loader)
            : base(loader)
        {
            BinaryReader reader = Reader = loader.Reader;

            Codex<RomFile> files = new Codex<RomFile>();
            Codex<RomFolder> folders = new Codex<RomFolder>();
            Files = files;
            Folders = folders;

            GameTitle = Reader.ReadStringz(12, Encoding.ASCII);
            GameCode = Reader.ReadStringz(4, Encoding.ASCII);

            // Offset 0x10
            MakerCode = Reader.ReadStringz(2, Encoding.ASCII);
            UnitCode = reader.ReadByte();
            DeviceCode = reader.ReadByte();
            CardSizeBase = reader.ReadByte();
            loader.ExpectZeroes(1, 7);
            Unknowns.ReadInt32s(reader, 1); // Usually 0, Alice in Wonderland: 3

            // Offset 0x20
            PageSize = reader.ReadInt32(); // Usually (always?) 0x4000
            Unknowns.ReadInt16s(reader, 2); // The Dark Spire: 0x800; Trauma Center: 0xF780 (-2176)
            loader.Expect(0x2000000);
            Unknowns.ReadInt32s(reader, 1); // The Dark Spire: 0x9BEF8; Trauma Center: 0x1DC518

            // Offset 0x30
            Unknowns.ReadInt32s(reader, 1); // Entry points? The Dark Spire: 0x152200; Trauma Center: 0x1E0600
            loader.Expect(0x2380000);
            loader.Expect(0x2380000);
            Unknowns.ReadInt16s(reader, 1); // The Dark Spire: 0x6F28; Trauma Center: 0x6F24
            loader.Expect((short)0x2);

            // Offset 0x40
            int fileNameTableOffset = reader.ReadInt32();
            int fileNameTableSize = reader.ReadInt32();
            int fileSizeTableOffset = reader.ReadInt32();
            int fileSizeTableSize = reader.ReadInt32();

            // Offset 0x50
            Unknowns.ReadInt32s(reader, 2, "Offset and size"); // Used in The Dark Spire, zeroes in Trauma Center.
            loader.ExpectZeroes(4, 2);

            // Offset 0x60
            Unknowns.ReadInt32s(reader, 2);
            int iconAndTitleOffset = reader.ReadInt32();
            Unknowns.ReadInt32s(reader, 1);

            // Offset 0x70
            Unknowns.ReadInt32s(reader, 2);
            loader.ExpectZeroes(4, 2);

            // Offset 0x80
            DataLength = reader.ReadInt32();
            loader.Expect(PageSize);
            Unknowns.ReadInt32s(reader, 2); // The Dark Spire: 0x4B68; 0 in Trauma Center.

            ReadIconAndTitle(iconAndTitleOffset);

            if (fileNameTableOffset > 0) {
                int folderNamesOffset = reader.ReadInt32At(fileNameTableOffset);
                reader.BaseStream.Position = fileNameTableOffset;
                int folderCount = folderNamesOffset / 8;
                for (int index = 0; index < folderCount; index++)
                    folders.Add(new RomFolder(this, index, reader));
                byte[] folderNames = reader.ReadBytes(fileNameTableSize - folderNamesOffset);

                reader.BaseStream.Position = fileSizeTableOffset;
                int fileCount = fileSizeTableSize / 8;
                for (int index = 0; index < fileCount; index++)
                    files.Add(new RomFile(this, index, reader));

                folders[0].Sort(this, "Root", folderNamesOffset, folderNames);

                FolderAsset orphanedFolders = null, orphanedFiles = null;

                foreach (RomFolder folder in folders) {
                    if (folder.Used)
                        continue;
                    if (orphanedFolders == null)
                        orphanedFolders = new FolderAsset(this, "Orphaned folder[s]");
                    folder.Sort(this, folder.Name, folderNamesOffset, folderNames);
                }

                foreach (RomFile file in files) {
                    if (file.Used)
                        continue;
                    if (orphanedFiles == null)
                        orphanedFiles = new FolderAsset(this, "Orphaned file[s]");
                    file.Sort(orphanedFiles, file.Name);
                }
            }
        }
Example #39
0
 internal Locals(Script script, ScriptBlock block, AssetLoader loader)
     : base(script, block)
 {
     Codex<ushort> values = new Codex<ushort>(block.ContentSize / 2);
     Values = values;
     for (int index = 0; index < block.ContentSize / 2; index++)
         values.Add(loader.Reader.ReadUInt16());
 }
Example #40
0
            internal Object(Script script, ScriptBlock block, AssetLoader loader)
                : base(script, block)
            {
                var reader = loader.Reader;

                loader.Expect((ushort)0x1234);
                LocalVariableOffset = reader.ReadUInt16();
                int functionSelectorListOffset = reader.ReadUInt16();

                int variableSelectorCount = reader.ReadUInt16();
                Codex<VariableSelector> variableSelectors = new Codex<VariableSelector>(variableSelectorCount);
                Variables = variableSelectors;
                for (int index = 0; index < variableSelectorCount; index++)
                    variableSelectors.Add(new VariableSelector(this, loader));

                int functionSelectorCount = reader.ReadUInt16();
                Codex<FunctionSelector> functionSelectors = new Codex<FunctionSelector>(functionSelectorCount);
                Functions = functionSelectors;
                for (int index = 0; index < functionSelectorCount; index++)
                    functionSelectors.Add(new FunctionSelector(this, loader));

                loader.Expect((ushort)0);
                for (int index = 0; index < functionSelectorCount; index++)
                    functionSelectors[index].ReadCodeOffset(loader);

                loader.ExpectPosition(block.EndOffset);
            }
Example #41
0
 internal Strings(Script script, ScriptBlock block, AssetLoader loader)
     : base(script, block)
 {
     Codex<string> list = new Codex<string>();
     Values = list;
     while (loader.Position < block.EndOffset)
         list.Add(loader.Reader.ReadStringz(Encoding.ASCII));
 }
Example #42
0
 internal Unknown(Script script, ScriptBlock block, AssetLoader loader)
     : base(script, block)
 {
     Content = new Codex<byte>(loader.Reader.ReadBytes(block.ContentSize));
 }
Example #43
0
		/// <summary>Initialise the <see cref="Asset"/> loader.</summary>
		/// <param name="assetManager"></param>
		/// <param name="reader"></param>
		/// <param name="name"></param>
		/// <param name="fileManager">The <see cref="FileManager"/> to use to load any attached files. If this is <c>null</c> (the default), then the system file manager (<see cref="Glare.Assets.FileManager.System"/>) is used.</param>
		/// <param name="contextResource"></param>
		/// <param name="length"></param>
		public AssetLoader(AssetManager assetManager, BinaryReader reader, string name, FileManager fileManager, Asset contextResource = null, long? length = null) {
			if (assetManager == null)
				throw new ArgumentNullException("assetManager");
			if (reader == null)
				throw new ArgumentNullException("reader");

			AssetManager = assetManager;
			Start = reader.BaseStream.Position;
			Reader = reader;
			Name = name;
			FileManager = fileManager ?? FileManager.System;
			Context = contextResource;
			Length = length.HasValue ? length.Value : reader.BaseStream.Length;
			Errors = new Codex<AssetLoadError>();
		}
Example #44
0
        internal Package(AssetLoader loader)
            : base(loader)
        {
            loader.MakeBigEndian();
            BinaryReader reader = Reader = loader.Reader;

            ushort versionMajor = reader.ReadUInt16();
            ushort versionMinor = reader.ReadUInt16();
            reader.RequireZeroes(4);

            int stringCount = reader.ReadInt32();
            Codex<PackageString> strings = new Codex<PackageString>(stringCount);
            for (int index = 0; index < stringCount; index++)
                strings.Add(new PackageString(this, index, reader));
            Strings = strings;

            int fileCount = reader.ReadInt32();
            for (int index = 0; index < fileCount; index++)
                new PackageFile(this, index, loader);
        }
Example #45
0
 internal void ReadDetailLevels(AssetLoader loader, int dataOffset, ArrayBackedList<byte> bufferData)
 {
     var detailLevels = new Codex<ModelDetailLevel>();
     DetailLevels = detailLevels;
     for (int index = 0; index < PartCount; index++)
         detailLevels.Add(new ModelDetailLevel(this, index, loader, dataOffset, bufferData));
 }
Example #46
0
        internal Palette(AssetLoader loader)
            : base(loader)
        {
            BinaryReader reader = loader.Reader;

            Unknowns.ReadBytes(reader, 25); // Offset 0-24
            int firstIndex = reader.ReadByte(); // Offset 25-25
            Unknowns.ReadBytes(reader, 3); // Offset 26-28
            int count = reader.ReadUInt16(); // Offset 29-30
            Unknowns.ReadBytes(reader, 1); // Offset 31-31
            byte format = reader.ReadByte(); // Offset 32-32
            Unknowns.ReadBytes(reader, 4); // Offset 33-36
            // Offset 37

            PaletteColor[] colors = new PaletteColor[count];
            Colors = new ReadOnlyCollection<PaletteColor>(colors);
            FlatColors = new Codex<Color>(256);
            for (int index = 0; index < firstIndex; index++)
                FlatColors.Add(Color.Purple);
            for (int index = 0; index < count; index++) {
                PaletteColor color;

                switch (format) {
                    case 0: // Variable (byte used, byte red, byte green, byte blue)
                        color = new PaletteColor(reader.ReadByte() != 0, reader.ReadByte(), reader.ReadByte(), reader.ReadByte());
                        break;

                    case 1: // Constant (byte red, byte green, byte blue)
                        color = new PaletteColor(reader.ReadByte(), reader.ReadByte(), reader.ReadByte());
                        break;

                    default:
                        throw new NotImplementedException();
                }

                colors[index] = color;
                FlatColors.Add(color);
            }

            PaletteAsset = new PaletteAsset(Manager, Name ?? "Palette", FlatColors);
        }
        internal ModelVertexDeclaration(FolderAsset folder, int index, AssetLoader loader)
            : base(folder, index, loader)
        {
            var reader = loader.Reader;

            int count = reader.ReadInt32();
            reader.RequireZeroes(4 * 2);
            int offset = reader.ReadInt32();
            long reset = reader.BaseStream.Position;

            reader.BaseStream.Position = offset;
            var blocks = new Codex<ModelVertexAttribute>();
            Attributes = blocks;
            for (int blockIndex = 0; blockIndex < count; blockIndex++)
                blocks.Add(new ModelVertexAttribute(this, loader, blockIndex));

            reader.BaseStream.Position = reset;
        }
Example #48
0
 /// <summary>Initialise the results.</summary>
 /// <param name="result"></param>
 /// <param name="problems"></param>
 public SaveCheckResult(bool result, params string[] problems)
 {
     Result = result;
     Problems = new Codex<string>(problems);
 }