- commit
- a8fc19e85f86b9127a4ee13507e6dd95b3b5e220
- parent
- 85d46b9064fd5ff121126b0384b0cbf8ad1adab0
- author
- Dami <dami.etoile@gmail.com>
| M | AGENTS.md | 6 | +++ |
| M | architecture_test.go | 14 | ++++++++ |
| M | builtinprint/ | 2 | + |
| M | catalog/ | 2 | + |
| M | fillomino/ | 6 | ++-- |
| D | game/ | 21 | ----------- |
| D | game/ | 55 | ------------------------------ |
| R | gamereg/ | 17 | +++++---- |
| R | gamereg/ | 2 | +- |
| M | hashiwokakero/ | 6 | ++-- |
| M | hitori/ | 6 | ++-- |
| M | lightsout/ | 6 | ++-- |
| M | nonogram/ | 6 | ++-- |
| M | nurikabe/ | 6 | ++-- |
| M | pdfexport/ | 2 | + |
| M | registry/ | 8 | +++-- |
| M | rippleeffect/ | 6 | ++-- |
| M | shikaku/ | 6 | ++-- |
| M | spellpuzzle/ | 6 | ++-- |
| M | spellpuzzle/ | 3 | +- |
| M | sudoku/ | 6 | ++-- |
| M | sudokurgb/ | 6 | ++-- |
| M | takuzu/ | 6 | ++-- |
| M | takuzuplus/ | 6 | ++-- |
| M | wordsearch/ | 6 | ++-- |
@@ -4,3 +4,9 @@
44 - Prefer `just test-short` for test runs.55 - Use the -short flag when testing non-generator code.66 - Use full-length tests only when validating long-running generator behavior.7+- Package map:8+- `catalog` is the pure metadata index.9+- `registry` is the concrete built-in runtime registry.10+- `gameentry` builds validated runtime entries from definitions plus modes.11+- `pdfexport` owns the printable export pipeline.12+- `builtinprint` only bootstraps built-in print adapters.@@ -36,6 +36,12 @@ func TestStorePackageDoesNotImportSchedulePackages(t *testing.T) {
3636 })3737 }3838 39+func TestGamePackageDoesNotImportPDFExport(t *testing.T) {40+ assertPackageDoesNotImport(t, "game", []string{41+ "github.com/FelineStateMachine/puzzletea/pdfexport",42+ })43+}44+3945 func TestCatalogPackageDoesNotImportConcreteGames(t *testing.T) {4046 assertPackageDoesNotImport(t, "catalog", []string{4147 "github.com/FelineStateMachine/puzzletea/fillomino",@@ -92,6 +98,14 @@ func TestPDFExportPackageDoesNotContainMarkdownParseEntrypoints(t *testing.T) {
9298 })9399 }94100 101+func TestGamePackageDoesNotExposeLegacyPrintFacade(t *testing.T) {102+ if _, err := os.Stat(filepath.Join("game", "print_adapter.go")); err == nil {103+ t.Fatal("game/print_adapter.go should not exist")104+ } else if !os.IsNotExist(err) {105+ t.Fatalf("stat game/print_adapter.go: %v", err)106+ }107+}108+95109 func assertPackageDoesNotImport(t *testing.T, dir string, forbidden []string) {96110 t.Helper()97111 @@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -58,7 +58,7 @@ var Modes = []game.Mode{
5858 NewMode("Expert 12x12", "Wide board with long deduction chains.", 12, 9, 0.52),5959 }6060 61-var ModeDefinitions = gamereg.BuildModeDefs(Modes)61+var ModeDefinitions = gameentry.BuildModeDefs(Modes)6262 6363 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{6464 Name: "Fillomino",@@ -68,7 +68,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
6868 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2, 3),6969 })7070 71-var Entry = gamereg.NewEntry(gamereg.EntrySpec{71+var Entry = gameentry.NewEntry(gameentry.EntrySpec{7272 Definition: Definition,7373 Help: HelpContent,7474 Import: game.AdaptImport(ImportModel),@@ -1,21 +0,0 @@
1-package game2-3-import "github.com/FelineStateMachine/puzzletea/pdfexport"4-5-type PrintAdapter = pdfexport.PrintAdapter6-7-func RegisterPrintAdapter(adapter PrintAdapter) {8- pdfexport.RegisterPrintAdapter(adapter)9-}10-11-func LookupPrintAdapter(gameType string) (PrintAdapter, bool) {12- return pdfexport.LookupPrintAdapter(gameType)13-}14-15-func HasPrintAdapter(gameType string) bool {16- return pdfexport.HasPrintAdapter(gameType)17-}18-19-func IsNilPrintPayload(payload any) bool {20- return pdfexport.IsNilPrintPayload(payload)21-}@@ -1,55 +0,0 @@
1-package game2-3-import (4- "testing"5-6- "codeberg.org/go-pdf/fpdf"7-)8-9-type testPrintAdapter struct {10- canonical string11- aliases []string12-}13-14-func (a testPrintAdapter) CanonicalGameType() string { return a.canonical }15-func (a testPrintAdapter) Aliases() []string { return a.aliases }16-func (a testPrintAdapter) BuildPDFPayload([]byte) (any, error) { return nil, nil }17-func (a testPrintAdapter) RenderPDFBody(*fpdf.Fpdf, any) error { return nil }18-19-func TestPrintAdapterRegistryLookupAndAliases(t *testing.T) {20- adapter := testPrintAdapter{21- canonical: "Test Word Search",22- aliases: []string{"testwordsearch", "test-word-search"},23- }24- RegisterPrintAdapter(adapter)25-26- if !HasPrintAdapter("Test Word Search") {27- t.Fatal("expected canonical lookup to be supported")28- }29- if !HasPrintAdapter("test_word_search") {30- t.Fatal("expected underscore alias lookup to be supported")31- }32- if !HasPrintAdapter("testwordsearch") {33- t.Fatal("expected compact alias lookup to be supported")34- }35- if HasPrintAdapter("lights out") {36- t.Fatal("expected unknown type to be unsupported")37- }38-}39-40-func TestRegisterPrintAdapterSkipsBlankCanonical(t *testing.T) {41- RegisterPrintAdapter(testPrintAdapter{canonical: " "})42- if HasPrintAdapter("should-not-exist") {43- t.Fatal("blank canonical adapter should not create lookups")44- }45-}46-47-func TestIsNilPrintPayload(t *testing.T) {48- var ptr *int49- if !IsNilPrintPayload(ptr) {50- t.Fatal("expected typed nil pointer to be treated as nil payload")51- }52- if IsNilPrintPayload(5) {53- t.Fatal("expected concrete payload to be non-nil")54- }55-}@@ -1,9 +1,12 @@
1-package gamereg1+// Package gameentry builds concrete runtime game entries from puzzle definitions2+// and runtime mode implementations.3+package gameentry24 35 import (46 "fmt"57 68 "github.com/FelineStateMachine/puzzletea/game"9+ "github.com/FelineStateMachine/puzzletea/pdfexport"710 "github.com/FelineStateMachine/puzzletea/puzzle"811 )912 @@ -18,7 +21,7 @@ type Entry struct {
1821 Help string1922 Import func([]byte) (game.Gamer, error)2023 Modes []ModeEntry21- Print game.PrintAdapter24+ Print pdfexport.PrintAdapter2225 }2326 2427 type EntrySpec struct {@@ -26,7 +29,7 @@ type EntrySpec struct {
2629 Help string2730 Import func([]byte) (game.Gamer, error)2831 Modes []game.Mode29- Print game.PrintAdapter32+ Print pdfexport.PrintAdapter3033 }3134 3235 func BuildModeDefs(modes []game.Mode) []puzzle.ModeDef {@@ -47,7 +50,7 @@ func BuildModeDefs(modes []game.Mode) []puzzle.ModeDef {
4750 func NewEntry(spec EntrySpec) Entry {4851 if len(spec.Definition.Modes) != len(spec.Modes) {4952 panic(fmt.Sprintf(50- "gamereg: definition %q has %d mode definitions but %d runtime modes",53+ "gameentry: definition %q has %d mode definitions but %d runtime modes",5154 spec.Definition.Name,5255 len(spec.Definition.Modes),5356 len(spec.Modes),@@ -59,7 +62,7 @@ func NewEntry(spec EntrySpec) Entry {
5962 spawner, ok := mode.(game.Spawner)6063 if !ok {6164 panic(fmt.Sprintf(62- "gamereg: definition %q mode %q does not implement game.Spawner",65+ "gameentry: definition %q mode %q does not implement game.Spawner",6366 spec.Definition.Name,6467 mode.Title(),6568 ))@@ -68,7 +71,7 @@ func NewEntry(spec EntrySpec) Entry {
6871 modeDef := spec.Definition.Modes[i]6972 if modeDef.Title != mode.Title() || modeDef.Description != mode.Description() {7073 panic(fmt.Sprintf(71- "gamereg: definition %q mode %d metadata does not match runtime mode %q",74+ "gameentry: definition %q mode %d metadata does not match runtime mode %q",7275 spec.Definition.Name,7376 i,7477 mode.Title(),@@ -84,7 +87,7 @@ func NewEntry(spec EntrySpec) Entry {
8487 }8588 if entry.Definition.Seeded != (entry.Seeded != nil) {8689 panic(fmt.Sprintf(87- "gamereg: definition %q mode %q seeded flag does not match runtime mode",90+ "gameentry: definition %q mode %q seeded flag does not match runtime mode",8891 spec.Definition.Name,8992 modeDef.Title,9093 ))@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -67,7 +67,7 @@ var Modes = []game.Mode{
6767 NewMode("Hard 13x13", "13x13 grid with 59-68 islands.", 13, 13, 59, 68),6868 }6969 70-var ModeDefinitions = gamereg.BuildModeDefs(Modes)70+var ModeDefinitions = gameentry.BuildModeDefs(Modes)7171 7272 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{7373 Name: "Hashiwokakero",@@ -77,7 +77,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
7777 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 3, 1),7878 })7979 80-var Entry = gamereg.NewEntry(gamereg.EntrySpec{80+var Entry = gameentry.NewEntry(gameentry.EntrySpec{8181 Definition: Definition,8282 Help: HelpContent,8383 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -57,7 +57,7 @@ var Modes = []game.Mode{
5757 NewMode("Expert", "12\u00d712 grid, maximum challenge.", 12, 0.28),5858 }5959 60-var ModeDefinitions = gamereg.BuildModeDefs(Modes)60+var ModeDefinitions = gameentry.BuildModeDefs(Modes)6161 6262 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{6363 Name: "Hitori",@@ -66,7 +66,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
6666 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2),6767 })6868 69-var Entry = gamereg.NewEntry(gamereg.EntrySpec{69+var Entry = gameentry.NewEntry(gameentry.EntrySpec{7070 Definition: Definition,7171 Help: HelpContent,7272 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -46,7 +46,7 @@ var Modes = []game.Mode{
4646 NewMode("Extreme", "9x9 grid", 9, 9),4747 }4848 49-var ModeDefinitions = gamereg.BuildModeDefs(Modes)49+var ModeDefinitions = gameentry.BuildModeDefs(Modes)5050 5151 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{5252 Name: "Lights Out",@@ -56,7 +56,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
5656 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2),5757 })5858 59-var Entry = gamereg.NewEntry(gamereg.EntrySpec{59+var Entry = gameentry.NewEntry(gameentry.EntrySpec{6060 Definition: Definition,6161 Help: HelpContent,6262 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -60,7 +60,7 @@ var Modes = []game.Mode{
6060 NewMode("Massive", "20x20 grid, ~56% filled. Truly massive puzzle.", 20, 20, 0.56),6161 }6262 63-var ModeDefinitions = gamereg.BuildModeDefs(Modes)63+var ModeDefinitions = gameentry.BuildModeDefs(Modes)6464 6565 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{6666 Name: "Nonogram",@@ -69,7 +69,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
6969 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 3, 4),7070 })7171 72-var Entry = gamereg.NewEntry(gamereg.EntrySpec{72+var Entry = gameentry.NewEntry(gameentry.EntrySpec{7373 Definition: Definition,7474 Help: HelpContent,7575 Import: game.AdaptImport(ImportModel),@@ -7,7 +7,7 @@ import (
77 "math/rand/v2"88 99 "github.com/FelineStateMachine/puzzletea/game"10- "github.com/FelineStateMachine/puzzletea/gamereg"10+ "github.com/FelineStateMachine/puzzletea/gameentry"1111 "github.com/FelineStateMachine/puzzletea/puzzle"1212 )1313 @@ -75,7 +75,7 @@ var Modes = []game.Mode{
7575 NewMode("Expert", "12x12 grid, sparse clues and long chains.", 12, 12, 0.14, 12),7676 }7777 78-var ModeDefinitions = gamereg.BuildModeDefs(Modes)78+var ModeDefinitions = gameentry.BuildModeDefs(Modes)7979 8080 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{8181 Name: "Nurikabe",@@ -85,7 +85,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
8585 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2),8686 })8787 88-var Entry = gamereg.NewEntry(gamereg.EntrySpec{88+var Entry = gameentry.NewEntry(gameentry.EntrySpec{8989 Definition: Definition,9090 Help: HelpContent,9191 Import: game.AdaptImport(ImportModel),@@ -1,3 +1,5 @@
1+// Package registry is the concrete runtime composition root for built-in games,2+// imports, help text, and daily-capable modes.13 package registry24 35 import (@@ -6,7 +8,7 @@ import (
68 "github.com/FelineStateMachine/puzzletea/catalog"79 "github.com/FelineStateMachine/puzzletea/fillomino"810 "github.com/FelineStateMachine/puzzletea/game"9- "github.com/FelineStateMachine/puzzletea/gamereg"11+ "github.com/FelineStateMachine/puzzletea/gameentry"1012 "github.com/FelineStateMachine/puzzletea/hashiwokakero"1113 "github.com/FelineStateMachine/puzzletea/hitori"1214 "github.com/FelineStateMachine/puzzletea/lightsout"@@ -24,8 +26,8 @@ import (
2426 )2527 2628 type (27- ModeEntry = gamereg.ModeEntry28- Entry = gamereg.Entry29+ ModeEntry = gameentry.ModeEntry30+ Entry = gameentry.Entry2931 )3032 3133 type DailyEntry struct {@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -124,7 +124,7 @@ var Modes = []game.Mode{
124124 ),125125 }126126 127-var ModeDefinitions = gamereg.BuildModeDefs(Modes)127+var ModeDefinitions = gameentry.BuildModeDefs(Modes)128128 129129 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{130130 Name: "Ripple Effect",@@ -134,7 +134,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
134134 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2, 3),135135 })136136 137-var Entry = gamereg.NewEntry(gamereg.EntrySpec{137+var Entry = gameentry.NewEntry(gameentry.EntrySpec{138138 Definition: Definition,139139 Help: HelpContent,140140 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -58,7 +58,7 @@ var Modes = []game.Mode{
5858 NewMode("Expert 12x12", "12x12 grid, maximum challenge.", 12, 12, 20),5959 }6060 61-var ModeDefinitions = gamereg.BuildModeDefs(Modes)61+var ModeDefinitions = gameentry.BuildModeDefs(Modes)6262 6363 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{6464 Name: "Shikaku",@@ -68,7 +68,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
6868 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2),6969 })7070 71-var Entry = gamereg.NewEntry(gamereg.EntrySpec{71+var Entry = gameentry.NewEntry(gameentry.EntrySpec{7272 Definition: Definition,7373 Help: HelpContent,7474 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -57,7 +57,7 @@ var Modes = []game.Mode{
5757 NewMode("Hard", "9 letters, 9 board words, largest launch board.", 9, 9, 8),5858 }5959 60-var ModeDefinitions = gamereg.BuildModeDefs(Modes)60+var ModeDefinitions = gameentry.BuildModeDefs(Modes)6161 6262 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{6363 Name: "Spell Puzzle",@@ -67,7 +67,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
6767 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 0),6868 })6969 70-var Entry = gamereg.NewEntry(gamereg.EntrySpec{70+var Entry = gameentry.NewEntry(gameentry.EntrySpec{7171 Definition: Definition,7272 Help: HelpContent,7373 Import: game.AdaptImport(ImportModel),@@ -7,7 +7,6 @@ import (
77 "testing"88 "time"99 10- "github.com/FelineStateMachine/puzzletea/game"1110 "github.com/FelineStateMachine/puzzletea/pdfexport"1211 )1312 @@ -98,7 +97,7 @@ func TestSpellPuzzlePrintAdapterRegistration(t *testing.T) {
9897 pdfexport.RegisterPrintAdapter(PDFPrintAdapter)9998 10099 for _, gameType := range []string{"Spell Puzzle", "spell", "spellpuzzle"} {101- if !game.HasPrintAdapter(gameType) {100+ if !pdfexport.HasPrintAdapter(gameType) {102101 t.Fatalf("expected print adapter for %q", gameType)103102 }104103 }@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -47,7 +47,7 @@ var Modes = []game.Mode{
4747 NewMode("Diabolical", "17–21 clues. Swordfish / XY-Chains.", 17),4848 }4949 50-var ModeDefinitions = gamereg.BuildModeDefs(Modes)50+var ModeDefinitions = gameentry.BuildModeDefs(Modes)5151 5252 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{5353 Name: "Sudoku",@@ -56,7 +56,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
5656 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2),5757 })5858 59-var Entry = gamereg.NewEntry(gamereg.EntrySpec{59+var Entry = gameentry.NewEntry(gameentry.EntrySpec{6060 Definition: Definition,6161 Help: HelpContent,6262 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -47,7 +47,7 @@ var Modes = []game.Mode{
4747 NewMode("Diabolical", "30 clues. Tightest clue budget in the launch set.", 30),4848 }4949 50-var ModeDefinitions = gamereg.BuildModeDefs(Modes)50+var ModeDefinitions = gameentry.BuildModeDefs(Modes)5151 5252 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{5353 Name: "Sudoku RGB",@@ -57,7 +57,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
5757 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 1, 2),5858 })5959 60-var Entry = gamereg.NewEntry(gamereg.EntrySpec{60+var Entry = gameentry.NewEntry(gameentry.EntrySpec{6161 Definition: Definition,6262 Help: HelpContent,6363 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -54,7 +54,7 @@ var Modes = []game.Mode{
5454 NewMode("Extreme", "14×14 grid, ~28% clues. Maximum challenge.", 14, 0.28),5555 }5656 57-var ModeDefinitions = gamereg.BuildModeDefs(Modes)57+var ModeDefinitions = gameentry.BuildModeDefs(Modes)5858 5959 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{6060 Name: "Takuzu",@@ -64,7 +64,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
6464 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 2, 3),6565 })6666 67-var Entry = gamereg.NewEntry(gamereg.EntrySpec{67+var Entry = gameentry.NewEntry(gameentry.EntrySpec{6868 Definition: Definition,6969 Help: HelpContent,7070 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -58,7 +58,7 @@ var Modes = []game.Mode{
5858 NewMode("Extreme", "14×14 grid, maximum size with additive relation clues.", 14, 0.28, modeProfiles[6]),5959 }6060 61-var ModeDefinitions = gamereg.BuildModeDefs(Modes)61+var ModeDefinitions = gameentry.BuildModeDefs(Modes)6262 6363 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{6464 Name: "Takuzu+",@@ -68,7 +68,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
6868 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 2, 3),6969 })7070 71-var Entry = gamereg.NewEntry(gamereg.EntrySpec{71+var Entry = gameentry.NewEntry(gameentry.EntrySpec{7272 Definition: Definition,7373 Help: HelpContent,7474 Import: game.AdaptImport(ImportModel),@@ -5,7 +5,7 @@ import (
55 "math/rand/v2"66 77 "github.com/FelineStateMachine/puzzletea/game"8- "github.com/FelineStateMachine/puzzletea/gamereg"8+ "github.com/FelineStateMachine/puzzletea/gameentry"99 "github.com/FelineStateMachine/puzzletea/puzzle"1010 )1111 @@ -56,7 +56,7 @@ var Modes = []game.Mode{
5656 NewMode("Hard 20x20", "Find 15 words in a 20x20 grid.", 20, 20, 15, 5, 10, []Direction{Right, Down, DownRight, DownLeft, Left, Up, UpRight, UpLeft}),5757 }5858 59-var ModeDefinitions = gamereg.BuildModeDefs(Modes)59+var ModeDefinitions = gameentry.BuildModeDefs(Modes)6060 6161 var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{6262 Name: "Word Search",@@ -66,7 +66,7 @@ var Definition = puzzle.NewDefinition(puzzle.DefinitionSpec{
6666 DailyModeIDs: puzzle.SelectModeIDsByIndex(ModeDefinitions, 0),6767 })6868 69-var Entry = gamereg.NewEntry(gamereg.EntrySpec{69+var Entry = gameentry.NewEntry(gameentry.EntrySpec{7070 Definition: Definition,7171 Help: HelpContent,7272 Import: game.AdaptImport(ImportModel),