aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-09-03 12:37:04 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2025-09-03 12:39:42 +0200
commit1f6b30ebec826fe886829c2618ed0b109009e3b8 (patch)
tree56fb8874083f1168292d748e9b6b59e283720e5c
parentfb755f3d325720b1e42df5bea049781b538afa5c (diff)
downloadmuhqs-game-1f6b30ebec826fe886829c2618ed0b109009e3b8.tar.gz
muhqs-game-1f6b30ebec826fe886829c2618ed0b109009e3b8.zip
do not parse free actions granting x effects as x effects
-rw-r--r--go/game/cardParsing.go12
-rw-r--r--go/game/effect.go4
-rw-r--r--go/game/effect_test.go5
3 files changed, 21 insertions, 0 deletions
diff --git a/go/game/cardParsing.go b/go/game/cardParsing.go
index ee40406d..b214f7b7 100644
--- a/go/game/cardParsing.go
+++ b/go/game/cardParsing.go
@@ -135,9 +135,15 @@ func (impl *dynamicCardImplementation) parseEffect(effect string) {
if strings.Contains(effect, "can be played") {
impl.parsePlayModification(effect)
}
+
if m := additionalActionRegex.FindStringSubmatch(effect); m != nil {
impl.parseAdditionalAction(effect, m)
}
+
+ if m := freeActionRegex.FindStringSubmatch(effect); m != nil {
+ impl.parseFreeAction(m[1], m[2])
+ }
+
// TODO: support gets and has effects
if strings.Contains(effect, "equipped unit gets") {
impl.parseEquipmentGetEffect(effect)
@@ -180,6 +186,12 @@ func (impl *dynamicCardImplementation) parseFullAction(fullAction string) {
}
}
+var freeActionRegex = regexp.MustCompile(`([^:]*):(.*)`)
+
+func (impl *dynamicCardImplementation) parseFreeAction(cost, action string) {
+ log.Error("Parsing free actions is not implemented yet")
+}
+
func parseUnitConstrain(constrain string) func(ctx any, u *Unit) bool {
enemy := strings.Contains(constrain, "enemy")
if enemy {
diff --git a/go/game/effect.go b/go/game/effect.go
index 184f2013..3b96082e 100644
--- a/go/game/effect.go
+++ b/go/game/effect.go
@@ -92,6 +92,10 @@ var (
)
func parseXEffect(desc string) (e xEffect, err error) {
+ if freeActionRegex.FindString(desc) != "" {
+ return e, ErrXEffectFormat
+ }
+
e.raw = desc
m := xEffectXSuffix.FindAllStringSubmatch(desc, -1)
if len(m) == 0 {
diff --git a/go/game/effect_test.go b/go/game/effect_test.go
index 53058e72..2fe25d25 100644
--- a/go/game/effect_test.go
+++ b/go/game/effect_test.go
@@ -17,6 +17,11 @@ func TestParseXEffect(t *testing.T) {
t.Fatal("expected x == 1")
}
+ _, err = parseXEffect("1: +1 armor")
+ if err == nil {
+ t.Fatal("parsed free action as X effect")
+ }
+
e, err = parseXEffect("crew 3")
if err != nil {
t.Fatal("unexpected", err)