load.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #pragma once
  2. #include <storage/storage.h>
  3. #include "common.h"
  4. #define ASSETS_LEVELS_COUNT 9
  5. #define MAX_LEVELS_PER_SET 100
  6. extern char* assetLevels[];
  7. typedef struct {
  8. uint16_t moves;
  9. bool spoiled;
  10. } LevelScore;
  11. typedef struct {
  12. FuriString* id;
  13. FuriString* title;
  14. FuriString* author;
  15. FuriString* description;
  16. FuriString* url;
  17. uint8_t maxLevel;
  18. LevelScore scores[MAX_LEVELS_PER_SET];
  19. uint8_t pars[MAX_LEVELS_PER_SET];
  20. } LevelSet;
  21. typedef struct {
  22. FuriString* solution;
  23. FuriString* board;
  24. FuriString* title;
  25. unsigned int gamePar;
  26. } LevelData;
  27. typedef struct {
  28. FuriString** ids;
  29. int count;
  30. } LevelList;
  31. //-----------------------------------------------------------------------------
  32. LevelSet* alloc_level_set();
  33. void free_level_set(LevelSet* ls);
  34. LevelData* alloc_level_data();
  35. void free_level_data(LevelData* ld);
  36. void init_level_list(LevelList* ls, int capacity);
  37. void free_level_list(LevelList* ls);
  38. //-----------------------------------------------------------------------------
  39. bool ensure_paths(Storage* storage);
  40. bool level_set_id_to_path(Storage* storage, FuriString* levelSetId, size_t maxSize, char* path);
  41. //-----------------------------------------------------------------------------
  42. bool load_level_set(
  43. Storage* storage,
  44. FuriString* levelSetId,
  45. LevelSet* levelSet,
  46. FuriString* errorMsg);
  47. bool load_last_level(FuriString* lastLevelSetId, uint8_t* levelNo);
  48. bool save_last_level(FuriString* lastLevelSetId, uint8_t levelNo);
  49. bool load_set_scores(Storage* storage, FuriString* levelSetId, LevelScore* scores);
  50. bool save_set_scores(FuriString* levelSetId, LevelScore* scores);
  51. void delete_progress(LevelScore* scores);
  52. //-----------------------------------------------------------------------------
  53. int load_level_row(uint8_t* pb, const char* psz, const char* pszMax);
  54. bool parse_level_notation(const char* pszLevel, PlayGround* level);
  55. bool load_level(
  56. Storage* storage,
  57. FuriString* levelSetId,
  58. int level,
  59. LevelData* levelData,
  60. FuriString* errorMsg);
  61. //-----------------------------------------------------------------------------
  62. void list_extra_levels(Storage* storage, LevelList* levelList);
  63. void mark_set_invalid(Storage* storage, FuriString* levelSetId, FuriString* errorMsg);