diff --git a/v3/wc24data/header.go b/v3/wc24data/header.go index 7fee0712..59649be8 100644 --- a/v3/wc24data/header.go +++ b/v3/wc24data/header.go @@ -17,7 +17,8 @@ type Header struct { ManufacturerTableOffset uint32 NumberOfTitles uint32 TitleTableOffset uint32 - _ [8]byte + NumberOfNewTitles uint32 + NewTitleTableOffset uint32 NumberOfVideos uint32 VideoTableOffset uint32 NumberOfDemos uint32 @@ -54,6 +55,8 @@ func (w *WC24Data) MakeHeader() { ManufacturerTableOffset: 0, NumberOfTitles: 0, TitleTableOffset: 0, + NumberOfNewTitles: 0, + NewTitleTableOffset: 0, NumberOfVideos: 0, VideoTableOffset: 0, NumberOfDemos: 0, diff --git a/v3/wc24data/titles.go b/v3/wc24data/titles.go index da8a5efa..cef3e0f9 100644 --- a/v3/wc24data/titles.go +++ b/v3/wc24data/titles.go @@ -6,11 +6,12 @@ import ( "NintendoChannel/gametdb" "encoding/binary" "encoding/hex" - "github.com/mitchellh/go-wordwrap" "math" "strconv" "strings" "unicode/utf16" + + "github.com/mitchellh/go-wordwrap" ) type Company struct { @@ -549,6 +550,21 @@ func SetGenre(game *gametdb.Game) [3]byte { return genre } +func (w *WC24Data) MakeNewTitleTable() { + w.Header.NewTitleTableOffset = w.GetCurrentSize() + + titleSize := uint32(binary.Size(Title{})) + for i, title := range w.TitleTable { + if title.ReleaseYear != 0xFFFF && title.ReleaseMonth != 0xFF && + title.ReleaseDay != 0xFF && title.ReleaseYear >= 2019 { + offset := w.Header.TitleTableOffset + uint32(i)*titleSize + w.NewTitleTable = append(w.NewTitleTable, offset) + } + } + + w.Header.NumberOfNewTitles = uint32(len(w.NewTitleTable)) +} + func GetRatingID(rating gametdb.Rating) uint8 { if rating.Value == "" { // Default to E/7/B diff --git a/v3/wc24data/wc24data.go b/v3/wc24data/wc24data.go index 0d03c041..5224b8ad 100644 --- a/v3/wc24data/wc24data.go +++ b/v3/wc24data/wc24data.go @@ -8,13 +8,14 @@ import ( "context" "encoding/binary" "fmt" - "github.com/SketchMaster2001/libwc24crypt" - "github.com/jackc/pgx/v5/pgxpool" - "github.com/wii-tools/lzx/lz10" "hash/crc32" "io" "os" "sync" + + "github.com/SketchMaster2001/libwc24crypt" + "github.com/jackc/pgx/v5/pgxpool" + "github.com/wii-tools/lzx/lz10" ) type WC24Data struct { @@ -22,6 +23,7 @@ type WC24Data struct { PlatformTable []Platform CompanyTable []Company TitleTable []Title + NewTitleTable []uint32 VideoTable []VideoTable ExtraBytes []uint16 @@ -75,6 +77,7 @@ func MakeList() { list.MakePlatformTable() list.MakeCompaniesTable() list.MakeTitleTable() + list.MakeNewTitleTable() list.MakeVideoTable() list.Header.Something = list.GetCurrentSize() @@ -123,6 +126,7 @@ func (w *WC24Data) WriteAll(writer io.Writer) { w.Write(writer, w.PlatformTable) w.Write(writer, w.CompanyTable) w.Write(writer, w.TitleTable) + w.Write(writer, w.NewTitleTable) w.Write(writer, w.VideoTable) w.Write(writer, w.ExtraBytes) } diff --git a/v6/dllist/titles.go b/v6/dllist/titles.go index a11131c8..3a0d36c3 100644 --- a/v6/dllist/titles.go +++ b/v6/dllist/titles.go @@ -5,6 +5,7 @@ import ( "NintendoChannel/constants" "NintendoChannel/gametdb" "NintendoChannel/v6/info" + "encoding/binary" "encoding/hex" "hash/crc32" "math" @@ -402,10 +403,18 @@ func (l *List) SetGenre(game *gametdb.Game) [3]byte { } func (l *List) MakeNewTitleTable() { - // TODO: Figure out a way to get the newest titles l.Header.NewTitleTableOffset = l.GetCurrentSize() - l.NewTitleTable = append(l.NewTitleTable, l.Header.TitleTableOffset) - l.Header.NumberOfNewTitleTables = 1 + + titleSize := uint32(binary.Size(TitleTable{})) + for i, title := range l.TitleTable { + if title.ReleaseYear != 0xFFFF && title.ReleaseMonth != 0xFF && + title.ReleaseDay != 0xFF && title.ReleaseYear >= 2019 { + offset := l.Header.TitleTableOffset + uint32(i)*titleSize + l.NewTitleTable = append(l.NewTitleTable, offset) + } + } + + l.Header.NumberOfNewTitleTables = uint32(len(l.NewTitleTable)) } func GetMedal(numberOfTimesVotes int) constants.Medal {