package d2records import ( "log" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2txt" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum" ) func levelDetailsLoader(r *RecordManager, d *d2txt.DataDictionary) error { records := make(LevelDetails) for d.Next() { record := &LevelDetailsRecord{ Name: d.String("Name "), ID: d.Number("Id"), Palette: d.Number("Pal"), Act: d.Number("Act"), QuestFlag: d.Number("QuestFlag"), QuestFlagExpansion: d.Number("QuestFlagEx"), AutomapIndex: d.Number("Layer"), SizeXNormal: d.Number("SizeX"), SizeYNormal: d.Number("SizeY"), SizeXNightmare: d.Number("SizeX(N)"), SizeYNightmare: d.Number("SizeY(N)"), SizeXHell: d.Number("SizeX(H)"), SizeYHell: d.Number("SizeY(H)"), WorldOffsetX: d.Number("OffsetX"), WorldOffsetY: d.Number("OffsetY"), DependantLevelID: d.Number("Depend"), TeleportFlag: d2enum.TeleportFlag(d.Number("Teleport")), EnableRain: d.Number("Rain") > 0, EnableMud: d.Number("Mud") > 0, EnablePerspective: d.Number("NoPer") > 0, EnableLineOfSightDraw: d.Number("LOSDraw") > 0, EnableFloorFliter: d.Number("FloorFilter") > 0, EnableBlankScreen: d.Number("BlankScreen") > 0, EnableDrawEdges: d.Number("DrawEdges") > 0, IsInside: d.Number("IsInside") > 0, LevelGenerationType: d2enum.LevelGenerationType(d.Number("DrlgType")), LevelType: d.Number("LevelType"), SubType: d.Number("SubType"), SubTheme: d.Number("SubTheme"), SubWaypoint: d.Number("SubWaypoint"), SubShrine: d.Number("SubShrine"), LevelLinkID0: d.Number("Vis0"), LevelLinkID1: d.Number("Vis1"), LevelLinkID2: d.Number("Vis2"), LevelLinkID3: d.Number("Vis3"), LevelLinkID4: d.Number("Vis4"), LevelLinkID5: d.Number("Vis5"), LevelLinkID6: d.Number("Vis6"), LevelLinkID7: d.Number("Vis7"), WarpGraphicsID0: d.Number("Warp0"), WarpGraphicsID1: d.Number("Warp1"), WarpGraphicsID2: d.Number("Warp2"), WarpGraphicsID3: d.Number("Warp3"), WarpGraphicsID4: d.Number("Warp4"), WarpGraphicsID5: d.Number("Warp5"), WarpGraphicsID6: d.Number("Warp6"), WarpGraphicsID7: d.Number("Warp7"), LightIntensity: d.Number("Intensity"), Red: d.Number("Red"), Green: d.Number("Green"), Blue: d.Number("Blue"), PortalEnable: d.Number("Portal") > 0, PortalRepositionEnable: d.Number("Position") > 0, SaveMonsterStates: d.Number("SaveMonsters") > 0, SaveMerchantStates: d.Number("SaveMonsters") > 0, QuestID: d.Number("Quest"), WarpClearanceDistance: d.Number("WarpDist"), MonsterLevelNormal: d.Number("MonLvl1"), MonsterLevelNightmare: d.Number("MonLvl2"), MonsterLevelHell: d.Number("MonLvl3"), MonsterLevelNormalEx: d.Number("MonLvl1Ex"), MonsterLevelNightmareEx: d.Number("MonLvl2Ex"), MonsterLevelHellEx: d.Number("MonLvl3Ex"), MonsterDensityNormal: d.Number("MonDen"), MonsterDensityNightmare: d.Number("MonDen(N)"), MonsterDensityHell: d.Number("MonDen(H)"), MonsterUniqueMinNormal: d.Number("MonUMin"), MonsterUniqueMinNightmare: d.Number("MonUMin(N)"), MonsterUniqueMinHell: d.Number("MonUMin(H)"), MonsterUniqueMaxNormal: d.Number("MonUMax"), MonsterUniqueMaxNightmare: d.Number("MonUMax(N)"), MonsterUniqueMaxHell: d.Number("MonUMax(H)"), MonsterWanderEnable: d.Number("MonWndr") > 0, MonsterSpecialWalk: d.Number("MonSpcWalk") > 0, NumMonsterTypes: d.Number("NumMon"), MonsterID1Normal: d.String("mon1"), MonsterID2Normal: d.String("mon2"), MonsterID3Normal: d.String("mon3"), MonsterID4Normal: d.String("mon4"), MonsterID5Normal: d.String("mon5"), MonsterID6Normal: d.String("mon6"), MonsterID7Normal: d.String("mon7"), MonsterID8Normal: d.String("mon8"), MonsterID9Normal: d.String("mon9"), MonsterID10Normal: d.String("mon10"), MonsterID1Nightmare: d.String("nmon1"), MonsterID2Nightmare: d.String("nmon2"), MonsterID3Nightmare: d.String("nmon3"), MonsterID4Nightmare: d.String("nmon4"), MonsterID5Nightmare: d.String("nmon5"), MonsterID6Nightmare: d.String("nmon6"), MonsterID7Nightmare: d.String("nmon7"), MonsterID8Nightmare: d.String("nmon8"), MonsterID9Nightmare: d.String("nmon9"), MonsterID10Nightmare: d.String("nmon10"), MonsterID1Hell: d.String("nmon1"), MonsterID2Hell: d.String("nmon2"), MonsterID3Hell: d.String("nmon3"), MonsterID4Hell: d.String("nmon4"), MonsterID5Hell: d.String("nmon5"), MonsterID6Hell: d.String("nmon6"), MonsterID7Hell: d.String("nmon7"), MonsterID8Hell: d.String("nmon8"), MonsterID9Hell: d.String("nmon9"), MonsterID10Hell: d.String("nmon10"), MonsterPreferRanged: d.Number("rangedspawn") > 0, MonsterUniqueID1: d.String("umon1"), MonsterUniqueID2: d.String("umon2"), MonsterUniqueID3: d.String("umon3"), MonsterUniqueID4: d.String("umon4"), MonsterUniqueID5: d.String("umon5"), MonsterUniqueID6: d.String("umon6"), MonsterUniqueID7: d.String("umon7"), MonsterUniqueID8: d.String("umon8"), MonsterUniqueID9: d.String("umon9"), MonsterUniqueID10: d.String("umon10"), MonsterCritterID1: d.String("cmon1"), MonsterCritterID2: d.String("cmon2"), MonsterCritterID3: d.String("cmon3"), MonsterCritterID4: d.String("cmon4"), MonsterCritter1SpawnChance: d.Number("cpct1"), MonsterCritter2SpawnChance: d.Number("cpct2"), MonsterCritter3SpawnChance: d.Number("cpct3"), MonsterCritter4SpawnChance: d.Number("cpct4"), SoundEnvironmentID: d.Number("SoundEnv"), WaypointID: d.Number("Waypoint"), LevelDisplayName: d.String("LevelName"), LevelWarpName: d.String("LevelWarp"), TitleImageName: d.String("EntryFile"), ObjectGroupID0: d.Number("ObjGrp0"), ObjectGroupID1: d.Number("ObjGrp1"), ObjectGroupID2: d.Number("ObjGrp2"), ObjectGroupID3: d.Number("ObjGrp3"), ObjectGroupID4: d.Number("ObjGrp4"), ObjectGroupID5: d.Number("ObjGrp5"), ObjectGroupID6: d.Number("ObjGrp6"), ObjectGroupID7: d.Number("ObjGrp7"), ObjectGroupSpawnChance0: d.Number("ObjPrb0"), ObjectGroupSpawnChance1: d.Number("ObjPrb1"), ObjectGroupSpawnChance2: d.Number("ObjPrb2"), ObjectGroupSpawnChance3: d.Number("ObjPrb3"), ObjectGroupSpawnChance4: d.Number("ObjPrb4"), ObjectGroupSpawnChance5: d.Number("ObjPrb5"), ObjectGroupSpawnChance6: d.Number("ObjPrb6"), ObjectGroupSpawnChance7: d.Number("ObjPrb7"), } records[record.ID] = record } if d.Err != nil { return d.Err } log.Printf("Loaded %d LevelDetails records", len(records)) r.Level.Details = records return nil }