@pkmn/engine 0.1.0-dev.84cc1a02 → 0.1.0-dev.86ae1278
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -3
- package/README.md +137 -71
- package/build/pkg/addon/browser.d.ts +3 -0
- package/build/pkg/addon/browser.js +43 -0
- package/build/pkg/addon/browser.js.map +1 -0
- package/build/pkg/addon/node.d.ts +3 -0
- package/build/pkg/addon/node.js +96 -0
- package/build/pkg/addon/node.js.map +1 -0
- package/build/pkg/addon.d.ts +9 -0
- package/build/pkg/addon.js +89 -0
- package/build/pkg/addon.js.map +1 -0
- package/build/pkg/data/ids.json +12 -12
- package/build/pkg/data/layout.json +27 -5
- package/build/pkg/data/protocol.json +69 -12
- package/build/pkg/data.d.ts +28 -7
- package/build/pkg/data.js +3 -5
- package/build/pkg/data.js.map +1 -1
- package/build/pkg/gen1.d.ts +5 -4
- package/build/pkg/gen1.js +49 -33
- package/build/pkg/gen1.js.map +1 -1
- package/build/pkg/index.d.ts +39 -22
- package/build/pkg/index.js +15 -10
- package/build/pkg/index.js.map +1 -1
- package/build/pkg/protocol.d.ts +24 -3
- package/build/pkg/protocol.js +127 -104
- package/build/pkg/protocol.js.map +1 -1
- package/build/tools/debug.js +101 -0
- package/build/tools/debug.js.map +1 -0
- package/build/tools/display/debug.jsx +128 -0
- package/build/tools/display/debug.jsx.map +1 -0
- package/build/tools/display/index.js +132 -0
- package/build/tools/display/index.js.map +1 -0
- package/build/tools/display/ui.jsx +349 -0
- package/build/tools/display/ui.jsx.map +1 -0
- package/build/tools/display/util.js +18 -0
- package/build/tools/display/util.js.map +1 -0
- package/build.zig +300 -153
- package/package.json +101 -48
- package/src/bin/install-pkmn-engine +71 -37
- package/src/bin/pkmn-debug +62 -0
- package/src/lib/common/array.zig +77 -0
- package/src/lib/common/battle.zig +17 -0
- package/src/lib/common/data.zig +19 -31
- package/src/lib/common/debug.zig +51 -15
- package/src/lib/common/js.zig +120 -0
- package/src/lib/common/optional.zig +71 -0
- package/src/lib/common/options.zig +16 -3
- package/src/lib/common/protocol.zig +947 -403
- package/src/lib/common/rational.zig +447 -0
- package/src/lib/common/rng.zig +31 -22
- package/src/lib/common/util.zig +61 -0
- package/src/lib/gen1/calc.zig +959 -0
- package/src/lib/gen1/chance.zig +1169 -0
- package/src/lib/gen1/data/moves.zig +202 -190
- package/src/lib/gen1/data/species.zig +5 -5
- package/src/lib/gen1/data/types.zig +10 -10
- package/src/lib/gen1/data.zig +98 -83
- package/src/lib/gen1/helpers.zig +142 -40
- package/src/lib/gen1/mechanics.zig +1313 -877
- package/src/lib/gen2/calc.zig +161 -0
- package/src/lib/gen2/chance.zig +902 -0
- package/src/lib/gen2/data/items.zig +14 -20
- package/src/lib/gen2/data/moves.zig +664 -570
- package/src/lib/gen2/data/species.zig +2 -2
- package/src/lib/gen2/data/types.zig +137 -34
- package/src/lib/gen2/data.zig +129 -90
- package/src/lib/gen2/generated.zig +806 -0
- package/src/lib/gen2/helpers.zig +54 -32
- package/src/lib/gen2/mechanics.zig +3564 -15
- package/src/lib/node.zig +131 -0
- package/src/lib/pkmn.zig +88 -12
- package/src/lib/wasm.zig +13 -0
- package/src/tools/display/dom.ts +96 -0
- package/src/tools/display/ui.css +351 -0
- package/src/lib/binding/node.zig +0 -229
- package/src/lib/binding/wasm.zig +0 -10
- package/src/lib/gen1/README.md +0 -778
- package/src/lib/gen2/README.md +0 -309
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addon.js","sourceRoot":"","sources":["../../src/pkg/addon.ts"],"names":[],"mappings":"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"}
|
package/build/pkg/data/ids.json
CHANGED
|
@@ -20,15 +20,15 @@
|
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"types": [
|
|
23
|
+
"Ground",
|
|
24
|
+
"Rock",
|
|
25
|
+
"Steel",
|
|
23
26
|
"Normal",
|
|
24
27
|
"Fighting",
|
|
25
28
|
"Flying",
|
|
26
29
|
"Poison",
|
|
27
|
-
"Ground",
|
|
28
|
-
"Rock",
|
|
29
30
|
"Bug",
|
|
30
31
|
"Ghost",
|
|
31
|
-
"Steel",
|
|
32
32
|
"???",
|
|
33
33
|
"Fire",
|
|
34
34
|
"Water",
|
|
@@ -40,15 +40,15 @@
|
|
|
40
40
|
"Dark"
|
|
41
41
|
],
|
|
42
42
|
"items": [
|
|
43
|
+
"softsand",
|
|
44
|
+
"hardstone",
|
|
45
|
+
"metalcoat",
|
|
43
46
|
"pinkbow",
|
|
44
47
|
"blackbelt",
|
|
45
48
|
"sharpbeak",
|
|
46
49
|
"poisonbarb",
|
|
47
|
-
"softsand",
|
|
48
|
-
"hardstone",
|
|
49
50
|
"silverpowder",
|
|
50
51
|
"spelltag",
|
|
51
|
-
"metalcoat",
|
|
52
52
|
"polkadotbow",
|
|
53
53
|
"charcoal",
|
|
54
54
|
"mysticwater",
|
|
@@ -65,21 +65,21 @@
|
|
|
65
65
|
"stick",
|
|
66
66
|
"thickclub",
|
|
67
67
|
"focusband",
|
|
68
|
-
"berryjuice",
|
|
69
68
|
"scopelens",
|
|
70
69
|
"leftovers",
|
|
71
70
|
"berserkgene",
|
|
72
71
|
"lightball",
|
|
72
|
+
"berry",
|
|
73
|
+
"berryjuice",
|
|
74
|
+
"goldberry",
|
|
75
|
+
"mintberry",
|
|
73
76
|
"psncureberry",
|
|
74
77
|
"przcureberry",
|
|
75
|
-
"burntberry",
|
|
76
78
|
"iceberry",
|
|
77
|
-
"
|
|
78
|
-
"mintberry",
|
|
79
|
+
"burntberry",
|
|
79
80
|
"miracleberry",
|
|
81
|
+
"bitterberry",
|
|
80
82
|
"mysteryberry",
|
|
81
|
-
"berry",
|
|
82
|
-
"goldberry",
|
|
83
83
|
"masterball",
|
|
84
84
|
"ultraball",
|
|
85
85
|
"greatball",
|
|
@@ -4,15 +4,17 @@
|
|
|
4
4
|
"Battle": 384,
|
|
5
5
|
"Side": 184,
|
|
6
6
|
"Pokemon": 24,
|
|
7
|
-
"ActivePokemon": 32
|
|
7
|
+
"ActivePokemon": 32,
|
|
8
|
+
"Actions": 16,
|
|
9
|
+
"Summaries": 12
|
|
8
10
|
},
|
|
9
11
|
"offsets": {
|
|
10
12
|
"Battle": {
|
|
11
13
|
"sides": 0,
|
|
12
14
|
"turn": 368,
|
|
13
15
|
"last_damage": 370,
|
|
14
|
-
"
|
|
15
|
-
"rng":
|
|
16
|
+
"last_moves": 372,
|
|
17
|
+
"rng": 374
|
|
16
18
|
},
|
|
17
19
|
"Side": {
|
|
18
20
|
"pokemon": 0,
|
|
@@ -77,9 +79,29 @@
|
|
|
77
79
|
"state": 24,
|
|
78
80
|
"substitute": 40,
|
|
79
81
|
"transform": 48,
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
+
"disable_duration": 52,
|
|
83
|
+
"disable_move": 56,
|
|
82
84
|
"toxic": 59
|
|
85
|
+
},
|
|
86
|
+
"Action": {
|
|
87
|
+
"damage": 0,
|
|
88
|
+
"hit": 8,
|
|
89
|
+
"critical_hit": 10,
|
|
90
|
+
"secondary_chance": 12,
|
|
91
|
+
"speed_tie": 14,
|
|
92
|
+
"confused": 16,
|
|
93
|
+
"paralyzed": 18,
|
|
94
|
+
"duration": 20,
|
|
95
|
+
"durations": 24,
|
|
96
|
+
"move_slot": 40,
|
|
97
|
+
"multi_hit": 44,
|
|
98
|
+
"psywave": 48,
|
|
99
|
+
"metronome": 56
|
|
100
|
+
},
|
|
101
|
+
"Damage": {
|
|
102
|
+
"base": 0,
|
|
103
|
+
"final": 2,
|
|
104
|
+
"capped": 4
|
|
83
105
|
}
|
|
84
106
|
}
|
|
85
107
|
}
|
|
@@ -70,7 +70,8 @@
|
|
|
70
70
|
"Burst",
|
|
71
71
|
"ClearPositiveBoost",
|
|
72
72
|
"CanDynamax",
|
|
73
|
-
"SwapSideConditions"
|
|
73
|
+
"SwapSideConditions",
|
|
74
|
+
"Terastallize"
|
|
74
75
|
],
|
|
75
76
|
"Move": [
|
|
76
77
|
"None",
|
|
@@ -84,12 +85,14 @@
|
|
|
84
85
|
"Flinch",
|
|
85
86
|
"Disable",
|
|
86
87
|
"Recharge",
|
|
87
|
-
"PP"
|
|
88
|
+
"PP",
|
|
89
|
+
"Attract"
|
|
88
90
|
],
|
|
89
91
|
"Heal": [
|
|
90
92
|
"None",
|
|
91
93
|
"Silent",
|
|
92
|
-
"Drain"
|
|
94
|
+
"Drain",
|
|
95
|
+
"Leftovers"
|
|
93
96
|
],
|
|
94
97
|
"Damage": [
|
|
95
98
|
"None",
|
|
@@ -97,7 +100,13 @@
|
|
|
97
100
|
"Burn",
|
|
98
101
|
"Confusion",
|
|
99
102
|
"LeechSeed",
|
|
100
|
-
"RecoilOf"
|
|
103
|
+
"RecoilOf",
|
|
104
|
+
"Bind",
|
|
105
|
+
"Wrap",
|
|
106
|
+
"FireSpin",
|
|
107
|
+
"Clamp",
|
|
108
|
+
"Whirlpool",
|
|
109
|
+
"Spikes"
|
|
101
110
|
],
|
|
102
111
|
"Status": [
|
|
103
112
|
"None",
|
|
@@ -136,7 +145,15 @@
|
|
|
136
145
|
"Mist",
|
|
137
146
|
"Struggle",
|
|
138
147
|
"Substitute",
|
|
139
|
-
"Splash"
|
|
148
|
+
"Splash",
|
|
149
|
+
"Attract",
|
|
150
|
+
"LockOn",
|
|
151
|
+
"Bind",
|
|
152
|
+
"Wrap",
|
|
153
|
+
"FireSpin",
|
|
154
|
+
"Clamp",
|
|
155
|
+
"Whirlpool",
|
|
156
|
+
"BeatUp"
|
|
140
157
|
],
|
|
141
158
|
"Start": [
|
|
142
159
|
"Bide",
|
|
@@ -150,24 +167,64 @@
|
|
|
150
167
|
"Substitute",
|
|
151
168
|
"TypeChange",
|
|
152
169
|
"Disable",
|
|
153
|
-
"Mimic"
|
|
170
|
+
"Mimic",
|
|
171
|
+
"Nightmare",
|
|
172
|
+
"Curse",
|
|
173
|
+
"Foresight",
|
|
174
|
+
"Encore",
|
|
175
|
+
"FutureSight",
|
|
176
|
+
"PerishSong3Silent",
|
|
177
|
+
"PerishSong3",
|
|
178
|
+
"PerishSong2",
|
|
179
|
+
"PerishSong1",
|
|
180
|
+
"PerishSong0"
|
|
154
181
|
],
|
|
155
182
|
"End": [
|
|
156
183
|
"Disable",
|
|
157
184
|
"Confusion",
|
|
158
185
|
"Bide",
|
|
159
186
|
"Substitute",
|
|
187
|
+
"Nightmare",
|
|
188
|
+
"Curse",
|
|
189
|
+
"Foresight",
|
|
190
|
+
"Encore",
|
|
191
|
+
"FutureSight",
|
|
192
|
+
"LeechSeed",
|
|
193
|
+
"Bind",
|
|
194
|
+
"Wrap",
|
|
195
|
+
"FireSpin",
|
|
196
|
+
"Clamp",
|
|
197
|
+
"Whirlpool",
|
|
160
198
|
"DisableSilent",
|
|
161
199
|
"ConfusionSilent",
|
|
162
|
-
"
|
|
163
|
-
"
|
|
164
|
-
"
|
|
165
|
-
"
|
|
166
|
-
"
|
|
167
|
-
"
|
|
200
|
+
"MistSilent",
|
|
201
|
+
"FocusEnergySilent",
|
|
202
|
+
"LeechSeedSilent",
|
|
203
|
+
"ToxicSilent",
|
|
204
|
+
"LightScreenSilent",
|
|
205
|
+
"ReflectSilent",
|
|
206
|
+
"BideSilent"
|
|
168
207
|
],
|
|
169
208
|
"Immune": [
|
|
170
209
|
"None",
|
|
171
210
|
"OHKO"
|
|
211
|
+
],
|
|
212
|
+
"EndItem": [
|
|
213
|
+
"None",
|
|
214
|
+
"Eat"
|
|
215
|
+
],
|
|
216
|
+
"SetHP": [
|
|
217
|
+
"None",
|
|
218
|
+
"Silent"
|
|
219
|
+
],
|
|
220
|
+
"Side": [
|
|
221
|
+
"Safeguard",
|
|
222
|
+
"Reflect",
|
|
223
|
+
"LightScreen",
|
|
224
|
+
"Spikes"
|
|
225
|
+
],
|
|
226
|
+
"Weather": [
|
|
227
|
+
"None",
|
|
228
|
+
"Upkeep"
|
|
172
229
|
]
|
|
173
230
|
}
|
package/build/pkg/data.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GenerationNum, ID, TypeName } from '@pkmn/data';
|
|
2
2
|
export declare const LE: boolean;
|
|
3
3
|
export type IDs = [
|
|
4
4
|
{
|
|
5
|
-
types: TypeName[];
|
|
5
|
+
types: Exclude<TypeName, 'Dark' | 'Steel' | 'Fairy' | 'Stellar'>[];
|
|
6
6
|
},
|
|
7
7
|
{
|
|
8
8
|
items: ID[];
|
|
9
|
-
types: TypeName[];
|
|
9
|
+
types: Exclude<TypeName, 'Fairy' | 'Stellar'>[];
|
|
10
10
|
}
|
|
11
11
|
];
|
|
12
12
|
export declare const IDS: IDs;
|
|
@@ -15,7 +15,7 @@ export declare const PROTOCOL: {
|
|
|
15
15
|
[name: string]: number;
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
|
-
export declare const LAYOUT: {
|
|
18
|
+
export declare const LAYOUT: Array<{
|
|
19
19
|
sizes: {
|
|
20
20
|
[decl: string]: number;
|
|
21
21
|
};
|
|
@@ -24,11 +24,31 @@ export declare const LAYOUT: {
|
|
|
24
24
|
[field: string]: number;
|
|
25
25
|
};
|
|
26
26
|
};
|
|
27
|
-
}
|
|
27
|
+
}>;
|
|
28
28
|
export declare const Data: {
|
|
29
|
-
|
|
30
|
-
view(data: number[]): DataView;
|
|
29
|
+
view(buf: number[] | Buffer): DataView;
|
|
31
30
|
};
|
|
31
|
+
interface Generation {
|
|
32
|
+
num: GenerationNum;
|
|
33
|
+
species: {
|
|
34
|
+
get(id: ID): {
|
|
35
|
+
num: number;
|
|
36
|
+
} | undefined;
|
|
37
|
+
[Symbol.iterator](): Generator<{
|
|
38
|
+
id: ID;
|
|
39
|
+
num: number;
|
|
40
|
+
}, void>;
|
|
41
|
+
};
|
|
42
|
+
moves: {
|
|
43
|
+
get(id: ID): {
|
|
44
|
+
num: number;
|
|
45
|
+
} | undefined;
|
|
46
|
+
[Symbol.iterator](): Generator<{
|
|
47
|
+
id: ID;
|
|
48
|
+
num: number;
|
|
49
|
+
}, void>;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
32
52
|
/**
|
|
33
53
|
* Translation table for encoding/decoding Pokémon Showdown string identifiers
|
|
34
54
|
* to the identifiers used internally by the pkmn engine.
|
|
@@ -90,3 +110,4 @@ export declare class Lookup {
|
|
|
90
110
|
*/
|
|
91
111
|
itemByID(id: ID | undefined): number;
|
|
92
112
|
}
|
|
113
|
+
export {};
|
package/build/pkg/data.js
CHANGED
|
@@ -27,11 +27,9 @@ for (const gen of exports.LAYOUT) {
|
|
|
27
27
|
gen.offsets.Battle.p2 = gen.offsets.Battle.sides + gen.sizes.Side;
|
|
28
28
|
}
|
|
29
29
|
exports.Data = new class {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
view(data) {
|
|
34
|
-
return new DataView(this.buffer(data).buffer);
|
|
30
|
+
view(buf) {
|
|
31
|
+
buf = Array.isArray(buf) ? Buffer.from(buf) : buf;
|
|
32
|
+
return new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
35
33
|
}
|
|
36
34
|
};
|
|
37
35
|
const LOOKUPS = [];
|
package/build/pkg/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/pkg/data.ts"],"names":[],"mappings":";;;;;;AAEA,+DAAsC;AACtC,qEAA6C;AAC7C,yEAAgD;AAEnC,QAAA,EAAE,GAAG,CAAC,GAAG,EAAE;IACtB,MAAM,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC,EAAE,CAAC;AAOQ,QAAA,GAAG,GAAG,kBAAc,CAAC;AAErB,QAAA,QAAQ,GAA+C,EAAE,CAAC;AACvE,KAAK,MAAM,IAAI,IAAI,uBAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/pkg/data.ts"],"names":[],"mappings":"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"}
|
package/build/pkg/gen1.d.ts
CHANGED
|
@@ -39,10 +39,11 @@ export declare class Side implements Gen1.Side {
|
|
|
39
39
|
get(slot: Slot): Pokemon | undefined;
|
|
40
40
|
get lastUsedMove(): ID | undefined;
|
|
41
41
|
get lastSelectedMove(): ID | undefined;
|
|
42
|
-
get
|
|
42
|
+
get lastMoveIndex(): 1 | 2 | 3 | 4 | undefined;
|
|
43
|
+
get lastMoveCounterable(): boolean;
|
|
43
44
|
toJSON(): Gen1.Side;
|
|
44
45
|
static init(gen: Generation, lookup: Lookup, team: Partial<PokemonSet>[], data: DataView, offset: number): void;
|
|
45
|
-
static encode(gen: Generation, lookup: Lookup, battle: Data<Gen1.Battle>, side: Gen1.Side, data: DataView, offset: number): void;
|
|
46
|
+
static encode(gen: Generation, showdown: boolean, lookup: Lookup, battle: Data<Gen1.Battle>, side: Gen1.Side, data: DataView, offset: number): void;
|
|
46
47
|
}
|
|
47
48
|
export declare class Pokemon implements Gen1.Pokemon {
|
|
48
49
|
static Volatiles: {
|
|
@@ -77,11 +78,11 @@ export declare class Pokemon implements Gen1.Pokemon {
|
|
|
77
78
|
toxic: number;
|
|
78
79
|
};
|
|
79
80
|
private get sleep();
|
|
80
|
-
private get
|
|
81
|
+
private get ext();
|
|
81
82
|
private get toxic();
|
|
82
83
|
toJSON(): Gen1.Pokemon;
|
|
83
84
|
static init(gen: Generation, lookup: Lookup, set: Partial<PokemonSet>, data: DataView, offset: number, index: number): void;
|
|
84
|
-
static encodeStored(gen: Generation, lookup: Lookup, pokemon: Gen1.Pokemon, data: DataView, offset: number): void;
|
|
85
|
+
static encodeStored(gen: Generation, showdown: boolean, lookup: Lookup, pokemon: Gen1.Pokemon, data: DataView, offset: number): void;
|
|
85
86
|
static encodeActive(gen: Generation, lookup: Lookup, battle: Data<Gen1.Battle>, pokemon: Gen1.Pokemon | undefined, data: DataView, offset: number): void;
|
|
86
87
|
}
|
|
87
88
|
export declare class StoredPokemon {
|
package/build/pkg/gen1.js
CHANGED
|
@@ -50,7 +50,7 @@ class Battle {
|
|
|
50
50
|
this.config = config;
|
|
51
51
|
this.lookup = lookup;
|
|
52
52
|
this.data = data;
|
|
53
|
-
this.options = new ArrayBuffer(addon.size(0, '
|
|
53
|
+
this.options = new ArrayBuffer('inert' in config ? 0 : addon.size(0, 'choices'));
|
|
54
54
|
this.buf = config.log ? new ArrayBuffer(addon.size(0, 'log')) : undefined;
|
|
55
55
|
this.log = config.log ? new DataView(this.buf) : undefined;
|
|
56
56
|
this.cache = [undefined, undefined];
|
|
@@ -86,7 +86,7 @@ class Battle {
|
|
|
86
86
|
return this.data.getUint16(OFFSETS.Battle.last_damage, data_2.LE);
|
|
87
87
|
}
|
|
88
88
|
get prng() {
|
|
89
|
-
const offset = OFFSETS.Battle.
|
|
89
|
+
const offset = OFFSETS.Battle.last_moves + (this.config.showdown ? 4 : 2);
|
|
90
90
|
// Pokémon Showdown's PRNGSeed is always big-endian
|
|
91
91
|
const seed = [0, 0, 0, 0];
|
|
92
92
|
if (this.config.showdown) {
|
|
@@ -99,10 +99,10 @@ class Battle {
|
|
|
99
99
|
// Gen12RNG seed requires an index, but if we always rotate the seed based on the index when
|
|
100
100
|
// reading we can avoid tracking the index as it will always be zero. NB: the exact bits of
|
|
101
101
|
// the Battle will not roundtrip, but the *logical* Battle state will.
|
|
102
|
-
const index = this.data.getUint8(offset +
|
|
103
|
-
for (let i = 0; i <
|
|
102
|
+
const index = this.data.getUint8(offset + 9);
|
|
103
|
+
for (let i = 0; i < 9; i++) {
|
|
104
104
|
const j = i - index;
|
|
105
|
-
seed[j < 0 ? j +
|
|
105
|
+
seed[j < 0 ? j + 9 : j] = this.data.getUint8(offset + i);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
return seed;
|
|
@@ -127,20 +127,25 @@ class Battle {
|
|
|
127
127
|
const buf = new ArrayBuffer(SIZES.Battle);
|
|
128
128
|
const data = new DataView(buf);
|
|
129
129
|
let offset = OFFSETS.Battle.p1;
|
|
130
|
-
const
|
|
130
|
+
const lastMoves = [];
|
|
131
131
|
for (const side of battle.sides) {
|
|
132
|
-
Side.encode(gen, lookup, battle, side, data, offset);
|
|
132
|
+
Side.encode(gen, !!options.showdown, lookup, battle, side, data, offset);
|
|
133
133
|
offset += SIZES.Side;
|
|
134
|
-
|
|
134
|
+
if (options.showdown) {
|
|
135
|
+
lastMoves.push(+!!side.lastMoveCounterable);
|
|
136
|
+
lastMoves.push((side.lastMoveIndex ?? 0));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
lastMoves.push((+!!side.lastMoveCounterable << 4) | (side.lastMoveIndex ?? 0));
|
|
140
|
+
}
|
|
135
141
|
}
|
|
136
142
|
data.setUint16(OFFSETS.Battle.turn, battle.turn, data_2.LE);
|
|
137
143
|
data.setUint16(OFFSETS.Battle.last_damage, battle.lastDamage, data_2.LE);
|
|
144
|
+
data.setUint8(OFFSETS.Battle.last_moves, lastMoves[0]);
|
|
145
|
+
data.setUint8(OFFSETS.Battle.last_moves + 1, lastMoves[1]);
|
|
138
146
|
if (options.showdown) {
|
|
139
|
-
data.
|
|
140
|
-
data.
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
data.setUint8(OFFSETS.Battle.last_selected_indexes, (indexes[1] << 4) | indexes[0]);
|
|
147
|
+
data.setUint8(OFFSETS.Battle.last_moves + 2, lastMoves[2]);
|
|
148
|
+
data.setUint8(OFFSETS.Battle.last_moves + 3, lastMoves[3]);
|
|
144
149
|
}
|
|
145
150
|
encodePRNG(data, battle.prng);
|
|
146
151
|
return new Battle(lookup, data, options);
|
|
@@ -201,25 +206,38 @@ class Side {
|
|
|
201
206
|
const m = this.data.getUint8(this.offset + OFFSETS.Side.last_selected_move);
|
|
202
207
|
return m === 0 ? undefined : this.lookup.moveByNum(m);
|
|
203
208
|
}
|
|
204
|
-
get
|
|
209
|
+
get lastMoveIndex() {
|
|
205
210
|
let m;
|
|
206
211
|
if (this.battle.config.showdown) {
|
|
207
212
|
const off = this.id === 'p1' ? 0 : 2;
|
|
208
|
-
m = this.data.
|
|
213
|
+
m = this.data.getUint8(OFFSETS.Battle.last_moves + off);
|
|
209
214
|
}
|
|
210
215
|
else {
|
|
211
|
-
|
|
212
|
-
m = this.
|
|
216
|
+
const off = this.id === 'p1' ? 0 : 1;
|
|
217
|
+
m = this.data.getUint8(OFFSETS.Battle.last_moves + off) & 0x0F;
|
|
213
218
|
}
|
|
214
219
|
return m === 0 ? undefined : m;
|
|
215
220
|
}
|
|
221
|
+
get lastMoveCounterable() {
|
|
222
|
+
let m;
|
|
223
|
+
if (this.battle.config.showdown) {
|
|
224
|
+
const off = this.id === 'p1' ? 1 : 3;
|
|
225
|
+
m = this.data.getUint8(OFFSETS.Battle.last_moves + off);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
const off = this.id === 'p1' ? 0 : 1;
|
|
229
|
+
m = this.data.getUint8(OFFSETS.Battle.last_moves + off) & 0xF0;
|
|
230
|
+
}
|
|
231
|
+
return m !== 0;
|
|
232
|
+
}
|
|
216
233
|
toJSON() {
|
|
217
234
|
return {
|
|
218
235
|
active: this.active?.toJSON(),
|
|
219
236
|
pokemon: Array.from(this.pokemon).map(p => p.toJSON()),
|
|
220
237
|
lastSelectedMove: this.lastSelectedMove,
|
|
221
238
|
lastUsedMove: this.lastUsedMove,
|
|
222
|
-
|
|
239
|
+
lastMoveIndex: this.lastMoveIndex,
|
|
240
|
+
lastMoveCounterable: this.lastMoveCounterable,
|
|
223
241
|
};
|
|
224
242
|
}
|
|
225
243
|
static init(gen, lookup, team, data, offset) {
|
|
@@ -230,11 +248,11 @@ class Side {
|
|
|
230
248
|
data.setUint8(offset + OFFSETS.Side.order + i, i + 1);
|
|
231
249
|
}
|
|
232
250
|
}
|
|
233
|
-
static encode(gen, lookup, battle, side, data, offset) {
|
|
251
|
+
static encode(gen, showdown, lookup, battle, side, data, offset) {
|
|
234
252
|
let i = 0;
|
|
235
253
|
for (const pokemon of side.pokemon) {
|
|
236
254
|
const off = offset + OFFSETS.Side.pokemon + SIZES.Pokemon * (pokemon.position - 1);
|
|
237
|
-
Pokemon.encodeStored(gen, lookup, pokemon, data, off);
|
|
255
|
+
Pokemon.encodeStored(gen, showdown, lookup, pokemon, data, off);
|
|
238
256
|
data.setUint8(offset + OFFSETS.Side.order + (pokemon.position - 1), i + 1);
|
|
239
257
|
i++;
|
|
240
258
|
}
|
|
@@ -360,11 +378,11 @@ class Pokemon {
|
|
|
360
378
|
const pp = this.data.getUint8(off + ((slot << 1) - 1));
|
|
361
379
|
const byte = this.data.getUint8(this.offset.active +
|
|
362
380
|
OFFSETS.ActivePokemon.volatiles +
|
|
363
|
-
(OFFSETS.Volatiles.
|
|
381
|
+
(OFFSETS.Volatiles.disable_move >> 3));
|
|
364
382
|
const disabled = ((byte & 0b111) === slot)
|
|
365
383
|
? this.data.getUint8(this.offset.active +
|
|
366
384
|
OFFSETS.ActivePokemon.volatiles +
|
|
367
|
-
(OFFSETS.Volatiles.
|
|
385
|
+
(OFFSETS.Volatiles.disable_duration >> 3)) >> 4
|
|
368
386
|
: undefined;
|
|
369
387
|
return { id, pp, disabled };
|
|
370
388
|
}
|
|
@@ -424,13 +442,14 @@ class Pokemon {
|
|
|
424
442
|
return status === 'psn' && this.toxic ? 'tox' : status;
|
|
425
443
|
}
|
|
426
444
|
get statusData() {
|
|
427
|
-
|
|
445
|
+
const sleep = this.sleep;
|
|
446
|
+
return { sleep, self: !!sleep && this.ext, toxic: this.toxic };
|
|
428
447
|
}
|
|
429
448
|
get sleep() {
|
|
430
449
|
const val = this.data.getUint8(this.offset.stored + OFFSETS.Pokemon.status);
|
|
431
450
|
return val & 0b111;
|
|
432
451
|
}
|
|
433
|
-
get
|
|
452
|
+
get ext() {
|
|
434
453
|
return (this.data.getUint8(this.offset.stored + OFFSETS.Pokemon.status) >> 7) === 1;
|
|
435
454
|
}
|
|
436
455
|
get toxic() {
|
|
@@ -480,7 +499,7 @@ class Pokemon {
|
|
|
480
499
|
data.setUint8(stored + OFFSETS.Pokemon.types, encodeTypes(lookup, species.types));
|
|
481
500
|
data.setUint8(stored + OFFSETS.Pokemon.level, set.level ?? 100);
|
|
482
501
|
}
|
|
483
|
-
static encodeStored(gen, lookup, pokemon, data, offset) {
|
|
502
|
+
static encodeStored(gen, showdown, lookup, pokemon, data, offset) {
|
|
484
503
|
let off = 0;
|
|
485
504
|
const stats = pokemon.stored.stats;
|
|
486
505
|
for (const stat of gen.stats) {
|
|
@@ -499,7 +518,7 @@ class Pokemon {
|
|
|
499
518
|
data.setUint8(offset + OFFSETS.Pokemon.species, species.num);
|
|
500
519
|
data.setUint8(offset + OFFSETS.Pokemon.types, encodeTypes(lookup, species.types));
|
|
501
520
|
data.setUint8(offset + OFFSETS.Pokemon.level, pokemon.level);
|
|
502
|
-
data.setUint8(offset + OFFSETS.Pokemon.status, encodeStatus(pokemon));
|
|
521
|
+
data.setUint8(offset + OFFSETS.Pokemon.status, encodeStatus(pokemon, showdown));
|
|
503
522
|
}
|
|
504
523
|
static encodeActive(gen, lookup, battle, pokemon, data, offset) {
|
|
505
524
|
if (!pokemon)
|
|
@@ -620,7 +639,7 @@ class StoredPokemon {
|
|
|
620
639
|
}
|
|
621
640
|
exports.StoredPokemon = StoredPokemon;
|
|
622
641
|
function encodePRNG(data, seed) {
|
|
623
|
-
const offset = OFFSETS.Battle.last_damage + 2 + (seed.length === 4 ? 4 :
|
|
642
|
+
const offset = OFFSETS.Battle.last_damage + 2 + (seed.length === 4 ? 4 : 2);
|
|
624
643
|
if (seed.length === 4) {
|
|
625
644
|
data.setUint16(offset, seed[data_2.LE ? 3 : 0], data_2.LE);
|
|
626
645
|
data.setUint16(offset + 2, seed[data_2.LE ? 2 : 1], data_2.LE);
|
|
@@ -628,7 +647,7 @@ function encodePRNG(data, seed) {
|
|
|
628
647
|
data.setUint16(offset + 6, seed[data_2.LE ? 0 : 3], data_2.LE);
|
|
629
648
|
}
|
|
630
649
|
else {
|
|
631
|
-
for (let i = 0; i <
|
|
650
|
+
for (let i = 0; i < 9; i++) {
|
|
632
651
|
data.setUint8(offset + i, seed[i]);
|
|
633
652
|
}
|
|
634
653
|
// NB: ArrayBuffer is zero initialized already so we don't need to set the index to zero
|
|
@@ -646,18 +665,15 @@ function decodeSigned(n) {
|
|
|
646
665
|
function encodeSigned(n) {
|
|
647
666
|
return (n < 0) ? 0b10000 + n : n;
|
|
648
667
|
}
|
|
649
|
-
function encodeStatus(pokemon) {
|
|
668
|
+
function encodeStatus(pokemon, showdown) {
|
|
650
669
|
if (pokemon.statusData.sleep) {
|
|
651
670
|
if (pokemon.status !== 'slp') {
|
|
652
671
|
throw new Error('Pokemon is not asleep but has non-zero sleep turns');
|
|
653
672
|
}
|
|
654
673
|
return (pokemon.statusData.self ? 0x80 : 0) | pokemon.statusData.sleep;
|
|
655
674
|
}
|
|
656
|
-
else if (pokemon.statusData.self) {
|
|
657
|
-
throw new Error('Pokemon is not asleep but has self-inflicted sleep bit set');
|
|
658
|
-
}
|
|
659
675
|
switch (pokemon.status) {
|
|
660
|
-
case 'tox':
|
|
676
|
+
case 'tox': return showdown ? 0b10001000 : 1 << 3;
|
|
661
677
|
case 'psn': return 1 << 3;
|
|
662
678
|
case 'brn': return 1 << 4;
|
|
663
679
|
case 'frz': return 1 << 5;
|