public void TsCompanyItem858(int startOffset) { var fileOffset = startOffset + 0x34; // Set position at start of flags var dlcGuardCount = (Sector.Mapper.IsEts2) ? Common.Ets2DlcGuardCount : Common.AtsDlcGuardCount; Hidden = MemoryHelper.ReadInt8(Sector.Stream, fileOffset + 0x01) > dlcGuardCount; OverlayToken = MemoryHelper.ReadUInt64(Sector.Stream, fileOffset += 0x05); // 0x05(flags) Overlay = Sector.Mapper.LookupOverlay(OverlayToken); if (Overlay == null) { Valid = false; if (OverlayToken != 0) { Log.Msg( $"Could not find Company Overlay: '{ScsHash.TokenToString(OverlayToken)}'({OverlayToken:X}), in {Path.GetFileName(Sector.FilePath)} @ {fileOffset}"); } } Nodes.Add(MemoryHelper.ReadUInt64(Sector.Stream, fileOffset += 0x08 + 0x08)); // (prefab uid) | 0x08(OverlayToken) + 0x08(uid[0]) var count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x08 + 0x08); // count | 0x08 (uid[1] & uid[2]) count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count2 count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count3 count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count4 count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count5 count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count6 fileOffset += 0x04 + (0x08 * count); BlockSize = fileOffset - startOffset; }
public void TsCompanyItem858(int startOffset) { var fileOffset = startOffset + 0x34; // Set position at start of flags var dlcGuardCount = (Sector.Mapper.IsEts2) ? Common.Ets2DlcGuardCount : Common.AtsDlcGuardCount; Hidden = MemoryHelper.ReadInt8(Sector.Stream, fileOffset + 0x01) > dlcGuardCount; var overlayId = MemoryHelper.ReadUInt64(Sector.Stream, fileOffset += 0x05); // 0x05(flags) Overlay = Sector.Mapper.LookupOverlay(overlayId); if (Overlay == null) { Valid = false; if (overlayId != 0) { Log.Msg($"Could not find Company Overlay with id: {overlayId:X}, in {Path.GetFileName(Sector.FilePath)} @ {fileOffset}"); } } var count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x20); // count count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count2 count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count3 count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count4 count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count5 count = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * count)); // count6 fileOffset += 0x04 + (0x08 * count); BlockSize = fileOffset - startOffset; }
public void TsTriggerItem875(int startOffset) { var fileOffset = startOffset + 0x34; // Set position at start of flags var dlcGuardCount = (Sector.Mapper.IsEts2) ? Common.Ets2DlcGuardCount : Common.AtsDlcGuardCount; Hidden = MemoryHelper.ReadInt8(Sector.Stream, fileOffset + 0x01) > dlcGuardCount; var tagCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x05); // 0x05(flags) var nodeCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * tagCount)); // 0x04(nodeCount) + tags var triggerActionCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * nodeCount)); // 0x04(nodeCount) + nodeUids fileOffset += 0x04; // cursor after triggerActionCount for (var i = 0; i < triggerActionCount; i++) { var action = MemoryHelper.ReadUInt64(Sector.Stream, fileOffset); if (action == 0x18991B7A99E279C) // hud_parking { Overlay = Sector.Mapper.LookupOverlay(0x2358E762E112CD4); if (Overlay == null) { Console.WriteLine("Could not find parking overlay"); Valid = false; } } var hasOverride = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x08); // 0x08(action) fileOffset += 0x04; // set cursor after hasOverride if (hasOverride < 0) { continue; } fileOffset += 0x04 * hasOverride; // set cursor after override values var hasParameters = MemoryHelper.ReadInt32(Sector.Stream, fileOffset); fileOffset += 0x04; // set cursor after hasParameters if (hasParameters == 1) { var parametersLength = MemoryHelper.ReadInt32(Sector.Stream, fileOffset); fileOffset += 0x04 + 0x04 + parametersLength; // 0x04(parametersLength) + 0x04(padding) + text(parametersLength * 0x01) } else if (hasParameters == 3) { fileOffset += 0x08; // 0x08 (m_some_uid) } var targetTagCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset); fileOffset += 0x04 + targetTagCount * 0x08 + 0x08; // 0x04(targetTagCount) + targetTags + 0x04(m_range & some_new_value) } if (nodeCount == 1) { fileOffset += 0x04; // 0x04(m_radius) } BlockSize = fileOffset - startOffset; }
public void TsTriggerItem875(int startOffset) { var fileOffset = startOffset + 0x34; // Set position at start of flags var dlcGuardCount = (Sector.Mapper.IsEts2) ? Common.Ets2DlcGuardCount : Common.AtsDlcGuardCount; Hidden = MemoryHelper.ReadInt8(Sector.Stream, fileOffset + 0x01) > dlcGuardCount; var tagCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x05); // 0x05(flags) var nodeCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * tagCount)); // 0x04(nodeCount) + tags var triggerActionCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * nodeCount)); // 0x04(nodeCount) + nodeUids fileOffset += 0x04; // cursor after triggerActionCount for (var i = 0; i < triggerActionCount; i++) { var action = MemoryHelper.ReadUInt64(Sector.Stream, fileOffset); if (action == ScsHash.StringToToken("hud_parking")) { OverlayName = "parking_ico"; Overlay = Sector.Mapper.LookupOverlay(ScsHash.StringToToken(OverlayName)); if (Overlay == null) { Console.WriteLine("Could not find parking overlay"); Valid = false; } } var hasOverride = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x08); // 0x08(action) fileOffset += 0x04; // set cursor after hasOverride if (hasOverride < 0) { continue; } fileOffset += 0x04 * hasOverride; // set cursor after override values var parameterCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset); fileOffset += 0x04; // set cursor after parameterCount for (var j = 0; j < parameterCount; j++) { var paramLength = MemoryHelper.ReadInt32(Sector.Stream, fileOffset); fileOffset += 0x04 + 0x04 + paramLength; // 0x04(paramLength) + 0x04(padding) + (param) } var targetTagCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset); fileOffset += 0x04 + targetTagCount * 0x08 + 0x08; // 0x04(targetTagCount) + targetTags + 0x04(m_range & m_type) } if (nodeCount == 1) { fileOffset += 0x04; // 0x04(m_radius) } BlockSize = fileOffset - startOffset; }
public void TsTriggerItem829(int startOffset) { var fileOffset = startOffset + 0x34; // Set position at start of flags var dlcGuardCount = (Sector.Mapper.IsEts2) ? Common.Ets2DlcGuardCount : Common.AtsDlcGuardCount; Hidden = MemoryHelper.ReadInt8(Sector.Stream, fileOffset + 0x01) > dlcGuardCount; var tagCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x05); // 0x05(flags) var nodeCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * tagCount)); // 0x04(nodeCount) + tags var triggerActionCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04 + (0x08 * nodeCount)); // 0x04(nodeCount) + nodeUids fileOffset += 0x04; // cursor after triggerActionCount for (var i = 0; i < triggerActionCount; i++) { var action = MemoryHelper.ReadUInt64(Sector.Stream, fileOffset); if (action == ScsHash.StringToToken("hud_parking")) { OverlayName = "parking_ico"; Overlay = Sector.Mapper.LookupOverlay(ScsHash.StringToToken(OverlayName)); if (Overlay == null) { Console.WriteLine("Could not find parking overlay"); Valid = false; } } var hasOverride = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x08); // 0x08(action) if (hasOverride > 0) { fileOffset += 0x04 * hasOverride; } var hasParameters = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x04); // 0x04(hasOverride) fileOffset += 0x04; // set cursor after hasParameters if (hasParameters == 1) { var parametersLength = MemoryHelper.ReadInt32(Sector.Stream, fileOffset); fileOffset += 0x04 + 0x04 + parametersLength; // 0x04(parametersLength) + 0x04(padding) + text(parametersLength * 0x01) } else if (hasParameters == 3) { fileOffset += 0x08; // 0x08 (m_some_uid) } var targetTagCount = MemoryHelper.ReadInt32(Sector.Stream, fileOffset += 0x08); // 0x08(unk/padding) fileOffset += 0x04 + targetTagCount * 0x08; // 0x04(targetTagCount) + targetTags } fileOffset += 0x18; // 0x18(range & reset_delay & reset_distance & min_speed & max_speed & flags2) BlockSize = fileOffset - startOffset; }
public void TsFeryItem825(int startOffset) { var fileOffset = startOffset + 0x34; // Set position at start of flags Train = MemoryHelper.ReadUint8(Sector.Stream, fileOffset) != 0; if (Train) { Overlay = Sector.Mapper.LookupOverlay(ScsHash.StringToToken("train_ico")); } else { Overlay = Sector.Mapper.LookupOverlay(ScsHash.StringToToken("port_overlay")); } FerryPortId = MemoryHelper.ReadUInt64(Sector.Stream, fileOffset += 0x05); Sector.Mapper.AddFerryPortLocation(FerryPortId, X, Z); fileOffset += 0x08 + 0x1C; // 0x08(ferryPorId) + 0x1C(prefab_uid & node_uid & unloadoffset) BlockSize = fileOffset - startOffset; }