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(); } }
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(); } }