@pkmn/engine 0.1.0-dev.b9fb6eab → 0.1.0-dev.c5fe6d07

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.
Files changed (55) hide show
  1. package/README.md +98 -59
  2. package/build/pkg/addon.d.ts +7 -0
  3. package/build/pkg/addon.js +112 -0
  4. package/build/pkg/addon.js.map +1 -0
  5. package/build/pkg/data/layout.json +25 -3
  6. package/build/pkg/data.d.ts +1 -2
  7. package/build/pkg/data.js +3 -5
  8. package/build/pkg/data.js.map +1 -1
  9. package/build/pkg/gen1.d.ts +5 -4
  10. package/build/pkg/gen1.js +47 -31
  11. package/build/pkg/gen1.js.map +1 -1
  12. package/build/pkg/index.d.ts +15 -12
  13. package/build/pkg/index.js.map +1 -1
  14. package/build/pkg/protocol.d.ts +4 -2
  15. package/build/pkg/protocol.js +4 -2
  16. package/build/pkg/protocol.js.map +1 -1
  17. package/build/test/display.js +400 -0
  18. package/build/test/display.js.map +1 -0
  19. package/build/tools/debug.js +133 -0
  20. package/build/tools/debug.js.map +1 -0
  21. package/build.zig +95 -76
  22. package/package.json +56 -36
  23. package/src/bin/install-pkmn-engine +11 -6
  24. package/src/bin/pkmn-debug +62 -0
  25. package/src/lib/binding/node.zig +46 -141
  26. package/src/lib/binding/wasm.zig +6 -4
  27. package/src/lib/common/battle.zig +17 -0
  28. package/src/lib/common/data.zig +11 -11
  29. package/src/lib/common/debug.zig +21 -11
  30. package/src/lib/common/js.zig +118 -0
  31. package/src/lib/common/optional.zig +60 -0
  32. package/src/lib/common/options.zig +12 -3
  33. package/src/lib/common/protocol.zig +242 -178
  34. package/src/lib/common/rational.zig +353 -0
  35. package/src/lib/common/rng.zig +10 -10
  36. package/src/lib/common/util.zig +12 -0
  37. package/src/lib/gen1/README.md +265 -153
  38. package/src/lib/gen1/calc.zig +427 -0
  39. package/src/lib/gen1/chance.zig +1044 -0
  40. package/src/lib/gen1/data/moves.zig +10 -10
  41. package/src/lib/gen1/data/species.zig +2 -2
  42. package/src/lib/gen1/data/types.zig +3 -3
  43. package/src/lib/gen1/data.zig +69 -43
  44. package/src/lib/gen1/helpers.zig +592 -32
  45. package/src/lib/gen1/mechanics.zig +996 -630
  46. package/src/lib/gen2/README.md +12 -13
  47. package/src/lib/gen2/data/items.zig +3 -3
  48. package/src/lib/gen2/data/moves.zig +1 -1
  49. package/src/lib/gen2/data/species.zig +1 -1
  50. package/src/lib/gen2/data/types.zig +3 -3
  51. package/src/lib/gen2/data.zig +37 -26
  52. package/src/lib/gen2/helpers.zig +9 -11
  53. package/src/lib/gen2/mechanics.zig +5 -4
  54. package/src/lib/pkmn.zig +68 -9
  55. package/src/test/display/pkmn.html.tmpl +368 -0
