-
Notifications
You must be signed in to change notification settings - Fork 1
/
todo.txt
82 lines (59 loc) · 3.19 KB
/
todo.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# TODO
- only engine can init the move array
- only players in a battle can commit a move / reveal a move
---------------------------------------------------------------------------------------------
KNOWN BUGGY INTERACTIONS
1) If a move forces a switch and triggers before the other player can make its move, then the new mon will try to execute its move still
- The Engine handles the case where the stamina is insufficient (it just skips the move)
Ways to mitigate:
- avoid forcing opponent swap outs unless it's at low priority
- have the engine set the skipTurn flag on newly swapped in mons (if they have yet to run their turn yet)
- look into this later
2) If an effect calls dealDamage() and triggers AfterDamage, it can potentially cause an infinite loop!
(either if it calls dealDamage() on the opposing mon who also has a damaging attack with an AfterDamage trigger)
Ways to mitigate:
- deal damage directly (but skip calling dealDamage) on the Engine
- avoid dealing damage in the afterDamage hook itself
- maintain manual mutex to prevent infinite recurse
3) Ending a match before any moves are committed is valid
- Bypasses the timeout for the default validator
4) Malicious p0 can commit to a team that has an array of mons, but modify the mon moves prior to starting a battle (after p1 commits)
Ways to mitigate:
- Need to handle on the team registry angle probably
- Atm, restricting it to the same array of mon indices reduces the attack surface somewhat
5) No way to prevent move selection if the move is switch/no-op
Some effects / moves way wish to lock the user in. No easy way to handle this currently with the engine as-is.
Ways to mitigate
- Future iterations of the engine can do additional validation before letting SWITCH_MOVE_INDEX be considered valid on move reveal
---------------------------------------------------------------------------------------------
Later features:
- disabled / anti switch status effect
Status effects:
(Auto cure)
- Sleep, cannot take action, 33% chance of cure every turn, max 3 turns [x]
- Fright, takes 1 stamina damage every turn, 33% chance of cure every turn, max 3 turns [x]
(No cure)
- Frostbite, takes 1/16 damage every turn, reduces special attack by 50% [x]
- Burn, takes 1/16 damage every turn, reduces attack by 50% []
- Poison, takes 1/8 damage every turn []
- Shock, reduces speed by 50%, 25% chance cannot move []
Missing from attack calculator:
- critical hits
- variance
- STAB
---------------------------------------------------------------------------------------------
### random thoughts
- to think about move implementations:
- tricky moves to use as examples for edge cases:
- parting shot
- destiny bond
- substitute
- volt switch
- barrier/frost veil
- categorizing move types
- normal damaging moves (trade-off between accuracy and damage)
- normal damaging move + % to inflict additional effect (status, stat boost, stamina, etc.)
- stat boost (2 stages to any one stat) / (1 stage to two stats)
- healing (reduced healing over time)
- environmental (hazards/weather/etc.)
---------------------------------------------------------------------------------------------