pokemon_data.h 8.7 KB

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