@@ -0,0 +1,368 @@
1
+ <!doctype html>
2
+ <html lang=en>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <link rel="icon" href="https://pkmn.cc/favicon.ico">
7
+ <title>@pkmn/engine</title>
8
+ <style>
9
+ #content {
10
+ font-family: "Roboto", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
11
+ margin: 4em auto;
12
+ max-width: 1300px;
13
+ line-height: 1.4em;
14
+ --hp-bar: 151px;
15
+ --hp-text: 32px;
16
+ }
17
+ details > summary {
18
+ list-style: none;
19
+ }
20
+ details > summary::-webkit-details-marker {
21
+ display: none;
22
+ }
23
+ .battle > .details {
24
+ background: #eee;
25
+ border-bottom: 3px solid black;
26
+ padding: 0 0.5em;
27
+ display: flex;
28
+ justify-content: space-between;
29
+ }
30
+ .inner {
31
+ display: flex;
32
+ justify-content: center;
33
+ flex-direction: column;
34
+ }
35
+ .side > .details {
36
+ padding: 0.5em;
37
+ display: flex;
38
+ justify-content: space-between;
39
+ text-align: center;
40
+ flex: 0 1 auto;
41
+ }
42
+ .active {
43
+ flex: 1 1 auto;
44
+ }
45
+ details {
46
+ flex: 0 1 auto;
47
+ }
48
+ .sides {
49
+ display: flex;
50
+ }
51
+ .side {
52
+ flex: 1;
53
+ display: flex;
54
+ flex-flow: column;
55
+ }
56
+ .side.p1 {
57
+ border-right: 1px solid black;
58
+ }
59
+ .battle {
60
+ border: 3px solid black;
61
+ }
62
+ summary {
63
+ border-top: 1px solid black;
64
+ text-align: center;
65
+ padding: 0.25em;
66
+ }
67
+ .good {
68
+ color: green;
69
+ }
70
+ .bad {
71
+ color: red;
72
+ }
73
+ .pokemon {
74
+ position: relative;
75
+ padding: 0.5em;
76
+ border-top: 1px solid black;
77
+ display: flex;
78
+ }
79
+ table {
80
+ border-collapse: collapse;
81
+ border-style: hidden;
82
+ border-spacing: 0px;
83
+ line-height: 1.5em;
84
+ }
85
+ th, td {
86
+ border: 1px solid black;
87
+ padding: 0 0.5em;
88
+ }
89
+ .statbar {
90
+ display: none;
91
+ width: calc(var(--hp-bar) + var(--hp-text));
92
+ padding: 2px 0;
93
+ line-height: normal;
94
+ }
95
+ .statbar .name {
96
+ display: block;
97
+ text-align: center;
98
+ line-height: 1.25em;
99
+ }
100
+ .statbar strong {
101
+ color: #222222;
102
+ text-shadow:
103
+ #FFFFFF 1px 1px 0, #FFFFFF 1px -1px 0,
104
+ #FFFFFF -1px 1px 0, #FFFFFF -1px -1px 0;
105
+ }
106
+ .statbar strong small {
107
+ font-weight: normal;
108
+ }
109
+ .statbar .hpbar {
110
+ position: relative;
111
+ border: 1px solid #777777;
112
+ background: #FCFEFF;
113
+ padding: 1px;
114
+ height: 8px;
115
+ margin: 0 0 0 0;
116
+ width: calc(var(--hp-bar) + var(--hp-text) + 1px);
117
+ border-radius: 4px;
118
+ }
119
+ .statbar .hpbar .hp {
120
+ height: 4px;
121
+ border-top: 2px solid #00dd60;
122
+ background: #00bb51;
123
+ border-bottom: 2px solid #007734;
124
+ border-right: 1px solid #007734;
125
+ border-radius: 3px;
126
+ }
127
+ .statbar .hpbar .hp-yellow {
128
+ border-top-color: #f8e379;
129
+ background-color: #f5d538;
130
+ border-bottom-color: #be9f0a;
131
+ border-right-color: #be9f0a;
132
+ }
133
+ .statbar .hpbar .hp-red {
134
+ border-top-color: #f37f67;
135
+ background-color: #ee4928;
136
+ border-bottom-color: #a3260d;
137
+ border-right-color: #a3260d;
138
+ }
139
+ .statbar .hpbar .prevhp {
140
+ background: #BBEECC;
141
+ height: 8px;
142
+ border-radius: 3px;
143
+ }
144
+ .statbar .hpbar .prevhp-yellow {
145
+ background-color: #fcf4ca;
146
+ }
147
+ .statbar .hpbar .prevhp-red {
148
+ background-color: #facec5;
149
+ }
150
+ .statbar .hpbar .hptext {
151
+ position: absolute;
152
+ background: #777777;
153
+ color: #EEEEEE;
154
+ text-shadow: #000000 0 1px 0;
155
+ font-size: 10px;
156
+ width: 32px;
157
+ height: 12px;
158
+ top: -1px;
159
+ text-align: center;
160
+ }
161
+ .status, .volatile {
162
+ padding: 0px 1px;
163
+ border: 1px solid #FF4400;
164
+ border-radius: 3px;
165
+ }
166
+ .status {
167
+ min-height: 10px;
168
+ font-size: 7pt;
169
+ vertical-align: middle;
170
+ padding: 1px 2px;
171
+ border: 0;
172
+ border-radius: 3px;
173
+ text-transform: uppercase;
174
+ margin: 0 2px;
175
+ }
176
+ .status.brn {
177
+ background: #EE5533;
178
+ color: #FFFFFF;
179
+ }
180
+ .status.psn {
181
+ background: #A4009A;
182
+ color: #FFFFFF;
183
+ }
184
+ .status.par {
185
+ background: #9AA400;
186
+ color: #FFFFFF;
187
+ }
188
+ .status.slp {
189
+ background: #AA77AA;
190
+ color: #FFFFFF;
191
+ }
192
+ .status.frz {
193
+ background: #009AA4;
194
+ color: #FFFFFF;
195
+ }
196
+ .volatile {
197
+ display: inline-block;
198
+ padding: 0 5px;
199
+ margin: 2px
200
+ }
201
+ .volatile.bad {
202
+ background: #FFE5E0;
203
+ color: #FF4400;
204
+ border-color: #FF4400;
205
+ }
206
+ .volatile.good {
207
+ background: #E5FFE0;
208
+ color: #33AA00;
209
+ border-color: #33AA00;
210
+ }
211
+ .volatile.neutral {
212
+ background: #F0F0F0;
213
+ color: #555555;
214
+ border-color: #555555;
215
+ }
216
+ .rstatbar .hpbar .hptext {
217
+ right: 0px;
218
+ border-radius: 0 4px 4px 0;
219
+ }
220
+ .moves ul {
221
+ column-count: 2;
222
+ column-gap: 2em;
223
+ }
224
+ .left {
225
+ padding-right: 32px;
226
+ display: flex;
227
+ flex-direction: column;
228
+ align-items: center;
229
+ }
230
+ .stats {
231
+ display: flex;
232
+ padding: 0 1em;
233
+ justify-content: space-between;
234
+ text-align: center;
235
+ width: 100%;
236
+ }
237
+ .types {
238
+ display: inherit;
239
+ }
240
+ .disabled {
241
+ color: #AAAAAA;
242
+ }
243
+ .log {
244
+ display: flex;
245
+ justify-content: center;
246
+ padding-bottom: 2em;
247
+ }
248
+ .position {
249
+ position: absolute;
250
+ right: 10px;
251
+ color: #AAAAAA;
252
+ }
253
+ .left .position {
254
+ display: none;
255
+ }
256
+ .right .position {
257
+ display: block;
258
+ }
259
+ .teamicons {
260
+ display: inline-block;
261
+ }
262
+ @media(max-width: 1300px) {
263
+ #content {
264
+ font-size: 0.85em;
265
+ max-width: 95%;
266
+ margin: 2em auto;
267
+ }
268
+ }
269
+ @media(max-width: 1200px) {
270
+ .moves ul {
271
+ column-count: 1;
272
+ }
273
+ }
274
+ @media(max-width: 1100px) {
275
+ .pokemon {
276
+ flex-direction: column;
277
+ }
278
+ .stats {
279
+ justify-content: center;
280
+ padding: 0;
281
+ }
282
+ .boosts {
283
+ margin-left: 5px;
284
+ }
285
+ .moves ul {
286
+ column-count: 2;
287
+ }
288
+ .left {
289
+ padding-right: 0;
290
+ }
291
+ .right {
292
+ padding-top: 1em;
293
+ }
294
+ .volatiles {
295
+ display: flex;
296
+ justify-content: center;
297
+ flex-wrap: wrap;
298
+ }
299
+ .left .position {
300
+ display: block;
301
+ }
302
+ .right .position {
303
+ display: none;
304
+ }
305
+ }
306
+ @media(max-width: 800px) {
307
+ .moves {
308
+ display: flex;
309
+ justify-content: center;
310
+ }
311
+ .moves ul {
312
+ column-count: 1;
313
+ display: inline-block;
314
+ padding: 0;
315
+ }
316
+ }
317
+ @media(max-width: 680px) {
318
+ .stats {
319
+ flex-direction: column;
320
+ padding: 0;
321
+ }
322
+ .boosts {
323
+ display: flex;
324
+ justify-content: space-between;
325
+ margin-top: 0.5em;
326
+ }
327
+ }
328
+ @media(max-width: 550px) {
329
+ #content {
330
+ font-size: 0.65em;
331
+ max-width: 95%;
332
+ margin: 1em auto;
333
+ --hp-bar: 101px;
334
+ }
335
+ }
336
+ @media(max-width: 425px) {
337
+ .stats {
338
+ font-size: 0.9em;
339
+ }
340
+ }
341
+ h1 {
342
+ text-align: center;
343
+ }
344
+ .error {
345
+ overflow: auto;
346
+ scrollbar-width: none;
347
+ padding: 10px 20px;
348
+ border: 3px solid #DD4422;
349
+ background: #FFF8F2;
350
+ }
351
+ .error::-webkit-scrollbar {
352
+ display: none;
353
+ }
354
+ </style>
355
+ </head>
356
+ <body>
357
+ <div id="content">{{{ content }}}</div>
358
+ <script>
359
+ for (const details of document.getElementsByTagName('details')) {
360
+ details.addEventListener('toggle', e => {
361
+ for (const d of details.parentElement.parentElement.getElementsByTagName('details')) {
362
+ if (d.open !== details.open) d.open = details.open;
363
+ }
364
+ });
365
+ }
366
+ </script>
367
+ </body>
368
+ </html>