bannertool/source/3ds/smdh.h
2019-03-02 17:09:06 -08:00

100 lines
2.3 KiB
C

#ifndef SMDH_H
#define SMDH_H
#include "../types.h"
#define SMDH_MAGIC "SMDH"
#define SMDH_NUM_LANGUAGE_SLOTS 16
#define SMDH_NUM_VALID_LANGUAGE_SLOTS 12
#define SMDH_NUM_RATING_SLOTS 16
#define SMDH_SMALL_ICON_SIZE 24
#define SMDH_LARGE_ICON_SIZE 48
typedef enum {
SMDH_LANGUAGE_JAPANESE,
SMDH_LANGUAGE_ENGLISH,
SMDH_LANGUAGE_FRENCH,
SMDH_LANGUAGE_GERMAN,
SMDH_LANGUAGE_ITALIAN,
SMDH_LANGUAGE_SPANISH,
SMDH_LANGUAGE_SIMPLIFIED_CHINESE,
SMDH_LANGUAGE_KOREAN,
SMDH_LANGUAGE_DUTCH,
SMDH_LANGUAGE_PORTUGUESE,
SMDH_LANGUAGE_RUSSIAN,
SMDH_LANGUAGE_TRADITIONAL_CHINESE
} SMDHLanguage;
typedef enum {
SMDH_RATING_CERO = 0,
SMDH_RATING_ESRB = 1,
SMDH_RATING_USK = 3,
SMDH_RATING_PEGI_GEN = 4,
SMDH_RATING_PEGI_PTR = 6,
SMDH_RATING_PEGI_BBFC = 7,
SMDH_RATING_COB = 8,
SMDH_RATING_GRB = 9,
SMDH_RATING_CGSRR = 10
} SMDHRating;
typedef enum {
SMDH_REGION_JAPAN = 0x01,
SMDH_REGION_NORTH_AMERICA = 0x02,
SMDH_REGION_EUROPE = 0x04,
SMDH_REGION_AUSTRALIA = 0x08,
SMDH_REGION_CHINA = 0x10,
SMDH_REGION_KOREA = 0x20,
SMDH_REGION_TAIWAN = 0x40,
// Not a bitmask, but a value.
SMDH_REGION_FREE = 0x7FFFFFFF
} SMDHRegion;
typedef enum {
SMDH_FLAG_VISIBLE = 0x0001,
SMDH_FLAG_AUTO_BOOT = 0x0002,
SMDH_FLAG_ALLOW_3D = 0x0004,
SMDH_FLAG_REQUIRE_EULA = 0x0008,
SMDH_FLAG_AUTO_SAVE_ON_EXIT = 0x0010,
SMDH_FLAG_USE_EXTENDED_BANNER = 0x0020,
SMDH_FLAG_RATING_REQUIED = 0x0040,
SMDH_FLAG_USE_SAVE_DATA = 0x0080,
SMDH_FLAG_RECORD_USAGE = 0x0100,
SMDH_FLAG_DISABLE_SAVE_BACKUPS = 0x0400,
SMDH_FLAG_NEW_3DS = 0x1000
} SMDHFlag;
typedef struct {
u16 shortTitle[0x40];
u16 longTitle[0x80];
u16 publisher[0x40];
} SMDHTitle;
typedef struct {
u8 gameRatings[SMDH_NUM_RATING_SLOTS];
u32 regionLock;
u32 matchMakerId;
u64 matchMakerBitId;
u32 flags;
u16 eulaVersion;
u16 reserved1;
u32 optimalBannerFrame;
u32 streetpassId;
} SMDHSettings;
typedef struct {
char magic[4];
u16 version;
u16 reserved0;
SMDHTitle titles[SMDH_NUM_LANGUAGE_SLOTS];
SMDHSettings settings;
u64 reserved1;
u16 smallIcon[SMDH_SMALL_ICON_SIZE * SMDH_SMALL_ICON_SIZE];
u16 largeIcon[SMDH_LARGE_ICON_SIZE * SMDH_LARGE_ICON_SIZE];
} SMDH;
#endif