pokemon_data.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. size_t party_sz;
  48. /* Current EV/IV stat selection */
  49. EvIv stat_sel;
  50. /* Current generation */
  51. uint8_t gen;
  52. /* 0 indexed max pokedex number */
  53. uint8_t dex_max;
  54. /* These are private to pokemon_data */
  55. Storage* storage;
  56. struct fxbm_sprite* bitmap;
  57. uint8_t bitmap_num;
  58. FuriString* asset_path;
  59. };
  60. typedef struct pokemon_data PokemonData;
  61. PokemonData* pokemon_data_alloc(uint8_t gen);
  62. void pokemon_data_free(PokemonData* pdata);
  63. uint8_t* pokemon_icon_get(PokemonData* pdata, int num);
  64. void pokemon_stat_memcpy(PokemonData* dst, PokemonData* src, uint8_t which);
  65. uint16_t pokemon_stat_get(PokemonData* pdata, DataStat stat, DataStatSub num);
  66. void pokemon_stat_set(PokemonData* pdata, DataStat stat, DataStatSub which, uint16_t val);
  67. uint16_t pokemon_stat_ev_get(PokemonData* pdata, DataStat stat);
  68. void pokemon_stat_ev_set(PokemonData* pdata, DataStat stat, uint16_t val);
  69. void pokemon_stat_iv_set(PokemonData* pdata, int val);
  70. void pokemon_exp_set(PokemonData* pdata, uint32_t exp);
  71. void pokemon_exp_calc(PokemonData* pdata);
  72. void pokemon_stat_calc(PokemonData* pdata, DataStat stat);
  73. void pokemon_default_nickname_set(char* dest, PokemonData* pdata, size_t n);
  74. void pokemon_name_set(PokemonData* pdata, DataStat stat, char* name);
  75. void pokemon_name_get(PokemonData* pdata, DataStat stat, char* dest, size_t len);
  76. #endif /* POKEMON_DATA_H */