3
3
4
4
#pragma once
5
5
6
- unsigned char INPUT_BLOCK [405 ];
7
- unsigned char DATA_BLOCK [405 ] = {
8
- // Flipper
9
- //[ TRAINER NAME ]
10
- 0x85 , 0xAB , 0xA8 , 0xAF , 0xAF , 0xA4 , 0xB1 , 0x50 , 0x00 , 0x00 , 0x00 ,
11
- // [MEW]
12
- 0x1 , 0x15 , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF ,
13
- // 6 pokemon
14
- //spc curr HP lvl sts typ1 typ2 cr mv1 mv2 mv3 mv4 OT experience HP EV att EV def EV speed EV Speci EV IV mvPP mvPP mvPP mvPP Lvl max HP attack defense speed special
15
- 0x4A , 0x1 , 0x2c , 0x4a , 0x00 , 0x14 , 0x08 , 0x1F , 0x7E , 0x38 , 0x09 , 0x19 , 0x4 , 0xd2 , 0x3 , 0xd , 0x40 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xc0 , 0xc0 , 0xc0 , 0xc0 , 0x4a , 0x1 , 0x2c , 0x0 , 0x96 , 0x0 , 0x97 , 0x0 , 0x98 , 0x0 , 0x99 ,
16
- 0x4A , 0x1 , 0x2c , 0x4a , 0x00 , 0x14 , 0x08 , 0x1F , 0x7E , 0x38 , 0x09 , 0x19 , 0x4 , 0xd2 , 0x3 , 0xd , 0x40 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xc0 , 0xc0 , 0xc0 , 0xc0 , 0x4a , 0x1 , 0x2c , 0x0 , 0x96 , 0x0 , 0x97 , 0x0 , 0x98 , 0x0 , 0x99 ,
17
- 0x4A , 0x1 , 0x2c , 0x4a , 0x00 , 0x14 , 0x08 , 0x1F , 0x7E , 0x38 , 0x09 , 0x19 , 0x4 , 0xd2 , 0x3 , 0xd , 0x40 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xc0 , 0xc0 , 0xc0 , 0xc0 , 0x4a , 0x1 , 0x2c , 0x0 , 0x96 , 0x0 , 0x97 , 0x0 , 0x98 , 0x0 , 0x99 ,
18
- 0x4A , 0x1 , 0x2c , 0x4a , 0x00 , 0x14 , 0x08 , 0x1F , 0x7E , 0x38 , 0x09 , 0x19 , 0x4 , 0xd2 , 0x3 , 0xd , 0x40 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xc0 , 0xc0 , 0xc0 , 0xc0 , 0x4a , 0x1 , 0x2c , 0x0 , 0x96 , 0x0 , 0x97 , 0x0 , 0x98 , 0x0 , 0x99 ,
19
- 0x4A , 0x1 , 0x2c , 0x4a , 0x00 , 0x14 , 0x08 , 0x1F , 0x7E , 0x38 , 0x09 , 0x19 , 0x4 , 0xd2 , 0x3 , 0xd , 0x40 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xc0 , 0xc0 , 0xc0 , 0xc0 , 0x4a , 0x1 , 0x2c , 0x0 , 0x96 , 0x0 , 0x97 , 0x0 , 0x98 , 0x0 , 0x99 ,
20
- 0x4A , 0x1 , 0x2c , 0x4a , 0x00 , 0x14 , 0x08 , 0x1F , 0x7E , 0x38 , 0x09 , 0x19 , 0x4 , 0xd2 , 0x3 , 0xd , 0x40 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xc0 , 0xc0 , 0xc0 , 0xc0 , 0x4a , 0x1 , 0x2c , 0x0 , 0x96 , 0x0 , 0x97 , 0x0 , 0x98 , 0x0 , 0x99 ,
21
- // 6 trainer names
22
- 0x85 , 0xAB , 0xA8 , 0xAF , 0xAF , 0xA4 , 0xB1 , 0x50 , 0x00 , 0x00 , 0x00 ,
23
- 0xFF , 0x50 , 0x80 , 0x92 , 0x87 , 0x50 , 0x89 , 0x80 , 0x82 ,
24
- 0xFF , 0x50 , 0x80 , 0x92 , 0x87 , 0x50 , 0x89 , 0x80 , 0x82 ,
25
- 0xFF , 0x50 , 0x80 , 0x92 , 0x87 , 0x50 , 0x89 , 0x80 , 0x82 ,
26
- 0xFF , 0x50 , 0x80 , 0x92 , 0x87 , 0x50 , 0x89 , 0x80 , 0x82 ,
27
- 0xFF , 0x50 , 0x80 , 0x92 , 0x87 , 0x50 , 0x89 , 0x80 , 0x82 ,
28
- // // 6 nicknames
29
- 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
30
- 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
31
- 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
32
- 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
33
- 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
34
- 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50
35
- // // 2 useless bytes??
36
- // 0x00, 0x00, 0x00}
6
+ /* NOTE: These map to the Gen 1 character set! */
7
+ /* TODO: It may make more sense to put this in a const array as a LUT,
8
+ * e.g. t['F'], t['l'], t['i'], t['p'], t['e'], t['r'], t['\0']
9
+ * As this could be an easier translation for each letter to build a string
10
+ * to set names and things on the fly in the flipper. Need to explore that.
11
+ * once I get to that point.
12
+ */
13
+ #define TERM_ 0x50
14
+ #define SPACE_ 0x7f
15
+ #define A_ 0x80
16
+ #define B_ 0x81
17
+ #define C_ 0x82
18
+ #define D_ 0x83
19
+ #define E_ 0x84
20
+ #define F_ 0x85
21
+ #define G_ 0x86
22
+ #define H_ 0x87
23
+ #define I_ 0x88
24
+ #define J_ 0x89
25
+ #define K_ 0x8a
26
+ #define L_ 0x8b
27
+ #define M_ 0x8c
28
+ #define N_ 0x8d
29
+ #define O_ 0x8e
30
+ #define P_ 0x8f
31
+ #define Q_ 0x90
32
+ #define R_ 0x91
33
+ #define S_ 0x92
34
+ #define T_ 0x93
35
+ #define U_ 0x94
36
+ #define V_ 0x95
37
+ #define W_ 0x96
38
+ #define X_ 0x97
39
+ #define Y_ 0x98
40
+ #define Z_ 0x99
41
+ #define O_PAREN_ 0x9a
42
+ #define C_PAREN_ 0x9b
43
+ #define COLON_ 0x9c
44
+ #define SEMI_ 0x9d
45
+ #define O_BRACKET_ 0x9e
46
+ #define C_BRACKET_ 0x9f
47
+ #define a_ 0xa0
48
+ #define b_ 0xa1
49
+ #define c_ 0xa2
50
+ #define d_ 0xa3
51
+ #define e_ 0xa4
52
+ #define f_ 0xa5
53
+ #define g_ 0xa6
54
+ #define h_ 0xa7
55
+ #define i_ 0xa8
56
+ #define j_ 0xa9
57
+ #define k_ 0xaa
58
+ #define l_ 0xab
59
+ #define m_ 0xac
60
+ #define n_ 0xad
61
+ #define o_ 0xae
62
+ #define p_ 0xaf
63
+ #define q_ 0xb0
64
+ #define r_ 0xb1
65
+ #define s_ 0xb2
66
+ #define t_ 0xb3
67
+ #define u_ 0xb4
68
+ #define v_ 0xb5
69
+ #define w_ 0xb6
70
+ #define x_ 0xb7
71
+ #define y_ 0xb8
72
+ #define z_ 0xb9
73
+ #define e_ACCENT_ 0xba
74
+ #define d_TICK_ 0xbb
75
+ #define l_TICK_ 0xbc
76
+ #define s_TICK_ 0xbd
77
+ #define t_TICK_ 0xbe
78
+ #define v_TICK_ 0xbf
79
+ #define S_QUOTE_ 0xe0
80
+ #define PK_ 0xe1
81
+ #define MN_ 0xe2
82
+ #define DASH_ 0xe3
83
+ #define r_TICK_ 0xe4
84
+ #define m_TICK_ 0xe5
85
+ #define QUESTION_ 0xe6
86
+ #define EXCLAIM_ 0xe7
87
+ #define PERIOD_ 0xe8
88
+ #define R_ARR_ 0xec
89
+ #define D_ARR_ 0xee
90
+ #define MALE_ 0xef
91
+ #define FEMALE_ 0xf5
92
+ #define _0_ 0xf6
93
+ #define _1_ 0xf7
94
+ #define _2_ 0xf8
95
+ #define _3_ 0xf9
96
+ #define _4_ 0xfa
97
+ #define _5_ 0xfb
98
+ #define _6_ 0xfc
99
+ #define _7_ 0xfd
100
+ #define _8_ 0xfe
101
+ #define _9_ 0xff
102
+
103
+
104
+ /* XXX: These are all opposite endianness on the flipper than they are in the
105
+ * GB/Z80. e.g. a uint16_t value of 0x2c01 translates to 0x012c. Does flipper
106
+ * API have calls to swap endianness?
107
+ */
108
+ struct __attribute__((__packed__ )) pokemon_structure {
109
+ uint8_t species ;
110
+ uint16_t hp ;
111
+ uint8_t level ;
112
+ uint8_t status_condition ;
113
+ uint8_t type [2 ];
114
+ uint8_t catch_held ;
115
+ uint8_t move [4 ];
116
+ uint16_t orig_trainer ;
117
+ uint8_t exp [3 ];
118
+ uint16_t hp_ev ;
119
+ uint16_t atk_ev ;
120
+ uint16_t def_ev ;
121
+ uint16_t spd_ev ;
122
+ uint16_t special_ev ;
123
+ uint16_t iv ;
124
+ uint8_t move_pp [4 ];
125
+ uint8_t level_again ;
126
+ uint16_t max_hp ;
127
+ uint16_t atk ;
128
+ uint16_t def ;
129
+ uint16_t spd ;
130
+ uint16_t special ;
131
+ };
132
+
133
+ struct __attribute__((__packed__ )) name {
134
+ unsigned char str [11 ];
135
+ };
136
+
137
+ struct __attribute__((__packed__ )) trade_data_block {
138
+ unsigned char trainer_name [11 ];
139
+ uint8_t party_cnt ;
140
+ uint8_t party_members [7 ]; // Unsure if last byte always needs to be 0xff for terminator
141
+ struct pokemon_structure party [6 ];
142
+ struct name ot_name [6 ];
143
+ struct name nickname [6 ];
144
+ };
145
+
146
+ struct trade_data_block DATA_BLOCK2 = {
147
+ .trainer_name = { F_ , l_ , i_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 , 0x00 },
148
+ .party_cnt = 1 ,
149
+ .party_members = { 0x15 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff },
150
+ .party = {
151
+ {
152
+ .species = 0x4a ,
153
+ .hp = 0x2c01 ,
154
+ .level = 0x4a ,
155
+ .status_condition = 0x0 ,
156
+ .type = { 0x14 , 0x08 },
157
+ .catch_held = 0x1f ,
158
+ .move = { 0x7e , 0x38 , 0x09 , 0x19 },
159
+ .orig_trainer = 0xd204 ,
160
+ .exp = { 0x3 , 0xd , 0x40 },
161
+ .hp_ev = 0xffff ,
162
+ .atk_ev = 0xffff ,
163
+ .def_ev = 0xffff ,
164
+ .spd_ev = 0xffff ,
165
+ .special_ev = 0xffff ,
166
+ .iv = 0xffff ,
167
+ .move_pp = { 0xc0 , 0xc0 , 0xc0 , 0xc0 },
168
+ .level_again = 0x4a ,
169
+ .max_hp = 0x2c01 ,
170
+ .atk = 0x9600 ,
171
+ .def = 0x9700 ,
172
+ .spd = 0x9800 ,
173
+ .special = 0x9900
174
+ },
175
+ {
176
+ .species = 0x4a ,
177
+ .hp = 0x2c01 ,
178
+ .level = 0x4a ,
179
+ .status_condition = 0x0 ,
180
+ .type = { 0x14 , 0x08 },
181
+ .catch_held = 0x1f ,
182
+ .move = { 0x7e , 0x38 , 0x09 , 0x19 },
183
+ .orig_trainer = 0xd204 ,
184
+ .exp = { 0x3 , 0xd , 0x40 },
185
+ .hp_ev = 0xffff ,
186
+ .atk_ev = 0xffff ,
187
+ .def_ev = 0xffff ,
188
+ .spd_ev = 0xffff ,
189
+ .special_ev = 0xffff ,
190
+ .iv = 0xffff ,
191
+ .move_pp = { 0xc0 , 0xc0 , 0xc0 , 0xc0 },
192
+ .level_again = 0x4a ,
193
+ .max_hp = 0x2c01 ,
194
+ .atk = 0x9600 ,
195
+ .def = 0x9700 ,
196
+ .spd = 0x9800 ,
197
+ .special = 0x9900
198
+ },
199
+ {
200
+ .species = 0x4a ,
201
+ .hp = 0x2c01 ,
202
+ .level = 0x4a ,
203
+ .status_condition = 0x0 ,
204
+ .type = { 0x14 , 0x08 },
205
+ .catch_held = 0x1f ,
206
+ .move = { 0x7e , 0x38 , 0x09 , 0x19 },
207
+ .orig_trainer = 0xd204 ,
208
+ .exp = { 0x3 , 0xd , 0x40 },
209
+ .hp_ev = 0xffff ,
210
+ .atk_ev = 0xffff ,
211
+ .def_ev = 0xffff ,
212
+ .spd_ev = 0xffff ,
213
+ .special_ev = 0xffff ,
214
+ .iv = 0xffff ,
215
+ .move_pp = { 0xc0 , 0xc0 , 0xc0 , 0xc0 },
216
+ .level_again = 0x4a ,
217
+ .max_hp = 0x2c01 ,
218
+ .atk = 0x9600 ,
219
+ .def = 0x9700 ,
220
+ .spd = 0x9800 ,
221
+ .special = 0x9900
222
+ },
223
+ {
224
+ .species = 0x4a ,
225
+ .hp = 0x2c01 ,
226
+ .level = 0x4a ,
227
+ .status_condition = 0x0 ,
228
+ .type = { 0x14 , 0x08 },
229
+ .catch_held = 0x1f ,
230
+ .move = { 0x7e , 0x38 , 0x09 , 0x19 },
231
+ .orig_trainer = 0xd204 ,
232
+ .exp = { 0x3 , 0xd , 0x40 },
233
+ .hp_ev = 0xffff ,
234
+ .atk_ev = 0xffff ,
235
+ .def_ev = 0xffff ,
236
+ .spd_ev = 0xffff ,
237
+ .special_ev = 0xffff ,
238
+ .iv = 0xffff ,
239
+ .move_pp = { 0xc0 , 0xc0 , 0xc0 , 0xc0 },
240
+ .level_again = 0x4a ,
241
+ .max_hp = 0x2c01 ,
242
+ .atk = 0x9600 ,
243
+ .def = 0x9700 ,
244
+ .spd = 0x9800 ,
245
+ .special = 0x9900
246
+ },
247
+ {
248
+ .species = 0x4a ,
249
+ .hp = 0x2c01 ,
250
+ .level = 0x4a ,
251
+ .status_condition = 0x0 ,
252
+ .type = { 0x14 , 0x08 },
253
+ .catch_held = 0x1f ,
254
+ .move = { 0x7e , 0x38 , 0x09 , 0x19 },
255
+ .orig_trainer = 0xd204 ,
256
+ .exp = { 0x3 , 0xd , 0x40 },
257
+ .hp_ev = 0xffff ,
258
+ .atk_ev = 0xffff ,
259
+ .def_ev = 0xffff ,
260
+ .spd_ev = 0xffff ,
261
+ .special_ev = 0xffff ,
262
+ .iv = 0xffff ,
263
+ .move_pp = { 0xc0 , 0xc0 , 0xc0 , 0xc0 },
264
+ .level_again = 0x4a ,
265
+ .max_hp = 0x2c01 ,
266
+ .atk = 0x9600 ,
267
+ .def = 0x9700 ,
268
+ .spd = 0x9800 ,
269
+ .special = 0x9900
270
+ },
271
+ {
272
+ .species = 0x4a ,
273
+ .hp = 0x2c01 ,
274
+ .level = 0x4a ,
275
+ .status_condition = 0x0 ,
276
+ .type = { 0x14 , 0x08 },
277
+ .catch_held = 0x1f ,
278
+ .move = { 0x7e , 0x38 , 0x09 , 0x19 },
279
+ .orig_trainer = 0xd204 ,
280
+ .exp = { 0x3 , 0xd , 0x40 },
281
+ .hp_ev = 0xffff ,
282
+ .atk_ev = 0xffff ,
283
+ .def_ev = 0xffff ,
284
+ .spd_ev = 0xffff ,
285
+ .special_ev = 0xffff ,
286
+ .iv = 0xffff ,
287
+ .move_pp = { 0xc0 , 0xc0 , 0xc0 , 0xc0 },
288
+ .level_again = 0x4a ,
289
+ .max_hp = 0x2c01 ,
290
+ .atk = 0x9600 ,
291
+ .def = 0x9700 ,
292
+ .spd = 0x9800 ,
293
+ .special = 0x9900
294
+ },
295
+ },
296
+ /* NOTE: I think this shouldn't exceed 7 chars */
297
+ .ot_name = {
298
+ { .str = { F_ , l_ , i_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
299
+ { .str = { F_ , l_ , i_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
300
+ { .str = { F_ , l_ , i_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
301
+ { .str = { F_ , l_ , i_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
302
+ { .str = { F_ , l_ , i_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
303
+ { .str = { F_ , l_ , i_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
304
+ },
305
+ .nickname = {
306
+ { .str = { F_ , l_ , o_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
307
+ { .str = { F_ , l_ , o_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
308
+ { .str = { F_ , l_ , o_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
309
+ { .str = { F_ , l_ , o_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
310
+ { .str = { F_ , l_ , o_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
311
+ { .str = { F_ , l_ , o_ , p_ , p_ , e_ , r_ , TERM_ , 0x00 , 0x00 } },
312
+ }
37
313
};
38
314
39
- #endif /* POKEMON_DATA_H */
315
+
316
+ unsigned char INPUT_BLOCK [405 ];
317
+ unsigned char * DATA_BLOCK = (unsigned char * )& DATA_BLOCK2 ;
318
+
319
+ #endif /* POKEMON_DATA_H */
0 commit comments