@pkmn/engine 0.1.0-dev.f3aab252 → 0.1.0-dev.f3b63b86

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 (80) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +35 -8
  3. package/build/pkg/addon/browser.d.ts +3 -0
  4. package/build/pkg/addon/browser.js +47 -0
  5. package/build/pkg/addon/browser.js.map +1 -0
  6. package/build/pkg/addon/node.d.ts +3 -0
  7. package/build/pkg/addon/node.js +110 -0
  8. package/build/pkg/addon/node.js.map +1 -0
  9. package/build/pkg/addon/wasm.d.ts +2 -0
  10. package/build/pkg/addon/wasm.js +53 -0
  11. package/build/pkg/addon/wasm.js.map +1 -0
  12. package/build/pkg/addon.d.ts +26 -4
  13. package/build/pkg/addon.js +34 -65
  14. package/build/pkg/addon.js.map +1 -1
  15. package/build/pkg/data/layout.json +15 -2
  16. package/build/pkg/data/protocol.json +23 -9
  17. package/build/pkg/data.d.ts +23 -1
  18. package/build/pkg/data.js.map +1 -1
  19. package/build/pkg/gen1.d.ts +15 -18
  20. package/build/pkg/gen1.js +28 -19
  21. package/build/pkg/gen1.js.map +1 -1
  22. package/build/pkg/index.d.ts +39 -89
  23. package/build/pkg/index.js +23 -70
  24. package/build/pkg/index.js.map +1 -1
  25. package/build/pkg/protocol.d.ts +20 -1
  26. package/build/pkg/protocol.js +105 -103
  27. package/build/pkg/protocol.js.map +1 -1
  28. package/build/tools/debug.js +68 -74
  29. package/build/tools/debug.js.map +1 -1
  30. package/build/tools/display/debug.jsx +152 -0
  31. package/build/tools/display/debug.jsx.map +1 -0
  32. package/build/tools/display/index.js +152 -0
  33. package/build/tools/display/index.js.map +1 -0
  34. package/build/tools/display/ui.jsx +359 -0
  35. package/build/tools/display/ui.jsx.map +1 -0
  36. package/build/tools/display/util.js +33 -0
  37. package/build/tools/display/util.js.map +1 -0
  38. package/build.zig +235 -213
  39. package/package.json +59 -141
  40. package/src/bin/install-pkmn-engine +25 -9
  41. package/src/bin/pkmn-debug +1 -1
  42. package/src/lib/bindings/c.zig +200 -0
  43. package/src/lib/bindings/node.zig +117 -0
  44. package/src/lib/bindings/wasm.zig +50 -0
  45. package/src/lib/common/array.zig +5 -12
  46. package/src/lib/common/debug.zig +30 -9
  47. package/src/lib/common/js.zig +3 -9
  48. package/src/lib/common/optional.zig +11 -21
  49. package/src/lib/common/options.zig +4 -0
  50. package/src/lib/common/protocol.zig +180 -171
  51. package/src/lib/common/rational.zig +278 -285
  52. package/src/lib/common/rng.zig +1 -3
  53. package/src/lib/common/util.zig +14 -31
  54. package/src/lib/gen1/calc.zig +258 -106
  55. package/src/lib/gen1/chance.zig +57 -54
  56. package/src/lib/gen1/data/moves.zig +2 -4
  57. package/src/lib/gen1/data/species.zig +1 -3
  58. package/src/lib/gen1/data/types.zig +3 -4
  59. package/src/lib/gen1/data.zig +12 -16
  60. package/src/lib/gen1/helpers.zig +13 -28
  61. package/src/lib/gen1/mechanics.zig +131 -101
  62. package/src/lib/gen2/calc.zig +12 -23
  63. package/src/lib/gen2/chance.zig +12 -18
  64. package/src/lib/gen2/data/items.zig +1 -3
  65. package/src/lib/gen2/data/moves.zig +2 -4
  66. package/src/lib/gen2/data/species.zig +1 -3
  67. package/src/lib/gen2/data/types.zig +7 -5
  68. package/src/lib/gen2/data.zig +19 -22
  69. package/src/lib/gen2/generated.zig +18 -23
  70. package/src/lib/gen2/helpers.zig +9 -18
  71. package/src/lib/gen2/mechanics.zig +50 -47
  72. package/src/lib/napi.h +2 -0
  73. package/src/lib/node.zig +4 -121
  74. package/src/lib/pkmn.zig +98 -19
  75. package/src/lib/wasm.zig +9 -9
  76. package/src/tools/display/dom.ts +93 -0
  77. package/src/tools/display/ui.css +354 -0
  78. package/build/test/display.js +0 -405
  79. package/build/test/display.js.map +0 -1
  80. package/src/test/display/pkmn.html.tmpl +0 -368
@@ -1,368 +0,0 @@
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
- display: grid;
222
- grid-template-columns: repeat(2, auto);
223
- gap: 0 2em;
224
- }
225
- .left {
226
- padding-right: 32px;
227
- display: flex;
228
- flex-direction: column;
229
- align-items: center;
230
- }
231
- .stats {
232
- display: flex;
233
- padding: 0 1em;
234
- justify-content: space-between;
235
- text-align: center;
236
- width: 100%;
237
- }
238
- .types {
239
- display: inherit;
240
- }
241
- .disabled {
242
- color: #AAAAAA;
243
- }
244
- .log {
245
- display: flex;
246
- justify-content: center;
247
- padding-bottom: 2em;
248
- }
249
- .position {
250
- position: absolute;
251
- right: 10px;
252
- color: #AAAAAA;
253
- }
254
- .left .position {
255
- display: none;
256
- }
257
- .right .position {
258
- display: block;
259
- }
260
- .teamicons {
261
- display: inline-block;
262
- }
263
- @media(max-width: 1300px) {
264
- #content {
265
- font-size: 0.85em;
266
- max-width: 95%;
267
- margin: 2em auto;
268
- }
269
- }
270
- @media(max-width: 1200px) {
271
- .moves ul {
272
- grid-template-columns: repeat(1, auto);
273
- }
274
- }
275
- @media(max-width: 1100px) {
276
- .pokemon {
277
- flex-direction: column;
278
- }
279
- .stats {
280
- justify-content: center;
281
- padding: 0;
282
- }
283
- .boosts {
284
- margin-left: 5px;
285
- }
286
- .moves ul {
287
- grid-template-columns: repeat(2, auto);
288
- }
289
- .left {
290
- padding-right: 0;
291
- }
292
- .right {
293
- padding-top: 1em;
294
- }
295
- .volatiles {
296
- display: flex;
297
- justify-content: center;
298
- flex-wrap: wrap;
299
- }
300
- .left .position {
301
- display: block;
302
- }
303
- .right .position {
304
- display: none;
305
- }
306
- }
307
- @media(max-width: 800px) {
308
- .moves {
309
- display: flex;
310
- justify-content: center;
311
- }
312
- .moves ul {
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>