Public V0.0.1
This commit is contained in:
		
							
								
								
									
										143
									
								
								include/ctrff/smdh.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								include/ctrff/smdh.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,143 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include <ctrff/binutil.hpp> | ||||
| #include <ctrff/helper.hpp> | ||||
| #include <ctrff/pd_p_api.hpp> | ||||
| #include <pd.hpp> | ||||
|  | ||||
| // Basic Info | ||||
| // language_slots: 16 | ||||
| // valid_language_slots: 12 | ||||
| // rating_slots: 16 | ||||
| // small_icon: 24 | ||||
| // large_icon = 48 | ||||
|  | ||||
| namespace ctrff { | ||||
| // SMDH Size (Note that this needs to be declared here as | ||||
| // a sizeof(SMDH) will not return the expected size due to | ||||
| // use of Serializable) | ||||
| constexpr PD::u32 SMDH_Size = 0x36C0; | ||||
| struct CTRFF_API SMDH { | ||||
|   SMDH() { | ||||
|     std::fill_n(Magic, PD::ArraySize(Magic), 0); | ||||
|     std::fill_n(IconSmall, PD::ArraySize(IconSmall), 0); | ||||
|     std::fill_n(IconLarge, PD::ArraySize(IconLarge), 0); | ||||
|   } | ||||
|   ~SMDH() = default; | ||||
|   static SMDH Default(); | ||||
|   PD_SMART_CTOR(SMDH); | ||||
|  | ||||
|   enum Language { | ||||
|     Language_Japanese, | ||||
|     Language_English, | ||||
|     Language_French, | ||||
|     Language_German, | ||||
|     Language_Italian, | ||||
|     Language_Spanish, | ||||
|     Language_Chinese_Simplified, | ||||
|     Language_Korean, | ||||
|     Language_Dutch, | ||||
|     Language_Portuguese, | ||||
|     Language_Russian, | ||||
|     Language_Chinese_Traditional, | ||||
|     // To Overrite Aall Languages | ||||
|     // returns japanese on get funcs | ||||
|     Language_All = 0x47, | ||||
|   }; | ||||
|   enum Rating { | ||||
|     Rating_CERO = 0, | ||||
|     Rating_ESRB = 1, | ||||
|     Rating_USK = 3, | ||||
|     Rating_PEGI_GEN = 4, | ||||
|     Rating_PEGI_PTR = 6, | ||||
|     Rating_PEGI_BBFC = 7, | ||||
|     Rating_COB = 8, | ||||
|     Rating_GRB = 9, | ||||
|     Rating_CGSRR = 10, | ||||
|   }; | ||||
|   enum Region { | ||||
|     Region_JAPAN = 1 << 0, | ||||
|     Region_NORTH_AMERICA = 1 << 1, | ||||
|     Region_EUROPE = 1 << 2, | ||||
|     Region_AUSTRALIA = 1 << 3, | ||||
|     Region_CHINA = 1 << 4, | ||||
|     Region_KOREA = 1 << 5, | ||||
|     Region_TAIWAN = 1 << 6, | ||||
|     // Not a bitmask, but a value. | ||||
|     Region_FREE = 0x7FFFFFFF, | ||||
|   }; | ||||
|  | ||||
|   enum Flag { | ||||
|     Flag_VISIBLE = 1 << 0, | ||||
|     Flag_AUTO_BOOT = 1 << 1, | ||||
|     Flag_ALLOW_3D = 1 << 2, | ||||
|     Flag_REQUIRE_EULA = 1 << 3, | ||||
|     Flag_AUTO_SAVE_ON_EXIT = 1 << 4, | ||||
|     Flag_USE_EXTENDED_BANNER = 1 << 5, | ||||
|     Flag_RATING_REQUIED = 1 << 6, | ||||
|     Flag_USE_SAVE_DATA = 1 << 7, | ||||
|     Flag_RECORD_USAGE = 1 << 8, | ||||
|     Flag_DISABLE_SAVE_BACKUPS = 1 << 10, | ||||
|     Flag_NEW_3DS = 1 << 12, | ||||
|     Flag_DEFAULT = Flag_VISIBLE | Flag_ALLOW_3D | Flag_RECORD_USAGE, | ||||
|   }; | ||||
|  | ||||
|   void Load(const std::string &path) { | ||||
|     std::fstream f(path, std::ios::in | std::ios::binary); | ||||
|     Read(f); | ||||
|     f.close(); | ||||
|   } | ||||
|  | ||||
|   void Save(const std::string &path) { | ||||
|     std::fstream f(path, std::ios::out | std::ios::binary); | ||||
|     Write(f); | ||||
|     f.close(); | ||||
|   } | ||||
|  | ||||
|   void Write(std::fstream &f) const; | ||||
|   void Read(std::fstream &f); | ||||
|  | ||||
|   void SetIcon(const std::vector<PD::u8> &buf); | ||||
|   std::vector<PD::u8> GetIcon(); | ||||
|   void SetShortTitle(const std::string &t, Language l = Language_All); | ||||
|   void SetLongTitle(const std::string &t, Language l = Language_All); | ||||
|   void SetAuthor(const std::string &t, Language l = Language_All); | ||||
|   std::string GetShortTitle(Language l = Language_All); | ||||
|   std::string GetLongTitle(Language l = Language_All); | ||||
|   std::string GetAuthor(Language l = Language_All); | ||||
|  | ||||
|   struct CTRFF_API Title { | ||||
|     Title() { | ||||
|       std::fill_n(ShortTitle, PD::ArraySize(ShortTitle), 0); | ||||
|       std::fill_n(LongTitle, PD::ArraySize(LongTitle), 0); | ||||
|       std::fill_n(Author, PD::ArraySize(Author), 0); | ||||
|     }; | ||||
|  | ||||
|     PD::u16 ShortTitle[0x40]; | ||||
|     PD::u16 LongTitle[0x80]; | ||||
|     PD::u16 Author[0x40]; | ||||
|   }; | ||||
|  | ||||
|   struct CTRFF_API Settings { | ||||
|     Settings() { std::fill_n(Ratings, PD::ArraySize(Ratings), 0); }; | ||||
|     PD::u8 Ratings[16]; | ||||
|     PD::u32 RegionLock = 0; | ||||
|     PD::u32 MatchmakerID = 0; | ||||
|     PD::u64 MatchmakerBitID = 0; | ||||
|     PD::u32 Flags = 0; | ||||
|     PD::u16 EulaVersion = 0; | ||||
|     PD::u16 Reserved = 0; | ||||
|     PD::u32 OptimalBannerFrame = 0; | ||||
|     PD::u32 StreetpassID = 0; | ||||
|   }; | ||||
|  | ||||
|   char Magic[4]; | ||||
|   PD::u16 Version = 0; | ||||
|   PD::u16 Reserved = 0; | ||||
|   Title Titles[16]; | ||||
|   Settings Settings; | ||||
|   PD::u64 Reserved1 = 0; | ||||
|   PD::u16 IconSmall[0x240];  // 24x24 | ||||
|   PD::u16 IconLarge[0x900];  // 48x48 | ||||
| }; | ||||
| }  // namespace ctrff | ||||
		Reference in New Issue
	
	Block a user