aboutsummaryrefslogtreecommitdiff
path: root/go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-02-05 23:14:52 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2025-08-20 15:46:40 +0200
commit4db8db0e847552077be9ebd9177ddc573c2b51d4 (patch)
tree545cec81ab1ff844a73a53577b1a9378ce1c1c0f /go
parente3e6955b60c909b6e84a233b547d08912a61a2ac (diff)
downloadmuhqs-game-4db8db0e847552077be9ebd9177ddc573c2b51d4.tar.gz
muhqs-game-4db8db0e847552077be9ebd9177ddc573c2b51d4.zip
add simple spell support
Diffstat (limited to 'go')
-rw-r--r--go/game/card.go2
-rw-r--r--go/game/cardImplementations.go10
-rw-r--r--go/game/cardParsing.go7
-rw-r--r--go/game/state.go2
4 files changed, 21 insertions, 0 deletions
diff --git a/go/game/card.go b/go/game/card.go
index 81464cce..b1d913a8 100644
--- a/go/game/card.go
+++ b/go/game/card.go
@@ -76,6 +76,7 @@ type cardImplementation interface {
fullActions(*Unit) []*FullAction
freeActions(Permanent) []*FreeAction
+ onPlay(*State, *Player, *Targets)
onPile(Permanent)
onUnpile(Permanent)
onDrop(Permanent)
@@ -90,6 +91,7 @@ type cardImplementationBase struct{}
func (*cardImplementationBase) spawnTiles(*State, *Player) []*Tile { return nil }
func (*cardImplementationBase) fullActions(*Unit) []*FullAction { return nil }
func (*cardImplementationBase) freeActions(Permanent) []*FreeAction { return nil }
+func (*cardImplementationBase) onPlay(*State, *Player, *Targets) {}
func (*cardImplementationBase) onPile(Permanent) {}
func (*cardImplementationBase) onUnpile(Permanent) {}
func (*cardImplementationBase) onDrop(Permanent) {}
diff --git a/go/game/cardImplementations.go b/go/game/cardImplementations.go
index 99994a41..271c88ea 100644
--- a/go/game/cardImplementations.go
+++ b/go/game/cardImplementations.go
@@ -62,6 +62,14 @@ func (*swordImplementation) onUnpile(p Permanent) {
}
}
+type tidesChangeImplementation struct {
+ cardImplementation
+}
+
+func (*tidesChangeImplementation) onPlay(s *State, _ *Player, _ *Targets) {
+ s.Map.redistributeStoreCards(s.Rand)
+}
+
func init() {
cardImplementations = map[string]cardImplementation{
"base/advisor": &advisorImplementation{},
@@ -69,5 +77,7 @@ func init() {
"base/sword": &swordImplementation{},
"misc/farmer": &farmerImplementation{},
+
+ "kraken/tides_change!": &tidesChangeImplementation{},
}
}
diff --git a/go/game/cardParsing.go b/go/game/cardParsing.go
index dd64c7b8..9fcb48aa 100644
--- a/go/game/cardParsing.go
+++ b/go/game/cardParsing.go
@@ -12,6 +12,7 @@ type parsedCardImplementation struct {
spawnTilesFunc func(*State, *Player) []*Tile
genFullActions func(*Unit) []*FullAction
genFreeActions func(Permanent) []*FreeAction
+ _onPlay func(*State, *Player, *Targets)
_onPile func(Permanent)
_onUnpile func(Permanent)
_onDrop func(Permanent)
@@ -38,6 +39,12 @@ func (impl *parsedCardImplementation) freeActions(p Permanent) []*FreeAction {
return nil
}
+func (impl *parsedCardImplementation) onPlay(s *State, p *Player, t *Targets) {
+ if impl._onPlay != nil {
+ impl._onPlay(s, p, t)
+ }
+}
+
func (impl *parsedCardImplementation) onPile(p Permanent) {
if impl._onPile != nil {
impl._onPile(p)
diff --git a/go/game/state.go b/go/game/state.go
index 744f0b11..87e2133a 100644
--- a/go/game/state.go
+++ b/go/game/state.go
@@ -381,6 +381,8 @@ func (s *State) resolvePlay(p *Player, c *Card, targets *Targets) {
case CardTypes.Artifact:
tile := targets.sel[0].(*Tile)
s.AddNewArtifact(c, tile.Position, p)
+ case CardTypes.Spell:
+ c.Impl.onPlay(s, p, targets)
default:
log.Printf("Resolving unhandled card type: %s\n", c.Type.String())
}