pokemon_data.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef POKEMON_DATA_H
  2. #define POKEMON_DATA_H
  3. #pragma once
  4. #include <furi.h>
  5. #include <gui/icon.h>
  6. #include <storage/storage.h>
  7. #include <toolbox/stream/stream.h>
  8. #include <toolbox/stream/file_stream.h>
  9. #include <math.h>
  10. #include <stdint.h>
  11. #include <named_list.h>
  12. #include <stat_nl.h>
  13. #include <pokemon_table.h>
  14. #include "stats.h"
  15. /* Generation defines */
  16. #define GEN_I 0x01
  17. #define GEN_II 0x02
  18. /* Some length macros */
  19. #define LEN_NAME_BUF 11
  20. #define LEN_NICKNAME 11 // Max 10 chars
  21. #define LEN_OT_NAME 8 // Max 7 chars
  22. #define LEN_NUM_BUF 6
  23. #define LEN_LEVEL 4 // Max 3 digits
  24. #define LEN_OT_ID 6 // Max 5 digits
  25. typedef struct pokemon_party_data_gen_i PokemonPartyGenI;
  26. typedef struct trade_block_gen_i TradeBlockGenI;
  27. typedef struct pokemon_party_data_gen_ii PokemonPartyGenII;
  28. typedef struct trade_block_gen_ii TradeBlockGenII;
  29. /* Based on the flipperzero-game-engine sprite structure */
  30. struct fxbm_sprite {
  31. uint32_t width;
  32. uint32_t height;
  33. uint8_t data[];
  34. };
  35. struct pokemon_data {
  36. const NamedList* move_list;
  37. const NamedList* stat_list;
  38. const NamedList* type_list;
  39. const NamedList* item_list;
  40. const PokemonTable* pokemon_table;
  41. /* Pointer to the live trade_block */
  42. void* trade_block;
  43. /* The length of the current trade_block. */
  44. size_t trade_block_sz;
  45. /* Shortcut pointer to the actual party data in the trade block */
  46. void* party;
  47. /* Current EV/IV stat selection */
  48. EvIv stat_sel;
  49. /* Current generation */
  50. uint8_t gen;
  51. /* 0 indexed max pokedex number */
  52. uint8_t dex_max;
  53. /* These are private to pokemon_data */
  54. Storage* storage;
  55. struct fxbm_sprite* bitmap;
  56. uint8_t bitmap_num;
  57. FuriString* asset_path;
  58. };
  59. typedef struct pokemon_data PokemonData;
  60. PokemonData* pokemon_data_alloc(uint8_t gen);
  61. void pokemon_data_free(PokemonData* pdata);
  62. uint8_t* pokemon_icon_get(PokemonData* pdata, int num);
  63. void pokemon_stat_memcpy(PokemonData* dst, PokemonData* src, uint8_t which);
  64. uint16_t pokemon_stat_get(PokemonData* pdata, DataStat stat, DataStatSub num);
  65. void pokemon_stat_set(PokemonData* pdata, DataStat stat, DataStatSub which, uint16_t val);
  66. uint16_t pokemon_stat_ev_get(PokemonData* pdata, DataStat stat);
  67. void pokemon_stat_ev_set(PokemonData* pdata, DataStat stat, uint16_t val);
  68. void pokemon_stat_iv_set(PokemonData* pdata, int val);
  69. void pokemon_exp_set(PokemonData* pdata, uint32_t exp);
  70. void pokemon_exp_calc(PokemonData* pdata);
  71. void pokemon_stat_calc(PokemonData* pdata, DataStat stat);
  72. void pokemon_default_nickname_set(char* dest, PokemonData* pdata, size_t n);
  73. void pokemon_name_set(PokemonData* pdata, DataStat stat, char* name);
  74. void pokemon_name_get(PokemonData* pdata, DataStat stat, char* dest, size_t len);
  75. #endif /* POKEMON_DATA_H */