Remove global palettes; everything goes through d2asset now (#322)

* Configuration cleanup

* Cleanup

* remove global palettes
This commit is contained in:
Alex Yatskov 2020-02-26 19:46:47 -08:00 committed by GitHub
parent 1011b2f030
commit 664b8416f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 43 additions and 125 deletions

View File

@ -1,28 +0,0 @@
package d2datadict
import (
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dat"
)
// PaletteType represents a palette
type PaletteRec struct {
Name d2enum.PaletteType
Colors [256]d2dat.DATColor
}
var Palettes map[d2enum.PaletteType]PaletteRec
// CreatePalette creates a palette
func CreatePalette(name d2enum.PaletteType, data []byte) PaletteRec {
palette, _ := d2dat.LoadDAT(data)
return PaletteRec{Name: name, Colors: palette.Colors}
}
func LoadPalette(paletteType d2enum.PaletteType, file []byte) {
if Palettes == nil {
Palettes = make(map[d2enum.PaletteType]PaletteRec)
}
palette := CreatePalette(paletteType, file)
Palettes[paletteType] = palette
}

View File

@ -1,43 +0,0 @@
package d2enum
// PaletteType represents a named palette
type PaletteType string
const (
// Act1 palette
Act1 PaletteType = "act1"
// Act2 palette
Act2 PaletteType = "act2"
// Act3 palette
Act3 PaletteType = "act3"
// Act4 palette
Act4 PaletteType = "act4"
// Act5 palette
Act5 PaletteType = "act5"
// EndGame palette
EndGame PaletteType = "endgame"
// EndGame2 palette
EndGame2 PaletteType = "endgame2"
// Fechar palette
Fechar PaletteType = "fechar"
// Loading palette
Loading PaletteType = "loading"
// Menu0 palette
Menu0 PaletteType = "menu0"
// Menu1 palette
Menu1 PaletteType = "menu1"
// Menu2 palette
Menu2 PaletteType = "menu2"
// Menu3 palette
Menu3 PaletteType = "menu3"
// Menu4 palette
Menu4 PaletteType = "menu4"
// Sky palette
Sky PaletteType = "sky"
// Static palette
Static PaletteType = "static"
// Trademark palette
Trademark PaletteType = "trademark"
// Units palette
Units PaletteType = "units"
)

View File

@ -35,7 +35,7 @@ func (am *animationManager) loadAnimation(animationPath, palettePath string, tra
return nil, err
}
palette, err := loadPalette(palettePath)
palette, err := LoadPalette(palettePath)
if err != nil {
return nil, err
}
@ -50,7 +50,7 @@ func (am *animationManager) loadAnimation(animationPath, palettePath string, tra
return nil, err
}
palette, err := loadPalette(palettePath)
palette, err := LoadPalette(palettePath)
if err != nil {
return nil, err
}

View File

@ -4,7 +4,6 @@ import (
"errors"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2cof"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dat"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dc6"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dcc"
)
@ -22,11 +21,6 @@ type assetManager struct {
fontManager *fontManager
}
func loadPalette(palettePath string) (*d2dat.DATPalette, error) {
verifyWasInit()
return singleton.paletteManager.loadPalette(palettePath)
}
func loadDC6(dc6Path string) (*d2dc6.DC6File, error) {
dc6Data, err := LoadFile(dc6Path)
if err != nil {

View File

@ -4,6 +4,7 @@ import (
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dat"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2config"
@ -109,6 +110,11 @@ func LoadFont(tablePath, spritePath, palettePath string) (*Font, error) {
return singleton.fontManager.loadFont(tablePath, spritePath, palettePath)
}
func LoadPalette(palettePath string) (*d2dat.DATPalette, error) {
verifyWasInit()
return singleton.paletteManager.loadPalette(palettePath)
}
func verifyWasInit() {
if singleton == nil {
panic(ErrNotInit)

View File

@ -1,15 +1,16 @@
package d2map
import (
"errors"
"image/color"
"log"
"math"
"math/rand"
"strconv"
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dat"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2ds1"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dt1"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
@ -81,7 +82,7 @@ type MapRegion struct {
levelPreset d2datadict.LevelPresetRecord
tiles []d2dt1.Tile
ds1 *d2ds1.DS1
palette d2datadict.PaletteRec
palette *d2dat.DATPalette
startX float64
startY float64
imageCacheRecords map[uint32]d2render.Surface
@ -99,10 +100,7 @@ func loadRegion(seed int64, tileOffsetX, tileOffsetY int, levelType d2enum.Regio
seed: seed,
}
region.palette = d2datadict.Palettes[d2enum.PaletteType("act"+strconv.Itoa(region.levelType.Act))]
if levelType == d2enum.RegionAct5Lava {
region.palette = d2datadict.Palettes[d2enum.PaletteType("act4")]
}
region.palette, _ = loadPaletteForAct(levelType)
for _, levelTypeDt1 := range region.levelType.Files {
if len(levelTypeDt1) != 0 && levelTypeDt1 != "" && levelTypeDt1 != "0" {
@ -823,6 +821,7 @@ func (mr *MapRegion) decodeTileGfxData(blocks []d2dt1.Block, pixels *[]byte, til
colorIndex := block.EncodedData[idx]
if colorIndex != 0 {
pixelColor := mr.palette.Colors[colorIndex]
offset := 4 * (((blockY + y + tileYOffset) * tileWidth) + (blockX + x))
(*pixels)[offset] = pixelColor.R
(*pixels)[offset+1] = pixelColor.G
@ -838,3 +837,33 @@ func (mr *MapRegion) decodeTileGfxData(blocks []d2dt1.Block, pixels *[]byte, til
}
}
}
func loadPaletteForAct(levelType d2enum.RegionIdType) (*d2dat.DATPalette, error) {
var palettePath string
switch levelType {
case d2enum.RegionAct1Town, d2enum.RegionAct1Wilderness, d2enum.RegionAct1Cave, d2enum.RegionAct1Crypt,
d2enum.RegionAct1Monestary, d2enum.RegionAct1Courtyard, d2enum.RegionAct1Barracks,
d2enum.RegionAct1Jail, d2enum.RegionAct1Cathedral, d2enum.RegionAct1Catacombs, d2enum.RegionAct1Tristram:
palettePath = d2resource.PaletteAct1
break
case d2enum.RegionAct2Town, d2enum.RegionAct2Sewer, d2enum.RegionAct2Harem, d2enum.RegionAct2Basement,
d2enum.RegionAct2Desert, d2enum.RegionAct2Tomb, d2enum.RegionAct2Lair, d2enum.RegionAct2Arcane:
palettePath = d2resource.PaletteAct2
break
case d2enum.RegionAct3Town, d2enum.RegionAct3Jungle, d2enum.RegionAct3Kurast, d2enum.RegionAct3Spider,
d2enum.RegionAct3Dungeon, d2enum.RegionAct3Sewer:
palettePath = d2resource.PaletteAct3
break
case d2enum.RegionAct4Town, d2enum.RegionAct4Mesa, d2enum.RegionAct4Lava, d2enum.RegionAct5Lava:
palettePath = d2resource.PaletteAct4
break
case d2enum.RegonAct5Town, d2enum.RegionAct5Siege, d2enum.RegionAct5Barricade, d2enum.RegionAct5Temple,
d2enum.RegionAct5IceCaves, d2enum.RegionAct5Baal:
palettePath = d2resource.PaletteAct5
break
default:
return nil, errors.New("failed to find palette for region")
}
return d2asset.LoadPalette(palettePath)
}

40
main.go
View File

@ -18,7 +18,6 @@ import (
"github.com/OpenDiablo2/OpenDiablo2/d2common"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2gamescene"
@ -179,10 +178,6 @@ func initialize() error {
return err
}
if err := loadPalettes(); err != nil {
return err
}
if err := loadStrings(); err != nil {
return err
}
@ -370,41 +365,6 @@ func renderDebug(target d2render.Surface) error {
return nil
}
func loadPalettes() error {
palNames := []string{
"act1",
"act2",
"act3",
"act4",
"act5",
"endgame",
"endgame2",
"fechar",
"loading",
"menu0",
"menu1",
"menu2",
"menu3",
"menu4",
"sky",
"static",
"trademark",
"units",
}
for _, pal := range palNames {
file, err := d2asset.LoadFile(`data\global\palette\` + pal + `\pal.dat`)
if err != nil {
return err
}
d2datadict.LoadPalette(d2enum.PaletteType(pal), file)
}
log.Printf("Loaded %d palettes", len(d2datadict.Palettes))
return nil
}
func loadDataDict() error {
entries := []struct {
path string