File size: 4,531 Bytes
9bd4ce5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# LovecaSim Pseudocode Writing Guide

This guide defines the "Gold Standard" for writing card ability pseudocode. Following these standards ensures that card abilities are parsed correctly by the engine and are readable by humans.

## Table of Contents
1. [Basic Structure](#basic-structure)
2. [Triggers](#triggers)
3. [Costs](#costs)
4. [Conditions](#conditions)
5. [Effects](#effects)
6. [Parameters & Filters](#parameters--filters)
7. [Complex Examples](#complex-examples)

---

## Basic Structure

An ability consists of several sections, usually in this order:
```pseudocode
TRIGGER: [TRIGGER_NAME]
(Once per turn)  <-- Optional
COST: [COST_INSTRUCTION]([VALUE]) {PARAMETERS}
CONDITION: [CONDITION_INSTRUCTION] {PARAMETERS}
EFFECT: [EFFECT_INSTRUCTION]([VALUE]) -> [TARGET] {PARAMETERS}
```

Sections are separated by newlines. Instructions within a section are separated by `;` (semicolon). Multiple costs or conditions are separated by `,` (comma).

---

## Triggers

Triggers define **when** an ability activates.

| Trigger | Description |
| :--- | :--- |
| `ON_PLAY` | Activates when the member is played to the stage. |
| `ON_LIVE_START` | Activates at the start of a Live segment. |
| `ON_LIVE_SUCCESS` | Activates if the Live is successful. |
| `CONSTANT` | Effect is always active (usually for power/score buffs). |
| `ACTIVATED` | A manually triggered ability (usually has a cost). |
| `TURN_START` | Activates at the beginning of your turn. |
| `TURN_END` | Activates at the end of your turn. |
| `ON_LEAVES` | Activates when the card leaves the stage. |
| `ON_REVEAL` | Activates when the card is revealed (from hand or deck). |

---

## Costs

Costs must be paid to activate the ability.

| Instruction | Description | Example |
| :--- | :--- | :--- |
| `PAY_ENERGY` | Pay N energy cards. | `PAY_ENERGY(2)` |
| `DISCARD_HAND` | Discard N cards from hand. | `DISCARD_HAND(1) {FILTER="Red"}` |
| `TAP_PLAYER` | Tap the player (standard cost). | `TAP_PLAYER(0)` |
| `TAP_MEMBER` | Tap a member on stage. | `TAP_MEMBER(1)` |
| `RETURN_DISCARD_TO_DECK` | Return cards from discard to deck. | `RETURN_DISCARD_TO_DECK(6)` |

> [!TIP]
> Use `(Optional)` after a cost to let the user decide whether to pay it.

---

## Conditions

Conditions filter whether an ability can activate or proceed.

| Instruction | Description | Example |
| :--- | :--- | :--- |
| `COUNT_STAGE` | Checks the number of members on stage. | `COUNT_STAGE {MIN=3}` |
| `SCORE_COMPARE` | Compares scores or turn counts. | `SCORE_COMPARE {COMPARISON="GE", MIN=6}` |
| `HAS_LIVE_CARD` | Checks for specific cards in the live zone. | `HAS_LIVE_CARD {HAS_ABILITY=FALSE}` |
| `IS_CENTER` | Checks if the member is in the Center position. | `IS_CENTER` |

---

## Effects

Effects are the actions the ability performs.

| Instruction | Description | Example |
| :--- | :--- | :--- |
| `DRAW` | Draw N cards. | `DRAW(1) -> PLAYER` |
| `BOOST_SCORE` | Add N to the current score. | `BOOST_SCORE(1) -> PLAYER` |
| `ADD_BLADES` | Add N blades to a member or player. | `ADD_BLADES(2) -> SELF` |
| `RECOVER_MEMBER` | Move a member from discard to hand. | `RECOVER_MEMBER(1) -> CARD_HAND {SOURCE="discard"}` |
| `LOOK_AND_CHOOSE` | Look at N cards and pick one. | `LOOK_AND_CHOOSE(5) -> CARD_HAND` |
| `GRANT_ABILITY` | Temporarily add an ability to a target. | `GRANT_ABILITY(1) -> PLAYER {ABILITY="..."}` |

---

## Parameters & Filters

Parameters are enclosed in `{}` and refine how an instruction works.

| Parameter | Values | Description |
| :--- | :--- | :--- |
| `FILTER` | `"Red"`, `"Group=Aqours"`, etc. | Filters targets or sources. |
| `SOURCE` | `"discard"`, `"deck"`, `"hand"` | Specifies where to find cards. |
| `DESTINATION` | `"discard"`, `"deck"`, `"hand"` | Specifies where to move cards. |
| `UNTIL` | `"LIVE_END"`, `"TURN_END"` | Specifies duration for buffs. |
| `PER_CARD` | `"COUNT_VAL"`, `"SUCCESS_LIVE"` | Multiplies effect by a count. |

---

## Complex Examples

### Modal Choices (Options)
```pseudocode
TRIGGER: ACTIVATED
COST: TAP_PLAYER(0)
EFFECT: CHOICE_MODE(1) -> PLAYER
    Options:
      1: DRAW(1) -> PLAYER
      2: ADD_BLADES(1) -> SELF
```

### Sequential Condition (If-Then)
```pseudocode
TRIGGER: ON_PLAY
EFFECT: CONDITION(1) -> PLAYER {FILTER="NOT_SELF"}; DRAW(1) -> PLAYER
```
*Note: This checks a condition during effect resolution. If it fails, the sequence stops.*

### Cross-Zone Movement
```pseudocode
TRIGGER: ON_LIVE_START
COST: RETURN_DISCARD_TO_DECK(1) {FILTER="Umi"}
EFFECT: ACTIVATE_MEMBER(1) -> SELF
```