File size: 4,565 Bytes
463f868
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
file_path = r"c:\Users\trios\.gemini\antigravity\vscode\loveca-copy\compiler\parser.py"

with open(file_path, "r", encoding="utf-8") as f:
    content = f.read()

# Patch 1: RECOVER Group Filter (Line ~903)
target1 = """                    if any(kw in content for kw in ["ハート", "heart"]):

                        effects[-1].params["filter"] = "heart_req"

"""
repl1 = """                    if any(kw in content for kw in ["ハート", "heart"]):

                        effects[-1].params["filter"] = "heart_req"

                    # Capture specific group filter if explicitly mentioned near recover target

                    if match := re.search(r"『(.*?)』", content):

                        effects[-1].params["group"] = match.group(1)

"""

# Patch 2: Multiplier Both Players (Line ~1085)
target2 = """                    elif "メンバー" in content or "人につき" in content:

                        eff_params["per_member"] = True

"""
repl2 = """                    if "自分と相手" in content and ("メンバー" in content or "人につき" in content):

                        eff_params["per_member_all"] = True

                    elif "メンバー" in content or "人につき" in content:

                        eff_params["per_member"] = True

"""

# Patch 3: Group Alias (Line ~1180)
target3 = """                if any(kw in content for kw in ["選ばれない", "選べない", "置けない"]):

                    effects.append(Effect(EffectType.IMMUNITY, 1))

"""
repl3 = """                if any(kw in content for kw in ["選ばれない", "選べない", "置けない"]):

                    effects.append(Effect(EffectType.IMMUNITY, 1))



                if "として扱う" in content and "すべての領域" in content:

                    # Group Alias / Multi-Group

                    groups = []

                    for m in re.finditer(r"『(.*?)』", content):

                        groups.append(m.group(1))

                    if groups:

                        effects.append(Effect(EffectType.META_RULE, 1, params={"type": "group_alias", "groups": groups}))

"""


# Normalize Line Endings for matching
def normalize(s):
    return s.replace("\r\n", "\n")


content_norm = normalize(content)
target1_norm = normalize(target1)
target2_norm = normalize(target2)
target3_norm = normalize(target3)

if target1_norm in content_norm:
    content = content.replace(target1.strip(), repl1.strip())  # strip to avoid newline confusion at edges
    print("Patch 1 applied")
else:
    # Try strict replace on normalized content then write back? No, keep original mixed endings if any.
    # But files on Windows usually CRLF.
    # Let's try direct replace without stripping if exact match fails
    if target1 in content:
        content = content.replace(target1, repl1)
        print("Patch 1 applied (exact)")
    else:
        # Fallback: Find location index
        idx = content_norm.find(target1_norm.strip())
        if idx != -1:
            # This is complex because mapping index back to CRLF content is hard.
            # I will just write normalized content back? No, that changes entire file line endings.
            # Better to strip and replace
            if content.replace(target1.strip(), repl1.strip()) != content:
                content = content.replace(target1.strip(), repl1.strip())
                print("Patch 1 applied (strip)")
            else:
                print("Patch 1 FAILED - content not found even with strip")
        else:
            print("Patch 1 FAILED - target not found")

if target2_norm in content_norm:
    # Do simpler replace that is robust
    # Since I am running locally python, I can just use string replace.
    # I'll rely on strict match first.
    if target2 in content:
        content = content.replace(target2, repl2)
        print("Patch 2 applied (exact)")
    else:
        # try matching line by line
        content = content.replace(target2.strip(), repl2.strip())
        print("Patch 2 applied (strip)")
else:
    print("Patch 2 FAILED")

if target3_norm in content_norm:
    if target3 in content:
        content = content.replace(target3, repl3)
        print("Patch 3 applied (exact)")
    else:
        content = content.replace(target3.strip(), repl3.strip())
        print("Patch 3 applied (strip)")
else:
    print("Patch 3 FAILED")

with open(file_path, "w", encoding="utf-8") as f:
    f.write(content)

print("Done")