Kelsidavis-WoWee/Data/expansions/tbc/dbc_layouts.json
Kelsi e9ce062112 fix: restore correct CharSections.dbc field indices for character textures
PR #19 (572bb4ef) swapped CharSections.dbc field indices, placing
Texture1-3 at fields 4-6 and VariationIndex/ColorIndex at 8-9. Binary
analysis of the actual DBC files (Classic, TBC, Turtle — all identical
layout, no WotLK-specific override) confirms the correct order is:

  Field 4 = VariationIndex
  Field 5 = ColorIndex
  Field 6 = Texture1 (string)
  Field 7 = Texture2 (string)
  Field 8 = Texture3 (string)
  Field 9 = Flags

With the wrong indices, VariationIndex/ColorIndex reads returned string
offsets (garbage values that never matched), so all CharSections lookups
failed silently — producing white untextured character models at the
login screen and in-world.

Fixes all 4 expansion JSON layouts, hardcoded fallbacks in
character_preview.cpp, application.cpp, and character_create_screen.cpp.
Also handles the single-layer edge case (body skin only, no face/underwear)
by loading the texture directly instead of skipping compositing.
2026-03-22 15:22:25 -07:00

303 lines
5.3 KiB
JSON

{
"Spell": {
"ID": 0,
"Attributes": 5,
"AttributesEx": 6,
"IconID": 124,
"Name": 127,
"Tooltip": 154,
"Rank": 136,
"SchoolMask": 215,
"CastingTimeIndex": 22,
"PowerType": 35,
"ManaCost": 36,
"RangeIndex": 40,
"DispelType": 3
},
"SpellRange": {
"MaxRange": 4
},
"ItemDisplayInfo": {
"ID": 0,
"LeftModel": 1,
"LeftModelTexture": 3,
"InventoryIcon": 5,
"GeosetGroup1": 7,
"GeosetGroup3": 9,
"TextureArmUpper": 14,
"TextureArmLower": 15,
"TextureHand": 16,
"TextureTorsoUpper": 17,
"TextureTorsoLower": 18,
"TextureLegUpper": 19,
"TextureLegLower": 20,
"TextureFoot": 21
},
"CharSections": {
"RaceID": 1,
"SexID": 2,
"BaseSection": 3,
"VariationIndex": 4,
"ColorIndex": 5,
"Texture1": 6,
"Texture2": 7,
"Texture3": 8,
"Flags": 9
},
"SpellIcon": {
"ID": 0,
"Path": 1
},
"FactionTemplate": {
"ID": 0,
"Faction": 1,
"FactionGroup": 3,
"FriendGroup": 4,
"EnemyGroup": 5,
"Enemy0": 6,
"Enemy1": 7,
"Enemy2": 8,
"Enemy3": 9
},
"Faction": {
"ID": 0,
"ReputationRaceMask0": 2,
"ReputationRaceMask1": 3,
"ReputationRaceMask2": 4,
"ReputationRaceMask3": 5,
"ReputationBase0": 10,
"ReputationBase1": 11,
"ReputationBase2": 12,
"ReputationBase3": 13
},
"CharTitles": {
"ID": 0,
"Title": 2,
"TitleBit": 20
},
"AreaTable": {
"ID": 0,
"MapID": 1,
"ParentAreaNum": 2,
"ExploreFlag": 3
},
"CreatureDisplayInfoExtra": {
"ID": 0,
"RaceID": 1,
"SexID": 2,
"SkinID": 3,
"FaceID": 4,
"HairStyleID": 5,
"HairColorID": 6,
"FacialHairID": 7,
"EquipDisplay0": 8,
"EquipDisplay1": 9,
"EquipDisplay2": 10,
"EquipDisplay3": 11,
"EquipDisplay4": 12,
"EquipDisplay5": 13,
"EquipDisplay6": 14,
"EquipDisplay7": 15,
"EquipDisplay8": 16,
"EquipDisplay9": 17,
"EquipDisplay10": 18,
"BakeName": 20
},
"CreatureDisplayInfo": {
"ID": 0,
"ModelID": 1,
"ExtraDisplayId": 3,
"Skin1": 6,
"Skin2": 7,
"Skin3": 8
},
"TaxiNodes": {
"ID": 0,
"MapID": 1,
"X": 2,
"Y": 3,
"Z": 4,
"Name": 5,
"MountDisplayIdAllianceFallback": 12,
"MountDisplayIdHordeFallback": 13,
"MountDisplayIdAlliance": 14,
"MountDisplayIdHorde": 15
},
"TaxiPath": {
"ID": 0,
"FromNode": 1,
"ToNode": 2,
"Cost": 3
},
"TaxiPathNode": {
"ID": 0,
"PathID": 1,
"NodeIndex": 2,
"MapID": 3,
"X": 4,
"Y": 5,
"Z": 6
},
"TalentTab": {
"ID": 0,
"Name": 1,
"ClassMask": 12,
"OrderIndex": 14,
"BackgroundFile": 15
},
"Talent": {
"ID": 0,
"TabID": 1,
"Row": 2,
"Column": 3,
"RankSpell0": 4,
"PrereqTalent0": 9,
"PrereqRank0": 12
},
"SkillLineAbility": {
"SkillLineID": 1,
"SpellID": 2
},
"SkillLine": {
"ID": 0,
"Category": 1,
"Name": 3
},
"Map": {
"ID": 0,
"InternalName": 1
},
"CreatureModelData": {
"ID": 0,
"ModelPath": 2
},
"CharHairGeosets": {
"RaceID": 1,
"SexID": 2,
"Variation": 3,
"GeosetID": 4
},
"CharacterFacialHairStyles": {
"RaceID": 0,
"SexID": 1,
"Variation": 2,
"Geoset100": 3,
"Geoset300": 4,
"Geoset200": 5
},
"GameObjectDisplayInfo": {
"ID": 0,
"ModelName": 1
},
"Emotes": {
"ID": 0,
"AnimID": 2
},
"EmotesText": {
"ID": 0,
"Command": 1,
"EmoteRef": 2,
"OthersTargetTextID": 3,
"SenderTargetTextID": 5,
"OthersNoTargetTextID": 7,
"SenderNoTargetTextID": 9
},
"EmotesTextData": {
"ID": 0,
"Text": 1
},
"Light": {
"ID": 0,
"MapID": 1,
"X": 2,
"Z": 3,
"Y": 4,
"InnerRadius": 5,
"OuterRadius": 6,
"LightParamsID": 7,
"LightParamsIDRain": 8,
"LightParamsIDUnderwater": 9
},
"LightParams": {
"LightParamsID": 0
},
"LightIntBand": {
"BlockIndex": 1,
"NumKeyframes": 2,
"TimeKey0": 3,
"Value0": 19
},
"LightFloatBand": {
"BlockIndex": 1,
"NumKeyframes": 2,
"TimeKey0": 3,
"Value0": 19
},
"WorldMapArea": {
"ID": 0,
"MapID": 1,
"AreaID": 2,
"AreaName": 3,
"LocLeft": 4,
"LocRight": 5,
"LocTop": 6,
"LocBottom": 7,
"DisplayMapID": 8,
"ParentWorldMapID": 10
},
"SpellItemEnchantment": {
"ID": 0,
"Name": 8
},
"ItemSet": {
"ID": 0,
"Name": 1,
"Item0": 18,
"Item1": 19,
"Item2": 20,
"Item3": 21,
"Item4": 22,
"Item5": 23,
"Item6": 24,
"Item7": 25,
"Item8": 26,
"Item9": 27,
"Spell0": 28,
"Spell1": 29,
"Spell2": 30,
"Spell3": 31,
"Spell4": 32,
"Spell5": 33,
"Spell6": 34,
"Spell7": 35,
"Spell8": 36,
"Spell9": 37,
"Threshold0": 38,
"Threshold1": 39,
"Threshold2": 40,
"Threshold3": 41,
"Threshold4": 42,
"Threshold5": 43,
"Threshold6": 44,
"Threshold7": 45,
"Threshold8": 46,
"Threshold9": 47
},
"SpellVisual": {
"ID": 0,
"CastKit": 2,
"ImpactKit": 3,
"MissileModel": 8
},
"SpellVisualKit": {
"ID": 0,
"BaseEffect": 5,
"SpecialEffect0": 11,
"SpecialEffect1": 12,
"SpecialEffect2": 13
},
"SpellVisualEffectName": {
"ID": 0,
"FilePath": 2
}
}