Пример #1
0
            internal Instruction(BinaryReaderEx br, GameType game, OffsetsContainer offsets)
            {
                Bank = br.ReadInt32();
                ID   = br.ReadInt32();

                long argsLength = ReadIntW(br, game != GameType.DS1);
                long argsOffset = br.ReadInt32();

                if (game != GameType.DS1)
                {
                    br.AssertInt32(0);
                }

                if (game != GameType.DS3)
                {
                    br.AssertInt32(0);
                }

                br.StepIn(offsets.ArgsBlockOffset + argsOffset);
                {
                    Args = br.ReadBytes((int)argsLength);
                }
                br.StepOut();

                long layerOffset = ReadIntW(br, game != GameType.DS1);

                if (layerOffset != -1)
                {
                    br.StepIn(offsets.EventLayersOffset + layerOffset);
                    {
                        Layer = new EventLayer(br, game);
                    }
                    br.StepOut();
                }
            }
Пример #2
0
            internal Event(BinaryReaderEx br, GameType game, OffsetsContainer offsets)
            {
                ID = ReadIntW(br, game != GameType.DS1);
                long instructionCount  = ReadIntW(br, game != GameType.DS1);
                long instructionOffset = ReadIntW(br, game != GameType.DS1);
                long parametersCount   = ReadIntW(br, game != GameType.DS1);
                long parametersOffset;

                if (game == GameType.DS1)
                {
                    parametersOffset = br.ReadInt32();
                }
                else if (game == GameType.BB)
                {
                    parametersOffset = br.ReadInt32();
                    br.AssertInt32(0);
                }
                else if (game == GameType.DS3)
                {
                    parametersOffset = br.ReadInt64();
                }
                else
                {
                    throw new NotImplementedException("Sekiro \"futureproof\".");
                }

                RestBehavior = br.ReadEnum32 <RestBehaviorType>();
                br.AssertInt32(0);

                br.StepIn(offsets.InstructionsOffset + instructionOffset);
                {
                    Instructions = new List <Instruction>((int)instructionCount);
                    for (int i = 0; i < instructionCount; i++)
                    {
                        Instructions.Add(new Instruction(br, game, offsets));
                    }
                }
                br.StepOut();

                if (parametersOffset > 0)
                {
                    br.StepIn(offsets.ParametersOffset + parametersOffset);
                    {
                        Parameters = new List <Parameter>((int)parametersCount);
                        for (int i = 0; i < parametersCount; i++)
                        {
                            Parameters.Add(new Parameter(br, game));
                        }
                    }
                    br.StepOut();
                }
            }