closer
Browse files- battle_system_design.md +620 -114
battle_system_design.md
CHANGED
|
@@ -17,14 +17,12 @@ The battle system is built on **composable building blocks** that can be combine
|
|
| 17 |
"name": "Zephyr Sprite",
|
| 18 |
"description": "A mysterious floating creature that manipulates wind currents",
|
| 19 |
"tier": "medium",
|
| 20 |
-
"primaryType": "
|
| 21 |
"secondaryType": null,
|
| 22 |
"baseStats": {
|
| 23 |
"hp": 65,
|
| 24 |
-
"attack":
|
| 25 |
"defense": 40,
|
| 26 |
-
"fieldAttack": 85,
|
| 27 |
-
"fieldDefense": 70,
|
| 28 |
"speed": 90
|
| 29 |
},
|
| 30 |
"nature": "hasty",
|
|
@@ -43,8 +41,7 @@ The battle system is built on **composable building blocks** that can be combine
|
|
| 43 |
"movepool": [
|
| 44 |
{
|
| 45 |
"name": "Gust Strike",
|
| 46 |
-
"type": "
|
| 47 |
-
"category": "physical",
|
| 48 |
"power": 65,
|
| 49 |
"accuracy": 95,
|
| 50 |
"pp": 20,
|
|
@@ -54,14 +51,13 @@ The battle system is built on **composable building blocks** that can be combine
|
|
| 54 |
{
|
| 55 |
"type": "damage",
|
| 56 |
"target": "opponent",
|
| 57 |
-
"
|
| 58 |
}
|
| 59 |
]
|
| 60 |
},
|
| 61 |
{
|
| 62 |
"name": "Piercing Gale",
|
| 63 |
-
"type": "
|
| 64 |
-
"category": "special",
|
| 65 |
"power": 80,
|
| 66 |
"accuracy": 85,
|
| 67 |
"pp": 15,
|
|
@@ -71,7 +67,7 @@ The battle system is built on **composable building blocks** that can be combine
|
|
| 71 |
{
|
| 72 |
"type": "damage",
|
| 73 |
"target": "opponent",
|
| 74 |
-
"
|
| 75 |
},
|
| 76 |
{
|
| 77 |
"type": "modifyStats",
|
|
@@ -83,8 +79,7 @@ The battle system is built on **composable building blocks** that can be combine
|
|
| 83 |
},
|
| 84 |
{
|
| 85 |
"name": "Tailwind Boost",
|
| 86 |
-
"type": "
|
| 87 |
-
"category": "status",
|
| 88 |
"power": 0,
|
| 89 |
"accuracy": 100,
|
| 90 |
"pp": 10,
|
|
@@ -100,8 +95,7 @@ The battle system is built on **composable building blocks** that can be combine
|
|
| 100 |
},
|
| 101 |
{
|
| 102 |
"name": "Reckless Dive",
|
| 103 |
-
"type": "
|
| 104 |
-
"category": "physical",
|
| 105 |
"power": 120,
|
| 106 |
"accuracy": 80,
|
| 107 |
"pp": 5,
|
|
@@ -111,7 +105,7 @@ The battle system is built on **composable building blocks** that can be combine
|
|
| 111 |
{
|
| 112 |
"type": "damage",
|
| 113 |
"target": "opponent",
|
| 114 |
-
"
|
| 115 |
},
|
| 116 |
{
|
| 117 |
"type": "damage",
|
|
@@ -136,10 +130,7 @@ All battle effects are built from these atomic operations:
|
|
| 136 |
{
|
| 137 |
"type": "damage",
|
| 138 |
"target": "opponent" | "self" | "all" | "allies",
|
| 139 |
-
"
|
| 140 |
-
"value": 80, // Fixed damage amount or percentage for recoil/drain
|
| 141 |
-
"multiplier": 1.0, // Damage multiplier
|
| 142 |
-
"condition": "always" | "ifLowHp" | "ifHighHp" | "afterKO" | "custom"
|
| 143 |
}
|
| 144 |
```
|
| 145 |
|
|
@@ -169,9 +160,7 @@ All battle effects are built from these atomic operations:
|
|
| 169 |
{
|
| 170 |
"type": "applyStatus",
|
| 171 |
"target": "opponent" | "self",
|
| 172 |
-
"status": "burn" | "freeze" | "paralyze" | "poison" | "sleep" | "confuse"
|
| 173 |
-
"chance": 30, // Percentage chance
|
| 174 |
-
"condition": "onHit" | "always"
|
| 175 |
}
|
| 176 |
```
|
| 177 |
|
|
@@ -180,9 +169,7 @@ All battle effects are built from these atomic operations:
|
|
| 180 |
{
|
| 181 |
"type": "heal",
|
| 182 |
"target": "self" | "ally",
|
| 183 |
-
"amount": "
|
| 184 |
-
"value": 50, // 50% of max HP or 50 fixed HP
|
| 185 |
-
"condition": "always" | "ifLowHp" | "endOfTurn"
|
| 186 |
}
|
| 187 |
```
|
| 188 |
|
|
@@ -192,8 +179,7 @@ All battle effects are built from these atomic operations:
|
|
| 192 |
"type": "manipulatePP",
|
| 193 |
"target": "opponent",
|
| 194 |
"action": "drain" | "restore" | "disable",
|
| 195 |
-
"amount":
|
| 196 |
-
"targetMove": "last" | "random" | "strongest"
|
| 197 |
}
|
| 198 |
```
|
| 199 |
|
|
@@ -212,8 +198,7 @@ All battle effects are built from these atomic operations:
|
|
| 212 |
{
|
| 213 |
"type": "counter",
|
| 214 |
"counterType": "physical" | "special" | "any",
|
| 215 |
-
"
|
| 216 |
-
"condition": "ifDamagedThisTurn"
|
| 217 |
}
|
| 218 |
```
|
| 219 |
|
|
@@ -231,12 +216,44 @@ All battle effects are built from these atomic operations:
|
|
| 231 |
```json
|
| 232 |
{
|
| 233 |
"type": "removeStatus",
|
| 234 |
-
"target": "self" | "opponent" | "allies"
|
| 235 |
-
"status": "burn" | "freeze" | "paralyze" | "poison" | "sleep" | "confuse"
|
| 236 |
-
"condition": "always" | "onSwitchIn" | "endOfTurn"
|
| 237 |
}
|
| 238 |
```
|
| 239 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 240 |
### Triggers and Conditions
|
| 241 |
|
| 242 |
Effects can be triggered by various battle events:
|
|
@@ -291,6 +308,9 @@ Special abilities can override or alter fundamental battle mechanics:
|
|
| 291 |
- **contactDamage**: Attackers take damage when using contact moves
|
| 292 |
- **drainInversion**: HP draining moves heal the target instead
|
| 293 |
- **weatherImmunity**: Unaffected by weather damage/effects
|
|
|
|
|
|
|
|
|
|
| 294 |
|
| 295 |
### Advanced Ability Examples
|
| 296 |
|
|
@@ -331,15 +351,15 @@ Special abilities can override or alter fundamental battle mechanics:
|
|
| 331 |
}
|
| 332 |
```
|
| 333 |
|
| 334 |
-
#### 3. **
|
| 335 |
```json
|
| 336 |
{
|
| 337 |
-
"name": "
|
| 338 |
-
"description": "Absorbs
|
| 339 |
"triggers": [
|
| 340 |
{
|
| 341 |
"event": "onDamageTaken",
|
| 342 |
-
"condition": "ifMoveType:
|
| 343 |
"effects": [
|
| 344 |
{
|
| 345 |
"type": "mechanicOverride",
|
|
@@ -520,30 +540,20 @@ Special abilities can override or alter fundamental battle mechanics:
|
|
| 520 |
|
| 521 |
### Status-Specific Abilities
|
| 522 |
|
| 523 |
-
#### **Frost Walker** -
|
| 524 |
```json
|
| 525 |
{
|
| 526 |
"name": "Frost Walker",
|
| 527 |
-
"description": "
|
| 528 |
"effects": [
|
| 529 |
{
|
| 530 |
"type": "mechanicOverride",
|
| 531 |
-
"mechanic": "
|
| 532 |
-
"value":
|
| 533 |
-
|
| 534 |
-
|
| 535 |
-
|
| 536 |
-
|
| 537 |
-
"event": "onStatusInflicted",
|
| 538 |
-
"condition": "ifStatus:freeze",
|
| 539 |
-
"effects": [
|
| 540 |
-
{
|
| 541 |
-
"type": "heal",
|
| 542 |
-
"target": "self",
|
| 543 |
-
"amount": "percentage",
|
| 544 |
-
"value": 12
|
| 545 |
-
}
|
| 546 |
-
]
|
| 547 |
}
|
| 548 |
]
|
| 549 |
}
|
|
@@ -709,6 +719,128 @@ Special abilities can override or alter fundamental battle mechanics:
|
|
| 709 |
}
|
| 710 |
```
|
| 711 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 712 |
### Event Triggers for Abilities
|
| 713 |
|
| 714 |
Extended list of trigger events:
|
|
@@ -732,8 +864,8 @@ Extended list of trigger events:
|
|
| 732 |
|
| 733 |
### Physical vs Special Attacks
|
| 734 |
|
| 735 |
-
- **Physical**:
|
| 736 |
-
- **Special**:
|
| 737 |
- **Status**: No damage, focus on effects and stat manipulation
|
| 738 |
|
| 739 |
### Move Flags
|
|
@@ -805,15 +937,12 @@ Moves can have flags that affect interactions:
|
|
| 805 |
{
|
| 806 |
"type": "damage",
|
| 807 |
"target": "opponent",
|
| 808 |
-
"
|
| 809 |
-
"multiplier": 1.0,
|
| 810 |
-
"condition": "always"
|
| 811 |
},
|
| 812 |
{
|
| 813 |
"type": "damage",
|
| 814 |
"target": "opponent",
|
| 815 |
-
"
|
| 816 |
-
"multiplier": 2.0,
|
| 817 |
"condition": "ifDamagedThisTurn"
|
| 818 |
}
|
| 819 |
]
|
|
@@ -828,7 +957,6 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 828 |
```json
|
| 829 |
{
|
| 830 |
"name": "Self Destruct",
|
| 831 |
-
"category": "physical",
|
| 832 |
"power": 200,
|
| 833 |
"accuracy": 100,
|
| 834 |
"pp": 1,
|
|
@@ -856,7 +984,6 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 856 |
```json
|
| 857 |
{
|
| 858 |
"name": "Life Drain Overload",
|
| 859 |
-
"category": "special",
|
| 860 |
"power": 0,
|
| 861 |
"accuracy": 100,
|
| 862 |
"pp": 3,
|
|
@@ -872,7 +999,7 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 872 |
{
|
| 873 |
"type": "modifyStats",
|
| 874 |
"target": "self",
|
| 875 |
-
"stats": { "attack": "greatly_decrease"
|
| 876 |
"condition": "afterUse"
|
| 877 |
}
|
| 878 |
]
|
|
@@ -882,8 +1009,7 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 882 |
#### **Berserker's End** - More damage as HP gets lower, but can't heal
|
| 883 |
```json
|
| 884 |
{
|
| 885 |
-
"name": "Berserker's End",
|
| 886 |
-
"category": "physical",
|
| 887 |
"power": 80,
|
| 888 |
"accuracy": 95,
|
| 889 |
"pp": 10,
|
|
@@ -893,23 +1019,19 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 893 |
{
|
| 894 |
"type": "damage",
|
| 895 |
"target": "opponent",
|
| 896 |
-
"
|
| 897 |
-
"multiplier": 1.0,
|
| 898 |
-
"condition": "ifHighHp"
|
| 899 |
},
|
| 900 |
{
|
| 901 |
"type": "damage",
|
| 902 |
"target": "opponent",
|
| 903 |
-
"
|
| 904 |
-
"multiplier": 2.0,
|
| 905 |
"condition": "ifLowHp"
|
| 906 |
},
|
| 907 |
{
|
| 908 |
"type": "mechanicOverride",
|
| 909 |
"target": "self",
|
| 910 |
"mechanic": "healingBlocked",
|
| 911 |
-
"value": true
|
| 912 |
-
"condition": "afterUse"
|
| 913 |
}
|
| 914 |
]
|
| 915 |
}
|
|
@@ -918,8 +1040,7 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 918 |
#### **Mirror Shatter** - Reflect all damage taken this turn back doubled
|
| 919 |
```json
|
| 920 |
{
|
| 921 |
-
"name": "Mirror Shatter",
|
| 922 |
-
"category": "status",
|
| 923 |
"power": 0,
|
| 924 |
"accuracy": 100,
|
| 925 |
"pp": 5,
|
|
@@ -947,7 +1068,6 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 947 |
```json
|
| 948 |
{
|
| 949 |
"name": "Temporal Overload",
|
| 950 |
-
"category": "status",
|
| 951 |
"power": 0,
|
| 952 |
"accuracy": 100,
|
| 953 |
"pp": 2,
|
|
@@ -976,7 +1096,6 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 976 |
```json
|
| 977 |
{
|
| 978 |
"name": "Blood Pact",
|
| 979 |
-
"category": "status",
|
| 980 |
"power": 0,
|
| 981 |
"accuracy": 100,
|
| 982 |
"pp": 3,
|
|
@@ -1004,7 +1123,6 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 1004 |
```json
|
| 1005 |
{
|
| 1006 |
"name": "Soul Burn",
|
| 1007 |
-
"category": "special",
|
| 1008 |
"power": 150,
|
| 1009 |
"accuracy": 90,
|
| 1010 |
"pp": 5,
|
|
@@ -1032,7 +1150,6 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 1032 |
```json
|
| 1033 |
{
|
| 1034 |
"name": "Cursed Gambit",
|
| 1035 |
-
"category": "status",
|
| 1036 |
"power": 0,
|
| 1037 |
"accuracy": 100,
|
| 1038 |
"pp": 1,
|
|
@@ -1061,7 +1178,6 @@ Powerful moves with dramatic sacrifices create high-stakes decision making:
|
|
| 1061 |
```json
|
| 1062 |
{
|
| 1063 |
"name": "Apocalypse Strike",
|
| 1064 |
-
"category": "special",
|
| 1065 |
"power": 120,
|
| 1066 |
"accuracy": 85,
|
| 1067 |
"pp": 1,
|
|
@@ -1097,7 +1213,6 @@ Complex moves can have multiple phases:
|
|
| 1097 |
```json
|
| 1098 |
{
|
| 1099 |
"name": "Charging Blast",
|
| 1100 |
-
"category": "special",
|
| 1101 |
"power": 120,
|
| 1102 |
"accuracy": 90,
|
| 1103 |
"pp": 5,
|
|
@@ -1175,6 +1290,411 @@ The system encourages diverse strategies through:
|
|
| 1175 |
|
| 1176 |
This creates a dynamic battle system where player skill and strategic thinking matter more than raw stat advantages.
|
| 1177 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1178 |
## Complete Example: Tempest Wraith
|
| 1179 |
|
| 1180 |
Here's a full example of a Piclet using the complete schema with advanced abilities and dramatic moves:
|
|
@@ -1182,16 +1702,14 @@ Here's a full example of a Piclet using the complete schema with advanced abilit
|
|
| 1182 |
```json
|
| 1183 |
{
|
| 1184 |
"name": "Tempest Wraith",
|
| 1185 |
-
"description": "A ghostly creature born from violent storms, wielding
|
| 1186 |
"tier": "high",
|
| 1187 |
-
"primaryType": "
|
| 1188 |
-
"secondaryType": "
|
| 1189 |
"baseStats": {
|
| 1190 |
"hp": 75,
|
| 1191 |
-
"attack":
|
| 1192 |
"defense": 45,
|
| 1193 |
-
"fieldAttack": 95,
|
| 1194 |
-
"fieldDefense": 80,
|
| 1195 |
"speed": 85
|
| 1196 |
},
|
| 1197 |
"nature": "timid",
|
|
@@ -1221,7 +1739,7 @@ Here's a full example of a Piclet using the complete schema with advanced abilit
|
|
| 1221 |
{
|
| 1222 |
"type": "modifyStats",
|
| 1223 |
"target": "self",
|
| 1224 |
-
"stats": { "
|
| 1225 |
}
|
| 1226 |
]
|
| 1227 |
}
|
|
@@ -1230,8 +1748,7 @@ Here's a full example of a Piclet using the complete schema with advanced abilit
|
|
| 1230 |
"movepool": [
|
| 1231 |
{
|
| 1232 |
"name": "Shadow Pulse",
|
| 1233 |
-
"type": "
|
| 1234 |
-
"category": "special",
|
| 1235 |
"power": 70,
|
| 1236 |
"accuracy": 100,
|
| 1237 |
"pp": 15,
|
|
@@ -1241,21 +1758,18 @@ Here's a full example of a Piclet using the complete schema with advanced abilit
|
|
| 1241 |
{
|
| 1242 |
"type": "damage",
|
| 1243 |
"target": "opponent",
|
| 1244 |
-
"
|
| 1245 |
},
|
| 1246 |
{
|
| 1247 |
"type": "applyStatus",
|
| 1248 |
"target": "opponent",
|
| 1249 |
-
"status": "confuse"
|
| 1250 |
-
"chance": 20,
|
| 1251 |
-
"condition": "onHit"
|
| 1252 |
}
|
| 1253 |
]
|
| 1254 |
},
|
| 1255 |
{
|
| 1256 |
-
"name": "
|
| 1257 |
-
"type": "
|
| 1258 |
-
"category": "special",
|
| 1259 |
"power": 85,
|
| 1260 |
"accuracy": 90,
|
| 1261 |
"pp": 10,
|
|
@@ -1265,21 +1779,18 @@ Here's a full example of a Piclet using the complete schema with advanced abilit
|
|
| 1265 |
{
|
| 1266 |
"type": "damage",
|
| 1267 |
"target": "opponent",
|
| 1268 |
-
"
|
| 1269 |
},
|
| 1270 |
{
|
| 1271 |
"type": "applyStatus",
|
| 1272 |
"target": "opponent",
|
| 1273 |
-
"status": "paralyze"
|
| 1274 |
-
"chance": 15,
|
| 1275 |
-
"condition": "onHit"
|
| 1276 |
}
|
| 1277 |
]
|
| 1278 |
},
|
| 1279 |
{
|
| 1280 |
"name": "Spectral Drain",
|
| 1281 |
-
"type": "
|
| 1282 |
-
"category": "special",
|
| 1283 |
"power": 60,
|
| 1284 |
"accuracy": 95,
|
| 1285 |
"pp": 12,
|
|
@@ -1295,16 +1806,13 @@ Here's a full example of a Piclet using the complete schema with advanced abilit
|
|
| 1295 |
{
|
| 1296 |
"type": "heal",
|
| 1297 |
"target": "self",
|
| 1298 |
-
"amount": "
|
| 1299 |
-
"value": 50,
|
| 1300 |
-
"condition": "onHit"
|
| 1301 |
}
|
| 1302 |
]
|
| 1303 |
},
|
| 1304 |
{
|
| 1305 |
-
"name": "
|
| 1306 |
-
"type": "
|
| 1307 |
-
"category": "special",
|
| 1308 |
"power": 130,
|
| 1309 |
"accuracy": 85,
|
| 1310 |
"pp": 1,
|
|
@@ -1321,15 +1829,13 @@ Here's a full example of a Piclet using the complete schema with advanced abilit
|
|
| 1321 |
"type": "damage",
|
| 1322 |
"target": "self",
|
| 1323 |
"formula": "percentage",
|
| 1324 |
-
"value": 75
|
| 1325 |
-
"condition": "afterUse"
|
| 1326 |
},
|
| 1327 |
{
|
| 1328 |
"type": "fieldEffect",
|
| 1329 |
-
"effect": "
|
| 1330 |
"target": "field",
|
| 1331 |
-
"stackable": false
|
| 1332 |
-
"condition": "afterUse"
|
| 1333 |
}
|
| 1334 |
]
|
| 1335 |
}
|
|
|
|
| 17 |
"name": "Zephyr Sprite",
|
| 18 |
"description": "A mysterious floating creature that manipulates wind currents",
|
| 19 |
"tier": "medium",
|
| 20 |
+
"primaryType": "space",
|
| 21 |
"secondaryType": null,
|
| 22 |
"baseStats": {
|
| 23 |
"hp": 65,
|
| 24 |
+
"attack": 85,
|
| 25 |
"defense": 40,
|
|
|
|
|
|
|
| 26 |
"speed": 90
|
| 27 |
},
|
| 28 |
"nature": "hasty",
|
|
|
|
| 41 |
"movepool": [
|
| 42 |
{
|
| 43 |
"name": "Gust Strike",
|
| 44 |
+
"type": "space",
|
|
|
|
| 45 |
"power": 65,
|
| 46 |
"accuracy": 95,
|
| 47 |
"pp": 20,
|
|
|
|
| 51 |
{
|
| 52 |
"type": "damage",
|
| 53 |
"target": "opponent",
|
| 54 |
+
"amount": "normal"
|
| 55 |
}
|
| 56 |
]
|
| 57 |
},
|
| 58 |
{
|
| 59 |
"name": "Piercing Gale",
|
| 60 |
+
"type": "space",
|
|
|
|
| 61 |
"power": 80,
|
| 62 |
"accuracy": 85,
|
| 63 |
"pp": 15,
|
|
|
|
| 67 |
{
|
| 68 |
"type": "damage",
|
| 69 |
"target": "opponent",
|
| 70 |
+
"amount": "normal"
|
| 71 |
},
|
| 72 |
{
|
| 73 |
"type": "modifyStats",
|
|
|
|
| 79 |
},
|
| 80 |
{
|
| 81 |
"name": "Tailwind Boost",
|
| 82 |
+
"type": "space",
|
|
|
|
| 83 |
"power": 0,
|
| 84 |
"accuracy": 100,
|
| 85 |
"pp": 10,
|
|
|
|
| 95 |
},
|
| 96 |
{
|
| 97 |
"name": "Reckless Dive",
|
| 98 |
+
"type": "space",
|
|
|
|
| 99 |
"power": 120,
|
| 100 |
"accuracy": 80,
|
| 101 |
"pp": 5,
|
|
|
|
| 105 |
{
|
| 106 |
"type": "damage",
|
| 107 |
"target": "opponent",
|
| 108 |
+
"amount": "normal"
|
| 109 |
},
|
| 110 |
{
|
| 111 |
"type": "damage",
|
|
|
|
| 130 |
{
|
| 131 |
"type": "damage",
|
| 132 |
"target": "opponent" | "self" | "all" | "allies",
|
| 133 |
+
"amount": "weak" | "normal" | "strong" | "extreme"
|
|
|
|
|
|
|
|
|
|
| 134 |
}
|
| 135 |
```
|
| 136 |
|
|
|
|
| 160 |
{
|
| 161 |
"type": "applyStatus",
|
| 162 |
"target": "opponent" | "self",
|
| 163 |
+
"status": "burn" | "freeze" | "paralyze" | "poison" | "sleep" | "confuse"
|
|
|
|
|
|
|
| 164 |
}
|
| 165 |
```
|
| 166 |
|
|
|
|
| 169 |
{
|
| 170 |
"type": "heal",
|
| 171 |
"target": "self" | "ally",
|
| 172 |
+
"amount": "small" | "medium" | "large" | "full"
|
|
|
|
|
|
|
| 173 |
}
|
| 174 |
```
|
| 175 |
|
|
|
|
| 179 |
"type": "manipulatePP",
|
| 180 |
"target": "opponent",
|
| 181 |
"action": "drain" | "restore" | "disable",
|
| 182 |
+
"amount": "small" | "medium" | "large"
|
|
|
|
| 183 |
}
|
| 184 |
```
|
| 185 |
|
|
|
|
| 198 |
{
|
| 199 |
"type": "counter",
|
| 200 |
"counterType": "physical" | "special" | "any",
|
| 201 |
+
"strength": "weak" | "normal" | "strong"
|
|
|
|
| 202 |
}
|
| 203 |
```
|
| 204 |
|
|
|
|
| 216 |
```json
|
| 217 |
{
|
| 218 |
"type": "removeStatus",
|
| 219 |
+
"target": "self" | "opponent" | "allies",
|
| 220 |
+
"status": "burn" | "freeze" | "paralyze" | "poison" | "sleep" | "confuse"
|
|
|
|
| 221 |
}
|
| 222 |
```
|
| 223 |
|
| 224 |
+
### Move Flags
|
| 225 |
+
|
| 226 |
+
Moves can have flags that affect how they interact with abilities and other mechanics:
|
| 227 |
+
|
| 228 |
+
#### **Combat Flags**
|
| 229 |
+
- **contact**: Move makes physical contact (triggers contact abilities like Rough Skin)
|
| 230 |
+
- **bite**: Biting move (affected by Strong Jaw ability, blocked by certain defenses)
|
| 231 |
+
- **punch**: Punching move (affected by Iron Fist ability)
|
| 232 |
+
- **sound**: Sound-based move (bypasses Substitute, blocked by Soundproof)
|
| 233 |
+
- **explosive**: Explosive move (affected by Damp ability)
|
| 234 |
+
- **draining**: Move that drains HP (affected by Liquid Ooze ability)
|
| 235 |
+
- **ground**: Ground-based attack (blocked by Sky Dancer, Levitate abilities)
|
| 236 |
+
|
| 237 |
+
#### **Priority Flags**
|
| 238 |
+
- **priority**: Move has natural priority (+1 to +5)
|
| 239 |
+
- **lowPriority**: Move has negative priority (-1 to -5)
|
| 240 |
+
|
| 241 |
+
#### **Special Mechanics**
|
| 242 |
+
- **charging**: Move requires charging turn (Sky Attack, Solar Beam)
|
| 243 |
+
- **recharge**: User must recharge next turn (Hyper Beam)
|
| 244 |
+
- **multiHit**: Hits multiple times (2-5 hits)
|
| 245 |
+
- **twoTurn**: Takes two turns to execute
|
| 246 |
+
- **sacrifice**: Move involves self-sacrifice or major cost
|
| 247 |
+
- **gambling**: Move has random outcomes
|
| 248 |
+
- **reckless**: Move gains power but has drawbacks (affected by Reckless ability)
|
| 249 |
+
|
| 250 |
+
#### **Interaction Flags**
|
| 251 |
+
- **reflectable**: Can be reflected by Magic Coat
|
| 252 |
+
- **snatchable**: Can be stolen by Snatch
|
| 253 |
+
- **copyable**: Can be copied by Mirror Move
|
| 254 |
+
- **protectable**: Blocked by Protect/Detect
|
| 255 |
+
- **bypassProtect**: Ignores Protect/Detect
|
| 256 |
+
|
| 257 |
### Triggers and Conditions
|
| 258 |
|
| 259 |
Effects can be triggered by various battle events:
|
|
|
|
| 308 |
- **contactDamage**: Attackers take damage when using contact moves
|
| 309 |
- **drainInversion**: HP draining moves heal the target instead
|
| 310 |
- **weatherImmunity**: Unaffected by weather damage/effects
|
| 311 |
+
- **flagImmunity**: Immune to moves with specific flags
|
| 312 |
+
- **flagWeakness**: Takes extra damage from moves with specific flags
|
| 313 |
+
- **flagResistance**: Takes reduced damage from moves with specific flags
|
| 314 |
|
| 315 |
### Advanced Ability Examples
|
| 316 |
|
|
|
|
| 351 |
}
|
| 352 |
```
|
| 353 |
|
| 354 |
+
#### 3. **Photosynthesis** - Healed by flora-type moves
|
| 355 |
```json
|
| 356 |
{
|
| 357 |
+
"name": "Photosynthesis",
|
| 358 |
+
"description": "Absorbs flora-type moves to restore HP",
|
| 359 |
"triggers": [
|
| 360 |
{
|
| 361 |
"event": "onDamageTaken",
|
| 362 |
+
"condition": "ifMoveType:flora",
|
| 363 |
"effects": [
|
| 364 |
{
|
| 365 |
"type": "mechanicOverride",
|
|
|
|
| 540 |
|
| 541 |
### Status-Specific Abilities
|
| 542 |
|
| 543 |
+
#### **Frost Walker** - Alternative effect when frozen
|
| 544 |
```json
|
| 545 |
{
|
| 546 |
"name": "Frost Walker",
|
| 547 |
+
"description": "Instead of being frozen, gains +50% attack",
|
| 548 |
"effects": [
|
| 549 |
{
|
| 550 |
"type": "mechanicOverride",
|
| 551 |
+
"mechanic": "statusReplacement:freeze",
|
| 552 |
+
"value": {
|
| 553 |
+
"type": "modifyStats",
|
| 554 |
+
"target": "self",
|
| 555 |
+
"stats": { "attack": "greatly_increase" }
|
| 556 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 557 |
}
|
| 558 |
]
|
| 559 |
}
|
|
|
|
| 719 |
}
|
| 720 |
```
|
| 721 |
|
| 722 |
+
### Flag-Based Immunities and Weaknesses
|
| 723 |
+
|
| 724 |
+
#### **Sky Dancer** - Immune to ground-flagged attacks
|
| 725 |
+
```json
|
| 726 |
+
{
|
| 727 |
+
"name": "Sky Dancer",
|
| 728 |
+
"description": "Floating in air, immune to ground-based attacks",
|
| 729 |
+
"effects": [
|
| 730 |
+
{
|
| 731 |
+
"type": "mechanicOverride",
|
| 732 |
+
"mechanic": "flagImmunity",
|
| 733 |
+
"value": ["ground"]
|
| 734 |
+
}
|
| 735 |
+
]
|
| 736 |
+
}
|
| 737 |
+
```
|
| 738 |
+
|
| 739 |
+
#### **Sound Barrier** - Immune to sound attacks
|
| 740 |
+
```json
|
| 741 |
+
{
|
| 742 |
+
"name": "Sound Barrier",
|
| 743 |
+
"description": "Natural sound dampening prevents sound-based moves",
|
| 744 |
+
"effects": [
|
| 745 |
+
{
|
| 746 |
+
"type": "mechanicOverride",
|
| 747 |
+
"mechanic": "flagImmunity",
|
| 748 |
+
"value": ["sound"]
|
| 749 |
+
}
|
| 750 |
+
]
|
| 751 |
+
}
|
| 752 |
+
```
|
| 753 |
+
|
| 754 |
+
#### **Soft Body** - Weak to punch moves, immune to explosive
|
| 755 |
+
```json
|
| 756 |
+
{
|
| 757 |
+
"name": "Soft Body",
|
| 758 |
+
"description": "Gelatinous form absorbs explosions but vulnerable to direct hits",
|
| 759 |
+
"effects": [
|
| 760 |
+
{
|
| 761 |
+
"type": "mechanicOverride",
|
| 762 |
+
"mechanic": "flagImmunity",
|
| 763 |
+
"value": ["explosive"]
|
| 764 |
+
},
|
| 765 |
+
{
|
| 766 |
+
"type": "mechanicOverride",
|
| 767 |
+
"mechanic": "flagWeakness",
|
| 768 |
+
"value": ["punch"]
|
| 769 |
+
}
|
| 770 |
+
]
|
| 771 |
+
}
|
| 772 |
+
```
|
| 773 |
+
|
| 774 |
+
#### **Ethereal Form** - Immune to contact moves
|
| 775 |
+
```json
|
| 776 |
+
{
|
| 777 |
+
"name": "Ethereal Form",
|
| 778 |
+
"description": "Ghostly body cannot be touched by physical contact",
|
| 779 |
+
"effects": [
|
| 780 |
+
{
|
| 781 |
+
"type": "mechanicOverride",
|
| 782 |
+
"mechanic": "flagImmunity",
|
| 783 |
+
"value": ["contact"]
|
| 784 |
+
}
|
| 785 |
+
]
|
| 786 |
+
}
|
| 787 |
+
```
|
| 788 |
+
|
| 789 |
+
#### **Fragile Shell** - Takes double damage from explosive moves
|
| 790 |
+
```json
|
| 791 |
+
{
|
| 792 |
+
"name": "Fragile Shell",
|
| 793 |
+
"description": "Hard shell provides defense but shatters from explosions",
|
| 794 |
+
"effects": [
|
| 795 |
+
{
|
| 796 |
+
"type": "modifyStats",
|
| 797 |
+
"target": "self",
|
| 798 |
+
"stats": { "defense": "increase" }
|
| 799 |
+
},
|
| 800 |
+
{
|
| 801 |
+
"type": "mechanicOverride",
|
| 802 |
+
"mechanic": "flagWeakness",
|
| 803 |
+
"value": ["explosive"]
|
| 804 |
+
}
|
| 805 |
+
]
|
| 806 |
+
}
|
| 807 |
+
```
|
| 808 |
+
|
| 809 |
+
#### **Liquid Body** - Immune to punch/bite, weak to sound
|
| 810 |
+
```json
|
| 811 |
+
{
|
| 812 |
+
"name": "Liquid Body",
|
| 813 |
+
"description": "Fluid form flows around physical attacks but resonates with sound",
|
| 814 |
+
"effects": [
|
| 815 |
+
{
|
| 816 |
+
"type": "mechanicOverride",
|
| 817 |
+
"mechanic": "flagImmunity",
|
| 818 |
+
"value": ["punch", "bite"]
|
| 819 |
+
},
|
| 820 |
+
{
|
| 821 |
+
"type": "mechanicOverride",
|
| 822 |
+
"mechanic": "flagWeakness",
|
| 823 |
+
"value": ["sound"]
|
| 824 |
+
}
|
| 825 |
+
]
|
| 826 |
+
}
|
| 827 |
+
```
|
| 828 |
+
|
| 829 |
+
#### **Thick Hide** - Reduced damage from contact moves
|
| 830 |
+
```json
|
| 831 |
+
{
|
| 832 |
+
"name": "Thick Hide",
|
| 833 |
+
"description": "Tough skin reduces impact from physical contact",
|
| 834 |
+
"effects": [
|
| 835 |
+
{
|
| 836 |
+
"type": "mechanicOverride",
|
| 837 |
+
"mechanic": "flagResistance",
|
| 838 |
+
"value": ["contact"]
|
| 839 |
+
}
|
| 840 |
+
]
|
| 841 |
+
}
|
| 842 |
+
```
|
| 843 |
+
|
| 844 |
### Event Triggers for Abilities
|
| 845 |
|
| 846 |
Extended list of trigger events:
|
|
|
|
| 864 |
|
| 865 |
### Physical vs Special Attacks
|
| 866 |
|
| 867 |
+
- **Physical**: Direct combat using attack vs defense stats, affected by contact abilities
|
| 868 |
+
- **Special**: Ranged/magical attacks using attack vs defense stats, no contact interactions
|
| 869 |
- **Status**: No damage, focus on effects and stat manipulation
|
| 870 |
|
| 871 |
### Move Flags
|
|
|
|
| 937 |
{
|
| 938 |
"type": "damage",
|
| 939 |
"target": "opponent",
|
| 940 |
+
"amount": "normal"
|
|
|
|
|
|
|
| 941 |
},
|
| 942 |
{
|
| 943 |
"type": "damage",
|
| 944 |
"target": "opponent",
|
| 945 |
+
"amount": "strong",
|
|
|
|
| 946 |
"condition": "ifDamagedThisTurn"
|
| 947 |
}
|
| 948 |
]
|
|
|
|
| 957 |
```json
|
| 958 |
{
|
| 959 |
"name": "Self Destruct",
|
|
|
|
| 960 |
"power": 200,
|
| 961 |
"accuracy": 100,
|
| 962 |
"pp": 1,
|
|
|
|
| 984 |
```json
|
| 985 |
{
|
| 986 |
"name": "Life Drain Overload",
|
|
|
|
| 987 |
"power": 0,
|
| 988 |
"accuracy": 100,
|
| 989 |
"pp": 3,
|
|
|
|
| 999 |
{
|
| 1000 |
"type": "modifyStats",
|
| 1001 |
"target": "self",
|
| 1002 |
+
"stats": { "attack": "greatly_decrease" },
|
| 1003 |
"condition": "afterUse"
|
| 1004 |
}
|
| 1005 |
]
|
|
|
|
| 1009 |
#### **Berserker's End** - More damage as HP gets lower, but can't heal
|
| 1010 |
```json
|
| 1011 |
{
|
| 1012 |
+
"name": "Berserker's End",
|
|
|
|
| 1013 |
"power": 80,
|
| 1014 |
"accuracy": 95,
|
| 1015 |
"pp": 10,
|
|
|
|
| 1019 |
{
|
| 1020 |
"type": "damage",
|
| 1021 |
"target": "opponent",
|
| 1022 |
+
"amount": "normal"
|
|
|
|
|
|
|
| 1023 |
},
|
| 1024 |
{
|
| 1025 |
"type": "damage",
|
| 1026 |
"target": "opponent",
|
| 1027 |
+
"amount": "strong",
|
|
|
|
| 1028 |
"condition": "ifLowHp"
|
| 1029 |
},
|
| 1030 |
{
|
| 1031 |
"type": "mechanicOverride",
|
| 1032 |
"target": "self",
|
| 1033 |
"mechanic": "healingBlocked",
|
| 1034 |
+
"value": true
|
|
|
|
| 1035 |
}
|
| 1036 |
]
|
| 1037 |
}
|
|
|
|
| 1040 |
#### **Mirror Shatter** - Reflect all damage taken this turn back doubled
|
| 1041 |
```json
|
| 1042 |
{
|
| 1043 |
+
"name": "Mirror Shatter",
|
|
|
|
| 1044 |
"power": 0,
|
| 1045 |
"accuracy": 100,
|
| 1046 |
"pp": 5,
|
|
|
|
| 1068 |
```json
|
| 1069 |
{
|
| 1070 |
"name": "Temporal Overload",
|
|
|
|
| 1071 |
"power": 0,
|
| 1072 |
"accuracy": 100,
|
| 1073 |
"pp": 2,
|
|
|
|
| 1096 |
```json
|
| 1097 |
{
|
| 1098 |
"name": "Blood Pact",
|
|
|
|
| 1099 |
"power": 0,
|
| 1100 |
"accuracy": 100,
|
| 1101 |
"pp": 3,
|
|
|
|
| 1123 |
```json
|
| 1124 |
{
|
| 1125 |
"name": "Soul Burn",
|
|
|
|
| 1126 |
"power": 150,
|
| 1127 |
"accuracy": 90,
|
| 1128 |
"pp": 5,
|
|
|
|
| 1150 |
```json
|
| 1151 |
{
|
| 1152 |
"name": "Cursed Gambit",
|
|
|
|
| 1153 |
"power": 0,
|
| 1154 |
"accuracy": 100,
|
| 1155 |
"pp": 1,
|
|
|
|
| 1178 |
```json
|
| 1179 |
{
|
| 1180 |
"name": "Apocalypse Strike",
|
|
|
|
| 1181 |
"power": 120,
|
| 1182 |
"accuracy": 85,
|
| 1183 |
"pp": 1,
|
|
|
|
| 1213 |
```json
|
| 1214 |
{
|
| 1215 |
"name": "Charging Blast",
|
|
|
|
| 1216 |
"power": 120,
|
| 1217 |
"accuracy": 90,
|
| 1218 |
"pp": 5,
|
|
|
|
| 1290 |
|
| 1291 |
This creates a dynamic battle system where player skill and strategic thinking matter more than raw stat advantages.
|
| 1292 |
|
| 1293 |
+
## Complete System Reference
|
| 1294 |
+
|
| 1295 |
+
### Available Conditions
|
| 1296 |
+
- **always**: Effect always applies when triggered
|
| 1297 |
+
- **onHit**: Effect applies only if the move hits successfully
|
| 1298 |
+
- **afterUse**: Effect applies after move execution regardless of hit/miss
|
| 1299 |
+
- **onCritical**: Effect applies only on critical hits
|
| 1300 |
+
- **ifLowHp**: Effect applies if user's HP < 25%
|
| 1301 |
+
- **ifHighHp**: Effect applies if user's HP > 75%
|
| 1302 |
+
- **thisTurn**: Effect lasts only for the current turn
|
| 1303 |
+
- **nextTurn**: Effect applies on the next turn
|
| 1304 |
+
- **turnAfterNext**: Effect applies two turns from now
|
| 1305 |
+
- **restOfBattle**: Effect persists for the remainder of the battle
|
| 1306 |
+
- **onCharging**: Effect applies during charging phase of two-turn moves
|
| 1307 |
+
- **afterCharging**: Effect applies after charging phase completes
|
| 1308 |
+
- **ifDamagedThisTurn**: Effect applies if user took damage this turn
|
| 1309 |
+
- **ifNotSuperEffective**: Effect applies if move would not be super effective
|
| 1310 |
+
- **ifMoveType:[type]**: Effect applies if move is of specified type
|
| 1311 |
+
- **ifStatus:[status]**: Effect applies if user has specified status
|
| 1312 |
+
- **whileFrozen**: Effect applies while user is frozen
|
| 1313 |
+
- **ifWeather:[weather]**: Effect applies if weather condition is active
|
| 1314 |
+
- **ifStatusMove**: Effect applies if move is a status move
|
| 1315 |
+
- **ifLucky50**: Effect applies on 50% random chance (good outcome)
|
| 1316 |
+
- **ifUnlucky50**: Effect applies on 50% random chance (bad outcome)
|
| 1317 |
+
|
| 1318 |
+
### Available Mechanic Overrides
|
| 1319 |
+
- **criticalHits**: Modify critical hit behavior
|
| 1320 |
+
- **statusImmunity**: Immunity to specific status effects
|
| 1321 |
+
- **statusReplacement:[status]**: Replace status effect with different effect
|
| 1322 |
+
- **damageReflection**: Reflect damage back to attacker
|
| 1323 |
+
- **damageAbsorption**: Absorb damage of specific types
|
| 1324 |
+
- **damageCalculation**: Modify damage calculation rules
|
| 1325 |
+
- **damageMultiplier**: Multiply all damage dealt
|
| 1326 |
+
- **healingInversion**: Healing effects cause damage instead
|
| 1327 |
+
- **healingBlocked**: Prevent all healing
|
| 1328 |
+
- **priorityOverride**: Override move priority
|
| 1329 |
+
- **accuracyBypass**: Moves cannot miss
|
| 1330 |
+
- **typeImmunity**: Immunity to specific damage types
|
| 1331 |
+
- **typeChange**: Change Piclet's type
|
| 1332 |
+
- **contactDamage**: Deal damage to contact move users
|
| 1333 |
+
- **drainInversion**: HP drain heals target instead
|
| 1334 |
+
- **weatherImmunity**: Immunity to weather effects
|
| 1335 |
+
- **flagImmunity**: Immunity to moves with specific flags
|
| 1336 |
+
- **flagWeakness**: Extra damage from moves with specific flags
|
| 1337 |
+
- **flagResistance**: Reduced damage from moves with specific flags
|
| 1338 |
+
- **statModification**: Modify how stat changes work
|
| 1339 |
+
- **targetRedirection**: Change move targets
|
| 1340 |
+
- **extraTurn**: Grant additional turns
|
| 1341 |
+
|
| 1342 |
+
### Available Event Triggers
|
| 1343 |
+
- **onDamageTaken**: When this Piclet takes damage
|
| 1344 |
+
- **onDamageDealt**: When this Piclet deals damage
|
| 1345 |
+
- **onContactDamage**: When hit by a contact move
|
| 1346 |
+
- **onStatusInflicted**: When a status is applied to this Piclet
|
| 1347 |
+
- **onStatusMove**: When targeted by a status move
|
| 1348 |
+
- **onStatusMoveTargeted**: When targeted by opponent's status move
|
| 1349 |
+
- **onCriticalHit**: When this Piclet lands/receives a critical hit
|
| 1350 |
+
- **onHPDrained**: When HP is drained from this Piclet
|
| 1351 |
+
- **onKO**: When this Piclet knocks out an opponent
|
| 1352 |
+
- **onSwitchIn**: When this Piclet enters battle
|
| 1353 |
+
- **onSwitchOut**: When this Piclet leaves battle
|
| 1354 |
+
- **onWeatherChange**: When battlefield weather changes
|
| 1355 |
+
- **beforeMoveUse**: Just before this Piclet uses a move
|
| 1356 |
+
- **afterMoveUse**: Just after this Piclet uses a move
|
| 1357 |
+
- **onLowHP**: When HP drops below 25%
|
| 1358 |
+
- **onFullHP**: When HP is at 100%
|
| 1359 |
+
- **endOfTurn**: At the end of each turn
|
| 1360 |
+
- **onOpponentContactMove**: When opponent uses contact move
|
| 1361 |
+
|
| 1362 |
+
### Available Status Effects
|
| 1363 |
+
- **burn**: Ongoing fire damage
|
| 1364 |
+
- **freeze**: Cannot act (unless replaced by ability)
|
| 1365 |
+
- **paralyze**: Speed reduction and chance to be unable to move
|
| 1366 |
+
- **poison**: Ongoing poison damage
|
| 1367 |
+
- **sleep**: Cannot act for several turns
|
| 1368 |
+
- **confuse**: Chance to hit self instead of target
|
| 1369 |
+
|
| 1370 |
+
### Available Move Flags
|
| 1371 |
+
- **contact**: Makes physical contact
|
| 1372 |
+
- **bite**: Biting attack
|
| 1373 |
+
- **punch**: Punching attack
|
| 1374 |
+
- **sound**: Sound-based attack
|
| 1375 |
+
- **explosive**: Explosive attack
|
| 1376 |
+
- **draining**: Drains HP from target
|
| 1377 |
+
- **ground**: Ground-based attack
|
| 1378 |
+
- **priority**: Has natural priority
|
| 1379 |
+
- **lowPriority**: Has negative priority
|
| 1380 |
+
- **charging**: Requires charging turn
|
| 1381 |
+
- **recharge**: User must recharge after
|
| 1382 |
+
- **multiHit**: Hits multiple times
|
| 1383 |
+
- **twoTurn**: Takes two turns to execute
|
| 1384 |
+
- **sacrifice**: Involves self-sacrifice
|
| 1385 |
+
- **gambling**: Has random outcomes
|
| 1386 |
+
- **reckless**: High power with drawbacks
|
| 1387 |
+
- **reflectable**: Can be reflected
|
| 1388 |
+
- **snatchable**: Can be stolen
|
| 1389 |
+
- **copyable**: Can be copied
|
| 1390 |
+
- **protectable**: Blocked by Protect
|
| 1391 |
+
- **bypassProtect**: Ignores Protect
|
| 1392 |
+
|
| 1393 |
+
### Available Types
|
| 1394 |
+
|
| 1395 |
+
Types correspond to photographed objects in the real world:
|
| 1396 |
+
|
| 1397 |
+
- **beast** 🐾: Vertebrate wildlife — mammals, birds, reptiles. Raw physicality, instincts, and region-based variants
|
| 1398 |
+
- **bug** 🐛: Arthropods great and small: butterflies, beetles, mantises. Agile swarms, precision strikes, metamorphosis
|
| 1399 |
+
- **aquatic** 🌊: Life that swims, dives, sloshes: fish, octopus, ink-creatures, sentient puddles. Masters of tides and pressure
|
| 1400 |
+
- **flora** 🌿: Plants and fungi captured in bloom or decay. Growth, spores, vines, seasonal shifts
|
| 1401 |
+
- **mineral** 🪨: Stones, crystals, metals shaped by earth's depths. High durability, reflective armor, seismic shocks
|
| 1402 |
+
- **space** ✨: Stars, moon, cosmic objects not of this world. Stellar energy, gravitational effects, void manipulation
|
| 1403 |
+
- **machina** ⚙️: Engineered devices from gadgets to heavy machinery. Gears, circuits, drones, power surges
|
| 1404 |
+
- **structure** 🏛️: Buildings, bridges, monuments, ruins as titans. Fortification, terrain shaping, zone denial
|
| 1405 |
+
- **culture** 🎨: Art, fashion, toys, written symbols. Buffs, debuffs, illusion, story-driven interactions
|
| 1406 |
+
- **cuisine** 🍣: Dishes, drinks, culinary artistry. Flavors, aromas, temperature shifts for support or offense
|
| 1407 |
+
- **normal** 👤: Attack type only (no Piclets are Normal type). Represents mundane, non-specialized attacks
|
| 1408 |
+
|
| 1409 |
+
### Type Effectiveness Chart
|
| 1410 |
+
|
| 1411 |
+
| ATK \ DEF | 🐾 Beast | 🐛 Bug | 🌊 Aquatic | 🌿 Flora | 🪨 Mineral | ✨Space | ⚙️ Machina | 🏛️ Structure | 🎨 Culture | 🍣 Cuisine |
|
| 1412 |
+
| ----------------- | :------: | :----: | :--------: | :------: | :--------: | :------: | :--------: | :-----------: | :--------: | :--------: |
|
| 1413 |
+
| **🐾 Beast** | 1 | **×2** | 1 | 1 | ×½ | **0** | ×½ | ×½ | **×2** | **×2** |
|
| 1414 |
+
| **🐛 Bug** | **×2** | 1 | 1 | **×2** | ×½ | ×½ | 1 | **0** | ×½ | ×½ |
|
| 1415 |
+
| **🌊 Aquatic** | 1 | 1 | 1 | ×½ | **×2** | **×2** | **×2** | 1 | ×½ | ×½ |
|
| 1416 |
+
| **🌿 Flora** | 1 | **×2** | **×2** | 1 | **×2** | ×½ | **0** | **×2** | 1 | ×½ |
|
| 1417 |
+
| **🪨 Mineral** | **×2** | **×2** | ×½ | ×½ | 1 | ×½ | **×2** | 1 | 1 | **0** |
|
| 1418 |
+
| **✨ Space** | **0** | **×2** | ×½ | **×2** | **×2** | 1 | ×½ | **×2** | ×½ | ×½ |
|
| 1419 |
+
| **⚙️ Machina** | **×2** | ×½ | ×½ | **×2** | ×½ | ×½ | 1 | **×2** | 1 | 1 |
|
| 1420 |
+
| **🏛️ Structure** | ×½ | ×½ | 1 | 1 | 1 | ×½ | **×2** | 1 | **×2** | **×2** |
|
| 1421 |
+
| **🎨 Culture** | ×½ | ×½ | 1 | 1 | **0** | **×2** | **×2** | **×2** | 1 | ×½ |
|
| 1422 |
+
| **🍣 Cuisine** | **×2** | ×½ | ×½ | 1 | **0** | **×2** | 1 | ×½ | **×2** | 1 |
|
| 1423 |
+
| **👤 Normal** | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
|
| 1424 |
+
|
| 1425 |
+
**Legend:**
|
| 1426 |
+
- **×2** = Super effective (2x damage)
|
| 1427 |
+
- **×½** = Not very effective (0.5x damage)
|
| 1428 |
+
- **0** = No effect (0x damage)
|
| 1429 |
+
- **1** = Normal effectiveness (1x damage)
|
| 1430 |
+
|
| 1431 |
+
## JSON Schema
|
| 1432 |
+
|
| 1433 |
+
```json
|
| 1434 |
+
{
|
| 1435 |
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
| 1436 |
+
"type": "object",
|
| 1437 |
+
"title": "Piclet Definition",
|
| 1438 |
+
"required": ["name", "description", "tier", "primaryType", "baseStats", "nature", "specialAbility", "movepool"],
|
| 1439 |
+
"properties": {
|
| 1440 |
+
"name": {
|
| 1441 |
+
"type": "string",
|
| 1442 |
+
"description": "The name of the Piclet"
|
| 1443 |
+
},
|
| 1444 |
+
"description": {
|
| 1445 |
+
"type": "string",
|
| 1446 |
+
"description": "Flavor text describing the Piclet"
|
| 1447 |
+
},
|
| 1448 |
+
"tier": {
|
| 1449 |
+
"type": "string",
|
| 1450 |
+
"enum": ["low", "medium", "high", "legendary"],
|
| 1451 |
+
"description": "Power tier of the Piclet"
|
| 1452 |
+
},
|
| 1453 |
+
"primaryType": {
|
| 1454 |
+
"type": "string",
|
| 1455 |
+
"enum": ["beast", "bug", "aquatic", "flora", "mineral", "space", "machina", "structure", "culture", "cuisine"],
|
| 1456 |
+
"description": "Primary type of the Piclet"
|
| 1457 |
+
},
|
| 1458 |
+
"secondaryType": {
|
| 1459 |
+
"type": ["string", "null"],
|
| 1460 |
+
"enum": ["beast", "bug", "aquatic", "flora", "mineral", "space", "machina", "structure", "culture", "cuisine", null],
|
| 1461 |
+
"description": "Optional secondary type"
|
| 1462 |
+
},
|
| 1463 |
+
"baseStats": {
|
| 1464 |
+
"type": "object",
|
| 1465 |
+
"required": ["hp", "attack", "defense", "speed"],
|
| 1466 |
+
"properties": {
|
| 1467 |
+
"hp": {"type": "integer", "minimum": 1, "maximum": 255},
|
| 1468 |
+
"attack": {"type": "integer", "minimum": 1, "maximum": 255},
|
| 1469 |
+
"defense": {"type": "integer", "minimum": 1, "maximum": 255},
|
| 1470 |
+
"speed": {"type": "integer", "minimum": 1, "maximum": 255}
|
| 1471 |
+
},
|
| 1472 |
+
"additionalProperties": false
|
| 1473 |
+
},
|
| 1474 |
+
"nature": {
|
| 1475 |
+
"type": "string",
|
| 1476 |
+
"description": "Personality trait affecting stats or behavior"
|
| 1477 |
+
},
|
| 1478 |
+
"specialAbility": {
|
| 1479 |
+
"$ref": "#/definitions/SpecialAbility"
|
| 1480 |
+
},
|
| 1481 |
+
"movepool": {
|
| 1482 |
+
"type": "array",
|
| 1483 |
+
"items": {"$ref": "#/definitions/Move"},
|
| 1484 |
+
"minItems": 1,
|
| 1485 |
+
"maxItems": 8
|
| 1486 |
+
}
|
| 1487 |
+
},
|
| 1488 |
+
"additionalProperties": false,
|
| 1489 |
+
"definitions": {
|
| 1490 |
+
"SpecialAbility": {
|
| 1491 |
+
"type": "object",
|
| 1492 |
+
"required": ["name", "description"],
|
| 1493 |
+
"properties": {
|
| 1494 |
+
"name": {"type": "string"},
|
| 1495 |
+
"description": {"type": "string"},
|
| 1496 |
+
"effects": {
|
| 1497 |
+
"type": "array",
|
| 1498 |
+
"items": {"$ref": "#/definitions/Effect"}
|
| 1499 |
+
},
|
| 1500 |
+
"triggers": {
|
| 1501 |
+
"type": "array",
|
| 1502 |
+
"items": {"$ref": "#/definitions/Trigger"}
|
| 1503 |
+
}
|
| 1504 |
+
},
|
| 1505 |
+
"additionalProperties": false
|
| 1506 |
+
},
|
| 1507 |
+
"Move": {
|
| 1508 |
+
"type": "object",
|
| 1509 |
+
"required": ["name", "type", "power", "accuracy", "pp", "priority", "flags", "effects"],
|
| 1510 |
+
"properties": {
|
| 1511 |
+
"name": {"type": "string"},
|
| 1512 |
+
"type": {
|
| 1513 |
+
"type": "string",
|
| 1514 |
+
"enum": ["beast", "bug", "aquatic", "flora", "mineral", "space", "machina", "structure", "culture", "cuisine", "normal"]
|
| 1515 |
+
},
|
| 1516 |
+
"power": {"type": "integer", "minimum": 0, "maximum": 250},
|
| 1517 |
+
"accuracy": {"type": "integer", "minimum": 0, "maximum": 100},
|
| 1518 |
+
"pp": {"type": "integer", "minimum": 1, "maximum": 50},
|
| 1519 |
+
"priority": {"type": "integer", "minimum": -5, "maximum": 5},
|
| 1520 |
+
"flags": {
|
| 1521 |
+
"type": "array",
|
| 1522 |
+
"items": {
|
| 1523 |
+
"type": "string",
|
| 1524 |
+
"enum": ["contact", "bite", "punch", "sound", "explosive", "draining", "ground", "priority", "lowPriority", "charging", "recharge", "multiHit", "twoTurn", "sacrifice", "gambling", "reckless", "reflectable", "snatchable", "copyable", "protectable", "bypassProtect"]
|
| 1525 |
+
},
|
| 1526 |
+
"uniqueItems": true
|
| 1527 |
+
},
|
| 1528 |
+
"effects": {
|
| 1529 |
+
"type": "array",
|
| 1530 |
+
"items": {"$ref": "#/definitions/Effect"},
|
| 1531 |
+
"minItems": 1
|
| 1532 |
+
}
|
| 1533 |
+
},
|
| 1534 |
+
"additionalProperties": false
|
| 1535 |
+
},
|
| 1536 |
+
"Effect": {
|
| 1537 |
+
"type": "object",
|
| 1538 |
+
"required": ["type"],
|
| 1539 |
+
"properties": {
|
| 1540 |
+
"type": {
|
| 1541 |
+
"type": "string",
|
| 1542 |
+
"enum": ["damage", "modifyStats", "applyStatus", "heal", "manipulatePP", "fieldEffect", "counter", "priority", "removeStatus", "mechanicOverride"]
|
| 1543 |
+
},
|
| 1544 |
+
"target": {
|
| 1545 |
+
"type": "string",
|
| 1546 |
+
"enum": ["self", "opponent", "allies", "all", "attacker", "field", "playerSide", "opponentSide"]
|
| 1547 |
+
},
|
| 1548 |
+
"condition": {
|
| 1549 |
+
"type": "string",
|
| 1550 |
+
"enum": ["always", "onHit", "afterUse", "onCritical", "ifLowHp", "ifHighHp", "thisTurn", "nextTurn", "turnAfterNext", "restOfBattle", "onCharging", "afterCharging", "ifDamagedThisTurn", "ifNotSuperEffective", "ifStatusMove", "ifLucky50", "ifUnlucky50", "whileFrozen"]
|
| 1551 |
+
}
|
| 1552 |
+
},
|
| 1553 |
+
"allOf": [
|
| 1554 |
+
{
|
| 1555 |
+
"if": {"properties": {"type": {"const": "damage"}}},
|
| 1556 |
+
"then": {
|
| 1557 |
+
"required": ["amount"],
|
| 1558 |
+
"properties": {
|
| 1559 |
+
"amount": {
|
| 1560 |
+
"type": "string",
|
| 1561 |
+
"enum": ["weak", "normal", "strong", "extreme"]
|
| 1562 |
+
}
|
| 1563 |
+
}
|
| 1564 |
+
}
|
| 1565 |
+
},
|
| 1566 |
+
{
|
| 1567 |
+
"if": {"properties": {"type": {"const": "modifyStats"}}},
|
| 1568 |
+
"then": {
|
| 1569 |
+
"required": ["stats"],
|
| 1570 |
+
"properties": {
|
| 1571 |
+
"stats": {
|
| 1572 |
+
"type": "object",
|
| 1573 |
+
"properties": {
|
| 1574 |
+
"hp": {"type": "string", "enum": ["increase", "decrease", "greatly_increase", "greatly_decrease"]},
|
| 1575 |
+
"attack": {"type": "string", "enum": ["increase", "decrease", "greatly_increase", "greatly_decrease"]},
|
| 1576 |
+
"defense": {"type": "string", "enum": ["increase", "decrease", "greatly_increase", "greatly_decrease"]},
|
| 1577 |
+
"speed": {"type": "string", "enum": ["increase", "decrease", "greatly_increase", "greatly_decrease"]},
|
| 1578 |
+
"accuracy": {"type": "string", "enum": ["increase", "decrease", "greatly_increase", "greatly_decrease"]}
|
| 1579 |
+
},
|
| 1580 |
+
"additionalProperties": false,
|
| 1581 |
+
"minProperties": 1
|
| 1582 |
+
}
|
| 1583 |
+
}
|
| 1584 |
+
}
|
| 1585 |
+
},
|
| 1586 |
+
{
|
| 1587 |
+
"if": {"properties": {"type": {"const": "applyStatus"}}},
|
| 1588 |
+
"then": {
|
| 1589 |
+
"required": ["status"],
|
| 1590 |
+
"properties": {
|
| 1591 |
+
"status": {
|
| 1592 |
+
"type": "string",
|
| 1593 |
+
"enum": ["burn", "freeze", "paralyze", "poison", "sleep", "confuse"]
|
| 1594 |
+
}
|
| 1595 |
+
}
|
| 1596 |
+
}
|
| 1597 |
+
},
|
| 1598 |
+
{
|
| 1599 |
+
"if": {"properties": {"type": {"const": "heal"}}},
|
| 1600 |
+
"then": {
|
| 1601 |
+
"required": ["amount"],
|
| 1602 |
+
"properties": {
|
| 1603 |
+
"amount": {"type": "string", "enum": ["small", "medium", "large", "full"]}
|
| 1604 |
+
}
|
| 1605 |
+
}
|
| 1606 |
+
},
|
| 1607 |
+
{
|
| 1608 |
+
"if": {"properties": {"type": {"const": "manipulatePP"}}},
|
| 1609 |
+
"then": {
|
| 1610 |
+
"required": ["action", "amount"],
|
| 1611 |
+
"properties": {
|
| 1612 |
+
"action": {"type": "string", "enum": ["drain", "restore", "disable"]},
|
| 1613 |
+
"amount": {"type": "string", "enum": ["small", "medium", "large"]}
|
| 1614 |
+
}
|
| 1615 |
+
}
|
| 1616 |
+
},
|
| 1617 |
+
{
|
| 1618 |
+
"if": {"properties": {"type": {"const": "fieldEffect"}}},
|
| 1619 |
+
"then": {
|
| 1620 |
+
"required": ["effect"],
|
| 1621 |
+
"properties": {
|
| 1622 |
+
"effect": {"type": "string"},
|
| 1623 |
+
"stackable": {"type": "boolean"}
|
| 1624 |
+
}
|
| 1625 |
+
}
|
| 1626 |
+
},
|
| 1627 |
+
{
|
| 1628 |
+
"if": {"properties": {"type": {"const": "counter"}}},
|
| 1629 |
+
"then": {
|
| 1630 |
+
"required": ["counterType", "strength"],
|
| 1631 |
+
"properties": {
|
| 1632 |
+
"counterType": {"type": "string", "enum": ["physical", "special", "any"]},
|
| 1633 |
+
"strength": {"type": "string", "enum": ["weak", "normal", "strong"]}
|
| 1634 |
+
}
|
| 1635 |
+
}
|
| 1636 |
+
},
|
| 1637 |
+
{
|
| 1638 |
+
"if": {"properties": {"type": {"const": "priority"}}},
|
| 1639 |
+
"then": {
|
| 1640 |
+
"required": ["value"],
|
| 1641 |
+
"properties": {
|
| 1642 |
+
"value": {"type": "integer", "minimum": -5, "maximum": 5}
|
| 1643 |
+
}
|
| 1644 |
+
}
|
| 1645 |
+
},
|
| 1646 |
+
{
|
| 1647 |
+
"if": {"properties": {"type": {"const": "removeStatus"}}},
|
| 1648 |
+
"then": {
|
| 1649 |
+
"required": ["status"],
|
| 1650 |
+
"properties": {
|
| 1651 |
+
"status": {
|
| 1652 |
+
"type": "string",
|
| 1653 |
+
"enum": ["burn", "freeze", "paralyze", "poison", "sleep", "confuse"]
|
| 1654 |
+
}
|
| 1655 |
+
}
|
| 1656 |
+
}
|
| 1657 |
+
},
|
| 1658 |
+
{
|
| 1659 |
+
"if": {"properties": {"type": {"const": "mechanicOverride"}}},
|
| 1660 |
+
"then": {
|
| 1661 |
+
"required": ["mechanic", "value"],
|
| 1662 |
+
"properties": {
|
| 1663 |
+
"mechanic": {
|
| 1664 |
+
"type": "string",
|
| 1665 |
+
"enum": ["criticalHits", "statusImmunity", "damageReflection", "damageAbsorption", "damageCalculation", "damageMultiplier", "healingInversion", "healingBlocked", "priorityOverride", "accuracyBypass", "typeImmunity", "typeChange", "contactDamage", "drainInversion", "weatherImmunity", "flagImmunity", "flagWeakness", "flagResistance", "statModification", "targetRedirection", "extraTurn"]
|
| 1666 |
+
},
|
| 1667 |
+
"value": {}
|
| 1668 |
+
}
|
| 1669 |
+
}
|
| 1670 |
+
}
|
| 1671 |
+
],
|
| 1672 |
+
"additionalProperties": false
|
| 1673 |
+
},
|
| 1674 |
+
"Trigger": {
|
| 1675 |
+
"type": "object",
|
| 1676 |
+
"required": ["event", "effects"],
|
| 1677 |
+
"properties": {
|
| 1678 |
+
"event": {
|
| 1679 |
+
"type": "string",
|
| 1680 |
+
"enum": ["onDamageTaken", "onDamageDealt", "onContactDamage", "onStatusInflicted", "onStatusMove", "onStatusMoveTargeted", "onCriticalHit", "onHPDrained", "onKO", "onSwitchIn", "onSwitchOut", "onWeatherChange", "beforeMoveUse", "afterMoveUse", "onLowHP", "onFullHP", "endOfTurn", "onOpponentContactMove"]
|
| 1681 |
+
},
|
| 1682 |
+
"condition": {
|
| 1683 |
+
"type": "string",
|
| 1684 |
+
"enum": ["always", "onHit", "afterUse", "onCritical", "ifLowHp", "ifHighHp", "thisTurn", "nextTurn", "turnAfterNext", "restOfBattle", "onCharging", "afterCharging", "ifDamagedThisTurn", "ifNotSuperEffective", "ifStatusMove", "ifLucky50", "ifUnlucky50", "whileFrozen"]
|
| 1685 |
+
},
|
| 1686 |
+
"effects": {
|
| 1687 |
+
"type": "array",
|
| 1688 |
+
"items": {"$ref": "#/definitions/Effect"},
|
| 1689 |
+
"minItems": 1
|
| 1690 |
+
}
|
| 1691 |
+
},
|
| 1692 |
+
"additionalProperties": false
|
| 1693 |
+
}
|
| 1694 |
+
}
|
| 1695 |
+
}
|
| 1696 |
+
```
|
| 1697 |
+
|
| 1698 |
## Complete Example: Tempest Wraith
|
| 1699 |
|
| 1700 |
Here's a full example of a Piclet using the complete schema with advanced abilities and dramatic moves:
|
|
|
|
| 1702 |
```json
|
| 1703 |
{
|
| 1704 |
"name": "Tempest Wraith",
|
| 1705 |
+
"description": "A ghostly creature born from violent storms, wielding cosmic energy and shadowy illusions",
|
| 1706 |
"tier": "high",
|
| 1707 |
+
"primaryType": "space",
|
| 1708 |
+
"secondaryType": "culture",
|
| 1709 |
"baseStats": {
|
| 1710 |
"hp": 75,
|
| 1711 |
+
"attack": 95,
|
| 1712 |
"defense": 45,
|
|
|
|
|
|
|
| 1713 |
"speed": 85
|
| 1714 |
},
|
| 1715 |
"nature": "timid",
|
|
|
|
| 1739 |
{
|
| 1740 |
"type": "modifyStats",
|
| 1741 |
"target": "self",
|
| 1742 |
+
"stats": { "attack": "increase" }
|
| 1743 |
}
|
| 1744 |
]
|
| 1745 |
}
|
|
|
|
| 1748 |
"movepool": [
|
| 1749 |
{
|
| 1750 |
"name": "Shadow Pulse",
|
| 1751 |
+
"type": "culture",
|
|
|
|
| 1752 |
"power": 70,
|
| 1753 |
"accuracy": 100,
|
| 1754 |
"pp": 15,
|
|
|
|
| 1758 |
{
|
| 1759 |
"type": "damage",
|
| 1760 |
"target": "opponent",
|
| 1761 |
+
"amount": "normal"
|
| 1762 |
},
|
| 1763 |
{
|
| 1764 |
"type": "applyStatus",
|
| 1765 |
"target": "opponent",
|
| 1766 |
+
"status": "confuse"
|
|
|
|
|
|
|
| 1767 |
}
|
| 1768 |
]
|
| 1769 |
},
|
| 1770 |
{
|
| 1771 |
+
"name": "Cosmic Strike",
|
| 1772 |
+
"type": "space",
|
|
|
|
| 1773 |
"power": 85,
|
| 1774 |
"accuracy": 90,
|
| 1775 |
"pp": 10,
|
|
|
|
| 1779 |
{
|
| 1780 |
"type": "damage",
|
| 1781 |
"target": "opponent",
|
| 1782 |
+
"amount": "normal"
|
| 1783 |
},
|
| 1784 |
{
|
| 1785 |
"type": "applyStatus",
|
| 1786 |
"target": "opponent",
|
| 1787 |
+
"status": "paralyze"
|
|
|
|
|
|
|
| 1788 |
}
|
| 1789 |
]
|
| 1790 |
},
|
| 1791 |
{
|
| 1792 |
"name": "Spectral Drain",
|
| 1793 |
+
"type": "culture",
|
|
|
|
| 1794 |
"power": 60,
|
| 1795 |
"accuracy": 95,
|
| 1796 |
"pp": 12,
|
|
|
|
| 1806 |
{
|
| 1807 |
"type": "heal",
|
| 1808 |
"target": "self",
|
| 1809 |
+
"amount": "medium"
|
|
|
|
|
|
|
| 1810 |
}
|
| 1811 |
]
|
| 1812 |
},
|
| 1813 |
{
|
| 1814 |
+
"name": "Void Sacrifice",
|
| 1815 |
+
"type": "space",
|
|
|
|
| 1816 |
"power": 130,
|
| 1817 |
"accuracy": 85,
|
| 1818 |
"pp": 1,
|
|
|
|
| 1829 |
"type": "damage",
|
| 1830 |
"target": "self",
|
| 1831 |
"formula": "percentage",
|
| 1832 |
+
"value": 75
|
|
|
|
| 1833 |
},
|
| 1834 |
{
|
| 1835 |
"type": "fieldEffect",
|
| 1836 |
+
"effect": "voidStorm",
|
| 1837 |
"target": "field",
|
| 1838 |
+
"stackable": false
|
|
|
|
| 1839 |
}
|
| 1840 |
]
|
| 1841 |
}
|