diff --git a/d2common/d2resource/resource_paths.go b/d2common/d2resource/resource_paths.go index 412d7142..837edccc 100644 --- a/d2common/d2resource/resource_paths.go +++ b/d2common/d2resource/resource_paths.go @@ -188,6 +188,7 @@ const ( LevelSubstitutions = "/data/global/excel/LvlSub.txt" ObjectDetails = "/data/global/excel/Objects.txt" + ObjectMode = "/data/global/excel/ObjMode.txt" SoundSettings = "/data/global/excel/Sounds.txt" ItemStatCost = "/data/global/excel/ItemStatCost.txt" ItemRatio = "/data/global/excel/itemratio.txt" @@ -229,6 +230,8 @@ const ( CompCode = "/data/global/excel/compcode.txt" Belts = "/data/global/excel/belts.txt" Gamble = "/data/global/excel/gamble.txt" + Colors = "/data/global/excel/colors.txt" + StorePage = "/data/global/excel/StorePage.txt" // --- Animations --- diff --git a/d2core/d2asset/asset_manager.go b/d2core/d2asset/asset_manager.go index 442dc34b..2e596d3b 100644 --- a/d2core/d2asset/asset_manager.go +++ b/d2core/d2asset/asset_manager.go @@ -89,6 +89,7 @@ func (am *AssetManager) initDataDictionaries() error { d2resource.MagicSuffix, d2resource.ItemStatCost, d2resource.ItemRatio, + d2resource.StorePage, d2resource.Overlays, d2resource.CharStats, d2resource.Hireling, @@ -135,6 +136,7 @@ func (am *AssetManager) initDataDictionaries() error { d2resource.RarePrefix, d2resource.RareSuffix, d2resource.Events, + d2resource.Colors, } for _, path := range dictPaths { diff --git a/d2core/d2records/color_loader.go b/d2core/d2records/color_loader.go new file mode 100644 index 00000000..398530dc --- /dev/null +++ b/d2core/d2records/color_loader.go @@ -0,0 +1,30 @@ +package d2records + +import ( + "log" + + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2txt" +) + +func colorsLoader(r *RecordManager, d *d2txt.DataDictionary) error { + records := make(Colors) + + for d.Next() { + record := &ColorRecord{ + TransformColor: d.String("Transform Color"), + Code: d.String("Code"), + } + + records[record.TransformColor] = record + } + + if d.Err != nil { + panic(d.Err) + } + + r.Colors = records + + log.Printf("Loaded %d Color records", len(records)) + + return nil +} diff --git a/d2core/d2records/color_record.go b/d2core/d2records/color_record.go new file mode 100644 index 00000000..d9b7d825 --- /dev/null +++ b/d2core/d2records/color_record.go @@ -0,0 +1,8 @@ +package d2records + +type Colors map[string]*ColorRecord + +type ColorRecord struct { + TransformColor string + Code string +} diff --git a/d2core/d2records/object_mode_loader.go b/d2core/d2records/object_mode_loader.go new file mode 100644 index 00000000..8c80ecae --- /dev/null +++ b/d2core/d2records/object_mode_loader.go @@ -0,0 +1,30 @@ +package d2records + +import ( + "log" + + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2txt" +) + +func objectModesLoader(r *RecordManager, d *d2txt.DataDictionary) error { + records := make(ObjectModes) + + for d.Next() { + record := &ObjectModeRecord{ + Name: d.String("Name"), + Token: d.String("Token"), + } + + records[record.Name] = record + } + + if d.Err != nil { + panic(d.Err) + } + + r.Object.Modes = records + + log.Printf("Loaded %d ObjectMode records", len(records)) + + return nil +} diff --git a/d2core/d2records/object_mode_record.go b/d2core/d2records/object_mode_record.go new file mode 100644 index 00000000..31ac1740 --- /dev/null +++ b/d2core/d2records/object_mode_record.go @@ -0,0 +1,8 @@ +package d2records + +type ObjectModes map[string]*ObjectModeRecord + +type ObjectModeRecord struct { + Name string + Token string +} diff --git a/d2core/d2records/record_manager.go b/d2core/d2records/record_manager.go index 6429e8c1..873db806 100644 --- a/d2core/d2records/record_manager.go +++ b/d2core/d2records/record_manager.go @@ -43,6 +43,7 @@ type RecordManager struct { Stats CharStats } ComponentCodes + Colors DifficultyLevels ElemTypes Gamble @@ -81,6 +82,7 @@ type RecordManager struct { TreasureClass Types ItemTypes Unique UniqueItems + StorePages } Layout struct { Inventory @@ -121,6 +123,7 @@ type RecordManager struct { Object struct { Details ObjectDetails Lookup IndexedObjects + Modes ObjectModes Shrines Types ObjectTypes } @@ -147,11 +150,13 @@ func (r *RecordManager) init() error { {d2resource.LevelWarp, levelWarpsLoader}, {d2resource.ObjectType, objectTypesLoader}, {d2resource.ObjectDetails, objectDetailsLoader}, + {d2resource.ObjectMode, objectModesLoader}, {d2resource.Weapons, weaponsLoader}, {d2resource.Armor, armorLoader}, {d2resource.Misc, miscItemsLoader}, {d2resource.Books, booksLoader}, {d2resource.Belts, beltsLoader}, + {d2resource.Colors, colorsLoader}, {d2resource.ItemTypes, itemTypesLoader}, // WARN: needs to be after weapons, armor, and misc {d2resource.UniqueItems, uniqueItemsLoader}, {d2resource.Missiles, missilesLoader}, @@ -166,6 +171,7 @@ func (r *RecordManager) init() error { {d2resource.MagicSuffix, magicSuffixLoader}, {d2resource.ItemStatCost, itemStatCostLoader}, {d2resource.ItemRatio, itemRatioLoader}, + {d2resource.StorePage, storePagesLoader}, {d2resource.Overlays, overlaysLoader}, {d2resource.CharStats, charStatsLoader}, {d2resource.Gamble, gambleLoader}, diff --git a/d2core/d2records/storepage_loader.go b/d2core/d2records/storepage_loader.go new file mode 100644 index 00000000..b0c4141b --- /dev/null +++ b/d2core/d2records/storepage_loader.go @@ -0,0 +1,29 @@ +package d2records + +import ( + "log" + + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2txt" +) + +func storePagesLoader(r *RecordManager, d *d2txt.DataDictionary) error { + records := make(StorePages) + + for d.Next() { + record := &StorePageRecord{ + StorePage: d.String("Store Page"), + Code: d.String("Code"), + } + records[record.StorePage] = record + } + + if d.Err != nil { + panic(d.Err) + } + + r.Item.StorePages = records + + log.Printf("Loaded %d StorePage records", len(records)) + + return nil +} diff --git a/d2core/d2records/storepage_record.go b/d2core/d2records/storepage_record.go new file mode 100644 index 00000000..2447b1df --- /dev/null +++ b/d2core/d2records/storepage_record.go @@ -0,0 +1,10 @@ +package d2records + +// StorePages struct contains all store page records +type StorePages map[string]*StorePageRecord + +// StorePageRecords represent a row in the storepage.txt file +type StorePageRecord struct { + StorePage string + Code string +}