2026-03-01 12:16:08 +08:00
# pragma once
typedef struct {
WORD index ;
DWORD diffsSize ;
BYTE * diffs ;
DWORD lastByteChanged ;
} TutorialDiff_Chunk ;
typedef struct {
DWORD diffCount ;
TutorialDiff_Chunk * diffs ;
} TutorialDiff_File ;
# define TUTORIAL_NO_TEXT -1
# define TUTORIAL_NO_ICON -1
// If you want to make these bigger, be aware that that will affect what is stored after the tutorial data in the profile data
// See Xbox_App.h for the struct
# define TUTORIAL_PROFILE_STORAGE_BITS 512
# define TUTORIAL_PROFILE_STORAGE_BYTES (TUTORIAL_PROFILE_STORAGE_BITS / 8)
// 4J Stu - The total number of eTutorial_State and eTutorial_Hint must be less than 512, as we only have 512 bits of profile
// data to flag whether or not the player has seen them
// In general a block or tool will have one each. We have a state if we need more than one message, or a hint if just once
// message will suffice
// Tasks added here should also be added in the Tutorial::staticCtor() if you wish to store completion in the profile data
enum eTutorial_State
{
e_Tutorial_State_Any = - 2 ,
e_Tutorial_State_None = - 1 ,
e_Tutorial_State_Gameplay = 0 ,
e_Tutorial_State_Inventory_Menu ,
e_Tutorial_State_2x2Crafting_Menu ,
e_Tutorial_State_3x3Crafting_Menu ,
e_Tutorial_State_Furnace_Menu ,
e_Tutorial_State_Riding_Minecart ,
e_Tutorial_State_Riding_Boat ,
e_Tutorial_State_Fishing ,
e_Tutorial_State_Bed ,
e_Tutorial_State_Container_Menu ,
e_Tutorial_State_Trap_Menu ,
e_Tutorial_State_Redstone_And_Piston ,
e_Tutorial_State_Portal ,
e_Tutorial_State_Creative_Inventory_Menu , // Added TU5
e_Tutorial_State_Food_Bar , // Added TU5
e_Tutorial_State_CreativeMode , // Added TU7
e_Tutorial_State_Brewing ,
e_Tutorial_State_Brewing_Menu ,
e_Tutorial_State_Enchanting ,
e_Tutorial_State_Enchanting_Menu ,
e_Tutorial_State_Farming ,
e_Tutorial_State_Breeding ,
e_Tutorial_State_Golem ,
e_Tutorial_State_Trading ,
e_Tutorial_State_Trading_Menu ,
e_Tutorial_State_Anvil ,
e_Tutorial_State_Anvil_Menu ,
e_Tutorial_State_Enderchests ,
2026-03-03 03:04:10 +08:00
e_Tutorial_State_Horse ,
e_Tutorial_State_Horse_Menu ,
e_Tutorial_State_Hopper ,
e_Tutorial_State_Hopper_Menu ,
e_Tutorial_State_Beacon ,
e_Tutorial_State_Beacon_Menu ,
e_Tutorial_State_Fireworks ,
e_Tutorial_State_Fireworks_Menu ,
2026-03-01 12:16:08 +08:00
e_Tutorial_State_Max
} ;
// Hints added here should also be added in the Tutorial::staticCtor() if you wish to store completion in the profile data
enum eTutorial_Hint
{
e_Tutorial_Hint_Always_On = e_Tutorial_State_Max ,
e_Tutorial_Hint_Hold_To_Mine ,
e_Tutorial_Hint_Tool_Damaged ,
e_Tutorial_Hint_Swim_Up ,
e_Tutorial_Hint_Unused_2 ,
e_Tutorial_Hint_Unused_3 ,
e_Tutorial_Hint_Unused_4 ,
e_Tutorial_Hint_Unused_5 ,
e_Tutorial_Hint_Unused_6 ,
e_Tutorial_Hint_Unused_7 ,
e_Tutorial_Hint_Unused_8 ,
e_Tutorial_Hint_Unused_9 ,
e_Tutorial_Hint_Unused_10 ,
e_Tutorial_Hint_Rock ,
e_Tutorial_Hint_Stone ,
e_Tutorial_Hint_Planks ,
e_Tutorial_Hint_Sapling ,
e_Tutorial_Hint_Unbreakable ,
e_Tutorial_Hint_Water ,
e_Tutorial_Hint_Lava ,
e_Tutorial_Hint_Sand ,
e_Tutorial_Hint_Gravel ,
e_Tutorial_Hint_Gold_Ore ,
e_Tutorial_Hint_Iron_Ore ,
e_Tutorial_Hint_Coal_Ore ,
e_Tutorial_Hint_Tree_Trunk ,
e_Tutorial_Hint_Leaves ,
e_Tutorial_Hint_Glass ,
e_Tutorial_Hint_Lapis_Ore ,
e_Tutorial_Hint_Lapis_Block ,
e_Tutorial_Hint_Dispenser ,
e_Tutorial_Hint_Sandstone ,
e_Tutorial_Hint_Note_Block ,
e_Tutorial_Hint_Powered_Rail ,
e_Tutorial_Hint_Detector_Rail ,
e_Tutorial_Hint_Tall_Grass ,
e_Tutorial_Hint_Wool ,
e_Tutorial_Hint_Flower ,
e_Tutorial_Hint_Mushroom ,
e_Tutorial_Hint_Gold_Block ,
e_Tutorial_Hint_Iron_Block ,
e_Tutorial_Hint_Stone_Slab ,
e_Tutorial_Hint_Red_Brick ,
e_Tutorial_Hint_Tnt ,
e_Tutorial_Hint_Bookshelf ,
e_Tutorial_Hint_Moss_Stone ,
e_Tutorial_Hint_Obsidian ,
e_Tutorial_Hint_Torch ,
e_Tutorial_Hint_MobSpawner ,
e_Tutorial_Hint_Chest ,
e_Tutorial_Hint_Redstone ,
e_Tutorial_Hint_Diamond_Ore ,
e_Tutorial_Hint_Diamond_Block ,
e_Tutorial_Hint_Crafting_Table ,
e_Tutorial_Hint_Crops ,
e_Tutorial_Hint_Farmland ,
e_Tutorial_Hint_Furnace ,
e_Tutorial_Hint_Sign ,
e_Tutorial_Hint_Door_Wood ,
e_Tutorial_Hint_Ladder ,
e_Tutorial_Hint_Stairs_Stone ,
e_Tutorial_Hint_Rail ,
e_Tutorial_Hint_Lever ,
e_Tutorial_Hint_PressurePlate ,
e_Tutorial_Hint_Door_Iron ,
e_Tutorial_Hint_Redstone_Ore ,
e_Tutorial_Hint_Redstone_Torch ,
e_Tutorial_Hint_Button ,
e_Tutorial_Hint_Snow ,
e_Tutorial_Hint_Ice ,
e_Tutorial_Hint_Cactus ,
e_Tutorial_Hint_Clay ,
e_Tutorial_Hint_Sugarcane ,
e_Tutorial_Hint_Record_Player ,
e_Tutorial_Hint_Pumpkin ,
e_Tutorial_Hint_Hell_Rock ,
e_Tutorial_Hint_Hell_Sand ,
e_Tutorial_Hint_Glowstone ,
e_Tutorial_Hint_Portal ,
e_Tutorial_Hint_Pumpkin_Lit ,
e_Tutorial_Hint_Cake ,
e_Tutorial_Hint_Redstone_Repeater ,
e_Tutorial_Hint_Trapdoor ,
e_Tutorial_Hint_Piston ,
e_Tutorial_Hint_Sticky_Piston ,
e_Tutorial_Hint_Monster_Stone_Egg ,
e_Tutorial_Hint_Stone_Brick_Smooth ,
e_Tutorial_Hint_Huge_Mushroom ,
e_Tutorial_Hint_Iron_Fence ,
e_Tutorial_Hint_Thin_Glass ,
e_Tutorial_Hint_Melon ,
e_Tutorial_Hint_Vine ,
e_Tutorial_Hint_Fence_Gate ,
e_Tutorial_Hint_Mycel ,
e_Tutorial_Hint_Water_Lily ,
e_Tutorial_Hint_Nether_Brick ,
e_Tutorial_Hint_Nether_Fence ,
e_Tutorial_Hint_Nether_Stalk ,
e_Tutorial_Hint_Enchant_Table ,
e_Tutorial_Hint_Brewing_Stand ,
e_Tutorial_Hint_Cauldron ,
e_Tutorial_Hint_End_Portal ,
e_Tutorial_Hint_End_Portal_Frame ,
e_Tutorial_Hint_Squid ,
e_Tutorial_Hint_Cow ,
e_Tutorial_Hint_Sheep ,
e_Tutorial_Hint_Chicken ,
e_Tutorial_Hint_Pig ,
e_Tutorial_Hint_Wolf ,
e_Tutorial_Hint_Creeper ,
e_Tutorial_Hint_Skeleton ,
e_Tutorial_Hint_Spider ,
e_Tutorial_Hint_Zombie ,
e_Tutorial_Hint_Pig_Zombie ,
e_Tutorial_Hint_Ghast ,
e_Tutorial_Hint_Slime ,
e_Tutorial_Hint_Enderman ,
e_Tutorial_Hint_Silverfish ,
e_Tutorial_Hint_Cave_Spider ,
e_Tutorial_Hint_MushroomCow ,
e_Tutorial_Hint_SnowMan ,
e_Tutorial_Hint_IronGolem ,
e_Tutorial_Hint_EnderDragon ,
e_Tutorial_Hint_Blaze ,
e_Tutorial_Hint_Lava_Slime ,
e_Tutorial_Hint_Ozelot ,
e_Tutorial_Hint_Villager ,
2026-03-03 03:04:10 +08:00
e_Tutorial_Hint_Wither ,
e_Tutorial_Hint_Witch ,
e_Tutorial_Hint_Bat ,
e_Tutorial_Hint_Horse ,
2026-03-01 12:16:08 +08:00
e_Tutorial_Hint_Item_Shovel ,
e_Tutorial_Hint_Item_Hatchet ,
e_Tutorial_Hint_Item_Pickaxe ,
e_Tutorial_Hint_Item_Flint_And_Steel ,
e_Tutorial_Hint_Item_Apple ,
e_Tutorial_Hint_Item_Bow ,
e_Tutorial_Hint_Item_Arrow ,
e_Tutorial_Hint_Item_Coal ,
e_Tutorial_Hint_Item_Diamond ,
e_Tutorial_Hint_Item_Iron_Ingot ,
e_Tutorial_Hint_Item_Gold_Ingot ,
e_Tutorial_Hint_Item_Sword ,
e_Tutorial_Hint_Item_Stick ,
e_Tutorial_Hint_Item_Bowl ,
e_Tutorial_Hint_Item_Mushroom_Stew ,
e_Tutorial_Hint_Item_String ,
e_Tutorial_Hint_Item_Feather ,
e_Tutorial_Hint_Item_Sulphur ,
e_Tutorial_Hint_Item_Hoe ,
e_Tutorial_Hint_Item_Seeds ,
e_Tutorial_Hint_Item_Wheat ,
e_Tutorial_Hint_Item_Bread ,
e_Tutorial_Hint_Item_Helmet ,
e_Tutorial_Hint_Item_Chestplate ,
e_Tutorial_Hint_Item_Leggings ,
e_Tutorial_Hint_Item_Boots ,
e_Tutorial_Hint_Item_Flint ,
e_Tutorial_Hint_Item_Porkchop_Raw ,
e_Tutorial_Hint_Item_Porkchop_Cooked ,
e_Tutorial_Hint_Item_Painting ,
e_Tutorial_Hint_Item_Apple_Gold ,
e_Tutorial_Hint_Item_Sign ,
e_Tutorial_Hint_Item_Door_Wood ,
e_Tutorial_Hint_Item_Bucket_Empty ,
e_Tutorial_Hint_Item_Bucket_Water ,
e_Tutorial_Hint_Item_Bucket_Lava ,
e_Tutorial_Hint_Item_Minecart ,
e_Tutorial_Hint_Item_Saddle ,
e_Tutorial_Hint_Item_Door_Iron ,
e_Tutorial_Hint_Item_Redstone ,
e_Tutorial_Hint_Item_Snowball ,
e_Tutorial_Hint_Item_Boat ,
e_Tutorial_Hint_Item_Leather ,
e_Tutorial_Hint_Item_Milk ,
e_Tutorial_Hint_Item_Brick ,
e_Tutorial_Hint_Item_Clay ,
e_Tutorial_Hint_Item_Reeds ,
e_Tutorial_Hint_Item_Paper ,
e_Tutorial_Hint_Item_Book ,
e_Tutorial_Hint_Item_Slimeball ,
e_Tutorial_Hint_Item_Minecart_Chest ,
e_Tutorial_Hint_Item_Minecart_Furnace ,
e_Tutorial_Hint_Item_Egg ,
e_Tutorial_Hint_Item_Compass ,
e_Tutorial_Hint_Item_Clock ,
e_Tutorial_Hint_Item_Yellow_Dust ,
e_Tutorial_Hint_Item_Fish_Raw ,
e_Tutorial_Hint_Item_Fish_Cooked ,
e_Tutorial_Hint_Item_Dye_Powder ,
e_Tutorial_Hint_Item_Bone ,
e_Tutorial_Hint_Item_Sugar ,
e_Tutorial_Hint_Item_Cake ,
e_Tutorial_Hint_Item_Diode ,
e_Tutorial_Hint_Item_Cookie ,
e_Tutorial_Hint_Item_Map ,
e_Tutorial_Hint_Item_Record ,
e_Tutorial_Hint_White_Stone ,
e_Tutorial_Hint_Dragon_Egg ,
e_Tutorial_Hint_RedstoneLamp ,
e_Tutorial_Hint_Cocoa ,
e_Tutorial_Hint_EmeraldOre ,
e_Tutorial_Hint_EmeraldBlock ,
e_Tutorial_Hint_EnderChest ,
e_Tutorial_Hint_TripwireSource ,
e_Tutorial_Hint_Tripwire ,
e_Tutorial_Hint_CobblestoneWall ,
e_Tutorial_Hint_Flowerpot ,
e_Tutorial_Hint_Anvil ,
e_Tutorial_Hint_QuartzOre ,
e_Tutorial_Hint_QuartzBlock ,
e_Tutorial_Hint_WoolCarpet ,
e_Tutorial_Hint_Potato ,
e_Tutorial_Hint_Carrot ,
2026-03-03 03:04:10 +08:00
e_Tutorial_Hint_CommandBlock ,
e_Tutorial_Hint_Beacon ,
e_Tutorial_Hint_Activator_Rail ,
e_Tutorial_Hint_RedstoneBlock ,
e_Tutorial_Hint_DaylightDetector ,
e_Tutorial_Hint_Dropper ,
e_Tutorial_Hint_Hopper ,
e_Tutorial_Hint_Comparator ,
e_Tutorial_Hint_ChestTrap ,
e_Tutorial_Hint_HayBlock ,
e_Tutorial_Hint_ClayHardened ,
e_Tutorial_Hint_ClayHardenedColored ,
e_Tutorial_Hint_CoalBlock ,
2026-03-01 12:16:08 +08:00
e_Tutorial_Hint_Item_Max ,
} ;
// We store the first time that we complete these tasks to be used in telemetry
enum eTutorial_Telemetry
{
eTutorial_Telemetry_None = e_Tutorial_Hint_Item_Max ,
eTutorial_Telemetry_TrialStart ,
eTutorial_Telemetry_Halfway ,
eTutorial_Telemetry_Complete ,
eTutorial_Telemetry_Unused_1 ,
eTutorial_Telemetry_Unused_2 ,
eTutorial_Telemetry_Unused_3 ,
eTutorial_Telemetry_Unused_4 ,
eTutorial_Telemetry_Unused_5 ,
eTutorial_Telemetry_Unused_6 ,
eTutorial_Telemetry_Unused_7 ,
eTutorial_Telemetry_Unused_8 ,
eTutorial_Telemetry_Unused_9 ,
eTutorial_Telemetry_Unused_10 ,
} ;
enum eTutorial_CompletionAction
{
e_Tutorial_Completion_None ,
e_Tutorial_Completion_Complete_State , // This will make the current tutorial state complete
e_Tutorial_Completion_Complete_State_Gameplay_Constraints , // This will make the current tutorial state complete, and move the delayed constraints to the gameplay state
e_Tutorial_Completion_Jump_To_Last_Task ,
} ;