mdb: package for interacting with game's local database

This commit is contained in:
2026-06-02 12:39:58 -04:00
parent 96503e40f6
commit f40fea0ec5
28 changed files with 2906 additions and 3 deletions

345
mdb/spark_test.go Normal file
View File

@@ -0,0 +1,345 @@
package mdb_test
import (
_ "embed"
"testing"
"github.com/google/go-cmp/cmp"
"git.sunturtle.xyz/zephyr/horse"
"git.sunturtle.xyz/zephyr/horse/mdb"
)
//go:embed testdata/spark.sql
var sparkSQL string
func TestSparks(t *testing.T) {
db := testdb(t.Context(), "file:TestSparks?mode=memory&cache=shared", sparkSQL)
got, err := mdb.Sparks(t.Context(), db)
if err != nil {
t.Error(err)
}
want := []horse.Spark{
{
ID: 101,
Name: "Speed",
Description: "A Spark that increases Speed.",
Group: 1,
Rarity: 1,
Type: 1,
Effects: [][]horse.SparkEffect{
{{Target: 1, Value1: 1}},
{{Target: 1, Value1: 4}},
{{Target: 1, Value1: 7}},
{{Target: 1, Value1: 10}},
{{Target: 1, Value1: 13}},
{{Target: 1, Value1: 16}},
{{Target: 1, Value1: 19}},
{{Target: 1, Value1: 22}},
{{Target: 1, Value1: 25}},
{{Target: 1, Value1: 28}},
},
},
{
ID: 102,
Name: "Speed",
Description: "A Spark that increases Speed.",
Group: 1,
Rarity: 2,
Type: 1,
Effects: [][]horse.SparkEffect{
{{Target: 1, Value1: 1}},
{{Target: 1, Value1: 4}},
{{Target: 1, Value1: 7}},
{{Target: 1, Value1: 10}},
{{Target: 1, Value1: 13}},
{{Target: 1, Value1: 16}},
{{Target: 1, Value1: 19}},
{{Target: 1, Value1: 22}},
{{Target: 1, Value1: 25}},
{{Target: 1, Value1: 28}},
},
},
{
ID: 103,
Name: "Speed",
Description: "A Spark that increases Speed.",
Group: 1,
Rarity: 3,
Type: 1,
Effects: [][]horse.SparkEffect{
{{Target: 1, Value1: 1}},
{{Target: 1, Value1: 4}},
{{Target: 1, Value1: 7}},
{{Target: 1, Value1: 10}},
{{Target: 1, Value1: 13}},
{{Target: 1, Value1: 16}},
{{Target: 1, Value1: 19}},
{{Target: 1, Value1: 22}},
{{Target: 1, Value1: 25}},
{{Target: 1, Value1: 28}},
},
},
{
ID: 201,
Name: "Stamina",
Description: "A Spark that increases Stamina.",
Group: 2,
Rarity: 1,
Type: 1,
Effects: [][]horse.SparkEffect{
{{Target: 2, Value1: 1}},
{{Target: 2, Value1: 4}},
{{Target: 2, Value1: 7}},
{{Target: 2, Value1: 10}},
{{Target: 2, Value1: 13}},
{{Target: 2, Value1: 16}},
{{Target: 2, Value1: 19}},
{{Target: 2, Value1: 22}},
{{Target: 2, Value1: 25}},
{{Target: 2, Value1: 28}},
},
},
{
ID: 202,
Name: "Stamina",
Description: "A Spark that increases Stamina.",
Group: 2,
Rarity: 2,
Type: 1,
Effects: [][]horse.SparkEffect{
{{Target: 2, Value1: 1}},
{{Target: 2, Value1: 4}},
{{Target: 2, Value1: 7}},
{{Target: 2, Value1: 10}},
{{Target: 2, Value1: 13}},
{{Target: 2, Value1: 16}},
{{Target: 2, Value1: 19}},
{{Target: 2, Value1: 22}},
{{Target: 2, Value1: 25}},
{{Target: 2, Value1: 28}},
},
},
{
ID: 203,
Name: "Stamina",
Description: "A Spark that increases Stamina.",
Group: 2,
Rarity: 3,
Type: 1,
Effects: [][]horse.SparkEffect{
{{Target: 2, Value1: 1}},
{{Target: 2, Value1: 4}},
{{Target: 2, Value1: 7}},
{{Target: 2, Value1: 10}},
{{Target: 2, Value1: 13}},
{{Target: 2, Value1: 16}},
{{Target: 2, Value1: 19}},
{{Target: 2, Value1: 22}},
{{Target: 2, Value1: 25}},
{{Target: 2, Value1: 28}},
},
},
{
ID: 1101,
Name: "Turf",
Description: "A Spark that increases Turf Aptitude.",
Group: 11,
Rarity: 1,
Type: 2,
Effects: [][]horse.SparkEffect{
{{Target: 11, Value1: 1}},
{{Target: 11, Value1: 2}},
},
},
{
ID: 1102,
Name: "Turf",
Description: "A Spark that increases Turf Aptitude.",
Group: 11,
Rarity: 2,
Type: 2,
Effects: [][]horse.SparkEffect{
{{Target: 11, Value1: 1}},
{{Target: 11, Value1: 2}},
},
},
{
ID: 1103,
Name: "Turf",
Description: "A Spark that increases Turf Aptitude.",
Group: 11,
Rarity: 3,
Type: 2,
Effects: [][]horse.SparkEffect{
{{Target: 11, Value1: 1}},
{{Target: 11, Value1: 2}},
},
},
{
ID: 1000101,
Name: "February S.",
Description: `A Spark that increases Power and gives a skill hint for "Winter Runner ○".`,
Group: 10001,
Rarity: 1,
Type: 5,
Effects: [][]horse.SparkEffect{
{{Target: 3, Value1: 3}, {Target: 41, Value1: 200202, Value2: 1}},
{{Target: 3, Value1: 6}, {Target: 41, Value1: 200202, Value2: 1}},
{{Target: 3, Value1: 9}, {Target: 41, Value1: 200202, Value2: 1}},
},
},
{
ID: 1000102,
Name: "February S.",
Description: `A Spark that increases Power and gives a skill hint for "Winter Runner ○".`,
Group: 10001,
Rarity: 2,
Type: 5,
Effects: [][]horse.SparkEffect{
{{Target: 3, Value1: 3}, {Target: 41, Value1: 200202, Value2: 1}},
{{Target: 3, Value1: 6}, {Target: 41, Value1: 200202, Value2: 1}},
{{Target: 3, Value1: 9}, {Target: 41, Value1: 200202, Value2: 1}},
},
},
{
ID: 1000103,
Name: "February S.",
Description: `A Spark that increases Power and gives a skill hint for "Winter Runner ○".`,
Group: 10001,
Rarity: 3,
Type: 5,
Effects: [][]horse.SparkEffect{
{{Target: 3, Value1: 3}, {Target: 41, Value1: 200202, Value2: 1}},
{{Target: 3, Value1: 6}, {Target: 41, Value1: 200202, Value2: 1}},
{{Target: 3, Value1: 9}, {Target: 41, Value1: 200202, Value2: 1}},
},
},
{
ID: 2000101,
Name: "Right-Handed ○",
Description: `A Spark that gives a skill hint for "Right-Handed ○".`,
Group: 20001,
Rarity: 1,
Type: 4,
Effects: [][]horse.SparkEffect{
{{Target: 41, Value1: 200012, Value2: 1}},
{{Target: 41, Value1: 200012, Value2: 2}},
{{Target: 41, Value1: 200012, Value2: 3}},
{{Target: 41, Value1: 200012, Value2: 4}},
{{Target: 41, Value1: 200012, Value2: 5}},
},
},
{
ID: 2000102,
Name: "Right-Handed ○",
Description: `A Spark that gives a skill hint for "Right-Handed ○".`,
Group: 20001,
Rarity: 2,
Type: 4,
Effects: [][]horse.SparkEffect{
{{Target: 41, Value1: 200012, Value2: 1}},
{{Target: 41, Value1: 200012, Value2: 2}},
{{Target: 41, Value1: 200012, Value2: 3}},
{{Target: 41, Value1: 200012, Value2: 4}},
{{Target: 41, Value1: 200012, Value2: 5}},
},
},
{
ID: 2000103,
Name: "Right-Handed ○",
Description: `A Spark that gives a skill hint for "Right-Handed ○".`,
Group: 20001,
Rarity: 3,
Type: 4,
Effects: [][]horse.SparkEffect{
{{Target: 41, Value1: 200012, Value2: 1}},
{{Target: 41, Value1: 200012, Value2: 2}},
{{Target: 41, Value1: 200012, Value2: 3}},
{{Target: 41, Value1: 200012, Value2: 4}},
{{Target: 41, Value1: 200012, Value2: 5}},
},
},
{
ID: 3000101,
Name: "URA Finale",
Description: `A Spark that increases Speed and Stamina.`,
Group: 30001,
Rarity: 1,
Type: 6,
Effects: [][]horse.SparkEffect{
{{Target: 1, Value1: 10}, {Target: 2, Value1: 10}},
{{Target: 1, Value1: 20}, {Target: 2, Value1: 20}},
{{Target: 1, Value1: 30}, {Target: 2, Value1: 30}},
},
},
{
ID: 3000102,
Name: "URA Finale",
Description: `A Spark that increases Speed and Stamina.`,
Group: 30001,
Rarity: 2,
Type: 6,
Effects: [][]horse.SparkEffect{
{{Target: 1, Value1: 10}, {Target: 2, Value1: 10}},
{{Target: 1, Value1: 20}, {Target: 2, Value1: 20}},
{{Target: 1, Value1: 30}, {Target: 2, Value1: 30}},
},
},
{
ID: 3000103,
Name: "URA Finale",
Description: `A Spark that increases Speed and Stamina.`,
Group: 30001,
Rarity: 3,
Type: 6,
Effects: [][]horse.SparkEffect{
{{Target: 1, Value1: 10}, {Target: 2, Value1: 10}},
{{Target: 1, Value1: 20}, {Target: 2, Value1: 20}},
{{Target: 1, Value1: 30}, {Target: 2, Value1: 30}},
},
},
{
ID: 10010101,
Name: "Shooting Star",
Description: `A Spark that gives a skill hint for "Shooting Star".`,
Group: 100101,
Rarity: 1,
Type: 3,
Effects: [][]horse.SparkEffect{
{{Target: 41, Value1: 900011, Value2: 1}},
{{Target: 41, Value1: 900011, Value2: 2}},
{{Target: 41, Value1: 900011, Value2: 3}},
},
},
{
ID: 10010102,
Name: "Shooting Star",
Description: `A Spark that gives a skill hint for "Shooting Star".`,
Group: 100101,
Rarity: 2,
Type: 3,
Effects: [][]horse.SparkEffect{
{{Target: 41, Value1: 900011, Value2: 1}},
{{Target: 41, Value1: 900011, Value2: 2}},
{{Target: 41, Value1: 900011, Value2: 3}},
},
},
{
ID: 10010103,
Name: "Shooting Star",
Description: `A Spark that gives a skill hint for "Shooting Star".`,
Group: 100101,
Rarity: 3,
Type: 3,
Effects: [][]horse.SparkEffect{
{{Target: 41, Value1: 900011, Value2: 1}},
{{Target: 41, Value1: 900011, Value2: 2}},
{{Target: 41, Value1: 900011, Value2: 3}},
},
},
}
if diff := cmp.Diff(want, got); diff != "" {
t.Errorf("wrong sparks (+got/-want):\n%s", diff)
}
}