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 |
}
|